Эволюционные алгоритмы - это семейство алгоритмов оптимизации, основанных на принципе дарвиновского естественного отбора . Как часть естественного отбора, в данной среде имеется популяция людей, которые борются за выживание и размножение. Способность каждого человека достигать этих целей определяет его шанс завести детей, иными словами, передать свои гены следующему поколению людей, у которых по генетическим причинам будет больше шансов преуспеть, даже лучше, в реализации этих целей. две цели.
Этот принцип постоянного совершенствования поколений используется эволюционными алгоритмами для оптимизации решения проблемы. В начальном поколении популяция, состоящая из разных людей , генерируется случайным образом или другими методами. Человек - это решение проблемы, более или менее хорошее: качество личности по отношению к проблеме называется пригодностью , которая отражает адекватность решения проблемы, которую предстоит решить. Чем выше приспособленность человека, тем выше вероятность того, что он передаст часть или весь свой генотип людям следующего поколения.
Индивидуум закодирован как генотип , который может иметь любую форму, такую как ** битный вектор ( генетические алгоритмы ) или вектор реального (стратегии эволюции). Каждый генотип превращается в фенотип при оценке индивидуума, то есть, когда рассчитывается его приспособленность. В некоторых случаях фенотип идентичен генотипу: это называется прямым кодированием, В противном случае кодирование называется косвенным. Например, предположим, что вы хотите оптимизировать размер прямоугольного параллелепипеда, определяемого его длиной, высотой и шириной. Чтобы упростить пример, предположим, что эти три величины являются целыми числами от 0 до 15. Затем мы можем описать каждую из них с помощью 4-разрядного двоичного числа. Примером потенциального решения может быть генотип 0001 0111 01010. Соответствующий фенотип представляет собой параллелепипед длиной 1, высотой 7 и шириной 10.
При переходе от старого к новому поколению называются вариационными операторами , целью которых является манипулирование индивидами. Существует два различных типа операторов вариации:
- эти мутации операторы , которые используются для введения вариации в пределах того же индивидуума, как генетические мутации;
- что кроссовер операторы , которые используются , чтобы пересечь по меньшей мере , два различных генотипов, в качестве генетических скрещиваний от разведения.
Эволюционные алгоритмы зарекомендовали себя в различных областях, таких как исследование операций, робототехника, биология, нюансы или криптография. Кроме того, они могут оптимизировать несколько целей одновременно и могут использоваться как черные ящики, потому что они не предполагают какие-либо свойства в математической модели для оптимизации. Их единственное реальное ограничение - сложность вычислений.
Генетический алгоритм - это алгоритм, который случайным образом генерирует ряд попыток решения проблемы. Этот набор попыток решения называется «население».
Затем он пытается увидеть, насколько хорошо эти решения решают проблему, используя данную функцию пригодности . Попытки решения с лучшим значением пригодности используются для создания новой популяции. Это может быть сделано путем внесения небольших изменений в предпринятые решения (мутация) или путем объединения существующих пробных решений (кроссовер).
Идея заключается в том, что со временем появляется попытка найти решение, которое имеет достаточно высокую пригодность для решения проблемы.
Источником вдохновения для этого послужила теория эволюции; самые подходящие решения выживают и размножаются.
Пример 1
Предположим, вы искали наиболее эффективный способ вырезать несколько фигур из куска дерева. Вы хотите тратить как можно меньше древесины.
Ваша попытка решения будет случайным расположением этих фигур на вашем куске дерева. Пригодность будет определяться тем, как мало древесины останется после обрезки форм, следующих за этой договоренностью.
Чем меньше древесины осталось, тем лучше попытка решения.
Пример 2
Предположим, вы пытались найти многочлен, который проходит через несколько точек. Ваши попытки решения будут случайными полиномами.
Чтобы определить пригодность этих многочленов, вы определяете, насколько хорошо они соответствуют заданным точкам. (В этом конкретном случае вы, вероятно, использовали бы метод наименьших квадратов, чтобы определить, насколько хорошо полином соответствует точкам). В течение ряда испытаний вы получите многочлены, которые лучше соответствуют точкам, пока у вас не будет многочлена, который достаточно близко соответствует точкам.
источник
Этот ответ требует практического примера того, как его можно использовать, и я постараюсь привести его в дополнение к другим ответам. Кажется, они очень хорошо объясняют, что такое генетический алгоритм. Итак, это даст пример.
Допустим, у вас есть нейронная сеть (хотя они не единственные ее применения), которая, исходя из некоторых данных, даст некоторые результаты. Генетический алгоритм может создать популяцию из них, и, увидев, какой результат является лучшим, вырастить и убить представителей населения. В конце концов, это должно оптимизировать нейронную сеть, если она достаточно сложна.
Вот демонстрация, которую я сделал, которая, несмотря на то, что она плохо закодирована, может помочь вам понять. http://khrabanas.github.io/projects/evo/evo.html Нажмите кнопку эволюции и возитесь с целями.
Он использует простой генетический алгоритм для селекции, мутации и выбора между выживанием популяции. В зависимости от того, как установлены входные переменные, сеть сможет достичь некоторого уровня близости с ними. Таким образом, популяция, вероятно, в конечном итоге станет однородной группой, результаты которой будут напоминать цели.
Генетический алгоритм пытается создать своего рода «нейронную сеть», которая, принимая RGB, даст выходной цвет. Сначала это генерирует случайную популяцию. Затем берется 3 случайных члена из популяции, выбирается один с наименьшей пригодностью и удаляется из популяции. Пригодность равна разнице в квадрате верхней цели + разница в квадрате нижней цели. Затем он объединяет два оставшихся и добавляет ребенка в то же место в популяции, что и мертвый член. Когда происходит спаривание, есть вероятность мутации. Эта мутация изменит одно из значений случайным образом.
Как примечание, из-за того, как это настроено, во многих случаях невозможно быть полностью корректным, хотя это достигнет относительной близости.
источник
Здесь есть много хороших ответов, объясняющих, что такое генетические алгоритмы, и приводятся примеры приложений. Я добавляю несколько советов общего назначения о том, для чего они хороши, но также и о случаях, когда их НЕ следует использовать. Если мой тон кажется резким, то это потому, что использование GA в любом из случаев в разделе «Неправильно» приведет к тому, что ваша статья будет немедленно отклонена из любого журнала верхнего уровня.
Во-первых, ваша проблема ДОЛЖНА быть проблемой оптимизации. Вам нужно определить «фитнес-функцию», которую вы пытаетесь оптимизировать, и у вас должен быть способ ее измерить.
Хорошо:
Не подходит:
Наконец, если вы рассматриваете GA, рассмотрите более позднюю работу в Evolutionary Strategies. Я склонен к CMA-ES , который, я думаю, является хорошим простым алгоритмом, который фиксирует понятие градиента в ландшафте фитнеса так, как это не делают традиционные GA.
источник
Как отмечалось в другом ответе, все, что вам нужно для применения Генетических Алгоритмов (ГА), это представить потенциальное решение вашей проблемы в форме, которая подвержена кроссоверу и мутации. В идеале, функция фитнеса будет обеспечивать некоторую плавную обратную связь о качестве решения, а не просто «иголку в стоге сена».
Вот некоторые характеристики проблем, для которых подходят Генетические Алгоритмы (и вообще Метаэвристика в целом):
Однако, несмотря на их широкое использование для этой цели, обратите внимание, что GA на самом деле не являются оптимизаторами функций - механизмы GA, как правило, не исследуют «отдаленные» области пространства поиска в надежде найти какое-то отдаленное высококачественное решение, а скорее объединяются вокруг большего количества легко достижимые пики в «фитнес-ландшафте».
Более подробно о применимости ГА дано в известной ранней статье «Что делает проблему трудной для генетического алгоритма?»
источник