Grundlagen und Basisalgorithmus Proseminar -Genetische Programmierung- Dezember 2001 David König Quelle: Kinnebrock W.: Optimierung mit genetischen und selektiven Algorithmen. München, Wien: Oldenbourg 1994. (Kapitel 5, Abschnitte 1-5)
Gliederung 1. Codierung der Chromosomen 2 1.1. Ausdrücke 2 1.2. Programme 2 2. Fitness 3 2.1. Rohfitness 3 2.2. Standard-Fitness 3 2.3. Normalisierte Fitness 3 3. Genetische Operatoren 4 3.1. Selektionsverfahren 4 3.2. Primäre genetische Operatoren 5 3.3. Sekundäre genetische Operatoren 5 4. Implementation und Durchführung 6 4.1. Anfangspopulation 6 4.2. Parameter und Abbruch 7 4.3. Programmstruktur 7 1
1. Codierung der Chromosomen 1.1. Ausdrücke Um den Zugriff auf Operanden und Unterausdrücke zu erleichtern, benutzt man die Präfixnotation. Dabei steht der Operator vor den Operanden (z.b. x+2 +(x,2) ). Konstanten und Variablen bleiben dabei unverändert, gemischte Ausdrücke werden geschachtelt dargestellt (z.b. 4(x-6) *(4,-(x,6)) ). Graphisch lassen sich diese Ausdrücke als Bäume darstellen: + * x 2 4 - x 6 x+2 4(x-6) Man bezeichnet Variablen und Konstanten als Terminalsymbole und Operatoren als Nichtterminalsymbole. Man kann beliebige Strings (Zeichenketten) als Chromosomen auffassen, außer arithmetische Ausdrücken sind auch Bool sche Ausdrücke (z.b. and (a,b) ) und mathematische Funktionen (z.b. sin (x) ) darstellbar. Es ist zu beachten, dass bei der genetischen Bearbeitung arithmetischer Ausdrücke nicht definierte Unterausdrücke, wie z.b. Division durch 0 oder Wurzeln bzw. Logarithmen aus negativen Zahlen, zu vermeiden sind. 1.2. Programme Auch Programme sind genetisch optimierbar, wenn die Programmelemente in Präfixnotation vorliegen. Dazu gehören im Allgemeinen Wertzuweisungen, Verzweigungen und Rekursionen. Wertzuweisung: x := a +b x := +(a,b) Verzweigung If x<5 then s := sin(x) else s := 0 s := if(x,5,sin(x),0) Allgemein: if(a1,a2,a3,a4) wenn a1 < a2 dann berechne a3 sonst berechne a4 Weitere programmierbare Ausdrücke sind: 2
2. Fitness Arithmetische Ausdrücke Bool sche Ausdrücke Mathematische Funktionen Elemente der Programmierung (z.b. if-else-anweisungen) Bit-Shift-Operatoren Graphische Operatoren Vektor- und Matrixoperatoren Komplexe Operationen Die Fitness ist ein reeller Wert für die Güte eines Chromosoms, sie entscheidet über das Überleben des Individuums. Die Güte eines Chromosoms wird davon bestimmt wie gut oder genau der Ausdruck die gestellten Bedingungen erfüllt. Die Fitnessberechnung basiert auf Fehlern die bei der Anwendung des Ausdruckes entstehen und/oder auf der Zeit die benötigt wird. Die genaue Definition der Fitness ist abhängig vom jeweiligen Problem. Es gibt 3 Typen der Fitness: Rohfitness Standard-Fitness Normalisierte Fitness 2.1. Rohfitness r(j) = E[i,j] f(i) E[i,j] F(i) - Wert den Chromosom j bei Eingabe i ergibt - Zielfunktion kleinere Werte bedeuten bessere Individuen 2.2. Standard-Fitness s(j) = r max r(j) r max - maximale Rohfitness größere Werte bedeuten bessere Individuen 2.3. Normalisierte Fitness Angepasste Fitness: a(j) = 1 1+r(j) Werte liegen zwischen 0 und 1 3
Normalisierte Fitness: n(j) = a(j)?a(k) Liegt zwischen 0 und 1 Größere Werte bedeuten bessere Individuen Summe aller Fitness-Werte, summiert über alle Chromosomen, ergibt 1 3. Genetische Operatoren Man unterscheidet zwischen primären und sekundären genetischen Operatoren. Zunächst muss man aber die Selektionsverfahren zur Auswahl der Individuen als Operanden für die genetischen Operatoren betrachten. 3.1 Selektionsverfahren Turnier Selektion Es werden 2 oder mehr Individuen zufällig ausgewählt, und die bestreiten einen Überlebenskampf wobei das bzw. die besseren Chromosomen Ausgewählt werden. Roulette-Selektion Ein Individuum wird anhand einer Wahrscheinlichkeits- Funktion ausgewählt, die ergibt sich aus: p(j) = Fitness des Individuums Gesamtfitness der Population 4
3.2. primäre genetische Operatoren 3.2.1. Rekombination Es werden 2 Individuen ausgewählt, aus jedem wird ein Unterausdruck ausgewählt und diese werden vertauscht. z.b. Eltern: (1) +(a,-(5,b)) (2) -(+(3,c),*(2,a)) Wir entnehmen: aus (1) a aus (2) +(2,a) + - a - + * 5 b 3 c 2 a Eltern + - * - + a 2 a 5 b 3 c Nachkommen 3.2.2. Reproduktion Ein Individuum wird ausgewählt und unverändert übernommen. Dies verhindert das gute Individuen zu schnell wieder verloren gehen. 3.3. sekundäre genetische Operatoren 3.3.1. Mutation In einem ausgewählten Chromosom wird per Zufall eine Stelle bestimmt. Der Unterausdruck an dieser Stelle wird durch einen neuen, zufällig generierten Ausdruck ersetzt. 5
3.3.2. Editieren Editieren ist das Vereinfachen von Ausdrücken ohne ihre Fitness zu beeinflussen. Dazu werden Unterausdrücke, wenn möglich, zu Terminalsymbolen zusammengefasst. Beispiele: *(1,b) b -(20,3) 17 3.3.3. Permutation Man vertauscht die Operanden eines Operators. Dieser Operator basiert auf dem Inversions-Operator bei allgemeinen genetischen Algorithmen. Da der Inversions-Operator die Reihenfolge beliebiger Gene eines Chromosoms vertauscht ist er für arithmetische Ausdrücke wenig sinnvoll, und wird deshalb nur auf die Operanden eines Operators angewandt. 3.3.4. Einkapseln Teilausdrücke werden durch Symbole ersetzt. Beispiel: +(*(2,s),d) *(2,s) wird ersetzt durch E, es ergibt sich: +(E,d) Auf diese Weise lassen sich Ausdrücke vereinfachen. Die weitere Verarbeitung erfolgen mit dem Symbol E, welches bei der Fitnessberechnung wieder durch *(2,s) ersetzt werden muss. 4. Implementation und Durchführung 4.1. Anfangspopulation Die Anfangspopulation wird zufällig generiert, dazu werden die Symbole aufgeteilt: O Operatoren T Terminalsymbole Als erstes wählt man zufällig einen Operator aus O und die Operanden wählt man aus T und den bereits entwickelten Ausdrücken. In der Anfangspopulation gibt es also keine Terminalsymbole, dadurch verhindert man eine spätere Vereinfachung durch Rekombination. Bei der zufälligen Generierung der Anfangspopulation sollte man eine maximale Komplexität festlegen um zu große Ausdrücke zu vermeiden. Außerdem ist es sinnvoll Duplikate zu eliminieren bzw. zu ersetzen um eine Population mit größerem Informationsgehalt zu generieren. Dieser Test kann auch vor dem Einfügen eines neu generierten Individuums in die Anfangspopulation erfolgen. Die Qualität der Anfangspopulation lässt sich weiter verbessern, indem man den Operator Dezimieren anwendet: 6
Dezimieren Es werden Individuen mit schlechter Fitness eliminiert, allerdings nur bis zu einer festgelegten Anzahl. Bei der Anwendung des Dezimieren-Operators muss darauf geachtet werden, dass die gewünschte Populationsstärke erhalten bleibt. Dies kann man durch Überpopulation oder durch Auffüllen erreichen. 4.2. Parameter und Abbruch N - Umfang der Anfangspopulation einige 100 bis maximal 1000 Individuen k - Rekombinationswahrscheinlichkeit weit größer als r r - Reproduktionswahrscheinlichkeit maximale Länge der Chromosomen der Anfangspopulation maximale Länge der Chromosomen insgesamt Abbruchbedingungen: o ein Chromosom entspricht exakt den Anforderungen o festgelegte Anzahl Generationen o keine Veränderung der Gesamtfitness in x Generationen Optional können noch weitere genetische Operatoren hinzugefügt werden, die Summe ihrer Ausführungswahrscheinlichkeiten muss dabei 1 ergeben. 4.3. Programmstruktur verschiedene Teile 1.) Bereitstellung der Anfangswerte Parameterfestlegung Generierung der Anfangspopulation 2.) Berechnung der Fitness Parser zum Auswerten der Ausdrücke Vergleich mit f(i) Berechnung der Fitness 3.) Rest Selektionsverfahren Genetische Operatoren 7