\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. — С. 10–12.
\end{thebibliography}

\end{document}