Files
genetic-algorithms/presentation/report/ГА. Реферат. Тищенко.tex
2025-10-03 10:52:23 +03:00

580 lines
34 KiB
TeX
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

\documentclass[a4paper, final]{article}
%\usepackage{literat} % Нормальные шрифты
\usepackage[14pt]{extsizes} % для того чтобы задать нестандартный 14-ый размер шрифта
\usepackage{tabularx}
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[russian]{babel}
\usepackage{amsmath}
\usepackage[left=25mm, top=20mm, right=20mm, bottom=20mm, footskip=10mm]{geometry}
\usepackage{ragged2e} %для растягивания по ширине
\usepackage{setspace} %для межстрочно го интервала
\usepackage{moreverb} %для работы с листингами
\usepackage{indentfirst} % для абзацного отступа
\usepackage{moreverb} %для печати в листинге исходного кода программ
\usepackage{pdfpages} %для вставки других pdf файлов
\usepackage{tikz}
\usepackage{graphicx}
\usepackage{afterpage}
\usepackage{longtable}
\usepackage{float}
% \usepackage[paper=A4,DIV=12]{typearea}
\usepackage{pdflscape}
% \usepackage{lscape}
\usepackage{array}
\usepackage{multirow}
\renewcommand\verbatimtabsize{4\relax}
\renewcommand\listingoffset{0.2em} %отступ от номеров строк в листинге
\renewcommand{\arraystretch}{1.4} % изменяю высоту строки в таблице
\usepackage[font=small, singlelinecheck=false, justification=centering, format=plain, labelsep=period]{caption} %для настройки заголовка таблицы
\usepackage{listings} %листинги
\usepackage{xcolor} % цвета
\usepackage{hyperref}% для гиперссылок
\usepackage{enumitem} %для перечислений
\newcommand{\specialcell}[2][l]{\begin{tabular}[#1]{@{}l@{}}#2\end{tabular}}
\setlist[enumerate,itemize]{leftmargin=1.2cm} %отступ в перечислениях
\hypersetup{colorlinks,
allcolors=[RGB]{010 090 200}} %красивые гиперссылки (не красные)
% подгружаемые языки — подробнее в документации listings (это всё для листингов)
\lstloadlanguages{ SQL}
% включаем кириллицу и добавляем кое−какие опции
\lstset{tabsize=2,
breaklines,
basicstyle=\footnotesize,
columns=fullflexible,
flexiblecolumns,
numbers=left,
numberstyle={\footnotesize},
keywordstyle=\color{blue},
inputencoding=cp1251,
extendedchars=true
}
\lstdefinelanguage{MyC}{
language=SQL,
% ndkeywordstyle=\color{darkgray}\bfseries,
% identifierstyle=\color{black},
% morecomment=[n]{/**}{*/},
% commentstyle=\color{blue}\ttfamily,
% stringstyle=\color{red}\ttfamily,
% morestring=[b]",
% showstringspaces=false,
% morecomment=[l][\color{gray}]{//},
keepspaces=true,
escapechar=\%,
texcl=true
}
\textheight=24cm % высота текста
\textwidth=16cm % ширина текста
\oddsidemargin=0pt % отступ от левого края
\topmargin=-1.5cm % отступ от верхнего края
\parindent=24pt % абзацный отступ
\parskip=5pt % интервал между абзацами
\tolerance=2000 % терпимость к "жидким" строкам
\flushbottom % выравнивание высоты страниц
% Настройка листингов
\lstset{
language=python,
extendedchars=\true,
inputencoding=utf8,
keepspaces=true,
% captionpos=b, % подписи листингов снизу
}
\begin{document} % начало документа
% НАЧАЛО ТИТУЛЬНОГО ЛИСТА
\begin{center}
\hfill \break
\hfill \break
\normalsize{МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ\\
федеральное государственное автономное образовательное учреждение высшего образования «Санкт-Петербургский политехнический университет Петра Великого»\\[10pt]}
\normalsize{Институт компьютерных наук и кибербезопасности}\\[10pt]
\normalsize{Высшая школа технологий искусственного интеллекта}\\[10pt]
\normalsize{Направление: 02.03.01 <<Математика и компьютерные науки>>}\\
\hfill \break
\hfill \break
\hfill \break
\hfill \break
\large{Реферат по дисциплине}\\
\large{<<Генетические алгоритмы>>}\\
\large{<<Планирование пути робота>>}\\
\hfill \break
\hfill \break
\end{center}
\small{
\begin{tabular}{lrrl}
\!\!\!Студент, & \hspace{2cm} & & \\
\!\!\!группы 5130201/20102 & \hspace{2cm} & \underline{\hspace{3cm}} &Тищенко А. А. \\\\
\!\!\!Преподаватель & \hspace{2cm} & \underline{\hspace{3cm}} & Большаков А. А. \\\\
&&\hspace{4cm}
\end{tabular}
\begin{flushright}
<<\underline{\hspace{1cm}}>>\underline{\hspace{2.5cm}} 2025г.
\end{flushright}
}
\hfill \break
% \hfill \break
\begin{center} \small{Санкт-Петербург, 2025} \end{center}
\thispagestyle{empty} % выключаем отображение номера для этой страницы
% КОНЕЦ ТИТУЛЬНОГО ЛИСТА
\newpage
\tableofcontents
\newpage
\section*{Введение}
\addcontentsline{toc}{section}{Введение}
Планирование пути мобильного робота — это задача построения коллизие-свободной траектории из начальной точки в целевую в присутствии препятствий и ограничений среды. Актуальность задачи обусловлена широким спектром приложений: от автономной логистики и сельского хозяйства до роботизированной инспекции и сервисной робототехники. Традиционные графовые методы (Дейкстра, A*) обеспечивают точный поиск на известных картах, однако их эффективность снижается при росте размерности, наличии динамики и сложных ограничений. Эволюционные подходы, в частности генетические алгоритмы (ГА), предоставляют гибкую эвристическую альтернативу, позволяя естественно учитывать несколько критериев качества и штрафы за нарушения ограничений.
Цель работы — исследовать применение ГА для планирования пути на дискретном представлении среды (grid) и в параметризации траекторий через направления движения (угловое кодирование), а также сравнить различные способы кодирования хромосом и их влияние на качество маршрутов и вычислительные затраты.
В работе:
\begin{itemize}
\item кратко рассмотрена классификация алгоритмов планирования пути по характеру среды (статическая/динамическая), принципу (глобальные/локальные) и полноте (точные/эвристические);
\item формализована фитнесс-функция с учётом длины пути и штрафов за пересечение препятствий, а для углового кодирования — с дополнительными слагаемыми за число поворотов;
\item изучены три варианта grid-кодирования узлов пути (двоичное, десятичное, упорядоченное) и угловое кодирование с 4 и 8 направлениями движения;
\item проведены эксперименты в статических сценах и сценарии с поэтапным появлением новых препятствий (offline/online-перепланирование);
\item сопоставлены метрики: длина маршрута, число поколений и время решения.
\end{itemize}
Полученные результаты демонстрируют применимость ГА к задачам планирования как в статических, так и в динамически меняющихся средах, а также выявляют влияние выбора представления пути на качество и стоимость поиска.
\newpage
\section{Постановка задачи}
Планирование пути робота -- вычисление пути, свободного от столкновений, от начальной позиции до конечной
среди множества препятствий
\begin{figure}[h!]
\centering
\includegraphics[width=0.8\linewidth]{img/task.png}
\caption{Задача планирования пути}
\label{fig:task}
\end{figure}
\newpage
\section{Классификация алгоритмов планирования пути}
На схеме \ref{fig:classification} показана классификация алгоритмов планирования пути.
\begin{figure}[h!]
\centering
\includegraphics[width=1\linewidth]{img/classification.png}
\caption{Классификация алгоритмов планирования пути}
\label{fig:classification}
\end{figure}
Алгоритмы планирования пути можно классифицировать по трём главным признакам:
\begin{itemize}
\item По характеру среды (based on environment)
\begin{itemize}
\item \textbf{Статические (Static)}
Используются, когда карта среды известна заранее и не меняется. Все препятствия заранее заданы, и алгоритм строит маршрут до старта движения.
Пример: классические алгоритмы поиска пути на графе (A*, Дейкстра).
\item \textbf{Динамические (Dynamic)}
Применяются в условиях, где препятствия могут появляться или перемещаться во время движения робота. Алгоритм должен уметь перестраивать путь «на лету» (онлайн-планирование).
Пример: D* Lite, Anytime Repairing A*, алгоритмы на основе предсказаний и реактивного управления.
\end{itemize}
\item По принципу алгоритма (based on algorithm)
\begin{itemize}
\item \textbf{Глобальные (Global)}
Предполагают знание полной карты окружающей среды. Алгоритм ищет оптимальный путь целиком от старта до цели.
Пример: A*, Дейкстра, волновой алгоритм (Wavefront).
\item \textbf{Локальные (Local)}
Робот строит путь только на основе данных с датчиков «здесь и сейчас». Такие методы хорошо работают в неизвестных или частично известных средах.
Пример: Bug Algorithms, Potential Fields, Dynamic Window Approach.
\end{itemize}
\item По полноте поиска (based on completeness)
\begin{itemize}
\item \textbf{Точные (Exact)}
Гарантируют нахождение решения (если оно существует), а также могут обеспечить оптимальность. Но часто требуют много вычислительных ресурсов.
Пример: алгоритм Дейкстры, точный A*.
\item \textbf{Эвристические (Heuristic)}
Используют приближённые методы и эвристики для ускорения поиска. Решение находится быстрее, но не всегда оптимальное.
Пример: эвристический A*, эволюционные методы (генетические алгоритмы, рой частиц, муравьиные алгоритмы).
\end{itemize}
\end{itemize}
\newpage
\section{Генетические алгоритмы для построения пути}
Для решения произвольной задачи с помощью ГА необходимо определить:
\begin{itemize}
\item особь и популяцию;
\item генетические операторы;
\item фитнесс функцию;
\item параметры ГА.
\end{itemize}
\begin{figure}[h!]
\centering
\includegraphics[width=0.5\linewidth]{img/genalg.png}
\caption{Составляющие ГА}
\label{fig:genalg}
\end{figure}
\subsection{Grid-кодирование пути}
\subsubsection*{Кодирование хромосом}
Рассмотрим часто используемое на практике представление окружения робота в виде «решетки» -- сетки
(grid).
Для представления окружения используется:
\begin{itemize}
\item двоичное;
\item десятичное;
\item упорядоченное кодирование;
\end{itemize}
показанное на рисунке \ref{fig:grid} (белые клетки--свободное пространство, серые -- препятствия).
\begin{figure}[h!]
\centering
\includegraphics[width=0.5\linewidth]{img/grid.png}
\caption{Grid-кодирование пути}
\label{fig:grid}
\end{figure}
Тогда хромосома (особь популяции) представляет потенциальное решение -
Путь от начальной точки S (левый верхний угол) до конечной точки- цели T (правый нижний угол)
Хромосома (путь робота) содержит начальную и конечную вершины графа, представляющего решетку, а
также вершины, пересекаемые роботом
Эти вершины (или шаги) называются генами хромосомы.
Различные методы кодирования используются для хромосомы, в зависимости от формы представления
окружения:
\newpage
\begin{enumerate}
\item Двоичное кодирование содержит двоичные коды номеров строк и столбцов (координаты x,y)
«узловых» вершин пути.
\begin{figure}[h!]
\centering
\includegraphics[width=0.5\linewidth]{img/binary.png}
\caption{Двоичное кодирование}
\label{fig:binary}
\end{figure}
\item Десятичное кодирование содержит десятичные номера строк и столбцов (координаты x,y)
«узловых» вершин пути.
\begin{figure}[h!]
\centering
\includegraphics[width=0.45\linewidth]{img/decimal.png}
\caption{Десятичное кодирование}
\label{fig:decimal}
\end{figure}
\item Упорядоченное кодирование - содержит номера(в общем порядке ячеек - вершин) проходимых
«узловых» вершин пути.
\begin{figure}[h!]
\centering
\includegraphics[width=0.4\linewidth]{img/ordered.png}
\caption{Упорядоченное кодирование}
\label{fig:ordered}
\end{figure}
\end{enumerate}
\subsubsection*{Инициализация популяции}
Выполняется случайно
При этом некоторые построенные хромосомы соответствуют нереализуемым путям, которые пересекают
препятствия
В таблице представлены экспериментальные данные по генерации начальной популяции
\begin{figure}[h!]
\centering
\includegraphics[width=0.5\linewidth]{img/table.png}
\caption{Таблица экспериментальных данных}
\label{fig:table}
\end{figure}
Далее находятся оптимальные или близкие к оптимальным решения (пути роботов), даже если начальная
популяция содержит нереализуемые решения
\subsubsection*{Фитнесс функция}
Целью планирования пути является построение пути робота между начальной и конечной точками.
Оптимальный путь должен иметь минимальную длину, время и минимальные энергозатраты.
Прежде всего, минимизируется длина пути.
Поэтому все эволюционные методы построения пути включают в фитнесс-функцию длину пути робота,
которая может быть определена следующим образом.
Здесь $P_i$
- i-й ген хромосомы $P$ , $d$ - расстояние между 2-мя узлами.
Фитнесс-функция для реализуемых путей определяется как сумма расстояний между узлами пути.
Заметим, что для нереализуемых путей (имеющих пересечения с препятствия) фитнесс-функция имеет
дополнительную штрафную функцию. Если между узлами встречается препятствие, то в фитнессфункцию добавляется штраф.
Для поиска пути робота используется классический ГА.
На последнем шаге итерации (поколения) в соответствии с вычисленными значениями фитнесс-функции
отбираются хромосомы для производства потомков с помощью генетических операторов кроссинговера
и мутации.
Для выбора родителей применяется ранговый отбор
\begin{equation}
f =
\begin{cases}
\displaystyle \sum_{i=1}^{n-1} d(p_i, p_{i+1}), & \text{для допустимых путей (без столкновений)}, \\[1.5ex]
\displaystyle \sum_{i=1}^{n-1} d(p_i, p_{i+1}) + \text{штраф}, & \text{для недопустимых путей}.
\end{cases}
\end{equation}
\begin{equation}
d(p_i, p_{i+1}) = \sqrt{(x_{(i+1)} - x_i)^2 + (y_{(i+1)} - y_i)^2},
\end{equation}
где $p_i = (x_i, y_i)$ — координаты $i$-й вершины пути.
\subsubsection*{Генетические операторы}
Для генерации потомков используется обычный 1-точечный кроссинговер с заданной вероятностью $P_c$.
\begin{figure}[h!]
\centering
\includegraphics[width=0.7\linewidth]{img/crossover.png}
\caption{Одноточечный кроссинговер}
\label{fig:crossover}
\end{figure}
Пример на Рис.~\ref{fig:crossover} показывает кроссинговер для упорядоченного кодирования хромосом.
Далее к потомкам (каждому гену) с малой вероятностью $P_m$ применяется оператор мутации, который вносит
небольшое изменение в ген в зависимости от способа кодирования.
Мутация расширяет пространство поиска и препятствует преждевременной сходимости в локальном
экстремуме
\subsubsection*{Эксперименты}
\textbf{Эксперимент 1.} Построение пути проводилось в следующем окружении (сетка 16х16) с 8
препятствиями с использованием указанных выше методов кодирования хромосом.
Параметры ГА:
\begin{itemize}
\item Мощность популяции $N=60$;
\item Вероятности: кроссинговера $P_c=1.0$, мутации $P_m=0.1$
\end{itemize}
После 10 запусков ГА для каждого метода получены средние значения расстояния, число поколений и
время решения, которые представлены на
Рис.~\ref{fig:table1}.
\begin{figure}[h!]
\centering
\includegraphics[width=0.45\linewidth]{img/experiment1.png}
\caption{Эксперимент 1}
\label{fig:experiment1}
\end{figure}
\begin{figure}[h!]
\centering
\includegraphics[width=0.8\linewidth]{img/table1.png}
\caption{Таблица эксперимента 1}
\label{fig:table1}
\end{figure}
\newpage
\textbf{Эксперимент 2.} Эксперимент 2 для окружения с 7 препятствиями. Параметры ГА те же.
Данные для различных методов кодирования представлены на рисунке \ref{fig:table3}. Видно, что десятичное и упорядоченное кодирование показывают лучшие результаты.
\begin{figure}[h!]
\centering
\includegraphics[width=0.45\linewidth]{img/experiment2.png}
\caption{Эксперимент 2}
\label{fig:experiment2}
\end{figure}
\begin{figure}[h!]
\centering
\includegraphics[width=0.8\linewidth]{img/table2.png}
\caption{Таблица эксперимента 2}
\label{fig:table2}
\end{figure}
\subsection{Угловое кодирование пути}
\subsubsection*{Кодирование хромосом}
Для кодирования пути робота эволюционные методы используют различные методы.
Альтернативным рассмотренному ранее кодированию (узлов) вершин проходимого пути,
является кодирование на основе углов направлений движения робота.
Это можно сделать по-разному (с различной точностью).
На Рис.~\ref{fig:angle} представлены 2 варианта кодирования направлений движения:
а) 4 направления - робот может передвигаться по горизонталям и вертикалям.
б) 8 направлений- робот может передвигаться также по диагоналям.
\begin{figure}[h!]
\centering
\includegraphics[width=0.7\linewidth]{img/angle.png}
\caption{Для кодирования направлений используются целые числа:\\ а) (0,1,2,3), либо
б) (0,1,2,3,4,5,6,7)}
\label{fig:angle}
\end{figure}
Тогда каждый ген в хромосоме представляет направление движения робота на следующем
шаге.
В этом случае хромосома (см. Рис.~\ref{fig:angle_chromosome}) представляет «коллекцию» направлений движения робота в каждой
точке, начиная от старта, и кончая финалом.
\begin{figure}[h!]
\centering
\includegraphics[width=0.9\linewidth]{img/angle_chromosome.png}
\caption{Хромосома с угловым кодированием пути. D целое число, определяющее направление движения на следующем шаге.}
\label{fig:angle_chromosome}
\end{figure}
\subsubsection*{Фитнесс-функция}
Фитнесс-функция в задаче планирования пути робота определяется следующим образом:
\begin{equation}
\text{Cost}(P) = w_1 D + w_2 O + w_3 C,
\end{equation}
где:
\begin{itemize}
\item $w_1, w_2, w_3$ -- коэффициенты (константы), задающие вклад каждой компоненты;
\item $D$ -- расстояние (длина) пути;
\item $O$ -- число пересекаемых ячеек препятствий;
\item $C$ -- число изменений направлений движения.
\end{itemize}
Особь (маршрут) с минимальным значением фитнесс-функции соответствует оптимальному пути.
Очевидно, что увеличение числа изменений направления приводит к увеличению времени движения,
а каждое пересечение препятствия сопровождается значительным штрафом.
\subsubsection*{Эксперименты}
\textbf{Эксперимент 1}. Метод апробирован на различного типа препятствиях с разным числом направлений движений (4 или 8).
Начальная точка -- (0,0). Конечная точка -- (15, 9).
В 1-м эксперименте использовались только статические препятствия.
На Рис.~\ref{fig:angle_experiment1}-\ref{fig:angle_experiment2} представлены результаты для 2- вариантов направлений движений(4 или 8), которые показывают способность ГА решать данную проблему.
\begin{figure}[h!]
\centering
\includegraphics[width=0.7\linewidth]{img/angle_experiment1.png}
\caption{Загроможденные препятствия. \\ (a) 4 направления, (b) 8 направлений}
\label{fig:angle_experiment1}
\end{figure}
\begin{figure}[h!]
\centering
\includegraphics[width=0.7\linewidth]{img/angle_experiment2.png}
\caption{Региональные препятствия. \\ (c) 4 направления, (d) 8 направлений}
\label{fig:angle_experiment2}
\end{figure}
\begin{figure}[h!]
\centering
\includegraphics[width=0.7\linewidth]{img/angle_experiment3.png}
\caption{Препятствия окружают конечную точку. \\ (e) 4 направления, (f) 8 направлений}
\label{fig:angle_experiment3}
\end{figure}
\newpage
\textbf{Эксперимент 2.} Динамическую систему поиска пути можно разделить на две компоненты.
\begin{itemize}
\item Ищем маршрут по заранее заданной карте ещё до запуска робота (offline компонента).
\item Если робот встретил новые препятствия, которых не было в исходной карте, то запускается новый алгоритм поиска с актуальной точки (online компонента).
\end{itemize}
Сначал генетический алгоритм был запущен для статической среды (см.~Рис.~\ref{fig:static}).
\begin{figure}[h!]
\centering
\includegraphics[width=0.7\linewidth]{img/static.png}
\caption{Запуск для статической среды (offline компонента)}
\label{fig:static}
\end{figure}
\newpage
И далее добавлялись (случайно) 1 препятствие (см. Рис.~\ref{fig:obstacle1}).
\begin{figure}[h!]
\centering
\includegraphics[width=0.7\linewidth]{img/obstacle1.png}
\caption{Обновлённый путь после добавления ещё одного препятствия.}
\label{fig:obstacle1}
\end{figure}
И ещё одно препятствие (см. Рис.~\ref{fig:obstacle2}).
\begin{figure}[h!]
\centering
\includegraphics[width=0.7\linewidth]{img/obstacle2.png}
\caption{Обновлённый путь после добавления второго препятствия.}
\label{fig:obstacle2}
\end{figure}
\newpage
% ---------- ЗАКЛЮЧЕНИЕ ----------
\section*{Заключение}
\addcontentsline{toc}{section}{Заключение}
В работе рассмотрено применение генетических алгоритмов к задаче планирования пути робота на дискретной карте и в форме углового (направленного) кодирования. Показано, что:
\begin{enumerate}
\item Для grid-представления десятичное и упорядоченное кодирование обеспечивают в среднем более короткие пути и/или меньшее время поиска по сравнению с двоичным кодированием при сопоставимых параметрах ГА (\(N=60\), \(P_c=1.0\), \(P_m=0.1\)).
\item Угловое кодирование с 8 направлениями, как правило, даёт более гибкие и короткие траектории, чем с 4 направлениями, однако требует контроля числа поворотов (штраф \(C\)) для предотвращения «ломаных» маршрутов.
\item В динамическом сценарии поэтапное появление препятствий эффективно обрабатывается за счёт online-перепланирования: повторный запуск ГА из текущего положения восстанавливает коллизие-свободный путь без полной переразметки карты.
\end{enumerate}
Ограничения подхода включают чувствительность к настройкам операторов и вероятностей, риск преждевременной сходимости и вычислительные затраты при частых проверках коллизий.
ГА представляют собой практичный и переносимый инструмент планирования пути в условиях неопределённости и динамики, при этом выбор кодирования и архитектуры фитнесс-функции критически влияет на компромисс между качеством траектории и затратами вычислений.
\newpage
\section*{Список литературы}
\addcontentsline{toc}{section}{Список литературы}
\vspace{-1.5cm}
\begin{thebibliography}{0}
\bibitem{skobtsov} М.В. Прохоров, Ю.А. Скобцов. Многокритериальный генетический алгоритм построения пути робота в сложной среде. — Санкт-Петербург: СПбПУ, 2016. — 36с.
\bibitem{matveeva} Матвеева А.В. Оптимизация построения маршрута с помощью генетического алгоритма // Финансовый университет при Правительстве Российской Федерации, 2022. — С. 1012.
\end{thebibliography}
\end{document}