Programowanie genetyczne (Genetic Programming) Prof. Dr hab. Marek Rudnicki
Podłoże powstania GP Trend w informatyce dążący do tego, aby określać komputerowi CO ma być zrobione, zamiast JAK to ma być zrobione. Pisanie bardzo złożonych programów komputerowych jest zadaniem trudnym, żmudnym i obfitującym w pomyłki programisty. Próbą rozwiązania problemu jest programowanie genetyczne (GP).
Czym jest programowanie genetyczne? Programowanie genetyczne to: metoda automatycznego generowania rozwiązania problemu (programu komputerowego) na podstawie jego wysokopoziomowego opisu. rozszerzenie, uogólnienie algorytmów genetycznych (GA) oparte na pomyśle zastosowania struktur drzewiastych do kodowania informacji genetycznej dla poszczególnych osobników.
Pomysł GP W 1989 roku John R. Koza wygłosił pierwszy referat na temat GP. W roku 1992 opublikował książkę uważaną do dziś za „biblię” programowania genetycznego: Genetic Programming: On the Programming of Computers by Means of Natural Selection. Pomysł programowania genetycznego jest chroniony patentem.
Charakterystyka GP Algorytm ewolucyjny bardzo podobny do GA. Osobnikami są programy komputerowe zapisane w postaci drzewa. Poszczególne osobniki (programy) wybierane są do reprodukcji w oparciu o funkcję przystosowania. Operatory genetyczne obejmują: mutację, rekombinację, reprodukcję i inne specyficzne dla rozwiązywanego problemu operacje.
Przykładowy prosty program * 2 + 14 x Powyższy program reprezentuje wyrażenie: (14+x)*2
Przykładowy program
Krzyżowanie w GP
Przykład nieco bardziej złożony IF < + y = x 2 x y Powyższy program można zinterpretować jako odpowiednik następującego kodu w C++: if (x+2<y) x=y;
Elementy struktury drzewiastej terminale elementy stanowiące liście drzewa reprezentują stałe lub zmienne programu przykłady: „2”, „3.14159”, „x”, „y” funkcje oznaczają funkcje programu argumenty funkcji znajdują się w poddrzewach przykłady: operacje arytmetyczne, funkcje trygonometryczne, instrukcje warunkowe
Algorytm GP Losowo wygeneruj początkową populację programów. Dopóki nie jest spełniony warunek zakończenia programu generuj kolejne generacje (pokolenia): wylicz dla każdego osobnika odpowiadającą mu wartość funkcji przystosowania. wybierz losowo operację genetyczną (reprodukcja, mutacja, rekombinacja). wykonaj operację genetyczną na wybranych osobnikach z aktualnego pokolenia. Przy wyborze osobników stosuj funkcję przystosowania. przenieś potomstwo do nowego pokolenia.
Mutacja punktowa + + * + * * - - - - * - * - x 1 x 1 x 1 x 1 - - x 1 x
Permutacja + + * + * * - - - - * - * - x 1 x 1 x 1 x 1 - - x 1 x 1 - -
Hoist + * * * - - - - * - x 1 x 1 x 1 x 1 x 1 - - x 1 x 1
Mutacja ekspansywna + + * * * * - - - - * - * - x x 1 x * x 1 - - x 1
Mutacja niszcząca poddrzewo + + * * * * - - - - x - * - x 1 x 1 x 1 x 1 x 1 x 1 - - x 1 x 1
Mutacja poddrzewa + + - * * * x 1 - - * - * - x 1 x 1 - - x 1 x 1 - -
Krzyżowanie wymianą poddrzew
Algorytm GP na diagramie źródło: www.geneticprogramming.com
Losowe generowanie drzew Losowe generowanie drzewa polega na losowym wytworzeniu struktury reprezentującej poprawny program. Losujemy spośród wszystkich dopuszczalnych funkcji i wszystkich dopuszczalnych terminali. Aby nie generować nieskończenie dużych drzew z góry określamy maksymalny ich rozmiar lub głębokość.
Funkcja przystosowania Określa jak dobrze dany program rozwiązuje postawiony przed GP problem. W oparciu o wartość tej funkcji następuje wybór osobników do operacji genetycznych. Prawdopodobieństwo wyboru i-tego osobnika wyraża się wzorem:
Inne metody wyboru osobników metoda turniejowa losowy wybór kilku (co najmniej dwóch) osobników i wybór tego spośród nich, który jest najlepiej przystosowany metoda rankingowa wyboru dokonujemy nie w oparciu o wartość funkcji przystosowania, ale w oparciu o miejsce w rankingu ułożonego według wartości tej funkcji nie liczy się wartość, liczy się miejsce w rankingu
Mutacja Operację mutacji wykonujemy w następujący sposób: Wybieramy losowo wierzchołek drzewa. Odcinamy z drzewa wybrany wierzchołek wraz z jego potomkami. W miejscu usuniętego wierzchołka generujemy losowo nowe poddrzewo. Możemy też mutować tylko pojedyncze terminale i pojedyncze funkcje.
Mutacja źródło: www.genetic-programming.com
Rekombinacja Rekombinacja w GP odbywa się następująco: Wybieramy losowo wierzchołki w obu drzewach. Odcinamy od drzew macierzystych poddrzewa rozpoczynające się wybranymi wierzchołkami. Do pierwszego drzewa w miejsce usuniętego wierzchołka wstawiamy poddrzewo wycięte z drugiego drzewa i odwrotnie. Czasem stosuje się wersję uproszczoną, kiedy to zmienia się poddrzewo u tylko jednego z biorących udział w rozmnażaniu osobników.
Rekombinacja wersja uproszczona źródło: www.genetic-programming.com
Rekombinacja rodzice potomstwo źródło: www.geneticprogramming.com
Jeszcze o rekombinacji Rekombinacja w GP ma następującą ciekawą własność: Rekombinacja dwóch identycznych osobników rodzicielskich z reguły daje parę potomków różniących się od rodziców. Wystarczy, aby wylosowano dwa różne wierzchołki jako punkty krzyżowania.
Reprodukcja Reprodukcją nazywamy zwykłe skopiowanie osobnika tak, że bez zmian przechodzi on do nowego pokolenia. Tak, jak rekombinację można uznać za odpowiednik płciowego rozmnażania się organizmów żywych, tak reprodukcję można przyrównać do procesu rozmnażania bezpłciowego.
Prawdopodobieństwo operacji genetycznych Główną i dominującą operacją genetyczną jest rekombinacja. Powinna ona zachodzić z prawdopodobieństwem 85-90%. Mutacja powinna być operacją zachodzącą stosunkowo rzadko. Jej prawdopodobieństwo powinno wynosić około 1%. W pozostałych przypadkach stosujemy reprodukcję.
Architektura programu W strukturze drzewiastej można zapamiętywać struktury typowe dla programów takie jak: instrukcje warunkowe pętle funkcje zdefiniowane w samym programie (podprocedury) Można specjalnie z myślą o tych strukturach zdefiniować i stosować dodatkowe operacje genetyczne.
Podprocedury źródło: www.genetic-programming.com
Duplikacja podprocedury Polega na rozdzieleniu wywoływanej więcej niż raz w programie podprocedury na dwie osobne. Utworzone w ten sposób dwie kopie będą mogły się różnicować (specjalizować) w kolejnych operacjach genetycznych. Każda kopia podprocedury otrzymuje osobną nazwę.
Duplikacja podprocedury źródło: www.genetic-programming.com
Duplikacja argumentów podprocedury Polega na zwiększeniu liczby argumentów przyjmowanych przez podprocedurę poprzez zduplikowanie jednego z nich. W definicji funkcji losowo rozdziela się wystąpienia zmiennej między starą i nową kopię argumentu. W wywołaniach procedury również duplikujemy argumenty.
Duplikacja argumentów podprocedury źródło: www.genetic-programming.com
Utworzenie podprocedury Tworzymy podprocedurę poprzez wyodrębnienie sekwencji operacji z wybranej części drzewa. Podprocedurze nadajemy unikalną nazwę. Drzewo modyfikujemy tak, aby wynik wykonania programu przed dokonaniem zmiany zgadzał się z wynikiem po jej dokonaniu.
Utworzenie podprocedury źródło: www.genetic-programming.com
Usuwanie podprocedur i usuwanie ich argumentów Operacje odwrotne do duplikacji podprocedur i duplikacji argumentów podprocedur. Prowadzą do zmniejszenia złożoności struktury programu.
Usuwanie podprocedury źródło: www.genetic-programming.com
Usuwanie argumentów podprocedury źródło: www.genetic-programming.com
Przykład: GP w języku C Regresja symboliczna
Przykładowe wyniki Przeprowadzono 50 generacji, populacja liczyła 500 osobników. Przykładowy genotyp 1100 0010 1000 0111 1001 0010 1101 1001 0111 1100 0000 1011 1001 1110 1001 1010 1101 0011 1100 1111 0101 1010 0110 1110 0001 Ciąg symboli uproszczonych T*(a)*R)aE+C)E)SRDT)vSqE* Ciąg ten jest błędny składniowo i należy go poprawić {T((a)*R(a+m)+(S(D((v+q+D} Ostatecznie mamy {T((a)*R(a+m))+(S(D((v+q+D(m)))))}
Przykład Edycja prowadzi do wyrażenia double ind(double m, double v, double a) {return T((a)*R(a+m))+(S(D((v+q+D(m))))); } Kompilator C generuje kod wynikowy Kod wynikowy zawiera końcowy fenotyp rozkodowany z genotypu
Regresja symboliczna
GP a twierdzenie o schematach Podobieństwo GP do GA sugeruje możliwość dowodu poprawności funkcjonowania algorytmu GP w oparciu o zmodyfikowane twierdzenie o schematach. Mimo wielu ciekawych opracowań (O’Reilly & Oppacher – 1995, Rosca & Ballard – 1997) próby zdefiniowania schematu dla GP analogicznie jak dla GA natrafiają na duże trudności związane z dynamiką struktury programu zapamiętanej w drzewie.
GP gra w kółko i krzyżyk Peter J. Angeline i Jordan B. Pollack wykonali eksperyment ucząc komputer gry w kółko i krzyżyk opierając się na algorytmie programowania genetycznego. Eksperyment miał sprawdzić możliwości GP, w którym Angeline i Pollack zastosowali własne usprawnienia. Skorzystali z systemu obsługi podprocedur, dzięki czemu w istotny sposób ograniczyli rozmiary generowanych drzew.
GP gra w kółko i krzyżyk Wygenerowano 200 pokoleń po 1000 osobników w każdym pokoleniu. Funkcję dopasowania określono w ten sposób, że wygenerowane programy rozgrywały ze sobą partie i w zależności od wyniku otrzymywały odpowiednią liczbę punktów. Znaleziony w wyniku eksperymentu program nie przegrywał nawet z zewnętrznym ekspertem.
GP gra w kółko i krzyżyk Rozmiar drzewa 60 wierzchołków 13 poziomów głębokości 15 podprocedur w osobnych drzewach Rozmiar drzewa po rozwinięciu podprocedur 477 wierzchołków 39 poziomów głębokości dwie podprocedury były wywoływane aż dziewięciokrotnie!
Do czego można stosować GP? Przykładowe możliwe zastosowania GP: klasyfikacja sterowanie aproksymacja funkcji optymalizacja całkowanie i różniczkowanie symboliczne wiele innych...
Drogi rozwoju GP Prace nad lepszą obsługą w GP mechanizmu tworzenia i wywoływania podprocedur (Koza, Angeline, Pollack, Rosca, Ballard). Różnicowanie typów danych używanych w generowanych programach (Hicklin, Montana, Haynes, Gruau). Implementacja w programie zmiennych tymczasowych przechowujących informacje o stanie programu (Koza, Teller, Angeline). Alternatywy wobec reprezentacji w postaci drzewa (Nordin – struktury liniowe zawierające kod maszynowy, Teller & Veloso – graf, Ashlock – zastosowanie teorii automatów skończonych, osobne drzewo dla każdego stanu).
Historia języka Lisp •Lisp--opracowany (ok. 1958) przez logika Johna McCarthy •Stosowany w AI od 30 lat •Zastosowania praktyczne » Systemy ekspertowe & oraz aplikacje AI » Rapid Application Development (RAD)
Historia języka Lisp •Lisp stosowany jest jako język wbudowany •Zastosowania: edytor tekstowy EMACS (MLisp) oraz AutoCAD (AutoLisp). •Język Prolog jest wbudowany w MS Office! •Działa na głównych platformach sprzętowych •Liczne wersje free- oraz shareware. • Standard: Common Lisp
Prolog •Prolog opracowany został w 1972 przez specjalistę AI Alana Colmeraurer Rozwinięty na University of Montreal oraz University of Marseilles •Stosowany w systemach kspertowych & i aplikacjach AI w tym przetwarzanie języków •Dostępny na głównych platformach sprzętowych •Wersje free- oraz shareware •Standard: ‘Edinburgh-style’
LISP Dane i programy są listami Programowanie modularne za pomocą licznych funkcji Duża liczba nawiasów z których nie wszystkie są znaczące Listy są drzewami binarnymi! Definicja rekursywna
Co to jest ten LISP? Większość bibliotek i projektów związanych z GP pisana jest w języku LISP ze względu na to, iż dostarcza on wygodnych mechanizmów do interpretacji struktur zapisanych w postaci drzew. Nic nie stoi na przeszkodzie, aby stosować inne języki programowania, takie jak np. C++ , Object Pascal, Java lub Matlab.
LISP & GP Przykład: Funkcja 5+3*4: Wyrażenie LISP Drzewo parsera
LISP & GP
Aproksymacja funkcji
Aproksymacja funkcji • Losowo wygenerować populację wyrażeń, y(x), stosując +, –, *, /, sin, cos, exp , log, oraz terminale 1 and x • Dostosowanie: 0 jeżeli wyrażenie jest niepoprawne , w przeciwnym przypadku 1/(d+1), gdzie d = |f(x) – y(x)| • Dostosowanie należy do przedziału [0,1])
John Koza David Andre Forrest H Bennett III
Kinnear, K. E. Jr. (ed. ) (1994). Advances in Generic Programming Kinnear, K.E. Jr. (ed.) (1994). Advances in Generic Programming. MIT Press, Cambridge, MA. Angeline, P.J. and Kinnear, K.E. Jr. (eds.) (1996), Advances in Generic Programming 2. MIT Press, Cambridge, MA. Koza, J.R. and Goldberg, D. E. and Fogel, D. B. and Riolo, R. L. (eds.) (1996). Genetic Programming 1996: Proceedings of the First Annual Conference. Stanford University, Stanford, CA. MIT Press, Cambridge, MA. Koza, J.R. and Deb, K. and Dorigo, M. and Fogel, D. B. and Garzon, M. and Iba, H. and Riolo, R. L. (eds.) (1996). Genetic Programming 1996: Proceedings of the Second Annual Conference. Stanford University, Stanford, CA. Morgan Kaufmann San Francisco, CA.
David E. Goldberg Melanie Mitchell
GP taśmy video Koza, J. R. and Rice, J. P. (1992). Genetic Programming: the Movie. MIT Press. Cambridge, MA. Koza, J. R. (1994). Genetic ProgrammingII: Videotape. The Next Generation. MIT Press. Cambridge, MA. (1996). Genetic Programming 1996: Video Proceedings of the First Annual Conference Sound Photo Synthesis, CA.
Literatura: algorytmy ewolucyjne Holland, J.H. (1975 and 1995). Adaptation in Natural and Artificial Systems. University of Michigan Press, Ann Arbor, MI. Davis, L. (ed.) (1987). Genetic Algorithms and Simulated Annealing. Pitman, London. Goldberg, D. E. (1989). Genetic Algorithm in Search, Optimization, and Machine Learning. Addison-Wesley, Reading, MA. Michalewicz, Z. (1992). Genetic Algorithm + Data Structures = Evolution Programs. Springer-Verlag, Berlin,. 1996: 3rd edition. (tłumaczenie polskie, PWN, 1996) Michell, M. (1996). An Introduction to Genetic Algorithms . MIT Press, Cambridge, MA.
Center for Applied Systems Analysis (CASA) Informatik Centrum Dortmund (ICD) Schwelfel, H.-P. (1981 i 1995). Evolution and Optimum Seeking. John Wiley & Sons, New York. http://ls11-www.informatik.uni-dortmund.de/people/people-e.html Thomas Back Schwelfel, H.-P.
Fogel, D.B. (1995). Evolutionary Computation. IEEE Press, New York. Dr. Fogel (redaktor naczelny) IEEE Transactions on Evolutionary Computation. http://www.natural-selection.com/people/dbf.html
Evolutionary Computation Czasopisma Adaptive Behavior Artificial Life Evolutionary Computation
Artificial Intelligence Machine Learning
IEEE Transaction on Evolutionary Computation, IEEE IEEE Transaction on Systems, Man, and Cybernetics, IEEE Biological Cybernetics, Springer-Verlag BioSystems, Elsevier Science Complexity, Academic Press Complex Systems, Complex Systems Publications
Materiały Internetowe GP tutorials http://metricanet.com/people/jjf/ http://www.geneticprogramming.com/ http://alphard.ethz.ch/gerber/ http://www.byte.com/art/9402/sec10/art1.htm Genetic Programming with C++
GP Częste pytania (FAQ) http://www-dept.cs.ucl.ac.uk/research/genprog/gp2faq/gp2faq.html http://www-dept.cs.ucl.ac.uk/research/genprog/gpfaq/gpfaq.html
Computer Science Bibliographies B.3 GP Bibliografie http://liinwww.ira.uka.de/bibliography/Ai/genetic.programming.html http://skippy-bb.cs.bham.ac.uk/~wbl/biblio/gp-bibliography.html The Collection of Computer Science Bibliographies Up: Bibliographies on Artificial Intelligence Collection Home Search Search
B.4 GP Badacze http://metricanet.com/people/jjf/ http://www.cs.ucl.ac.uk/research/genprog/ The Genetic Programming researchers notebook
http://www.cs.ucl.ac.uk/research/genprog/ Genetic Programming FAQs People who do GP Software Available Where to publish work on Genetic Programming and Conferences Interactive Genetic Art & Music
Obliczenia ewolucyjne GGAA http://www.aic.nrl.navy.mil/galist ENCORE http://research.germany.eu.net:8080/encore/www/top.htm Evolutionary Computation Page http://rodin.cs.uh.edu/~twryu/genetic.html
Listy subskrypcyjne subscribe genetic-programming to genetic programming-REQUEST@cs.standford.edu unsubscribe genetic-programming subscribe ba-gp ba-gp-REQUEST@cs.standford.edu
Listy wysyłkowe i grupy zainteresowań GA mailing list ga-list-request@ga-list-request@aic.nrl.navy.mil GA and NN mailing list gann-request@cs.iastate.edu GA news group comp.ai.genetic AL news group USENET news group alife.bbs.ga
Indeks Public Domain GP Systems Related Software Drawing Package C++ Implementation issues GP conference Related Conference and Workshops
Public Domain GP GP in C++ GP-quick ftp://ftp.salford.ac.uk/pub/gp/ GP-quick ftp://ftp.io.com/pub/genetic-programming/Gpdata-20-aug-95.tar.Z Genetic Programming kernel. C++ library http://aif.wu-wien.ac.at/~geyers/archive/gpk/Dok/kurz/kurz.html List Implementation of GP ftp://ftp.io.com/pub/genetic-programming/code/koza-book-go-implementation.lisp framework for GP of neural network ftp://ftp.io.com/pub/genetic-programming/code/cerebrum.tar.Z
Cd. Related Software Package C++ implementation Issues http://www.informatik.uni-bremen.de/~inform/forschung/daVinci/daVinci.html C++ implementation Issues http://www.frc.ri.cmu.edu/~mcm/chapt.html
GP Konferencje Annual. Started 1996. GP 1997 conference http://www.cs.brandeis.edu/~zippy/gp-96.html GP 1997 conference http://www-cs-faculty.stanford.edut/~koza/gp97.html GP 1998 conference http://www.genetic-programming.org/
Konferencje (cd) GP-99 Conference (part of GECCO Conference) in Orlando, Florida Euro-GP-99 Workshop in Goteborg, Sweden in May 26 - 27 1999. GP-2000 Conference GP-98 Conference at University of Wisconsin SGA-98 (Symposium on Genetic Algorithms) at University of Wisconsin Euro-GP-98 Workshop in Paris
Konferencje o zbliżonej tematyce ICGA conference series international conference on genetic algorithm PPSN conference series parallel problem solving from nature EP conference series evolutionary programming
Literatura Trylogia Johna R. Kozy: Genetic Programming: On the Programming of Computers by Means of Natural Selection, MIT Press, 1992. Genetic Programming II: Automatic Discovery of Reusable Programs, MIT Press, 1994. Genetic Programming III: Darwinian Invention and Problem Solving, Morgan Kaufmann, 1999. (autorzy: John R. Koza, Forrest H Bennett III, David Andre, and Martin A. Keane)
Ciekawe miejsca w sieci www.genetic-programing.org Ogólne informacje o programowaniu genetycznym www.genetic-programming.com Strona internetowa firmy Genetic Programming Inc. założonej przez J. R. Kozę. www.cs.ucl.ac.uk/research/genprog/gp2faq/gp2faq.html Najczęściej zadawane pytania dotyczące programowania genetycznego.