Genetische Algorithmen von der Evolution lernen (c) Till Hänisch 2003, BA Heidenheim Literatur zusätzlich zum Lit. Verz. Nils J. Nilsson Artificial Intelligence Morgan Kaufmann, 1998
Ansatz Bisher: Problemlösung durch Anwendung von Regeln manuell definierte (Expertensysteme) gelernte (Neuronale Netze) Evolution: Eigenschaften einer Population passen sich an Umgebungsbedingungen an Übertragung: Menge von Lösungskandidaten passen sich an Problem an Wie? Kreuzung + Mutation (zufällig!) Anfang: evolutionäre Algorithmen evolutionäre Algorithmen komplexe Optimierungsprobleme viele Parameter analytisch nicht möglich Wegminimierung Bohren von Leiterplatten physikalische Probleme Minimierung komplizierter Funktionen häufig Maximierung, Rückführung auf Minimierung Handlungsreisender (Labyrinth) --> Logistik Energieminimierung (Molecular modelling) Strömungswiderstand
Vorgehen bei evolutionärer Optimierung Ziel: Minimierung einer Funktion f(x1,x2,...,xn) Eine Population von Startwerten (z.b. 100) wird zufällig gewählt. Diese werden zufällig geändert (Mutation). Wird das Ergebnis besser, wird dieser Kandidat behalten, ansonsten ein neuer gesucht. Funktioniert gut bei klassicher Optimierung. Problem: lokale Minima Lösung: Größe der Änderungen wird zufällig in einem zunächst großen, später immer kleineren Bereich durchgeführt, verschiedene Verfahren, etwa Simulated Annealing aus [Negnevitsky], S. 242 genetische Algorithmen: Darstellung des Problems als Chromosomen (Bitstring) fester Länge Auswahl einer fitness function f Ausgangspopulation erzeugen Neue Population durch Kreuzung und Mutation erzeugen (Auswahl durch fitness function) aus [Negnevitsky], S. 221
Beispiel gesucht wird das Maximum der Funktion (15x-x*x), 0<x<15 Darstellung als Chromosomen aus [Negnevitsky], S. 222/223 Ausgangspopulation, N=6, fitness = Wert der Fkt. Fitness Ratio ist das Verhältnis der Fitness des Kandidaten zur Summe der Fitness aller Auswahl der Chromosomen nach Fitness Ratio nach der Roulette Methode (Goldberg, 1989) aus [Negnevitsky], S. 222/223
Realisierung von Kreuzung und Mutation aus [Negnevitsky], S. 225 komplexere Funktionen a) Ausgangspopulation b) erste Generation c) Ergebnis d) richtiges Ergebnis aus [Negnevitsky], S. 227 Optimierungsalgorithmen (nicht nur genetische) bleiben leicht in lokalen Minima hängen, da der Weg zum globalen Minimum zunächst eine Verschlechterung darstellt. Abhilfe: Größere Sprünge (mehr Mutationen)
Bei niedriger Mutationsrate (obere Abbildung) wird lokales Maximum gefunden, höhere Mutationsrate liefert das globale Maximum Problem: Woher weiss man, dass man das echte Optimum gefunden hat? Gar nicht! Abhilfe: Test mit verschiedenen Mutationsraten. Wenn jeweils das gleiche Ergebnis erzielt wird, vermutet man, dass die Lösung optimal ist. aus [Negnevitsky], S. 228 Beispiel Planung von Wartungsarbeiten an Kraftwerken Warum? Planung ist komplex (NP-vollständig), Optimierung mit Nebenbedingungen (Resourcen, hier etwa Minimalleistung) Szenario: 7 Kraftwerke unterschiedlicher Leistung, die ein- oder zweimal pro Jahr gewartet werden müssen. 4 Perioden, Mindestleistung jeweils unterschiedlich. Zunächst: N=20, p(mutation) = 0.001
links N=20: a) 50 Generationen b) 100 Generationen rechts: N=100 Ergebnis nach 100 Generationen bei unterschiedlicher Mutationsrate Ergebnis ist gleich (gut), also Vermutung dass optimale Lösung aus [Negnevitsky], S. 238 Genetic programming Bisher: Modifikation von Daten Gewichte im NN Algorithmen Warum nicht Programmcode? Parameter, Koordinaten usw. bei genetischen zufällig erzeugte Programme als Population, Auswahl durch Fitness-Funktion, Modifikation durch Kreuzung und Mutation Anwendung z.b. Entwicklung elektronischer Filter, Verstärker usw. (Koza, 1994) einfache (spezielle) Sprachen Baumstruktur (Kreuzung/Mutation einfacher) Angelehnt an LISP schwierig (jedoch prinzipiell möglich) bei komplexen Programmiersprachen (komplexe Syntax,...), deshalb
Darstellung Programm zur Berechnung von 3+(5*4)/7 Notation entweder als Baum oder Transformation in Liste PLUS(3,DURCH(MAL(5,4),7)) Die Syntax dieser Sprache enthält die Funktionen PLUS(a,b), DURCH(a,b), MAL(a,b) aus [Nilsson], S. 61 Beispiel Ein Roboter soll den Wänden eines Raumes folgen. Sensoren liefern Informationen, ob die benachbarten Felder begehbar sind (keine Wand). Funktionen n, ne, e usw. Roboter kann sich bewegen, Funktionen north, east usw. Logische Funktionen AND(a,b), OR(a,b) usw. und IF(a,b,c): Wenn Ausdruck a wahr ist, wird b ausgeführt, ansonsten c Wenn die Wand berührt wird, ist das Spiel aus.
(Eine) manuell erstellte Lösung aus [Nilsson], S. 63 Beispiel aus [Nilsson] Evolution Ausgangspopulation: 5000 zufällig erzeugte Programme Fitness Funktion: Jedes Programm wird max. 60 Schritte lang ausgeführt, besuchte Zellen an der Wand werden gezählt (max. 32). 10 mal nacheinander mit zufälligen Startpunkten --> max. Fitness 320 Nächste Generation: 10% werden direkt übernommen (jeweils 7 zufällig ausgewählt, das mit der höchsten Fitness wird verwendet). 90% werden durch Crossover aus zwei zufällig gewählten (wie oben) erzeugt. Mutation wird nicht verwendet, könnte aber implementiert werden: Ein Teilbaum wird durch einen (zufälligen) neuen ersetzt
crossover bei Programmen aus [Nilsson], S. 64 Das fitteste Programm der Ausgangspopulation Auffällig: Viele redundante Operationen aus [Nillson], S. 66
aus [Nillson], S. 67 Das fitteste Programm in Generation 2 Das fitteste Programm in Generation 6 aus [Nillson], S. 67
Das fitteste Programm in Generation 10 Hier wird erstmals das Problem vollständig gelöst aus [Nillson], S. 68 Fitness der Generationen aus [Nilsson], S. 68
Particle swarms Kennedy, Eberhard, Shi, Swarm Intelligence, Morgan Kaufmann, 2001 Ursprung: boids Simulation eines Vogelschwarms durch einfache Annahmen: Vogel interagiert nur mit seinen Nachbarn
Beispiel http://www.red3d.com/cwr/boids/ PSO Particle Swarm Optimization simuliert einen Volgelschwarm (Ähnliche Technik: Ant Colony Optimization) Idee: Vogelschwarm, nur eine Futterstelle. Optimale Strategie? Alle Vögel folgen demjenigen, der am nächsten am Futter ist. Umsetzung: Einzelne Partikel, haben Koordinaten und Geschwindigkeit (Vektoren), kennen jeweils ihren bisher besten Wert (pbest) und den besten des Schwarms (gbest). Ausgangsbasis: Zufällige Startwerte. In jeder Iteration: v[] = v[] + c1 * rand() * (pbest[] - present[]) + c2 * rand() * (gbest[] - present[]) present[] = present[] + v[] (übl. v limitiert auf vmax)
PSO contd. Unterschiede zu genetischen Algorithmen keine Mutation, Crossover (zufällige Änderungen) dafür Orientierung hin zum besten Individuum Gedächtnis Evolution bevorzugt den besten, verdrängt die anderen Hier: Alle suchen gemeinsam teilw. bessere Performance Anwendungen: Bestimmung der Gewichte in neuronalen Netzen klass. Optimierungsprobleme Beispiel: http://www.projectcomputing.com/resources/psovis/index.html