Применение генетических алгоритмов

 
 
 
 
 
 
 

Курсовая  работа по программированию

на  тему: «Применение  генетических алгоритмов»

 

 

План 

      Теоретическая часть.......................................................................................3

      Введение…………………………………………………………….……….3

      Раздел I. Основные понятия генетического алгоритма…………..…….....7

      1. 1. Классический генетический алгоритм……………………..…………7

      1. 2. Алгоритм работы……………………………………………….…….10

      1.3.  Шимы, теорема шим……………………………………………..…...13

      Раздел II. Модели генетических алгоритмов.............................................20

      2. 1. Настройка генетических алгоритмов………………………….……20

      2. 2. Модели генетических алгоритмов......................................................21

      Раздел III. Применение генетических алгоритмов....................................30

      3. 1. Применение генетических алгоритмов..............................................30

      3. 2. Перспективные направления развития нейрокомпьютерных технологий..............................................................................................................32

      Выводы………………………………………………………………….….36

      Практическая часть......................................................................................39

      Литература………………………………………………………………....47 

 

 

     Теоретическая часть

     Введение 

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

     Теория  эволюции повлияла на изменение мировоззрения  людей с самого своего появления. Теория, которую Чарльз Дарвин представил в работе, известной как "Происхождение Видов", в 1859 году, стала началом этого изменения. Многие области научного знания в настоящее время наслаждаются свободой мысли в атмосфере, которая многим обязана революции, вызванной теорией эволюции и развития. Но Дарвин, подобно многим своим современникам, кто предполагал, что в основе развития лежит естественный отбор, не мог не ошибаться. Например, он не смог показать механизм наследования, при котором поддерживается изменчивость. Его гипотеза о пангенезисе оказалась неправильной. Это было на пятьдесят лет до того, как теория наследственности начала распространяться по миру, и за тридцать лет до того, как "эволюционный синтез" укрепил связь между теорией эволюции и относительно молодой наукой генетикой. Однако Дарвин выявил главный механизм развития: отбор в сочетании с изменчивостью или, как он его называл, "спуск с модификацией". Во многих случаях, специфические особенности развития через изменчивость и отбор все еще не бесспорны, однако, основные механизмы объясняют невероятно широкий спектр явлений, наблюдаемых в Природе.

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

     История эволюционных вычислений началась с  разработки ряда различных независимых  моделей. Основными из них были генетические алгоритмы и классификационные  системы Голланда (Holland), опубликованные в начале 60-х годов и получившие всеобщее признание после выхода в свет книги, ставшей классикой в этой области, - "Адаптация в естественных и искусственных системах" ("Adaptation in Natural and Artifical Systems", 1975). В 70-х годах в рамках теории случайного поиска Растригиным Л.А. был предложен ряд алгоритмов, использующих идей бионического поведения особей. Развитие этих идей нашло отражение в цикле работ Букатовой И.Л. по эволюционному моделированию. Развивая идеи Цетлина М.Л. о целесообразном и оптимальном поведении стохастических автоматов, Неймарк Ю.И. предложил осуществлять поиск глобального экстремума на основе коллектива независимых автоматов, моделирующих процессы развития и элиминации особей. Большой вклад в развитие эволюционного программирования внесли Фогел (Fogel) и Уолш (Walsh). Несмотря на разницу в подходах, каждая из этих "школ" взяла за основу ряд принципов, существующих в природе, и упростила их до такой степени, чтобы их можно было реализовать на компьютере.

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

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

     Конечно, на практике мы не можем разделять  эти вещи так строго. Эти категории - просто два полюса, между которыми лежат различные вычислительные системы. Ближе к первому полюсу - эволюционные алгоритмы, такие как Эволюционное Программирование (Evolutionary Programming), Генетические Алгоритмы (Genetic Algorithms) и Эволюционные Стратегии (Evolution Strategies). Ближе ко второму полюсу - системы, которые могут быть классифицированы как Искусственная Жизнь (Artificial Life).

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

     Объектом  изучения данной курсовой работы являются генетические алгоритмы.

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

     Методы  исследования:

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

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

     Задачи:

1. проанализировать возможности генетических алгоритмов;

2. изучить особенности генетических алгоритмов;

3. создание программы с использованием генетического алгоритма. 

 
 

 

      Раздел I. Основные понятия  генетического алгоритма 

     1. 1. Классический генетический алгоритм 

     Генетические  Алгоритмы - адаптивные методы поиска, которые в последнее время  часто используются для решения  задач функциональной оптимизации. Они основаны на генетических процессах  биологических организмов: биологические  популяции развиваются в течении нескольких поколений, подчиняясь законам естественного отбора и по принципу "выживает наиболее приспособленный" (survival of the fittest), открытому Чарльзом Дарвином. Подражая этому процессу генетические алгоритмы способны "развивать" решения реальных задач, если те соответствующим образом закодированы. Например, ГА могут использоваться, чтобы проектировать структуры моста, для поиска максимального отношения прочности/веса, или определять наименее расточительное размещение для нарезки форм из ткани. Они могут также использоваться для интерактивного управления процессом, например на химическом заводе, или балансировании загрузки на многопроцессорном компьютере. Вполне реальный пример: израильская компания Schema разработала программный продукт Channeling для оптимизации работы сотовой связи путем выбора оптимальной частоты, на которой будет вестись разговор. В основе этого программного продукта и используются генетические алгоритмы[12;172].

     Основные  принципы ГА были сформулированы Голландом (Holland, 1975), и хорошо описаны во многих работах. В отличии от эволюции, происходящей в природе, ГА только моделируют те процессы в популяциях, которые являются существенными для развития. Точный ответ на вопрос: какие биологические процессы существенны для развития, и какие нет? - все еще открыт для исследователей[13;225].

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

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

     Так и воспроизводится вся новая  популяция допустимых решений, выбирая  лучших представителей предыдущего  поколения, скрещивая их и получая множество новых особей. Это новое поколение содержит более высокое соотношение характеристик, которыми обладают хорошие члены предыдущего поколения. Таким образом, из поколения в поколение, хорошие характеристики распространяются по всей популяции. Скрещивание наиболее приспособленных особей приводит к тому, что исследуются наиболее перспективные участки пространства поиска[19;128]. В конечном итоге, популяция будет сходиться к оптимальному решению задачи.

     Имеются много способов реализации идеи биологической эволюции в рамках ГА. Традиционным считается ГА, представленный на схеме. 

      НАЧАЛО /* генетический алгоритм */

      Создать начальную популяцию

      Оценить приспособленность каждой особи

      останов := FALSE

      ПОКА  НЕ останов ВЫПОЛНЯТЬ

      НАЧАЛО /* создать популяцию нового поколения */

      ПОВТОРИТЬ (размер_популяции/2) РАЗ

      НАЧАЛО /* цикл воспроизводства */

      Выбрать две особи с высокой приспособленностью из предыдущего поколения для  скрещивания

      Скрестить выбранные особи и получить двух потомков

      Оценить приспособленности потомков

      Поместить потомков в новое поколение

      КОНЕЦ

      ЕСЛИ  популяция сошлась ТО останов := TRUE

      КОНЕЦ

      КОНЕЦ 

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

     Хотя  модель эволюционного развития, применяемая  в ГА, сильно упрощена по сравнению  со своим природным аналогом, тем  не менее ГА является достаточно мощным средством и может с успехом  применяться для широкого класса прикладных задач, включая те, которые трудно, а иногда и вовсе невозможно, решить другими методам[8;239]. Однако, ГА, как и другие методы эволюционных вычислений, не гарантирует обнаружения глобального решения за полиномиальное время. ГА-мы не гарантируют и того, что глобальное решение будет найдено, но они хороши для поиска "достаточно хорошего" решения задачи "достаточно быстро". Там, где задача может быть решена специальными методам, почти всегда такие методы будут эффективнее ГА и в быстродействии и в точность найденных решений. Главным же преимуществом ГА-мов является то, что они могут применяться даже на сложных задачах, там, где не существует никаких специальных методов. Даже там, где хорошо работаю существующие методики, можно достигнуть улучшения сочетанием их с ГА[10;247]. 

      1. 2. Алгоритм работы

     На  рисунке изображена схема работы любого генетического алгоритма:

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

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

     Шаг алгоритма состоит из трех стадий: генерация промежуточной популяции (intermediate generation) путем отбора (selection) текущего поколения (current generation), скрещивание (recombination) особей промежуточной популяции путем кроссовера (crossover), что приводит к формированию нового поколения (next generation), и мутация нового поколения. На рисунке изображены первые две стадии:

 

     Промежуточная популяция — это набор особей, которые получили право размножаться. Приспособленные особи могут  быть записаны туда несколько раз. «Плохие» особи с большой вероятностью туда вообще не попадут[12;275].

     В классическом ГА вероятность каждой особи попасть в промежуточную  популяцию пропорциональна ее приспособленности, т. е. работает пропорциональный отбор (proportional selection). Можно его реализовать следующим образом: пусть особи располагаются на колесе рулетки, так что размер сектора каждой особи пропорционален ее приспособленности. Изначально промежуточная популяция пуста. N раз запуская рулетку, выберем требуемое количество особей для записи в промежуточную популяцию. Ни одна выбранная особь не удаляется с рулетки. Такой отбор называется stochastic sampling.

     Другой  способ отбора, который также является пропорциональным, это remainder stochastic sampling. Для каждой особи вычисляется отношение ее приспособленности к средней приспособленности популяции. Целая часть этого отношения указывает, сколько раз нужно записать особь в промежуточную популяцию, а дробная — это ее вероятность попасть туда еще раз. Пусть, к примеру, для некоторой особи i f⁄ <f> = 1.36 (<f> — средняя приспособленность текущей популяции). Тогда она будет выбрана один раз, а затем с вероятностью 0.36 еще раз. Реализовать такой способ отбора удобно следующим образом: расположим особи на рулетке так же, как было описано[3;177]. Теперь пусть у рулетки не одна стрелка, а N, причем они отсекают одинаковые сектора. Тогда один запуск рулетки выберет сразу все N особей, которые нужно записать в промежуточную популяцию. Такой способ иллюстрируется следующим рисунком:

     После отбора особи промежуточной популяции  случайным образом разбиваются  на пары. Каждая из них с вероятностью pc скрещивается, т. е. к ней применяется оператор кроссовера, в результате чего получаются два потомка. Они записываются в новое поколение. Если же паре не выпало скрещиваться, в новое поколение записываются сами особи этой пары[4;258].

В классическом генетическом алгоритме применяется  одноточечный оператор кроссовера (1-point crossover): для родительских хромосом (т. е. строк) случайным образом выбирается точка раздела, и они обмениваются отсеченными частями. Полученные две строки являются потомками:

11010 01100101101 ⇒ 10110 01100101101

10110 10011101001 ⇒ 11010 10011101001

     К полученному в результате скрещивания новому поколению применяется оператор мутации. Каждый бит каждой особи популяции с вероятностью pm инвертируется. Эта вероятность обычно очень мала, менее 1%.

1011001100101101 ⇒ 1011001101101101

     Таким образом, процесс отбора, скрещивания и мутации приводит к формированию нового поколения. Шаг алгоритма завершается объявлением нового поколения текущим. Далее все действия повторяются.

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

     Схождением  называется такое состояние популяции, когда все строки популяции почти  одинаковы и находятся в области  некоторого экстремума. В такой ситуации кроссовер практически никак не изменяет популяции. А вышедшие из этой области за счет мутации особи склонны вымирать, так как чаще имеют меньшую приспособленность, особенно если данный экстремум является глобальным максимумом. Таким образом, схождение популяции обычно означает, что найдено лучшее или близкое к нему решение[18;213].

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

     1.3.  Шимы, теорема шим 

     Шимой (schema) называется строка длины L (т. е. той же длины, что и любая строка популяции), состоящая из символов {0, 1, *} (где * — «don't care» символ). Будем говорить, что строка является представителем данной шимы, если в позициях, где знак шимы равен 0 или 1, она имеет тот же символ. Например, у шимы 01*0*110 следующие представители:

         01000110

         01001110

         01110110

         01111110

     Порядком (order) шимы называется количество фиксированных битов в ней. Определяющей длиной (defining length) шимы называется расстояние между ее крайними фиксированными битами. Например, для шимы *1***01* порядок o = 3, а определяющая длина Δ = 5.

     Очевидно, что количество представителей шимы H равно 2L−o(H), а количество шим равно 3L (действительно, шимы — это строки, у которых на каждой позиции может находиться один из трех символов) [3;180].

     Если  представить пространство поиска в  виде гиперкуба, то строки это его  вершины, а шима определяет в нем гиперплоскость. К примеру, шима **1 определяет правую грань этого трехмерного куба:

     Куб

     

     Поэтому термины «гиперплоскость» и «шима» взаимозаменяемы. Следующий рисунок изображает другое представление шим:

     Сечение пространства поиска

     

     На  нем видно, что некоторые шимы имеют с среднем по всему пространству поиска большую приспособленность, чем другие.

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

     Внешне  кажется, что генетический алгоритм при отборе выбирает строку, однако при этом неявным образом происходит выборка шим, представителем которых она является[7;334]. Это означает, что на каждом поколении количество представителей шимы изменяется в соответствии с текущей приспособленностью этой шимы. У «хороших» шим представители в среднем более приспособленные, а значит, они чаще будут выбираться в промежуточную популяцию. «Плохие» шимы имеют много шансов вымереть. Одна строка является представителем сразу многих шим (а именно 2L: на каждой позиции мы либо оставляем бит строки, либо заменяем его на «*»). Поэтому при отборе одной строки отбирается сразу целое множество шим. Это явление получило название неявный параллелизм (implicit parallelism).

     Теорема шим

     Теорема шим (The Schema Theorem) была приведена в упомянутой выше работе Холланда и является первой попыткой объяснить, почему генетические алгоритмы работают. Она показывает, как изменяется доля представителей шимы в популяции.

     Пусть M(H, t) — число представителей шимы H в t-ом поколении. В силу того, что при построении промежуточной популяции используется пропорциональный отбор, в ней количество представителей данной шимы будет M(H, t + intermediate) = M(H, t) f(H, t) ⁄ <f(t)>,где f(H, t) — приспособленность шимы H в t-ом поколении, а <f(t)> — средняя приспособленность t-го поколения.

     Особи промежуточной популяции с вероятностью pc подвергаются кроссоверу. Одноточечный кроссовер может разрушить шиму, что означает, что один из родителей был представителем рассматриваемой шимы, но ни один из детей уже таковым являться не будет. Вероятность разрушения меньше, чем Δ(H) (1 − P(H, t) f(H, t) ⁄ <f(t)>) ⁄ (L−1), где P(H, t) — доля представителей шимы H в t-ом поколении. Первый множитель произведения равен вероятности точки раздела попасть между фиксированными битами шимы, а второй — вероятности выбрать в пару представителя другой шимы[7;335].

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

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

     P(H, t + 1) ≥ P(H, t) f(H, t) [1 − pc Δ(H) (1 − P(H, t) f(H, t) ⁄ <f(t)>) ⁄ (L−1)] ⁄ <f(t)>

     Теперь  учтем влияние мутации. Для каждого  фиксированного бита вероятность того, что он не будет инвертирован, равна (1 − pm). Поскольку всего в шиме фиксированных битов o(H), то верна следующая итоговая формула теоремы шим:

     P(H, t + 1) ≥ P(H, t) f(H, t) [1 − pc Δ(H) (1 − P(H, t) f(H, t) ⁄ <f(t)>) ⁄ (L−1)] (1 − pm)o(H) ⁄ <f(t)>

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

Применение генетических алгоритмов