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

Материал из Википедии — свободной энциклопедии

Генети́ческий алгори́тм (

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

История

Первые работы по имитационному моделированию эволюции были проведены в 1954 году Нильсом Баричелли на компьютере, установленном в Институте перспективных исследований Принстонского университета[1][2], опубликованная в том же году работа привлекла широкое внимание. С 1957 года[3] австралийский генетик Алекс Фразер опубликовал серию работ по имитационному моделированию искусственного отбора среди организмов с множественным контролем измеримых характеристик. Положенное начало позволило реализовать имитационные модели эволюционных процессов по методам, описанным в книгах Фразера и Барнелла(1970)[4] и Кросби (1973)[5]. Имитационные модели Фразера включали все важнейшие элементы современных генетических алгоритмов. Вдобавок к этому, Ганс-Иоахим Бремерманн в 1960-х годах опубликовал серию работ, которые также принимали подход использования популяции решений, подвергаемой рекомбинации, мутации и отбору, в проблемах оптимизации. Исследования Бремерманна также включали элементы современных генетических алгоритмов[6]. Среди прочих ранних исследователей — Ричард Фридберг, Джордж Фридман и Майкл Конрад. Множество ранних работ были переизданы Давидом Фогелем (1998)[7].

Хотя Баричелли в работе 1963 года имитировал способности машины играть в простую игру

университете Мичигана. Холланд ввел формализованный подход для предсказывания качества следующего поколения, известный как Теорема схем. Исследования в области генетических алгоритмов оставались в основном теоретическими до середины 80-х годов, когда была, наконец, проведена Первая международная конференция по генетическим алгоритмам в Питтсбурге, Пенсильвания (США)
.

С ростом исследовательского интереса существенно выросла и вычислительная мощь настольных компьютеров, это позволило использовать новую вычислительную технику на практике. В конце 80-х, компания General Electric начала продажу первого в мире продукта, работавшего с использованием генетического алгоритма. Им стал набор промышленных вычислительных средств. В 1989, другая компания Axcelis, Inc. выпустила Evolver — первый в мире коммерческий продукт на генетическом алгоритме для настольных компьютеров. Журналист The New York Times в технологической сфере Джон Маркофф писал[14] об Evolver в 1990 году.

Описание алгоритма

Схема работы генетического алгоритма

Задача формализуется таким образом, чтобы её решение могло быть закодировано в виде

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

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

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

Из полученного множества решений («поколения») с учётом значения «приспособленности» выбираются решения (обычно лучшие особи имеют большую вероятность быть выбранными), к которым применяются «генетические операторы» (в большинстве случаев «скрещивание» — crossover и «мутация» — mutation), результатом чего является получение новых решений. Для них также вычисляется значение приспособленности, и затем производится отбор («селекция») лучших решений в следующее поколение.

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

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

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

Таким образом, можно выделить следующие этапы генетического алгоритма:

  1. Задать целевую функцию (приспособленности) для особей популяции
  2. Создать начальную популяцию
  • (Начало цикла)
  1. Размножение (скрещивание)
  2. Мутирование
  3. Вычислить значение целевой функции для всех особей
  4. Формирование нового поколения (селекция)
  5. Если выполняются условия остановки, то (конец цикла), иначе (начало цикла).

Создание начальной популяции

Перед первым шагом нужно случайным образом создать начальную популяцию; даже если она окажется совершенно неконкурентоспособной, вероятно, что генетический алгоритм всё равно достаточно быстро переведёт её в жизнеспособную популяцию. Таким образом, на первом шаге можно особенно не стараться сделать слишком уж приспособленных особей, достаточно, чтобы они соответствовали формату особей популяции, и на них можно было подсчитать функцию приспособленности (Fitness). Итогом первого шага является популяция H, состоящая из N особей.

Отбор (селекция)

На этапе отбора нужно из всей популяции выбрать определённую её долю, которая останется «в живых» на этом этапе эволюции. Есть разные способы проводить отбор. Вероятность выживания особи h должна зависеть от значения функции приспособленности Fitness(h). Сама доля выживших s обычно является параметром генетического алгоритма, и её просто задают заранее. По итогам отбора из N особей популяции H должны остаться sN особей, которые войдут в итоговую популяцию H'. Остальные особи погибают.

  • Турнирная селекция — сначала случайно выбирается установленное количество особей (обычно две), а затем из них выбирается особь с лучшим значением функции приспособленности
  • Метод рулетки — вероятность выбора особи тем вероятнее, чем лучше её значение функции приспособленности , где  — вероятность выбора i особи,  — значение функции приспособленности для i особи,  — количество особей в популяции
  • Метод ранжирования — вероятность выбора зависит от места в списке особей отсортированном по значению функции приспособленности , где , ,  — порядковый номер особи в списке особей отсортированном по значению функции приспособленности (то есть  — если мы минимизируем значение функции приспособленности)
  • Равномерное ранжирование — вероятность выбора особи определяется выражением: , где параметр метода
  • Сигма-отсечение — для предотвращения преждевременной сходимости генетического алгоритма используются методы, масштабирующие значение целевой функции. Вероятность выбора особи тем больше, чем оптимальнее значение масштабируемой целевой функции , где ,  — среднее значение целевой функции для всей популяции, σ — среднеквадратичное отклонение значения целевой функции[15].

Выбор родителей

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

Можно выделить несколько операторов выбора родителей:

  1. Панмиксия — оба родителя выбираются случайно, каждая особь популяции имеет равные шансы быть выбранной
  2. Инбридинг — первый родитель выбирается случайно, а вторым выбирается такой, который наиболее похож на первого родителя
  3. Аутбридинг — первый родитель выбирается случайно, а вторым выбирается такой, который наименее похож на первого родителя

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

Размножение (скрещивание)

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

Почему особи для размножения обычно выбираются из всей популяции H, а не из выживших на первом шаге элементов H' (хотя последний вариант тоже имеет право на существование)? Дело в том, что главный недостаток многих генетических алгоритмов — отсутствие разнообразия (diversity) в особях. Достаточно быстро выделяется один-единственный генотип, который представляет собой локальный максимум, а затем все элементы популяции проигрывают ему отбор, и вся популяция «забивается» копиями этой особи. Есть разные способы борьбы с таким нежелательным эффектом; один из них — выбор для размножения не самых приспособленных, но вообще всех особей. Однако такой подход вынуждает хранить всех существовавших ранее особей, что увеличивает вычислительную сложность задачи. Поэтому часто применяют методы отбора особей для скрещивания таким образом, чтобы «размножались» не только самые приспособленные, но и другие особи, обладающие плохой приспособленностью. При таком подходе для разнообразия генотипа возрастает роль мутаций.

Мутации

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

Критика

Существует несколько поводов для критики насчёт использования генетического алгоритма по сравнению с другими методами оптимизации:

Имеется много скептиков относительно целесообразности применения генетических алгоритмов. Например, Стивен С. Скиена, профессор кафедры вычислительной техники университета Стоуни—Брук, известный исследователь алгоритмов, лауреат премии института IEEE, пишет[17]:

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

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

Генетические алгоритмы применяются для решения следующих задач:

  1. Оптимизация функций
  2. Оптимизация запросов в базах данных
  3. Разнообразные задачи на
    задача коммивояжера
    , раскраска, нахождение паросочетаний)
  4. Настройка и обучение
    искусственной нейронной сети
  5. Задачи компоновки
  6. Составление расписаний
  7. Игровые стратегии
  8. Теория приближений
  9. Искусственная жизнь
  10. Биоинформатика (фолдинг белков)
  11. Синтез конечных автоматов
  12. Настройка ПИД регуляторов
  13. Черный ящик
  14. Обработка сигналов

Пример простой реализации на C++

Поиск в одномерном пространстве, без скрещивания.

#include <cstdlib>
#include <ctime>
#include <algorithm>
#include <iostream>
#include <numeric>
  
int main()
{
    srand((unsigned int)time(NULL));
    const size_t N = 1000;
    int a[N] = { 0 };
    for ( ; ; )
    {
        //мутация в случайную сторону каждого элемента:
        for (size_t i = 0; i < N; ++i)
            a[i] += ((rand() % 2 == 1) ? 1 : -1);

        //теперь выбираем лучших, отсортировав по возрастанию
        std::sort(a, a + N);
        //и тогда лучшие окажутся во второй половине массива.
        //скопируем лучших в первую половину, куда они оставили потомство, а первые умерли:
        std::copy(a + N / 2, a + N, a);
        //теперь посмотрим на среднее состояние популяции. Как видим, оно всё лучше и лучше.
        std::cout << std::accumulate(a, a + N, 0) / N << std::endl;
    }
}

В культуре

  • В фильме 1995 года «
    Виртуозность
    » мозг главного злодея выращен генетическим алгоритмом с использованием воспоминаний и поведенческих черт преступников.

Примечания

  1. Barricelli, Nils Aall[англ.]. Esempi numerici di processi di evoluzione (неопр.) // Methodos. — 1954. — С. 45—68.
  2. Barricelli, Nils Aall[англ.]. Symbiogenetic evolution processes realized by artificial methods (англ.) // Methodos : journal. — 1957. — P. 143—182.
  3. Fraser, Alex[англ.]. Simulation of genetic systems by automatic digital computers. I. Introduction (англ.) // Aust. J. Biol. Sci. : journal. — 1957. — Vol. 10. — P. 484—491.
  4. Fraser, Alex[англ.]; Donald Burnell. Computer Models in Genetics (англ.). — New York: McGraw-Hill Education, 1970. — ISBN 0-07-021904-4.
  5. Crosby, Jack L. Computer Simulation in Genetics (англ.). — London: John Wiley & Sons, 1973. — ISBN 0-471-18880-8.
  6. 02.27.96 — UC Berkeley’s Hans Bremermann, professor emeritus and pioneer in mathematical biology, has died at 69. Дата обращения: 17 мая 2012. Архивировано 23 марта 2012 года.
  7. Fogel, David B. (editor). Evolutionary Computation: The Fossil Record (англ.). — New York: Institute of Electrical and Electronics Engineers, 1998. — ISBN 0-7803-3481-7.
  8. Barricelli, Nils Aall. Numerical testing of evolution theories. Part II. Preliminary tests of performance, symbiogenesis and terrestrial life (англ.) // Acta Biotheoretica[англ.] : journal. — 1963. — No. 16. — P. 99—126.
  9. Rechenberg, Ingo. Evolutionsstrategie (неопр.). — Stuttgart: Holzmann-Froboog, 1973. — ISBN 3-7728-0373-3.
  10. Schwefel, Hans-Paul. Numerische Optimierung von Computer-Modellen (PhD thesis) (нем.). — 1974.
  11. Schwefel, Hans-Paul. Numerische Optimierung von Computor-Modellen mittels der Evolutionsstrategie : mit einer vergleichenden Einführung in die Hill-Climbing- und Zufallsstrategie (нем.). — Basel; Stuttgart: Birkhäuser[англ.], 1977. — ISBN 3-7643-0876-1.
  12. Schwefel, Hans-Paul. Numerical optimization of computer models (Translation of 1977 Numerische Optimierung von Computor-Modellen mittels der Evolutionsstrategie (англ.). — Chichester ; New York: Wiley, 1981. — ISBN 0-471-09988-0.
  13. J. H. Holland. Adaptation in natural and artificial systems. University of Michigan Press, Ann Arbor, 1975.
  14. Markoff, John (1990-08-29). "What's the Best Answer? It's Survival of the Fittest". New York Times. Архивировано 2 декабря 2010. Дата обращения: 9 августа 2009. {{cite news}}: Проверьте значение даты: |year= / |date= mismatch (справка)
  15. Melanie Mitchell. An Introduction to Genetic Algorithms. — MIT Press, 1998. — С. 167. — 226 с. — ISBN 9780262631853. Архивировано 1 ноября 2018 года.
  16. Wolpert, D.H., Macready, W.G., 1995. No Free Lunch Theorems for Optimisation. Santa Fe Institute, SFI-TR-05-010, Santa Fe.
  17. Steven S. Skiena. The Algorithm Design Manual. Second Edition. Springer, 2008.

Литература

  • Саймон Д. Алгоритмы эволюционной оптимизации. — М.: ДМК Пресс, 2020. — 940 с. — ISBN 978-5-97060-812-8.
  • Емельянов В. В., Курейчик В. В., Курейчик В. М. Теория и практика эволюционного моделирования. — М.: Физматлит, 2003. — 432 с. — ISBN 5-9221-0337-7.
  • Курейчик В. М., Лебедев Б. К., Лебедев О. К. Поисковая адаптация: теория и практика. — М.: Физматлит, 2006. — 272 с. — ISBN 5-9221-0749-6.
  • Гладков Л. А., Курейчик В. В., Курейчик В. М. Генетические алгоритмы: Учебное пособие. — 2-е изд. — М.: Физматлит, 2006. — 320 с. — ISBN 5-9221-0510-8.
  • Гладков Л. А., Курейчик В. В, Курейчик В. М. и др. Биоинспирированные методы в оптимизации: монография. — М.: Физматлит, 2009. — 384 с. — ISBN 978-5-9221-1101-0.
  • Рутковская Д., Пилиньский М., Рутковский Л. Нейронные сети, генетические алгоритмы и нечеткие системы = Sieci neuronowe, algorytmy genetyczne i systemy rozmyte. — 2-е изд. — М.: Горячая линия-Телеком, 2008. — 452 с. — ISBN 5-93517-103-1.
  • Скобцов Ю. А. Основы эволюционных вычислений. — Донецк: ДонНТУ, 2008. — 326 с. — ISBN 978-966-377-056-6.

Ссылки