Генетичний алгоритм: відмінності між версіями

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
[неперевірена версія][перевірена версія]
Вилучено вміст Додано вміст
Примітки
Рядок 5: Рядок 5:
== Історія ==
== Історія ==
{{Вікіфікувати}}
{{Вікіфікувати}}
Перші спроби симуляції еволюції були проведені у 1954 році {{Нп|Нільс Баричеллі|Нільсом Баричеллі||Nils Aall Barricelli}} на комп'ютері, встановленому в Інституті перспективних досліджень [[Прінстонський університет|Прінстонського університету]].<ref name="Barricelli 1954 45–68">{{cite journal|last=Barricelli|first=Nils Aall|year=1954|authorlink=Nils Aall Barricelli|title=Esempi numerici di processi di evoluzione|journal=Methodos|pages=45–68}}</ref><ref name="Barricelli 1957 143–182">{{cite journal|last=Barricelli|first=Nils Aall|year=1957|authorlink=Nils Aall Barricelli|title=Symbiogenetic evolution processes realized by artificial methods|journal=Methodos|pages=143–182}}</ref> Його робота, що була опублікована у тому ж році, привернула увагу громадськості. З 1957 року, австралійський генетик Алекс Фразер опублікував серію робіт з симуляції штучного відбору серед організмів з множинним контролем вимірюваних характеристик. Це дозволило комп'ютерній симуляції еволюційних процесів та методам, які були описані у книгах Фразера та Барнела(1970) та Кросбі(1975), з 1960-х років стати більш розповсюдженим видом діяльності серед біологів. Симуляції Фразера містили усі найважливіші елементи сучасних генетичних алгоритмів. До того ж, Ганс-Іоахім Бремерман в 1960-х опублікував серію робіт, які також приймали підхід використання популяції рішень, що піддаються відбору, мутації та рекомбінації, в проблемах оптимізації. Дослідження Бремермана також містили елементи сучасних генетичних алгоритмів. Також варто відмітити Річарда Фрідберга, Джоржа Фрідмана та Майкла Конрада{{fact}}.
Перші спроби симуляції еволюції були проведені у 1954 році {{Нп|Нільс Баричеллі|Нільсом Баричеллі||Nils Aall Barricelli}} на комп'ютері, встановленому в [[Інститут перспективних досліджень|Інституті перспективних досліджень]] [[Прінстонський університет|Прінстонського університету]].<ref name="Barricelli 1954 45–68">{{cite journal|last=Barricelli|first=Nils Aall|year=1954|authorlink=Nils Aall Barricelli|title=Esempi numerici di processi di evoluzione|journal=Methodos|pages=45–68}}</ref><ref name="Barricelli 1957 143–182">{{cite journal|last=Barricelli|first=Nils Aall|year=1957|authorlink=Nils Aall Barricelli|title=Symbiogenetic evolution processes realized by artificial methods|journal=Methodos|pages=143–182}}</ref> Його робота, що була опублікована у тому ж році, привернула увагу громадськості. З 1957 року, <ref>{{cite journal|last=Fraser|first=Alex|authorlink=Alex Fraser (scientist)|year=1957|title=Simulation of genetic systems by automatic digital computers. I. Introduction|journal=Aust. J. Biol. Sci.|volume=10|pages=484–491}}</ref> австралійський генетик {{Нп|Алекс Фразер|Алекс Фразер||Alex Fraser (scientist)}} опублікував серію робіт з симуляції [[Штучний добір|штучного відбору]] серед організмів з множинним контролем вимірюваних характеристик. Це дозволило комп'ютерній симуляції еволюційних процесів та методам, які були описані у книгах Фразера та Барнела(1970)<ref>{{cite book|last=Fraser|first=Alex|authorlink=Alex Fraser (scientist)|coauthors=Donald Burnell|year=1970|title=Computer Models in Genetics|publisher=McGraw-Hill|location=New York|isbn=0-07-021904-4}}</ref> та Кросбі(1975)<ref>{{cite book|last=Crosby|first=Jack L.|year=1973|title=Computer Simulation in Genetics|publisher=John Wiley & Sons|location=London|isbn=0-471-18880-8}}</ref>, з 1960-х років стати більш розповсюдженим видом діяльності серед біологів. Симуляції Фразера містили усі найважливіші елементи сучасних генетичних алгоритмів. До того ж, {{Нп|Ганс-Іоахім Бремерман|Ганс-Іоахім Бремерман||Hans-Joachim Bremermann}} в 1960-х опублікував серію робіт, які також приймали підхід використання популяції рішень, що піддаються відбору, мутації та рекомбінації, в проблемах оптимізації. Дослідження Бремермана також містили елементи сучасних генетичних алгоритмів.<ref>[http://berkeley.edu/news/media/releases/96legacy/releases.96/14319.html 02.27.96 — UC Berkeley’s Hans Bremermann, professor emeritus and pioneer in mathematical biology, has died at 69<!-- Bot generated title -->]</ref> Також варто відмітити Річарда Фрідберга, Джоржа Фрідмана та Майкла Конрада{{fact}}.


Хоча Баричеллі у своїй роботі 1963&nbsp;р. займався симуляцією можливості машини грати у просту гру, штучна еволюція стала загальновизнаним методом оптимізації після роботи Інго Рехенберга та Ханса-Пауля Швереля у 60-х та на початку 70-х років двадцятого століття&nbsp;— група Рехенсберга змогла вирішити складні інженерні проблеми згідно зі стратегіями еволюції. Іншим підходом була техніка еволюційного програмування Лоренса Дж. Фогеля, яка була запропонована для створення штучного інтелекту. Еволюційне програмування, яке спочатку використовувало кінцеві автомати для передбачення обставин, та використовували різноманіття та відбір для оптимізації логіки передбачення. Генетичні алгоритми стали особливо відомі завдяки роботі Дж. Холанда на початку 70-х років та його книзі «Адаптация в естественных и искусственных системах» (1975).Його дослідження були основані на експериментах з клітинними автоматами та на його роботах, що були написані в університеті Мічігану. Він ввів формалізований підхід для передбачення якості наступного покоління, відомий як Теорема схем. Дослідження в обасті генетичних алгоритмів залишалось більше теоретичним до середини 80-х років, коли була, нарешті, проведена Перша міжнародна конференція з генетичних алгоритмів (Піттсбург, Пенсильванія (США)).
Хоча Баричеллі у своїй роботі 1963&nbsp;р. займався симуляцією можливості машини грати у просту гру,<ref>{{cite journal|last=Barricelli|first=Nils Aall|year=1963|title=Numerical testing of evolution theories. Part II. Preliminary tests of performance, symbiogenesis and terrestrial life|journal=Acta Biotheoretica|issue=16|pages=99–126}}</ref> [[Еволюційний алгоритм|штучна еволюція]] стала загальновизнаним методом оптимізації після роботи {{Нп|Інго Рехенберг|Інго Рехенберга||Ingo Rechenberg}} та {{Нп|Ханс-Пауль Шверель|Ханса-Пауля Швереля||Hans-Paul Schwefel}} у 60-х та на початку 70-х років двадцятого століття&nbsp;— група Рехенсберга змогла вирішити складні інженерні проблеми згідно зі [[Еволюційна стратегія|стратегіями еволюції]].<ref>{{cite book|last=Rechenberg|first=Ingo|year=1973|title=Evolutionsstrategie|place=Stuttgart|publisher=Holzmann-Froboog|isbn=3-7728-0373-3}}</ref><ref>{{cite book|last=Schwefel|first=Hans-Paul|year=1974|title=Numerische Optimierung von Computer-Modellen (PhD thesis)}}</ref><ref>{{cite book|last=Schwefel|first=Hans-Paul|year=1977|title=Numerische Optimierung von Computor-Modellen mittels der Evolutionsstrategie : mit einer vergleichenden Einführung in die Hill-Climbing- und Zufallsstrategie|place=Basel; Stuttgart | publisher=Birkhäuser| isbn=3-7643-0876-1}}</ref><ref>{{cite book|last=Schwefel|first=Hans-Paul|year=1981|title=Numerical optimization of computer models (Translation of 1977 Numerische Optimierung von Computor-Modellen mittels der Evolutionsstrategie|place=Chichester ; New York|publisher=Wiley|isbn=0-471-09988-0}}</ref> Іншим підходом була техніка еволюційного програмування {{Нп|Лоренс Дж. Фогель|Лоренса Дж. Фогеля||Lawrence J. Fogel}}, яка була запропонована для створення штучного інтелекту. [[Еволюційне програмування|Еволюційне програмування]], яке спочатку використовувало [[Скінченний автомат|кінцеві автомати]] для передбачення обставин, та використовували різноманіття та відбір для оптимізації логіки передбачення. Генетичні алгоритми стали особливо відомі завдяки роботі [[Джон Генрі Голланд|Дж. Холанда]] на початку 70-х років та його книзі «Адаптація у природніх та штучних системах» (1975)<ref name="book">J. H. Holland. Adaptation in natural and artificial systems. University of Michigan Press, Ann Arbor, 1975.</ref>.Його дослідження були основані на експериментах з [[Клітинний автомат|клітинними автоматами]] та на його роботах, що були написані в [[Мічиганський університет|університеті Мічігану]]. Він ввів формалізований підхід для передбачення якості наступного покоління, відомий як [[Теорема схем]]. Дослідження в області генетичних алгоритмів залишалось більше теоретичним до середини 80-х років, коли була, нарешті, проведена Перша міжнародна конференція з генетичних алгоритмів [[Піттсбург|(Піттсбург, Пенсильванія (США))]].


З ростом дослідницького інтересу суттєво виросла обчислювальна потужність комп'ютерів, що дозволило використовувати нову обчислювальну техніку на практиці. Наприкінці 80-х років, компанія General Electric почала продаж першого в світі продукту, який працював з використанням генетичного алгоритму. Це був набір промислових обчислювальних засобів. В 1989 інша компанія Axcelis, Inc. випустила Evolver&nbsp;— перший у світі комерційний продукт на генетичному алгоритмі для персональних комп'ютерів. Журналіст The New York Times в технологічній сфері Джон Маркофф писав про Evolver у 1990 році.
З ростом дослідницького інтересу суттєво виросла обчислювальна потужність комп'ютерів, що дозволило використовувати нову обчислювальну техніку на практиці. Наприкінці 80-х років, компанія General Electric почала продаж першого в світі продукту, який працював з використанням генетичного алгоритму. Це був набір промислових обчислювальних засобів. В 1989 інша компанія Axcelis, Inc. випустила Evolver&nbsp;— перший у світі комерційний продукт на генетичному алгоритмі для персональних комп'ютерів. Журналіст [[The New York Times]] в технологічній сфері {{Нп|Джон Маркофф|Джон Маркофф||John Markoff}} писав<ref>{{cite news|last=Markoff|first=John|year=1989|title=What's the Best Answer? It's Survival of the Fittest|publisher=New York Times|url=http://www.nytimes.com/1990/08/29/business/business-technology-what-s-the-best-answer-it-s-survival-of-the-fittest.html|accessdate=2009-08-09 | date=1990-08-29}}</ref> про Evolver у 1990 році.


== Опис алгоритму ==
== Опис алгоритму ==

Версія за 07:45, 24 грудня 2015

Генети́чний алгори́тм (англ. genetic algorithm) — це еволюційний алгоритм пошуку, що використовується для вирішення задач оптимізації і моделювання шляхом послідовного підбору, комбінування і варіації шуканих параметрів з використанням механізмів, що нагадують біологічну еволюцію.

Особливістю генетичного алгоритму є акцент на використання оператора «схрещення», який виконує операцію рекомбінацію рішень-кандидатів, роль якої аналогічна ролі схрещення в живій природі. «Батьком-засновником» генетичних алгоритмів вважається Джон Голланд (англ. John Holland), книга якого «Адаптація в природних і штучних системах» (англ. Adaptation in Natural and Artificial Systems) є фундаментальною в цій сфері досліджень.

Історія

Перші спроби симуляції еволюції були проведені у 1954 році Нільсом Баричеллі[en] на комп'ютері, встановленому в Інституті перспективних досліджень Прінстонського університету.[1][2] Його робота, що була опублікована у тому ж році, привернула увагу громадськості. З 1957 року, [3] австралійський генетик Алекс Фразер[en] опублікував серію робіт з симуляції штучного відбору серед організмів з множинним контролем вимірюваних характеристик. Це дозволило комп'ютерній симуляції еволюційних процесів та методам, які були описані у книгах Фразера та Барнела(1970)[4] та Кросбі(1975)[5], з 1960-х років стати більш розповсюдженим видом діяльності серед біологів. Симуляції Фразера містили усі найважливіші елементи сучасних генетичних алгоритмів. До того ж, Ганс-Іоахім Бремерман[en] в 1960-х опублікував серію робіт, які також приймали підхід використання популяції рішень, що піддаються відбору, мутації та рекомбінації, в проблемах оптимізації. Дослідження Бремермана також містили елементи сучасних генетичних алгоритмів.[6] Також варто відмітити Річарда Фрідберга, Джоржа Фрідмана та Майкла Конрада[джерело?].

Хоча Баричеллі у своїй роботі 1963 р. займався симуляцією можливості машини грати у просту гру,[7] штучна еволюція стала загальновизнаним методом оптимізації після роботи Інго Рехенберга[en] та Ханса-Пауля Швереля[en] у 60-х та на початку 70-х років двадцятого століття — група Рехенсберга змогла вирішити складні інженерні проблеми згідно зі стратегіями еволюції.[8][9][10][11] Іншим підходом була техніка еволюційного програмування Лоренса Дж. Фогеля[en], яка була запропонована для створення штучного інтелекту. Еволюційне програмування, яке спочатку використовувало кінцеві автомати для передбачення обставин, та використовували різноманіття та відбір для оптимізації логіки передбачення. Генетичні алгоритми стали особливо відомі завдяки роботі Дж. Холанда на початку 70-х років та його книзі «Адаптація у природніх та штучних системах» (1975)[12].Його дослідження були основані на експериментах з клітинними автоматами та на його роботах, що були написані в університеті Мічігану. Він ввів формалізований підхід для передбачення якості наступного покоління, відомий як Теорема схем. Дослідження в області генетичних алгоритмів залишалось більше теоретичним до середини 80-х років, коли була, нарешті, проведена Перша міжнародна конференція з генетичних алгоритмів (Піттсбург, Пенсильванія (США)).

З ростом дослідницького інтересу суттєво виросла обчислювальна потужність комп'ютерів, що дозволило використовувати нову обчислювальну техніку на практиці. Наприкінці 80-х років, компанія General Electric почала продаж першого в світі продукту, який працював з використанням генетичного алгоритму. Це був набір промислових обчислювальних засобів. В 1989 інша компанія Axcelis, Inc. випустила Evolver — перший у світі комерційний продукт на генетичному алгоритмі для персональних комп'ютерів. Журналіст The New York Times в технологічній сфері Джон Маркофф[en] писав[13] про Evolver у 1990 році.

Опис алгоритму

Схема роботи генетичного алгоритму

Задача кодується таким чином, щоб її вирішення могло бути представлено в вигляді масиву подібного до інформації складу хромосоми. Цей масив часто називають саме так «хромосома». Випадковим чином в масиві створюється деяка кількість початкових елементів «осіб», або початкова популяція. Особи оцінюються з використанням функції пристосування, в результаті якої кожній особі присвоюється певне значення пристосованості, яке визначає можливість виживання особи. Після цього з використанням отриманих значень пристосованості вибираються особи допущені до схрещення (селекція). До осіб застосовується «генетичні оператори» (в більшості випадків це оператор схрещення (crossover) і оператор мутації (mutation)), створюючи таким чином наступне покоління осіб. Особи наступного покоління також оцінюються застосуванням генетичних операторів і виконується селекція і мутація. Так моделюється еволюційний процес, що продовжується декілька життєвих циклів (поколінь), поки не буде виконано критерій зупинки алгоритму. Таким критерієм може бути[джерело?]:

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

Генетичні алгоритми можуть використати для пошуку рішень в дуже великих і важких просторах пошуку.

Етапи генетичного алгоритму

Можна виділити такі етапи генетичного алгоритму:

  1. Створення початкової популяції:
  2. Обчислення функції пристосованості для осіб популяції (оцінювання)
  3. Повторювання до виконання критерію зупинки алгоритму:
  1. Вибір індивідів із поточної популяції (селекція)
  2. Схрещення або/та мутація
  3. Обчислення функції пристосовуваності для всіх осіб
  4. Формування нового покоління

Створення початкової популяції

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

Відбір

На етапі відбору необхідно із всієї популяції вибрати її певну долю, яка залишиться в «живих» на цьому етапі популяції. Є декілька способів провести відбір. Ймовірність виживання особи h повинна залежати від значення її пристосованості Fitness(h). Сама ж доля відібраних s зазвичай є параметром генетичного алгоритму, і її просто задають заздалегідь. Внаслідок відбору із N осіб популяції H повинні залишитись sN осіб, які ввійдуть в наступну популяцію H'. Решта осіб «загине».

Розмноження

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

Розмноження або оператор рекомбінації застосовують відразу ж після оператора відбору батьків для отримання нових особин-нащадків. Сенс рекомбінації полягає в тому, що створені нащадки повинні наслідувати генну інформацію від обох батьків. Розрізняють дискретну рекомбінацію і кросинговер.

Приклад операції розмноження: Вибрати (1-s)p/2 пар гіпотез із H і провести з ними розмноження, отримавши по два нащадка від кожної пари (якщо розмноження описано так, щоб давати одного нащадка, необхідно вибрати (1 — s)p пар), і добавити цих нащадків в H'. В результаті H' буде складатися з N осіб.

Особи для розмноження зазвичай вибираються із всієї популяції H, а не із тих, що вижили на першому кроці (хоча останній варіант теж має право на існування). Справа в тому, що головна проблема генетичних алгоритмів — недостача різноманітності (diversity) в особах. Достатньо швидко виділяється єдиний генотип, який являє собою локальний максимум і згодом всі елементи популяції програють йому в відборі, і вся популяція «забивається» копіями цієї особи. Існують різні способи боротьби із таким небажаним ефектом; один з них — вибір для розмноження не з самих «пристосованих», а взагалі зі всіх осіб.

Мутації

До мутацій відноситься все те ж, що і до розмноження: є деяка доля мутантів m, що є параметром генетичного алгоритму, і на кроці мутацій необхідно вибрати mN осіб, а згодом змінити їх згідно з заздалегідь заданими операціями мутації.

Застосування генетичних алгоритмів

Генетичні алгоритми застосовується для вирішення наступних задач:

  1. Оптимізація функцій
  2. Оптимізація запитів в базах даних
  3. Різноманітні задачі на графах (задача комівояжера, розфарбування)
  4. Налаштування і навчання штучної нейронної мережі
  5. Задачі компоновки
  6. Створення розкладів
  7. Ігрові стратегії
  8. Апроксимація функцій
  9. Штучне життя
  10. біоінформатика (згортання білків)

Приклад простої реалізації на C++

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

# include <iostream.h>
# include <algorithm.h>
# include <numeric.h>
using namespace std;
int main()
{
    //початковий масив (популяція) з 1000 елементів (осіб). 
    const int N = 1000;
    int a[N];
    //заповнимо елементи нулями
    fill(a, a+N, 0);
    for (;;)
    {
        //Мутація кожного елемента. 
        //Випадково збільшуємо або зменшуємо значення елементу на один;
        for (int i = 0; i < N; ++i)
            if (rand()%2 == 1)
                a[i] += 1;
            else
                a[i] -= 1;
        //відсортуванням по зростанню вибираємо більші за значенням... 
        sort(a, a+N);
        //... і тоді більші за значенням виявляться в другій частині масиву.
        //скопіюємо більші в першу половину, коли вони залишили нащадків, а перші померли:
        copy(a+N/2, a+N,    a /*куди*/);
        //тепер поглянемо на середнє значення елементу популяції. Як бачимо, середнє значення все більше і більше.
        cout << accumulate(a, a+N, 0) / N << endl;
    }
}

Примітки

  1. Barricelli, Nils Aall (1954). Esempi numerici di processi di evoluzione. Methodos: 45—68.
  2. Barricelli, Nils Aall (1957). Symbiogenetic evolution processes realized by artificial methods. Methodos: 143—182.
  3. Fraser, Alex (1957). Simulation of genetic systems by automatic digital computers. I. Introduction. Aust. J. Biol. Sci. 10: 484—491.
  4. Fraser, Alex; Donald Burnell (1970). Computer Models in Genetics. New York: McGraw-Hill. ISBN 0-07-021904-4.
  5. Crosby, Jack L. (1973). Computer Simulation in Genetics. London: John Wiley & Sons. 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
  7. Barricelli, Nils Aall (1963). Numerical testing of evolution theories. Part II. Preliminary tests of performance, symbiogenesis and terrestrial life. Acta Biotheoretica (16): 99—126.
  8. Rechenberg, Ingo (1973). Evolutionsstrategie. Stuttgart: Holzmann-Froboog. ISBN 3-7728-0373-3.
  9. Schwefel, Hans-Paul (1974). Numerische Optimierung von Computer-Modellen (PhD thesis).
  10. Schwefel, Hans-Paul (1977). Numerische Optimierung von Computor-Modellen mittels der Evolutionsstrategie : mit einer vergleichenden Einführung in die Hill-Climbing- und Zufallsstrategie. Basel; Stuttgart: Birkhäuser. ISBN 3-7643-0876-1.
  11. Schwefel, Hans-Paul (1981). Numerical optimization of computer models (Translation of 1977 Numerische Optimierung von Computor-Modellen mittels der Evolutionsstrategie. Chichester ; New York: Wiley. ISBN 0-471-09988-0.
  12. J. H. Holland. Adaptation in natural and artificial systems. University of Michigan Press, Ann Arbor, 1975.
  13. Markoff, John (29 серпня 1990). What's the Best Answer? It's Survival of the Fittest. New York Times. Процитовано 9 серпня 2009.

Література

  • Poli, R., Langdon, W. B., McPhee, N. F. (2008). A Field Guide to Genetic Programming. Lulu.com, freely available from the internet. ISBN 978-1-4092-0073-4.

Див. також

Посилання