Programowanie Genetyczne - Marek Piasecki

Transkrypt

Programowanie Genetyczne - Marek Piasecki
Politechnika Wrocławska Wydział Elektroniki Kierunek Informatyka Damian Kowalczyk Programowanie Genetyczne Informatyka Systemów Autonomicznych Praca zaliczeniowa Wrocław 2007 Spis treści Wprowadzenie Konwencjonalne Programowanie Genetyczne Problemy z rekombinacją Perspektywy Literatura 1. Wprowadzenie Programowanie genetyczne (GP) to metoda automatycznego generowania rozwiązania
programistycznego, dla problemu zadanego definicją wysokiego poziomu.
Programowanie Genetyczne zaczyna od problemu zadanego w formie “co ma być
zrobione” i automatycznie tworzy program komputerowy, który rozwiązuje problem.
Istnieje już 36 instancji dla których dzięki programowaniu genetycznemu udało się
osiągnąć wynik konkurencyjny dla wydajności ludzkiej, włączając w to 15 instancji
gdzie programowanie genetyczne utworzyło rozwiązanie które poprawia lub powtarza
funkcjonalność opatentowanych rozwiązań XX wieku, 6 instancji gdzie
programowanie genetyczne osiągnęło podobny wynik do osiągnięcia 21 wieku i 2
instancje, które zostały uznane za innowację GP gotową do opatentowania.
Biorąc pod uwagę te wyniki mówimy, że “Genetic programming now routinely
delivers high-return human-competitive machine intelligence.” To twierdzenie jest
podstawowym wnioskiem książki z 2003 roku: Genetic Programming IV: Routine
Human-Competitive Machine Intelligence.
2. Konwencjonalne Programowanie Genetyczne Programowanie Genetyczne (GP) to uogólnione określenie znaczące zazwyczaj ewolucyjny system przetwarzający, służący rozwiązywaniu problemów. Wczesne formy GP można znaleźć już u Friedberg’a [1958] i Cramer ‘a [1985]. Pierwszy raz jednak nazwa Programowanie Genetyczne została użyta przez Koza [1992] i ze względu na pierwsze w historii udane i uznane w szerokim gronie, praktyczne zastosowanie GP, staje się podstawą konwencjonalnych systemów programowania genetycznego. Konwencjonalne Programowanie Genetyczne Koza’y zakłada reprezentację programów przez drzewa parsujące. Drzewo parsujące jest strukturą drzewiastą, która ujmuje kolejność wykonywania komponentów funkcjonalnych wewnątrz programu, w ten sposób, że wyjście program występuje w postaci korzenia; funkcje występują pod postacią węzłów a a argumenty funkcji dane są w węzłach potomnych; symbole terminalne natomiast możemy odnaleźć w liściach. Drzewo parsujące oryginalnie było wyborem naturalnej struktury dla reprezentacji programów w języku LISP, używanym przez Koza’e na początku programowania genetycznego. To tylko jeden z powodów wyboru tej reprezentacji. Problem w programowaniu genetycznym jest charakteryzowany przez funkcję dopasowania, zbiór komponentów funkcjonalnych i wyrażeń terminalnych. Zbiór funkcji i terminali determinuje z jakich komponentów program może się składać a funkcja dopasowania mierzy jak wyjście danego programu jest bliskie oczekiwanemu wyjściu (wynikowi). Inicjująca populacja składa się z osobników o losowej kombinacji komponentów funkcjonalnych I terminalnych w obrębie dopuszczalnych zbiorów, wspomnianych powyżej. Rys 2: Krzyżowanie poddrzew tworzy zupełnie nowe program. Poddrzewa są wybierane losowo z
dwóch istniejących drzew poddawanych krzyżowaniu i zamieniane by wyprodukować drzewopotomka.
Konwencjonalne programowanie genetyczne dziedziczy nowe programy z istniejących na trzy różne sposoby. Punktowa mutacja losowo zamienia funkcje albo znaki terminalne w wybranej części drzewa z innym w obrębie tego samego drzewa. Liczba węzłów poddawanych mutacji jest określana parametrem prawdopodobieństwa zwanym stopniem mutacji. Mutacja poddrzewa, dla porównania, losowo zmienia całe poddrzewa; budując nowe z nowych funkcji lub symboli terminalnych. Krzyżowanie poddrzew, które jest tradycyjnie uznanawane za najważniejszy operator wariacji Programowania Genetycznego, tworzy nowe drzewa przez zamianę losowo wybranych poddrzew pomiędzy istniejącymi drzewami – zilustrowano tą operację na rysunku powyżej. Programowanie genetyczne zostało zastosowane wśród ogromnej rzeczy różnorodnych problemów. Część z nich jest używana w celu porównania wydajności poszczególnych podejść genetycznego programowania: algebraiczna regresja dla przykładu. Inną grupą są użycia ukierunkowane na odkrycie na nowo rozwiązań zaproponowanych wcześniej przez człowieka, jak również odkrywanie zupełnie nowych rozwiązań po porównywalnej (konkurencyjnej – przyp. Damian Kowalczyk) wydajności (przykład [Miller et al., 2000]). Istnieją również domeny, w których PG wyewoluowało , rozwiązania do problemów, które nie zostały wcześniej rozwiązane przez człowieka. Do tej grupy zaliczają się poszczególne algorytmy komputerów kwantowych i problemy poznawcze w biologii. (e.g. [Koza, 2001]). 3. Problemy z rekombinacją Pomimo sukcesów, GP jest znany z problemów behawioralnych ograniczających jego zastosowanie i wydajność. Najważniejszym z nich jest sposób, w jaki krzyżowanie poddrzew wpływa na drzewa parsujące. Na początku kłócono się, czy krzyżowanie poddrzew ma jakiekolwiek znaczące znaczenie w rekombinacji I przez to wpływ na wydajność poszukiwania. Po drugie krzyżowanie poddrzew jest uważane za generujące sporą nadmiarowość kodu. Przyjrzymy się bliżej obu kwestiom w tym rozdziale. W [Koza, 1992] kwestią sporną jest czy krzyżowanie poddrzew jest operatorem dominującym w programowaniu genetycznym: odpowiedzialnym za eksploatowanie istniejącego materiału genetycznego w poszukiwaniu coraz to lepszych rozwiązań. Niemniej jednak eksperymentalne wyniki [Angeline, 1997,Luke and Spector, 1997,Luke and Spector, 1998] sugerują inaczej. W [Angeline, 1997], autor porównuje wydajność krzyżowania poddrzew z wydajnością krzyżowania bezgłowego kurczaka ☺ ‐ które przypomina krzyżowanie, ale które zachowaniem swym przystaje raczej do poddrzewnej mutacji. Działanie tego operatora polega na przeprowadzaniu zamiany poddrzew pomiędzy istniejącym drzewem parsującym I losowo generowanym drzewem podobnych rozmiarów. Wśród trzech domen, czy przestrzeni problemowych, różnica pomiędzy wydajnością samego krzyżowania poddrzew i samego krzyżowania ‘bezgłowej kury’ jest statystycznie nieznaczące: sugerując, że zachowanie krzyżowania poddrzewnego nie jest wcale lepsze niż makro – mutacji. Wciąż jednak (pomijając sugestie autora) zachowanie krzyżowania poddrzew nie jest ekwiwalentem krzyżowania ‘bezgłowej kury’; biorąc pod uwagę, że krzyżowanie poddrzew ma do dyspozycji wyłącznie materiał genetyczny istniejący w danej populacji. Można się również spierać, czy oryginalne krzyżowanie nie dawało złych wyników w tych eksperymentach ze względu na brak mutacji, dzięki której mogłoby pozostawać przy przedstawianiu wciąż nowego materiału genetycznego i dywersyfikacji wewnątrz populacji. Poza tym nowsze prace Luke and Spector [1997],Luke and Spector [1998] również sugerują, że krzyżowanie poddrzew sprawdza się trochę lepiej niż makro – mutacja. Luke i Spector porównują przebiegi z 90% krzyżowaniem poddrzew i 10% mutacją poddrzew z przebiegami 10% krzyżowania poddrzew i 90% mutacją poddrzew na różnych płaszczyznach problemowych i z różnymi wartościami parametrów. Ich wyniki wykazują, że podczas gdy krzyżowanie faktycznie sprawdza się lepiej niż mutacja poddrzew, korzyść jest wciąż delikatna i w większości przypadków różnica w wydajności jest statystycznie nieznaczna. Autorzy również zauważają, że dla niektórych problemów (włączając regresję symboliczną), krzyżowanie sprawdza się lepiej dla większych populacji I mniejszej liczby pokoleń, podczas gdy mutacja poddrzew sprawdza się lepiej dla małych populacji I dużej liczby pokoleń. Jednak nie dotyczy to wszystkich problemów.
Słaba wydajność ma całkiem możliwe mniej wspólnego z krzyżowaniem niż ma do wspólnego z reprezentacją drzewiastą. Zostało niemal bezsprzecznie przyjętym, że krzyżowanie poprawia wydajność dla domen problemów o rozsądnie niskiej epistazie i z rozsądną aranżacją genów w obrębie chromosomu. W końcu rekombinacja jest logicznie użyteczną operacją – umożliwia ewolucyjną współpracę przez umożliwienie wymiany informacji w obrębie populacji. Ponadto, wydaje się odgrywać pierwszą rolę w ewolucji eukariotycznej. Rys 3: Utrata kontekstu następująca po krzyżowaniu poddrzew.
Krzyżowanie poddrzew to naturalny operator rekombinacji dla drzew parsujących. Jednakże poprzez wymianę losowo wybranych poddrzew między programami, trudno jest zachować logiczną poprawność operacji. Zilustrowane jest to na rysunku powyżej. W tym przykładzie, losowe poddrzewo jest wybierane z istniejącego drzewa parsującego i zastępowane przez poddrzewo losowo wybierane z innego drzewa. Te drzewa parsujące mają ważne wspólne zachowanie: oba przyporządkowują funkcje AND do wyjść funkcji OR I XOR i oba mają lewostronną gałąź która oblicza funkcję OR dla liczby wejściowych terminali, więc w zasadzie wyglądałoby na to, że mają zgodną ze sobą informację do współdzielenia. Jednakże, ponieważ wymieniane podgałęzie są wybierane z różnych pozycji i mają różny rozmiar, kształt i funkcjonalność, zachowanie potomnego rozwiązania posiada mało wspólnego z którymkolwiek z rodziców! (porównanie z nogą, doktorze ☺ – przyp. DK) Zachowanie każdego z tych programów jest zdeterminowane przez wyjście funkcji AND u szczytu programu. Wyjście funkcji zależy zarówno od funkcji, której dotyczy, jak również od jej wejściowego: wejść, którym przydzielona jest ta funkcja. Tak więc, jeżeli jej kontekst wejściowy zmienia się znacząco, równie znacząco zmienia się jej wyjście. Biorąc pod uwagę, że większość programów będzie generowała bardzo słabe rozwiązanie problemu, I że rodzicielskie program są prawdopodobnie relatywnie dobre w rozwiązywaniu go, niemal oczywistym jest, że słaby potomek został mocno zmieniony. W ilustrowanym przykładzie, jedno z wejść funkcji AND zmienia się z funkcji OR trzech wejść na funkcję AND jednego wejścia – niej samej: prowadzi to do znaczących zmian w zachowaniu wyjściowym. Ponieważ jest niebywałym, żeby krzyżowanie poddrzew wymieniało poddrzewa z podobną pozycją, rozmiarem, kształtem I zachowaniem, większość krzyżowań poddrzew w Programowaniu genetycznym będzie prowadziło do potomnych programów mniej dopasowanych niż ich rodzice. Tak naprawdę to się dzieje, ponieważ kontekst komponentów jest zapisany w symbolach terminalnych ich pozycji wewnątrz drzewa parsującego i ponieważ krzyżowanie poddrzew nie zachowuje pozycji komponentów. Później w ramach tej tezy kwestią sporną będzie, iż jest to wina w takim samym stopniu reprezentacji program jak I operatora krzyżowania poddrzew. 4. Perspektywy Aplikacje Programowania Genetycznego Istnieją liczne aplikacje programowania genetycznego, włączając w nie:
•
•
•
Problemy “black art”, tak jak analogowa synteza obwodów elektrycznych, kontrolerów, anten, sieci i reakcji chemicznych, i innych obszarów projektowych “programowanie nieprogramowalnego” (PTU) włączając w to tworzenie programów komputerowych dla niekonwencjonalnych urządzeń obliczeniowych takich jak automaty komórkowe, systemy wieloagentowe, systemy równoległe, field‐programmable gate arrays (FPGA), field‐programmable analog arrays, kolonii mrówkowych, inteligencję mrowiskową, systemy rozproszone, i tym podobne “nowe wynalazki komercyjnie użyteczne” (CUNI) dotyczące użycia programowania genetycznego jako automatycznej „maszyny wynalazczej” dla tworzenia nowych, komercyjnie wykorzystywanych inwencji Poszukiwania nad coraz to nowymi obszarami i domenami w których podejście programowania genetycznego byłoby aplikowalne, w celu osiągnięcia inteligencji maszynowej, o konkurencyjnej wydajności dla człowieka – trwają nadal i trwają bez przerwy. 5. Literatura WWW.codeguru.com WWW.wikipedia.com WWW.google.com http://www.k0pper.republika.pl