Генетические алгоритмы

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    20,54 Кб
  • Опубликовано:
    2012-09-28
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Генетические алгоритмы





Генетические алгоритмы

1. Алгоритм: понятия и свойства

Алгоритм (от латинской формы имени среднеазиатского математика аль-Хорезми) - правило действий, последовательность проведения вычислительных операций, способ нахождения искомого результата.

В традиционной трактовке алгоритм - это точный набор инструкций, описывающих последовательность действий исполнителя для достижения результата решения задачи за конечное время. По мере развития параллельности в работе компьютеров слово «последовательность» стали заменять более общим словом «порядок». Это связано с тем, что какие-то действия алгоритма должны быть выполнены только друг за другом, но какие-то могут быть и независимыми. Ранее часто писали «алгорифм», сейчас такое написание используется редко.

Часто в качестве исполнителя выступает некоторый механизм (компьютер, токарный станок, швейная машина), но понятие алгоритма необязательно относится к компьютерным программам, так, например, чётко описанный рецепт приготовления блюда также является алгоритмом - в таком случае исполнителем является человек.

Понятие алгоритма - одно из основных в программировании и информатике. Это последовательность команд, предназначенная исполнителю, в результате выполнения которой он должен решить поставленную задачу. Алгоритм должен описываться на формальном языке, исключающем неоднозначность толкования. Исполнитель может быть человеком или машиной. Исполнитель должен уметь выполнять все команды, составляющие алгоритм. Множество возможных команд конечно и изначально строго задано. Действия, выполняемые по этим командам, называются элементарными.

Запись алгоритма на формальном языке называется программой. Иногда само понятие алгоритма отождествляется с его записью, так что слова «алгоритм» и «программа» - почти синонимы. Небольшое различие заключается в том, что под алгоритмом, как правило, понимают основную идею его построения. Программа же всегда связана с записью алгоритма на конкретном формальном языке.

Свойства алгоритма. Значение слова алгоритм очень схоже со значением слов рецепт, инструкция. Однако любой алгоритм в отличие от рецепта или способа обязательно обладает следующими свойствами.

А. Выполнение алгоритма разбивается на последовательность законченных действий-шагов. Только выполнив одно действие (команду), можно приступать к исполнению следующего. Это свойство алгоритма называется дискретностью. Произвести каждое отдельное действие исполнителю предписывает специальное указание в записи алгоритма (команда).

Б. Понятность - алгоритм не должен содержать предписаний, смысл которых может восприниматься исполнителем неоднозначно, т.е. запись алгоритма должна быть настолько четкой и полной, чтобы у исполнителя не возникало потребности в принятии каких-либо самостоятельных решений. Алгоритм всегда рассчитан на выполнение «не размышляющего» исполнителя. Алгоритм составляется из команд, входящих в СКИ.

В. Детерминированность (определенность и однозначность). Каждая команда алгоритма определяет однозначное действие исполнителя, и должно быть однозначно определено, какая команда выполняется следующей. То есть если алгоритм многократно применяется к одному и тому же набору исходных данных, то на выходе он получает каждый раз один и тот же результат.

Г. Результативность - исполнение алгоритма должно закончиться за конечное число шагов, и при этом должен быть получен результат решения задачи. В качестве одного из возможных результатов может быть и установление того факта, что задача решений не имеет.

Свойство результативности содержит в себе свойство конечности - завершение работы алгоритма за конечное число шагов.

Д. Массовость - алгоритм пригоден для решения любой задачи из некоторого класса задач, т.е. алгоритм правильно работает на некотором множестве исходных данных, которое называется областью применимости алгоритма.

Свойство массовости определяет скорее качество алгоритма, а не относится к обязательным свойствам (как дискретность, понятность и пр.). Существуют алгоритмы, область применимости которых ограничивается единственным набором входных данных или даже отсутствием таковых (например, получение фиксированного числа верных цифр числа p). Правильнее говорить о том, что алгоритм должен быть применим к любым данным из своей области определения, и слово массовость не всегда подходит для описания такого свойства.

2. Генетические алгоритмы. Основные понятия

2.1 Понятие генетического алгоритма. Общие понятия

Генетический алгоритм представляет собой метод, отражающий естественную эволюцию методов решения проблем, и в первую очередь задач оптимизации. Генетический алгоритм - это процедура поиска, основанные на механизмах естественного отбора и наследования. В них используется эволюционный принцип выживания наиболее приспособленных особей. Генетические алгоритмы - это процедуры поиска, основанные на механизмах естественного отбора и наследования. В них используется эволюционный принцип выживания наиболее приспособленных особей. Они отличаются от традиционных методов оптимизации несколькими базовыми элементами.

В частности, генетические алгоритмы:

А) обрабатывают не знания параметров самой задачи, а их закодированную форму

Б) Осуществляют поиск решения исходя не из единственной точки, а из их некоторой популяции.

В) Используют только целевую функцию, и не ее производные либо иную дополнительную информацию.

Г) Применяют вероятные, а не детерминированные правила выбора

Перечисленные четыре свойства, которые можно сформулировать так же как кодирование параметров, операции на популяциях, использование минимума информации о задаче и рандомизации операции приводя в результате к устойчивости генетических алгоритмов и к их превосходству над другими широко применяемыми технологиями.

2.2 Операторы генетического алгоритма

При описании генетических алгоритмов используются определения, заимствованные из генетики.

1.  Популяция - это конечное множество особей.

2. Особи, входящие в популяцию, в генетических алгоритмах представляются хромосомами с закодированными в них множествами параметров задачи, то есть решений, которые иначе называются точками в пространстве поиска (search points). В некоторых работах особи называются организациями.

. Хромосомы (цепочки или кодовые последовательности) - это упорядоченные последовательности генов.

. Ген (свойство, знак или детектором) - это атомарный элемент генотипа, в частности, хромосомы.

. Генотип или структура - это набор хромосом данной особи. Следовательно особями популяции могут быть генотипы либо единичные хромосомы.

. Фенотип - это набор значений, соответствующих данному генотипу, то есть декодированная структура или множество параметров задачи (решение, точка пространства поиска).

. Аллель - это набор значений конкретного гена, также определяемое как значение свойства или вариант свойства

. Локус или позиция указывает место размещения данного гена в хромосоме (цепочке). Множество позиций генов - это локи.

Очень важным понятием в генетических алгоритмах считается функция приспособленности (fitness function), иначе называемая функцией оценки. Она представляет меру приспособленности данной особи в популяции. Эта функция играет важнейшую роль, поскольку позволяет оценить степень приспособленности конкретных особей в популяции и выбрать из них наиболее приспособленные (то есть имеющие наибольшее значение функции приспособленности) в соответствии с эволюционным принципом выживания «сильнейших». Функция приспособленности также получила свое название непосредственно из генетики. Она оказывает сильное влияние на функционирование генетических алгоритмов и должна иметь точное и корректное определение в задачах оптимизации функции приспособленности, как правило оптимизируется. В задачах минимизации целевая функция преобразуется и проблема сводится к максимизации. В теории управления функция приспособленности может принимать вид функции погрешности, а в теории игр - стоимостной функции. На каждой итерации генетического алгоритма приспособленность каждой особи данной популяции оценивается при помощи функции приспособленности, и на этой основе создается следующая популяция особей, составляющих множество потенциальных решений проблемы, например, задачи оптимизации.

Очередная популяция в генетическом алгоритме называется поколением, а к вновь создаваемой популяции особей применяется термин «новое поколение» или «поколение потомков».

2.3 Пример простейшей программы

Работа ГА представляет собой итерационный процесс, который продолжается до тех пор, пока поколения не перестанут существенно отличаться друг от друга, или не пройдет заданное количество поколений или заданное время. Для каждого поколения реализуются отбор, кроссовер (скрещивание) и мутация. Рассмотрим этот алгоритм.

Шаг 1: генерируется начальная популяция, состоящая из N особей со случайными наборами признаков.

Шаг 2 (борьба за существование): вычисляется абсолютная приспособленность каждой особи популяции к условиям среды f(i) и суммарная приспособленность особей популяции, характеризующая приспособленность всей популяции. Затем при пропорциональном отборе для каждой особи вычисляется ее относительный вклад в суммарную приспособленность популяции Ps(i), т.е. отношение ее абсолютной приспособленности f(i) к суммарной приспособленности всех особей популяции (3):

(3)



В выражении (3) сразу обращает на себя внимание возможность сравнения абсолютной приспособленности i-й особи f(i) не с суммарной приспособленностью всех особей популяции, а со средней абсолютной приспособленностью особи популяции (4):

(4)



Тогда получим (5):

(5)



Если взять логарифм по основанию 2 от выражения (5), то получим количество информации, содержащееся в признаках особи о том, что она выживет и даст потомство (6).

(6)



Необходимо отметить, что эта формула совпадает с формулой для семантического количества информации Харкевича, если целью считать индивидуальное выживание и продолжение рода. Это значит, что даже чисто формально приспособленность особи представляет собой количество информации, содержащееся в ее фенотипе о продолжении ее генотипа в последующих поколениях.

Поскольку количество потомства особи пропорционально ее приспособленности, то естественно считать, что если это количество информации:

положительно, то данная особь выживает и дает потомство, численность которого пропорциональна этому количеству информации;

равно нулю, то особь доживает до половозрелого возраста, но потомства не дает (его численность равна нулю);

меньше нуля, то особь погибает до достижения половозрелого возраста.

Таким образом, можно сделать фундаментальный вывод, имеющий даже мировоззренческое звучание, о том, что естественный отбор представляет собой процесс генерации и накопления информации о выживании и продолжении рода в ряде поколений популяции, как системы.

Это накопление информации происходит на различных уровнях иерархии популяции, как системы, включающей:

элементы системы: отдельные особи;

взаимосвязи между элементами: отношения между особями в популяции, обеспечивающие передачу последующим поколениям максимального количества информации об их выживании и продолжении рода (путем скрещивания наиболее приспособленных особей и наследования рациональных приобретений);

цель системы: сохранение и развитие популяции, реализуется через цели особей: индивидуальное выживание и продолжение рода.

Фенотип соответствует генотипу и представляет собой его внешнее проявление в признаках особи. Особь взаимодействует с окружающей средой и другими особями в соответствии со своим фенотипом. В случае, если это взаимодействие удачно, то особь передает генетическую информацию, определяющую фенотип, последующим поколениям.

Шаг 3: начало цикла смены поколений.

Шаг 4: начало цикла формирования нового поколения.

Шаг 5 (отбор): осуществляется пропорциональный отбор особей, которые могут участвовать в продолжении рода. Отбираются только те особи популяции, у которых количество информации в фенотипе и генотипе о выживании и продолжении рода положительно, причем вероятность выбора пропорциональна этому количеству информации.

Шаг 6 (кроссовер): отобранные для продолжения рода на предыдущем шаге особи с заданной вероятностью Pc подвергаются скрещиванию или кроссоверу (рекомбинации).

Если кроссовер происходит, то потомки получают по половине случайным образом определенных признаков от каждого из родителей. Численность потомства пропорциональна суммарной приспособленности родителей. В некоторых вариантах ГА потомки после своего появления заменяют собой родителей и переходят к мутации.

Если кроссовер не происходит, то исходные особи - несостоявшиеся родители, переходят на стадию мутации.

Шаг 7 (мутация): выполняются операторы мутации. При этом признаки потомков с вероятностью Pm случайным образом изменяются на другие. Отметим, что использование механизма случайных мутаций роднит генетические алгоритмы с таким широко известным методом имитационного моделирования, как метод Монте-Карло.

Шаг 8 (борьба за существование): оценивается приспособленность потомков (по тому же алгоритму, что и на шаге 2).

Шаг 9: проверяется, все ли отобранные особи дали потомство.

Если нет, то происходит переход на шаг 5 и продолжается формирование нового поколения, иначе - переход на следующий шаг 10.

Шаг 10: происходит смена поколений:

потомки помещаются в новое поколение;

полученная новая популяция замещает собой старую.

Шаг 11: проверяется выполнение условия останова генетического алгоритма. Выход из генетического алгоритма происходит либо тогда, когда новые поколения перестают существенно отличаться от предыдущих, т.е., как говорят, «алгоритм сходится», либо когда пройдено заданное количество поколений или заданное время работы алгоритма (чтобы не было «зацикливания» и динамического зависания в случае, когда решение не может быть найдено в заданное время).

Если ГА сошелся, то это означает, что решение найдено, т.е. получено поколение, идеально приспособленное к условиям данной фиксированной среды обитания.

3. 
Практическое применение генетического алгоритма

генетический алгоритм программа популяция

В данной курсовой работе необходимо создать пример программы, реализующий простой генетический алгоритм для нахождения минимума функции.

Каждая переменная кодируется 20 битами. Расчеты провести для 40 и 80 поколений, сравнить полученные результаты при размерах популяции 8, 12 и 20 особей.

При выполнении данного курсового проекта необходимо учитывать, что решение задачи является подверженным влиянию случайных величин. Поэтому запуск основной программы будет реализован в цикле - 20 прогонов. Одновременно с этим вычислим среднее значение минимума за эти 20 прогонов.

Используя исходную программу представленную в методическом пособие, создали программу для поиска минимума заданной функции.

3.1 Запуск программы и получения результатов

Текст основной программы предоставлен в приложении А

При выполнении программы были получены следующие результаты - минимум функции за 20 прогонов (таблица 1) и среднее значение минимума за 20 циклов (таблица 2)

Таблица 1 - Минимум функции

Число особей/ Число поколений

8

12

20

40

0.00887011911

0.00307839433

0.00320289227

80

0.00631444865

0.00125778214

0.00307878534

40

4.32743134200

1.73601946010

0.87630460526

80

3.24126568540

1.32795455230

1.12991718250



Заключение

Генетический алгоритм (ГА) представляет собой метод оптимизации, основанный на концепциях естественного отбора и генетики. В этом подходе переменные, характеризующие решение, представлены в виде ген в хромосоме. ГА оперирует конечным множеством решений (популяцией) - генерирует новые решения как различные комбинации частей решений популяции, используя такие операторы, как отбор, рекомбинация (кроссинговер) и мутация. Новые решения позиционируются в популяции в соответствии с их положением на поверхности исследуемой функции.

В данной курсовой работе создали пример программы, реализующий простой генетический алгоритм для нахождения минимума функции:


При выполнении данного курсового проекта учитывали, что решение задачи является подверженным влиянию случайных величин. Поэтому запуск основной программы был реализован в цикле - 20 раз. Одновременно с этим вычислили среднее значение минимума за эти 20 циклов.

Каждая переменная кодируется 20 битами. Расчеты проводились для 40 и 80 поколений. Проведем анализ полученных данных. Самый лучший результат получился при числе поколений - 40 и числе особей - 20. Минимальное значение функции min=0.00320289227. Среднее значение функции =0.87630460526.

Увеличение количества поколений, показало что при одних и тех же условиях, результат полученный при количестве поколений равный 40, лучше. Это можно объяснить тем, что алгоритм используя свои механизмы, находит лучшее решение с каждым последующим поколением, т.е. использует «накопленный опыт».

Таким образом, меняя размер популяции, тем самым увеличив количество геномов и кол-во поколений для нахождения решения, пробуем найти средний минимум функции. Увеличение геномов в работе алгоритма, дает более приближенный результат при решении задачи, полученные значения стремятся к 0, и с увеличением популяции это выглядит все нагляднее.

При выполнении курсовой работы была достигнута цель (нахождения минимума в заданной области), выполнены задачи по проектированию, построению логической структуры, разработке алгоритма и созданию программы поиска минимума функции.

Подвергнув анализу полученные данные, можно сделать вывод, доказывающий, что особенностью генетических алгоритмов является то, что они обеспечивают сходимость к глобальному оптимуму, а не являются случайным поиском решения функции.

Список источников

1. http://www.genon.ru

. Исаев С. «Популярно о генетических алгоритмах». http://home.od.ua/~relayer/algo/neuro/ga-pop/

. Алексей Андреев. «Электродарвин». http://www.fuga.ru/articles/2004/03/genetic-pro.htm

. Сотник С.Л. Конспект лекций по курсу «Основы проектирования систем искусственного интеллекта»: (1997-1998), http://neuroschool.narod.ru/books/sotnik.html.

Приложение А

Текст программы

program sga;

uses crt;= 20;= 20;

dim = 2; {размерность пространства поиска}= boolean;

{Алель - позиция в битовой строке}

chromosome = array [1..maxstring*dim] of allele;

{битовая строка}= array [1..dim] of real;= record:chromosome;

{генотип = битовая строка}

x:fenotype; {фенотип = массив вещественных

координат точки в пространстве поиска}:real; {значение целевой функции}

end;= array [1..maxpop] of individual;

const:fenotype=(2. 048,2.048);

{массив максимальных значений для координат точки в пространстве поиска}:fenotype=(-2.048, - 2.048);

{массив минимальных значений для координат точки в пространстве поиска}

var, minSum, minAverage:real;, nProgon:byte; {счетчики}, newpop, intpop:population;

{Три непересекающихся популяции - старая, новая и промежуточная}

popsize, lchrom, flchrom, gen, maxgen: integer;

{Глобальные целые переменные}, pmutation:real;

{глобальные вещественные переменные}:real; {Статистические вещественные}

{Вероятностные процедуры}random_:real;_:= random(65535)/(65535-1);;flip (probability:real):boolean;

{подбрасывание монетки - true если орел}

{Случайный выбор между low и high}

var:integer;low >= high then:= lowbegin:= trunc (random_ * (high-low+1) + low);i > high then i:= high;;:= i;;

{интерфейсные процедуры: decode and objfunc}objfunc (x:fenotype):real;me:real;:= x[1]*x[1] - x[2];:= me*me*100;:= me+(1-x[1])*(1-x[1]);;decode (chrom:chromosome; lbits:integer; var x:fenotype);

{Декодирование строки в массив вещественных координат точки в пространстве поиска - true=1, false=0}

var, j:integer;, accum, powerof2:real;i:=1 to dim do begin:= 0.0;:= 1;:=1;j:= 1+lbits*(i-1) to lbits+lbits*(i-1) do beginchrom[j] then accum:= accum + powerof2;:= powerof2 * 2;:=f*2;;[i]:= xmin[i]+(xmax[i] - xmin[i])*accum/(f-1)

end;

{Расчет статистических величин: statistics}

procedure statistics (popsize:integer; var min:real;

var pop:population);

{Расчет статистик популяции}

var:integer;

{Инициализация}:= pop[1].fitness;

{Цикл для min}j:= 2 to popsize do with pop[j] do beginfitness<min then begin:= fitness;

end;

{Новое значение min};;

{Процедура инициализации initpop}initpop;

{Инициализация начальной популяции случайным образом}

var, j1:integer;j:= 1 to popsize do with oldpop[j] do beginj1:= 1 to lchrom*dim do chrom[j1]:= flip (0.5);

{Бросок монетки}(chrom, lchrom, x);

{Декодирование строки}:= objfunc(x);

{Вычисление начальных значений функции пригодности};;

{3 генетических оператора: отбора (select), скрещивания (crossover) и

мутации (mutation)}select;

{процедура выбора}:integer;shuffle (var pop:population);

{процедура перемешивания популяции в процессе отбора}

var, j:integer;:individual;i:= popsize downto 2 do begin:= random (i-1)+1;:=pop[i];[i]:=pop[j];[j]:=ind0;;;select_1:integer;, j2, m:integer;(ipick>popsize) then(oldpop);:=1;:=ipick;:=ipick+1;(oldpop[j2].fitness<oldpop[j1].fitness) then:=j2:=j1;:=ipick+2;_1:=m;;:integer;:=1;j:=1 to popsize do begin[j]:=oldpop [select_1];;:=intpop;;mutation (var chrom:chromosome);

{двухточечная мутация с вероятностью pmutation}

var:boolean;, point2:integer;:boolean;:= flip(pmutation);

{Flip the biased coin}mutate then begin:= rnd (1, flchrom);:= rnd (1, flchrom);point1 <> point2;:=chrom[point1];[point1]:=chrom[point2];[point2]:=temp;

{обмен двух элементов};;

procedure crossover (var parent1, parent2, child1, child2:chromosome);

{равномерное скрещивание 2 родительских строк, результат помещается

в 2 строках-потомках}:integer;

beginflip(pcross) then beginj:= 1 to flchrom do beginflip (0.5) then begin[j]:= parent1 [j];[j]:= parent2 [j];else begin[j]:= parent2 [j];[j]:= parent1 [j];;;(child1);(child2);

end;;

{Процедура создания нового поколения: generation}generation;

{Генерирование нового поколения при помощи отбора, скрещивания и мутации}

{Прим: предполагается, что популяция имеет четный размер}

var, mate1, mate2:integer;

begin;:= 1;

{выполняются отбор, скрещивание и мутация, пока полностью не сформируется

новая популяция - newpop}:= j;

{выбор родительской пары}:= j+1;

{скрещивание и мутация - мутация вставлена в процедуру скрещивания}

crossover (oldpop[mate1].chrom, oldpop[mate2].chrom,[j].chrom, newpop [j + 1].chrom);

{Декодирование строки и вычисление пригодности}

with newpop[j] do begin(chrom, lchrom, x);:= objfunc(x);;newpop [j+1] do begin(chrom, lchrom, x);:= objfunc(x);;:= j + 2;j>popsize;output;('Размер популяции-', popsize, ' число поколений-', maxgen);

writeln ('Лучшее значение минимума-', minBest:14:14);('Среднее значение минимума-', minAverage:14:14);;;{Главная программа};

{Инициализация генератора случайных чисел};:=20; {число битов на один кодируемый параметр}:=lchrom*dim;:=0.01; {вероятность мутации}

pcross:=0.9; {вероятность скрещивания}count3:=1 to 3 do begincount3 of

:popsize:=8;

:popsize:=12;

3:popsize:=20; {размер популяции 8,12,20 особей};

maxgen:=40; {число поколений}maxgen<=80 do begin:=0;nProgon:=1 to 30 do begin {30 прогонов};(popsize, min, oldpop);nProgon=1 then minBest:=min;

gen:= 0; {Установка счетчика поколений в 0}{Главный итерационный цикл}:= gen + 1;

generation;(popsize, min, newpop);:= newpop; {переход на новое поколение}

until (gen >= maxgen);min<minBest then minBest:=min;:=minSum+min;; {next progon}:=minSum/nProgon; {среднее значение min};:=maxgen+40;;; {next popsize (count3)}('PRESS ANY KEY');until keypressed;

end. {End главной программы}

Похожие работы на - Генетические алгоритмы

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!