Генети́чне програмува́ння (ГП) — підхід у штучному інтелекті до створення алгоритмів, натхнених еволюцією біологічних видів, щоб знайти програму, яка якнайкраще буде виконувати поставленні завдання. ГП являє собою набір інструкцій програми з функціями допасованості (англ. fitness function), які характеризують, наскільки добре дана програма справилась із завданням. ГП є одним з випадків генетичних алгоритмів, де "індивідом" є комп'ютерна програма, яка буде піддаватись мутаціям. У машинному навчанні цю техніку використовують, щоб оптимізувати покоління комп'ютерних програм відповідно до адаптивного ландшафту визначеного з даних того, як добре програми виконують обчислювальне завдання.
Історія
У 1964 році ГП почалось з генетичних алгоритмів, вперше використаних для симуляції еволюції Нілсьом Аль Баріселлі. У 60-x і на початку 70-x, генетичні алгоритми вже добре зарекомендували себе, як методи оптимізації. Інго Реченберг і його група вирішувала складні інженерні завдання за допомогою еволюційних стратегій, як було задокументовано в його дисертації у 1971 році і книзі у 1973 році. Також дуже важливу роль відіграв (en: John Henry Holland), який вважається одним із основоположників генетичних алгоритмів. Його книга «Адаптація в природних і штучних системах» (1975) є базовою працею в цій галузі досліджень.
У 1964 році Лавренс Джером Фоджел застосував генетичні алгоритми для вивчення скінченного автомату. Пізніше роботи пов'язані з ГП пішли з групи людей, що займалась [en], котрі розробили систему складних правил, що описують оптимальну стратегію для марківських процесів вирішування. Перше визначення сучасного (базованого на теорії дерев) ГП дав Нічел Л.Грамер (Nichael L. Cramer). Пізніше цю тему значно розширив Джон Коза, головний прихильник ГП, хто один з перших застосував ГП в сферах оптимізації і пошуку. Пізніше Гіана Гіавеллі (Gianna Giavelli), студент Джона Кози, один з перших почав застосовувати ГП для моделювання ДНК послідовностей.
У 90-х, ГП в основному використовувалось для відносно простих завдань, бо воно було ресурсоємне для тодішніх комп'ютерів. Останнім часом, у зв'язку з вдосконаленням ГП і експоненціальним ростом потужностей центрального процесора (закон Мура), ГП почало застосовуватись і дало гарні результати у сферах квантових обчислень, проектуванні електросхем, комп'ютерних іграх, сортуванні і пошуку. ГП також застосовується у сфері еволюціонуючого успадкування так як і у сфері програмного забезпечення.
У 85-х років з'явилися перші теоретичні обґрунтування цього підходу, зараз ГП розглядають, як один з пошукових методів. На сьогоднішній день генетичні алгоритми довели свою конкурентноздатність при вирішенні багатьох NP-повних задач і особливо в практичних додатках, де математичні моделі мають складну структуру і застосування стандартних методів, таких як метод гілок і меж, динамічного або лінійного програмування вкрай ускладнено.
Програмна реалізація
ГП традиційно зберігаються у пам'яті комп'ютера у деревоподібних структурах. Дерева можна легко обійти за допомогою рекурсивних алгоритмів. Кожне дерево має внутрішні вершини дерева, котрі представляють собою функцію оператор і кожен листок має операнд — це робить обчислення легкі у вдосконаленні і в оцінюванні. Таким чином ГП найкраще реалізовувати на мовах програмування у яких є природним використання деревоподібних структур (для прикладу LISP, чи інша функціональна мова програмування).
Не деревоподібні представлення програмам також були успішно запропоновані і реалізовані, наприклад лінійне генетичне програмування, яке підходить для традиційних імперативних мов програмування. Комерційне програмне забезпечення Discipulus використовує автоматичну змінну бінарного коду, щоб досягнути кращої швидкодії. µGP використовує напрямлений мультиграф для генерування програм, що повністю використовує синтаксис даної мови програмування есемблі.
Генетичні оператори
Основні оператори, які використовуються в ГП — це оператор схрещування і оператор мутації.
Оператор схрещування
У деревоподібному представленні оператор схрещування реалізовується обміном між двома деревами будь-якими вузлами разом з їхніми синами (піддеревами). Дерево отримане після цієї операції може суттєво відрізнятись від батьківських дерев.
Приклад:
individual.Children[randomChildIndex] = otherIndividual.Children[randomChildIndex];
Оператор мутації
Оператор мутації на відміну від оператора схрещування змінює тільки одну хромосому. В деревоподібному представленні він може бути реалізований зміною інформації у вузлі, також алгоритм може додати або видалити вузол чи ціле піддерево. Причому, звісно, потрібно стежити за коректністю результату оператора.
Приклад:
individual.Information = randomInformation();
або
individual = generateNewIndividual();
Кодування алгоритму
Вибір способу кодування програми в генетичному алгоритмі — це одне з основних питань генетичного програмування. Програма повинна бути написана так, щоб було легко автоматично вносити випадкові зміни (оператор мутації) і об'єднати два алгоритми в один (оператор схрещування).
Всі способи написання генетичного алгоритму можна поділити на дві групи:
- Пряме кодування — генетичний алгоритм працює з програмою в наявному вигляді.
- Опосередковане кодування — генетичний алгоритм працює не з самим кодом програми, а з правилами його побудови. Тобто, генетичний алгоритм працює з програмою, яка генерує потрібну нам підпрограму.
Інші підходи
Базові ідеї генетичного програмування, змінені і доповнені, були використанні у багатьох підходах:
- Розширене компактне генетичне програмування(ECGP)
- Вбудоване декартове генетичне програмування(ECGP)
- Імовірнісно зростаюче генетичне програмування
Мета-генетичне програмування
Мета-генетичне програмування пропонує використовувати алгоритми генетичного програмування на сам генетичний алгоритм, котрий шукає розв'язок певної задачі.
Пропонується застосовувати еволюційні алгоритми на хромосоми, алгоритми схрещування і мутації. Їм, як відповідним живим прототипам, має бути дозволено змінювати самих себе, а не бути наперед визначеними програмістом. Мета-ГП було формально запропоноване Юргеном Шмідхубером у 1987 році. Дуглас Ленат з допомогою програми [en] також робив раніше дослідження в цій темі. Це рекурсивний, але кінчений алгоритм, який не зациклюється.
Критики цього підходу кажуть, що він є занадто масштабний. Тим не менше, може бути можливим: обмежити критерій функції допасованості на загальну множину результатів і таким чином отримувати еволюціонуючий алгоритм ГП, що буде більш ефективно продукувати результати для підмножин. Алгоритм для генерування людської ходьби, стрибків може бути створений за допомогою мета-генетичного програмування. Мета-генетичне програмування — один з найкращих підходів для вирішення цієї проблеми.
Для загального класу проблем немає способу показати, що мета-ГП дасть кращі результати, ніж уже створені жадібні алгоритми. Це саме стосується стандартних алгоритмів ГП і інших пошукових алгоритмів.
Приклад тривіальної реалізації на C++
#include <iostream> #include <algorithm> #include <numeric> int main() { using namespace std; srand((unsigned)time(NULL)); 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]++; else a[i]--; } // Тепер вибираємо кращих, відсортувавши за зростанням ... sort(a, a + N); //... і тоді кращі виявляться в другій половині масиву. // Скопіюємо кращих у першу половину, куди вони залишили потомство, а перші померли: copy(a + N / 2, a + N, a / * куди * /); // Тепер подивимося на середній стан популяції. Як бачимо, він все кращий і кращий. cout << Accumulate (a, a + N, 0) / N << endl; } }
Див. також
Посилання
- geneticprogramming.us [ 4 квітня 2010 у Wayback Machine.]
- Огляд методів еволюції нейронних мереж [ 25 грудня 2011 у Wayback Machine.]
- Генерування автоматів [ 19 червня 2014 у Wayback Machine.]
- www.genetic-programming.org [ 20 березня 2022 у Wayback Machine.]
Література
- Banzhaf, W., Nordin, P., Keller, R.E., Francone, F.D. (1997), Genetic Programming: An Introduction: On the Automatic Evolution of Computer Programs and Its Applications, Morgan Kaufmann
- Cramer, Nichael Lynn (1985), „“ in Proceedings of an International Conference on Genetic Algorithms and the Applications, Grefenstette, John J. (ed.), CMU
- Koza, J.R. (1990), Genetic Programming: A Paradigm for Genetically Breeding Populations of Computer Programs to Solve Problems, Stanford University Computer Science Department technical report STAN-CS-90-1314 [ 6 листопада 2020 у Wayback Machine.]. A thorough report, possibly used as a draft to his 1992 book.
- Koza, J.R. (1992), Genetic Programming: On the Programming of Computers by Means of Natural Selection, MIT Press
- Koza, J.R. (1994), Genetic Programming II: Automatic Discovery of Reusable Programs, MIT Press
- Koza, J.R., Bennett, F.H., Andre, D., and Keane, M.A. (1999), Genetic Programming III: Darwinian Invention and Problem Solving, Morgan Kaufmann
- Koza, J.R., Keane, M.A., Streeter, M.J., Mydlowec, W., Yu, J., Lanza, G. (2003), Genetic Programming IV: Routine Human-Competitive Machine Intelligence, Kluwer Academic Publishers
- Langdon, W. B., Poli, R. (2002), Foundations of Genetic Programming, Springer-Verlag
- Poli, R., Langdon, W. B., McPhee, N. F. (2008), A Field Guide to Genetic Programming, Lulu.com, freely available from the internet
- Smith, S.F. (1980), A Learning System Based on Genetic Adaptive Algorithms, PhD dissertation ().
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Geneti chne programuva nnya GP pidhid u shtuchnomu intelekti do stvorennya algoritmiv nathnenih evolyuciyeyu biologichnih vidiv shob znajti programu yaka yaknajkrashe bude vikonuvati postavlenni zavdannya GP yavlyaye soboyu nabir instrukcij programi z funkciyami dopasovanosti angl fitness function yaki harakterizuyut naskilki dobre dana programa spravilas iz zavdannyam GP ye odnim z vipadkiv genetichnih algoritmiv de individom ye komp yuterna programa yaka bude piddavatis mutaciyam U mashinnomu navchanni cyu tehniku vikoristovuyut shob optimizuvati pokolinnya komp yuternih program vidpovidno do adaptivnogo landshaftu viznachenogo z danih togo yak dobre programi vikonuyut obchislyuvalne zavdannya IstoriyaU 1964 roci GP pochalos z genetichnih algoritmiv vpershe vikoristanih dlya simulyaciyi evolyuciyi Nilsom Al Bariselli U 60 x i na pochatku 70 x genetichni algoritmi vzhe dobre zarekomenduvali sebe yak metodi optimizaciyi Ingo Rechenberg i jogo grupa virishuvala skladni inzhenerni zavdannya za dopomogoyu evolyucijnih strategij yak bulo zadokumentovano v jogo disertaciyi u 1971 roci i knizi u 1973 roci Takozh duzhe vazhlivu rol vidigrav en John Henry Holland yakij vvazhayetsya odnim iz osnovopolozhnikiv genetichnih algoritmiv Jogo kniga Adaptaciya v prirodnih i shtuchnih sistemah 1975 ye bazovoyu praceyu v cij galuzi doslidzhen U 1964 roci Lavrens Dzherom Fodzhel zastosuvav genetichni algoritmi dlya vivchennya skinchennogo avtomatu Piznishe roboti pov yazani z GP pishli z grupi lyudej sho zajmalas en kotri rozrobili sistemu skladnih pravil sho opisuyut optimalnu strategiyu dlya markivskih procesiv virishuvannya Pershe viznachennya suchasnogo bazovanogo na teoriyi derev GP dav Nichel L Gramer Nichael L Cramer Piznishe cyu temu znachno rozshiriv Dzhon Koza golovnij prihilnik GP hto odin z pershih zastosuvav GP v sferah optimizaciyi i poshuku Piznishe Giana Giavelli Gianna Giavelli student Dzhona Kozi odin z pershih pochav zastosovuvati GP dlya modelyuvannya DNK poslidovnostej U 90 h GP v osnovnomu vikoristovuvalos dlya vidnosno prostih zavdan bo vono bulo resursoyemne dlya todishnih komp yuteriv Ostannim chasom u zv yazku z vdoskonalennyam GP i eksponencialnim rostom potuzhnostej centralnogo procesora zakon Mura GP pochalo zastosovuvatis i dalo garni rezultati u sferah kvantovih obchislen proektuvanni elektroshem komp yuternih igrah sortuvanni i poshuku GP takozh zastosovuyetsya u sferi evolyucionuyuchogo uspadkuvannya tak yak i u sferi programnogo zabezpechennya U 85 h rokiv z yavilisya pershi teoretichni obgruntuvannya cogo pidhodu zaraz GP rozglyadayut yak odin z poshukovih metodiv Na sogodnishnij den genetichni algoritmi doveli svoyu konkurentnozdatnist pri virishenni bagatoh NP povnih zadach i osoblivo v praktichnih dodatkah de matematichni modeli mayut skladnu strukturu i zastosuvannya standartnih metodiv takih yak metod gilok i mezh dinamichnogo abo linijnogo programuvannya vkraj uskladneno Programna realizaciyaGP tradicijno zberigayutsya u pam yati komp yutera u derevopodibnih strukturah Dereva mozhna legko obijti za dopomogoyu rekursivnih algoritmiv Kozhne derevo maye vnutrishni vershini dereva kotri predstavlyayut soboyu funkciyu operator i kozhen listok maye operand ce robit obchislennya legki u vdoskonalenni i v ocinyuvanni Takim chinom GP najkrashe realizovuvati na movah programuvannya u yakih ye prirodnim vikoristannya derevopodibnih struktur dlya prikladu LISP chi insha funkcionalna mova programuvannya Ne derevopodibni predstavlennya programam takozh buli uspishno zaproponovani i realizovani napriklad linijne genetichne programuvannya yake pidhodit dlya tradicijnih imperativnih mov programuvannya Komercijne programne zabezpechennya Discipulus vikoristovuye avtomatichnu zminnu binarnogo kodu shob dosyagnuti krashoyi shvidkodiyi µGP vikoristovuye napryamlenij multigraf dlya generuvannya program sho povnistyu vikoristovuye sintaksis danoyi movi programuvannya esembli Genetichni operatoriOsnovni operatori yaki vikoristovuyutsya v GP ce operator shreshuvannya i operator mutaciyi Funkciya predstavlena v derevopodibnij formi Operator shreshuvannya Operator shreshuvannya U derevopodibnomu predstavlenni operator shreshuvannya realizovuyetsya obminom mizh dvoma derevami bud yakimi vuzlami razom z yihnimi sinami pidderevami Derevo otrimane pislya ciyeyi operaciyi mozhe suttyevo vidriznyatis vid batkivskih derev Priklad individual Children randomChildIndex otherIndividual Children randomChildIndex Operator mutaciyi Operator mutaciyi na vidminu vid operatora shreshuvannya zminyuye tilki odnu hromosomu V derevopodibnomu predstavlenni vin mozhe buti realizovanij zminoyu informaciyi u vuzli takozh algoritm mozhe dodati abo vidaliti vuzol chi cile pidderevo Prichomu zvisno potribno stezhiti za korektnistyu rezultatu operatora Priklad individual Information randomInformation abo individual generateNewIndividual Koduvannya algoritmuVibir sposobu koduvannya programi v genetichnomu algoritmi ce odne z osnovnih pitan genetichnogo programuvannya Programa povinna buti napisana tak shob bulo legko avtomatichno vnositi vipadkovi zmini operator mutaciyi i ob yednati dva algoritmi v odin operator shreshuvannya Vsi sposobi napisannya genetichnogo algoritmu mozhna podiliti na dvi grupi Pryame koduvannya genetichnij algoritm pracyuye z programoyu v nayavnomu viglyadi Oposeredkovane koduvannya genetichnij algoritm pracyuye ne z samim kodom programi a z pravilami jogo pobudovi Tobto genetichnij algoritm pracyuye z programoyu yaka generuye potribnu nam pidprogramu Inshi pidhodiBazovi ideyi genetichnogo programuvannya zmineni i dopovneni buli vikoristanni u bagatoh pidhodah Rozshirene kompaktne genetichne programuvannya ECGP Vbudovane dekartove genetichne programuvannya ECGP Imovirnisno zrostayuche genetichne programuvannya Meta genetichne programuvannya Meta genetichne programuvannya proponuye vikoristovuvati algoritmi genetichnogo programuvannya na sam genetichnij algoritm kotrij shukaye rozv yazok pevnoyi zadachi Proponuyetsya zastosovuvati evolyucijni algoritmi na hromosomi algoritmi shreshuvannya i mutaciyi Yim yak vidpovidnim zhivim prototipam maye buti dozvoleno zminyuvati samih sebe a ne buti napered viznachenimi programistom Meta GP bulo formalno zaproponovane Yurgenom Shmidhuberom u 1987 roci Duglas Lenat z dopomogoyu programi en takozh robiv ranishe doslidzhennya v cij temi Ce rekursivnij ale kinchenij algoritm yakij ne zaciklyuyetsya Kritiki cogo pidhodu kazhut sho vin ye zanadto masshtabnij Tim ne menshe mozhe buti mozhlivim obmezhiti kriterij funkciyi dopasovanosti na zagalnu mnozhinu rezultativ i takim chinom otrimuvati evolyucionuyuchij algoritm GP sho bude bilsh efektivno produkuvati rezultati dlya pidmnozhin Algoritm dlya generuvannya lyudskoyi hodbi stribkiv mozhe buti stvorenij za dopomogoyu meta genetichnogo programuvannya Meta genetichne programuvannya odin z najkrashih pidhodiv dlya virishennya ciyeyi problemi Dlya zagalnogo klasu problem nemaye sposobu pokazati sho meta GP dast krashi rezultati nizh uzhe stvoreni zhadibni algoritmi Ce same stosuyetsya standartnih algoritmiv GP i inshih poshukovih algoritmiv Priklad trivialnoyi realizaciyi na C include lt iostream gt include lt algorithm gt include lt numeric gt int main using namespace std srand unsigned time NULL const int N 1000 int a N Zapovnyuyemo nulyami fill a a N 0 for Mutaciya v vipadkovu storonu kozhnogo elementa for int i 0 i lt N i if rand 2 1 a i else a i Teper vibirayemo krashih vidsortuvavshi za zrostannyam sort a a N i todi krashi viyavlyatsya v drugij polovini masivu Skopiyuyemo krashih u pershu polovinu kudi voni zalishili potomstvo a pershi pomerli copy a N 2 a N a kudi Teper podivimosya na serednij stan populyaciyi Yak bachimo vin vse krashij i krashij cout lt lt Accumulate a a N 0 N lt lt endl Div takozhMutacijne testuvannyaPosilannyageneticprogramming us 4 kvitnya 2010 u Wayback Machine Oglyad metodiv evolyuciyi nejronnih merezh 25 grudnya 2011 u Wayback Machine Generuvannya avtomativ 19 chervnya 2014 u Wayback Machine www genetic programming org 20 bereznya 2022 u Wayback Machine LiteraturaBanzhaf W Nordin P Keller R E Francone F D 1997 Genetic Programming An Introduction On the Automatic Evolution of Computer Programs and Its Applications Morgan Kaufmann Cramer Nichael Lynn 1985 in Proceedings of an International Conference on Genetic Algorithms and the Applications Grefenstette John J ed CMU Koza J R 1990 Genetic Programming A Paradigm for Genetically Breeding Populations of Computer Programs to Solve Problems Stanford University Computer Science Department technical report STAN CS 90 1314 6 listopada 2020 u Wayback Machine A thorough report possibly used as a draft to his 1992 book Koza J R 1992 Genetic Programming On the Programming of Computers by Means of Natural Selection MIT Press Koza J R 1994 Genetic Programming II Automatic Discovery of Reusable Programs MIT Press Koza J R Bennett F H Andre D and Keane M A 1999 Genetic Programming III Darwinian Invention and Problem Solving Morgan Kaufmann Koza J R Keane M A Streeter M J Mydlowec W Yu J Lanza G 2003 Genetic Programming IV Routine Human Competitive Machine Intelligence Kluwer Academic Publishers Langdon W B Poli R 2002 Foundations of Genetic Programming Springer Verlag 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 Smith S F 1980 A Learning System Based on Genetic Adaptive Algorithms PhD dissertation