Files
genetic-algorithms/lab1/report/report.tex

308 lines
17 KiB
TeX
Raw 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{Лабораторная работа №1}\\
\large{по дисциплине}\\
\large{<<Генетические алгоритмы>>}\\
\large{Вариант 18}\\
% \hfill \break
\hfill \break
\end{center}
\small{
\begin{tabular}{lrrl}
\!\!\!Студент, & \hspace{2cm} & & \\
\!\!\!группы 5130201/20101 & \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 {Постановка задачи}
В данной работе были поставлены следующие задачи:
\begin{itemize}
\item Изучить теоретический материал;
\item Ознакомиться с вариантами кодирования хромосомы;
\item Рассмотреть способы выполнения операторов репродукции,
кроссинговера и мутации;
\item Выполнить индивидуальное задание на любом языке высокого
уровня с необходимыми комментариями и выводами
\end{itemize}
\textbf{Индивидуальное задание вариант 18:}
\textbf{Дано:} Функция одной переменной $f(x) = \frac{\sin(x)}{x^2}$; промежуток нахождения решения $x \in [3.1, 20.0]$.
\vspace{0.3cm}
\textbf{Требуется:}
\begin{enumerate}
\item Разработать простой генетический алгоритм для нахождения минимума данной функции в заданном промежутке;
\item Исследовать зависимость времени поиска, числа поколений (генераций) и точности нахождения решения от числа особей в популяции и вероятности кроссинговера и мутации;
\item Вывести на экран график функции с указанием найденного экстремума для каждого поколения;
\item Сравнить найденное решение с действительным.
\end{enumerate}
\textbf{Ограничения:}
\begin{enumerate}
\item $ \min f(x) = \frac{\sin(x)}{x^2} \approx -0.04957 $
\item Точность решения составляет 3 знака после запятой.
\end{enumerate}
\newpage
\section{Теоретические сведения}
Генетиче ские алгоритмы (ГА) используют принципы и терминологию, заимствованные у биологической науки генетики. В ГА каждая особь представляет потенциальное решение некоторой
проблемы. В классическом ГА особь кодируется строкой двоичных символов хромосомой, каждый
бит которой называется геном. Множество особей потенциальных решений составляет популяцию. Поиск (суб)оптимального решения проблемы выполняется в процессе эволюции популяции
- последовательного преобразования одного конечного множества решений в другое с помощью
генетических операторов репродукции, кроссинговера и мутации.
Предварительно простой ГА случайным образом генерирует начальную популяцию стрингов
(хромосом). Затем алгоритм генерирует следующее поколение (популяцию), с помощью трех основных генетических операторов:
\begin{enumerate}
\item Оператор репродукции (ОР);
\item Оператор скрещивания (кроссинговера, ОК);
\item Оператор мутации (ОМ).
\end{enumerate}
ГА работает до тех пор, пока не будет выполнено заданное количество поколений (итераций)
процесса эволюции или на некоторой генерации будет получено заданное качество или вследствие
преждевременной сходимости при попадании в некоторый локальный оптимум. На Рис.~\ref{fig:alg} представлен простой генетический алгоритм.
\begin{figure}[h!]
\centering
\includegraphics[width=0.9\linewidth]{img/alg.png}
\caption{Простой генетический алгоритм.}
\label{fig:alg}
\end{figure}
\newpage
\subsection{Основная терминология в генетических алгоритмах}
\textbf{Ген} -- элементарный код в хромосоме $s_i$, называемый также знаком или детектором
(в классическом ГА $s_i = 0, 1$).
\textbf{Хромосома} -- упорядоченная последовательность генов в виде закодированной структуры
данных $S = (s_1, s_2, \ldots, s_n)$, определяющая решение (в простейшем случае двоичная
последовательность -- стринг, где $s_i = 0, 1$).
\textbf{Локус} -- местоположение (позиция, номер бита) данного гена в хромосоме.
\textbf{Аллель} -- значение, которое принимает данный ген (например, 0 или 1).
\textbf{Особь} -- одно потенциальное решение задачи (представляемое хромосомой).
\textbf{Популяция} -- множество особей (хромосом), представляющих потенциальные решения.
\textbf{Поколение} -- текущая популяция ГА на данной итерации алгоритма.
\textbf{Генотип} -- набор хромосом данной особи. В популяции могут использоваться как отдельные
хромосомы, так и целые генотипы.
\textbf{Генофонд} -- множество всех возможных генотипов.
\textbf{Фенотип} -- набор значений, соответствующий данному генотипу. Это декодированное множество
параметров задачи (например, десятичное значение $x$, соответствующее двоичному коду).
\textbf{Размер популяции $N$} -- число особей в популяции.
\textbf{Число поколений} -- количество итераций, в течение которых производится поиск.
\textbf{Селекция} -- совокупность правил, определяющих выживание особей на основе значений целевой функции.
\textbf{Эволюция популяции} -- чередование поколений, в которых хромосомы изменяют свои признаки,
чтобы каждая новая популяция лучше приспосабливалась к среде.
\textbf{Фитнесс-функция} -- функция полезности, определяющая меру приспособленности особи.
В задачах оптимизации она совпадает с целевой функцией или описывает близость к оптимальному решению.
\subsection{Генетические операторы}
\subsubsection{Оператор репродукции}
Репродукция -- процесс копирования хромосом в промежуточную популяцию для дальнейшего
``размножения'' в соответствии со значениями фитнесс-функции. В данной работе рассматривается метод колеса рулетки. Каждой хромосоме соответствует сектор, пропорциональный значению фитнесс-функции.
Хромосомы с большим значением имеют больше шансов попасть в следующее поколение.
\subsubsection{Оператор скрещивания (кроссинговера)}
Одноточечный кроссинговер выполняется следующим образом:
\begin{enumerate}
\item Из промежуточной популяции выбираются две хромосомы (родители).
\item Определяется случайная точка скрещивания $k \in [1, n-1]$, где $n$ -- длина хромосомы.
\begin{figure}[h!]
\centering
\includegraphics[width=0.5\linewidth]{img/cross1.png}
\label{fig:cross1}
\end{figure}
\item Две новые хромосомы (потомки) формируются путём обмена подстрок после точки $k$.
\begin{figure}[h!]
\centering
\includegraphics[width=0.35\linewidth]{img/cross2.png}
\label{fig:cross2}
\end{figure}
\end{enumerate}
\subsubsection{Оператор мутации}
Мутация применяется с малой вероятностью $P_M \approx 0.001$:
\begin{enumerate}
\item В хромосоме $A = a_1a_2 \ldots a_n$ выбирается случайная позиция $k$.
\item Ген $a_k$ инвертируется: $a_k' = \lnot a_k$.
\end{enumerate}
\newpage
\section*{Заключение}
\addcontentsline{toc}{section}{Заключение}
В ходе первой лабораторной работы:
\begin{enumerate}
\item Был изучен теоретический материал, основная терминология ГА, генетические операторы,
использующиеся в простых ГА;
\item Реализована программа на языке Python для нахождения минимума заданной функции;
\item Проведено исследование зависимости времени выполнения программы и поколения от мощности популяции и коэффициентов кроссинговера и мутации.
\end{enumerate}
\newpage
\section*{Список литературы}
\addcontentsline{toc}{section}{Список литературы}
\vspace{-1.5cm}
\begin{thebibliography}{0}
\bibitem{vostrov}
Методические указания по выполнению лабораторных работ к курсу «Генетические алгоритмы», 119 стр.
\end{thebibliography}
\end{document}