Programowanie genetyczne (Genetic Programming)

Download Report

Transcript Programowanie genetyczne (Genetic Programming)

Programowanie genetyczne
(Genetic Programming)
Prof. Dr hab. Marek Rudnicki
1
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).
2
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.
3
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.
4
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.
5
Przykładowy prosty program
*
2
+
14
x
Powyższy program reprezentuje wyrażenie:
(14+x)*2
6
Przykładowy program
7
Krzyżowanie w GP
8
Przykład nieco bardziej złożony
IF <
+
x
y
2
=
x
y
Powyższy program można zinterpretować jako
odpowiednik następującego kodu w C++:
if (x+2<y) x=y;
9
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
10
Algorytm GP
1.
2.
Losowo wygeneruj początkową populację programów.
Dopóki nie jest spełniony warunek zakończenia
programu generuj kolejne generacje (pokolenia):
1)
2)
3)
4)
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.
11
Mutacja punktowa
+
+
*
-
x
-
1
x
*
*
*
1
-
x
x
-
1
-
-
x
1
1
x
+
-
1
x
*
1
-
-
x
x
-
1
x
1
1
12
Permutacja
+
+
*
-
x
-
1
x
*
*
*
1
-
x
x
-
1
-
-
x
1
1
x
+
-
1
x
*
1
-
-
x
x
-
1
1
1
x
13
Hoist
+
*
*
-
*
-
-
*
x
x
1
x
1
-
x
x
-
1
-
x
1
x
1
1
1
14
Mutacja ekspansywna
+
+
*
-
x
-
1
x
*
*
*
1
x
x
-
1
-
-
-
x
*
1
x
1
-
*
x
-
x
*
1
1
x
-
x
-
-
x
-
1
x
1
1
1
15
Mutacja niszcząca poddrzewo
+
+
*
-
x
-
1
x
*
*
*
1
-
x
x
-
1
-
-
x
1
x
*
-
1
x
x
1
-
x
1
1
16
Mutacja poddrzewa
+
+
*
-
x
-
1
x
-
*
*
1
-
x
x
-
1
x
-
x
1
*
1
*
1
-
-
x
x
-
1
x
1
1
17
Krzyżowanie wymianą poddrzew
18
Algorytm GP na diagramie
źródło:
www.geneticprogramming.com
19
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ść.
20
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:
f ( si )
P( si ) 
M
 f (s )
k 1
k
21
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
22
Mutacja
Operację mutacji wykonujemy w następujący
sposób:
1. Wybieramy losowo wierzchołek drzewa.
2. Odcinamy z drzewa wybrany wierzchołek wraz z
jego potomkami.
3. W miejscu usuniętego wierzchołka generujemy
losowo nowe poddrzewo.
Możemy też mutować tylko pojedyncze
terminale i pojedyncze funkcje.
23
Mutacja
źródło:
www.genetic-programming.com
24
Rekombinacja
Rekombinacja w GP odbywa się następująco:
1. Wybieramy losowo wierzchołki w obu drzewach.
2. Odcinamy od drzew macierzystych poddrzewa
rozpoczynające się wybranymi wierzchołkami.
3. 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.
25
Rekombinacja
wersja uproszczona
źródło:
www.genetic-programming.com
26
Rekombinacja
rodzice
potomstwo
źródło:
www.geneticprogramming.com
27
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.
28
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.
29
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ę.
30
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.
31
Podprocedury
źródło:
www.genetic-programming.com
32
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ę.
33
Duplikacja podprocedury
źródło:
www.genetic-programming.com
34
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.
35
Duplikacja
argumentów podprocedury
źródło:
www.genetic-programming.com
36
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.
37
Utworzenie podprocedury
źródło:
www.genetic-programming.com
38
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.
39
Usuwanie podprocedury
źródło:
www.genetic-programming.com
40
Usuwanie
argumentów podprocedury
źródło:
www.genetic-programming.com
41
Przykład: GP w języku C
Regresja symboliczna
f  sin e(m)  cos(v) 
1
e
q
 tan( a)
42
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)))))}
43
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




1

f  tan a  a  m  sin 
vq 1 


m



44
Regresja symboliczna
45
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.
46
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.
47
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.
48
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!
49
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...
50
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).
51
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)
52
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
53
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’
54
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
55
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.
56
LISP & GP
Przykład: Funkcja 5+3*4:
Wyrażenie LISP
Drzewo parsera
57
LISP & GP
58
Aproksymacja funkcji
59
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])
60
61
62
John Koza
Forrest H Bennett III
David Andre
63
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.
64
David E. Goldberg
Melanie Mitchell
65
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.
66
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.
67
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
Schwelfel, H.-P.
Thomas Back
68
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
69
Czasopisma
Adaptive Behavior
Artificial Life
Evolutionary Computation
70
Artificial Intelligence
Machine Learning
71
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
72
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++
73
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
74
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
Search
Collection Home
Search
75
B.4 GP Badacze
http://metricanet.com/people/jjf/
http://www.cs.ucl.ac.uk/research/genprog/
The Genetic Programming researchers notebook
76
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
77
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
78
Listy subskrypcyjne
subscribe genetic-programming
to
genetic [email protected]
unsubscribe genetic-programming
to
genetic [email protected]
subscribe ba-gp
to
[email protected]
79
Listy wysyłkowe i grupy zainteresowań
GA mailing list
ga-list-request@[email protected]
GA and NN mailing list
[email protected]
GA news group
comp.ai.genetic
AL news group
USENET news group
alife.bbs.ga
80
Indeks
Public Domain GP Systems
Related Software Drawing Package
C++ Implementation issues
GP conference
Related Conference and Workshops
81
Public Domain GP
GP in C++
– 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-goimplementation.lisp
framework for GP of neural network
– ftp://ftp.io.com/pub/genetic-programming/code/cerebrum.tar.Z
82
Cd.
Related Software Package
http://www.informatik.uni-bremen.de/~inform/forschung/daVinci/daVinci.html
C++ implementation Issues
– http://www.frc.ri.cmu.edu/~mcm/chapt.html
83
GP Konferencje
Annual. Started 1996.
– 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/
84
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
85
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
86
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)
87
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.
88