Evolutionäre Algorithmen

Werbung
Evolutionäre Algorithmen
Lukas Sikorski
[email protected]
Dieses Dokument ist eine Ausarbeitung zum Thema Evolutionäre
Algorithmen (EA). Kernpunkt sind die vier Standardformen der
Evolutionären Algorithmen: Genetische Algorithmen, Genetische
Programmierung, Evolutionsstrategien und Evolutionäre Programmierung.
Dazu wird für jeden dieser Standardalgorithmen das Grundkonzept
erläutert. Anschließend werden die Standardalgorithmen
gegenübergestellt und miteinander verglichen. Weiterhin wird ein
Allgemeines Ablaufschema eines Evolutionären Algorithmus vorgestellt
sowie die einzelnen Verfahren und Operatoren Evolutionärer Algorithmen
beschrieben.
1 Einleitung
Systeme bzw. Anwendungsprobleme hängen meistens von einer Anzahl von
Entscheidungen und Variablen ab. Diese Entscheidungen oder Variablen können
unterschiedliche Zustände annehmen. Je nach Wahl und Einstellung der Variablen
zeigt das System unterschiedliches Verhalten. Auf der anderen Seite möchte der
Nutzer des Systems, dass dieses eben ein bestimmtes Verhalten aufweist. Das
System soll besonders gut an eine bestimmte Aufgabenstellung angepasst sein. Um
dieses Ziel zu erreichen, sucht der Nutzer nach den Einstellungen der Variablen, die
dieses bestimmte Verhalten hervorrufen. Dieser Prozess der Suche nach der
gewünschten Einstellung der Variablen bezeichnet man als Optimierung. Betrachtet
man ein Optimierungsverfahren rein technisch, so wird das Systemverhalten durch
eine Zielfunktion beschrieben. Für jede Einstellung der Variablen lässt sich durch die
Zielfunktion ein Zielfunktionswert bestimmen. Von den Variablen wird dabei ein
Suchraum aufgespannt.
Bei einem Blick in unsere Umgebung stellt man fest, dass wir von einer Vielzahl
lebender Systeme umgeben sind. Bei näherer Betrachtung zeigt sich, wie gut die
vielen Lebewesen an ihren jeweiligen Lebensraum angepasst sind. Ein Individuum
stellt dabei eine Einstellung von Variablen dar. Der Lebensraum eines Individuums
bildet die Zielfunktion. Der Zielfunktionswert ist die Überlebenschance eines
Individuums und je besser ein Individuum an seinen Lebensraum angepasst ist,
desto bessere Überlebens- und Fortpflanzungschancen hat es. Diese Anpassung ist
ein Optimierungsprozess und man spricht von der Evolution.
Das Gebiet der Evolutionären Algorithmen versucht die in der Natur vorhandenen
Prinzipien und Mechanismen auf technische Systeme zu übertragen um damit
komplexe Optimierungsprobleme zu bewältigen. In Kapitel 2 werden grundlegende
Aspekte Evolutionärer Algorithmen vorgestellt. Zunächst werden Zusammenhänge
zwischen natürlicher Evolution und den Evolutionären Algorithmen erläutert. Danach
1
wird das Allgemeine Ablaufschema eines evolutionären Algorithmus dargelegt. In
Kapitel 3 werden die grundlegenden Verfahren und Operatoren evolutionärer
Algorithmen vorgestellt. Aufbauend auf dem allgemeinem Ablaufschema eines
evolutionären Algorithmus und den Verfahren und Operatoren wird in Kapitel 4 für
jeden der vier Standardalgorithmen: „Genetische Algorithmen“, „Genetische
Programmierung“, „Evolutionsstrategien“ und „Evolutionäre Programmierung“ ein
Basisablauf vorgestellt. Danach werden die Standardalgorithmen gegenübergestellt
und verglichen. Abschließend wird in Kapitel 5 ein Fazit gegeben.
2 Grundlegende Aspekte evolutionärer Algorithmen
Der erste Abschnitt soll dazu dienen, einige grundlegende Zusammenhänge
zwischen evolutionärer Algorithmen und der natürlichen Evolution zu erläutern.
Danach wird ein allgemeines Ablaufschema eines evolutionären Algorithmus
vorgestellt.
2.1 Evolutionäre Algorithmen und die natürliche Evolution
Evolutionäre Algorithmen orientieren sich an unterschiedlichen Vorbildern der
natürlichen Evolution. Begriffe und Vorgänge aus der Biologie werden übernommen
um Methoden zur Lösung von Optimierungsproblemen zu beschreiben. Bei der
natürlichen Evolution stehen Begriffe wie Selektion und Variation im Vordergrund.
Prozesse der Selektion entscheiden unter anderem, welche Individuen überleben
oder welche Individuen Nachkommen zeugen. Die Variation bestimmt wie aus den
Eltern Nachkommen produziert werden. Individuen einer Population sind wegen
ihrem begrenzten Lebensraum Wettkämpfen ausgesetzt. Dabei haben die
Individuen, die besser an ihren Lebensraum angepasst sind, größere Überlebensund Fortpflanzungschancen.
Evolutionäre Algorithmen sind stochastische Such- und Optimierungsverfahren, die
an Prinzipien der natürlichen Evolution angelehnt sind. Sie arbeiten gleichzeitig auf
einer Anzahl von potenziellen Lösungen (Individuen), die verschiedene
Entscheidungsalternativen bzw. Lösungen des jeweiligen Optimierungsproblems
darstellen. Auf diesen Individuen (Lösungen) wird das Prinzip „Der stärkere überlebt!“
angewendet. Dabei durchlaufen die Individuen einen iterativen Zyklus von Variation
und Selektion. Die Variation setzt sich in der Regel zusammen aus Rekombination, in
der Informationen zwischen Individuen ausgetauscht werden, und Mutation, in der
die Individuen zufällig geringfügig verändert werden. Die Selektion entscheidet
welche Individuen für die Fortpflanzung ausgewählt werden. Ziel ist es anhand einer
Zielfunktion immer bessere Individuen zu erzeugen, die am Ende der Suche zu einer
guten Lösung führen. Im Folgenden wird ein Allgemeines Ablaufschema eines
evolutionären Algorithmus vorgestellt.
2.2 Allgemeines Ablaufschema eines Evolutionären Algorithmus
Abbildung 1 zeigt das allgemeine Ablaufschema eines Evolutionären Algorithmus grafisch.
2
Initialisierung
Ergebnis
Zielfunktion
ja
nein
Selektion
Abbruchkriterium erfüllt
Rekombination
Umweltselektion
Mutation
Zielfunktion
Abbildung 1: Allgemeines Ablaufschema eines Evolutionären Algorithmus
Zuerst findet eine Initialisierung statt in der eine Anfangspopulation generiert wird.
Diese Population enthält erste Lösungskandidaten (Individuen) die meist zufällig
ausgewählt werden. Mittels einer Zielfunktion wird die neu generierte Population
bewertet. Sie bestimmt die Güte (Fitness) der einzelnen Individuen. Dadurch ist die
Population der ersten Generation erstellt. Es folgt ein Prozess über mehrere
Generationen in dem die Suche nach besseren Individuen durchgeführt wird. In jeder
Generation werden neue Lösungen erstellt. Entsprechend der Fitness werden
Individuen (Eltern) ausgewählt (Selektion), die neue Individuen (Nachkommen)
produzieren sollen. Die Produktion der neuen Individuen erfolgt durch Anwendung
von Rekombination und Mutation. Die Rekombination erstellt Nachkommen und
diese werden dann durch Mutation wieder verändert. Die neuen Individuen werden
erneut durch die Zielfunktion bewertet und in die Population wieder eingefügt. Das
Wiedereinfügen kann durch eine Umweltselektion erfolgen in der einzelne Individuen
aus der Elternpopulation oder die gesamte Elternpopulation durch die neuen
Individuen ersetzt werden. Zum Schluss entscheidet ein Abbruchkriterium ob das Ziel
erreicht wurde oder der Prozess der Erstellung einer neuen Population von vorn
beginnen soll [POHLHEIM 2000].
Die prinzipielle Vorgehensweise bei Evolutionären Algorithmen wird nochmals im
folgenden Pseudocode gezeigt [NISSEN 1997].
1. Wähle Strategieparameterwerte
2. Initialisiere Ausgangspopulation P(0)
3. t <- 0
4. Bewerte Individuen der Ausgangspopulation
5. Wiederhole (Generationszyklus)
6. t <- t+1
7. Selektion (Auswahl der Eltern)
8. Replikation (Nachkommen generieren)
9. Variation
3
10. Bewerten der Nachkommen
11. Bilden der neuen Population
12. bis tmax erreicht ist oder eine andere Abbruchbedingung erfüllt ist
13. Ausgabe der Ergebnisse
14. Stop
3 Verfahren und Operatoren evolutionärer Algorithmen
Aufbauend auf dem allgemeinen Ablaufschema eines evolutionären Algorithmus
werden nun die wichtigsten Verfahren und Operatoren eines evolutionären
Algorithmus vorgestellt.
3.1 Initialisierung der Individuen
Zu Beginn eines EA werden die Individuen der Anfangspopulation erstellt. Im
Allgemeinen werden sie willkürlich aus dem vorgegebenen Suchraum ausgewählt.
Sind allerdings Vorkenntnisse über das Optimierungsproblem in Form einiger
bekannter guter Lösungen (Individuen) gegeben, so können und sollten sie in die
Optimierung mit aufgenommen werden [POHLHEIM 2000]. Weiterhin können
Ergebnisse anderer Optimierungsverfahren zur Initialisierung der Anfangspopulation
verwendet werden.
3.2 Population
In EA bezeichnet die Population eine Menge von Lösungskandidaten (Individuen).
Diese Individuen können in der Population mehrfach vorkommen. Demnach ist die
Angabe der Häufigkeit für jedes Individuum notwendig. Populationen werden
üblicherweise als Tupel repräsentiert auch wenn sie nicht sortiert sind. Individuen
können reellwertig als Vektoren oder binär als Null-Eins-Folgen dargestellt werden.
3.3 Fitness
Jedem Individuum der Population wird eine Fitness zugewiesen. Sie wird allgemein
errechnet aus dem Zielfunktionswert des Individuums und den Zielfunktionswerten
aller anderen Individuen der Population. Gemäß dieser Fitness werden die
Individuen (Eltern) ausgewählt die neue Individuen (Nachkommen) produzieren
sollen. Die Fitness ist eine Aussage über die Güte einer Lösung und damit ein
Vergleichskriterium zu anderen Lösungen. Sie soll die Evolution zu den besseren
Lösungen im Suchraum führen [POHLHEIM 2000].
3.4 Selektion
Die Selektion legt fest, welche Individuen als Eltern für die Fortpflanzung ausgewählt
werden. Die Auswahl erfolgt entsprechend ihrer Fitness. Das geläufigste Verfahren
zur Auswahl von Individuen ist die Rouletteselektion. Hierbei werden die Individuen
4
einzelnen Abschnitten einer Linie zugeordnet. Die Länge eines jeden Abschnittes ist
gleich der Fitness des Individuums. Danach wird eine Zufallszahl generiert, die sich
im Bereich von null und der Länge der Linie gleichverteilt. Das Individuum wird
ausgewählt, in dessen Abschnitt die Zufallszahl zeigt. Dieser Ablauf wird nun solange
wiederholt bis alle Individuen ausgewählt sind. Damit ist die Rouletteselektion ein
stochastisches Auswahlverfahren. Weitere Verfahren sind stochastic universal
sampling, Turnierselektion oder Trunkation-Selektion [POHLHEIM 2000].
3.5 Rekombination
Nach der Selektion der Eltern erfolgt die Rekombination. Hierbei werden
Nachkommen erzeugt indem man die Information der Eltern miteinander kombiniert.
Es gibt verschiedene Verfahren zur Rekombination. Sie richten sich zum Einen nach
der Repräsentation der Variablen in den Individuen. Die Variablen können reell,
ganzzahlig oder binär sein. Zum Anderen entscheidet die Art der Zielfunktion über
die Wahl des jeweiligen Verfahrens. Die Arten der Zielfunktion sind
Parameteroptimierung und kombinatorische Optimierung.
3.6 Mutation
Die Mutation findet nach der Rekombination statt. Die Nachkommen, die durch
Rekombination der Eltern erzeugt wurden, werden in diesem Schritt einer Mutation
unterzogen. Dies geschieht durch eine geringe Veränderung der Variablen der
Nachkommen. Welche Verfahren zur Mutation gewählt werden, hängt wieder von der
Repräsentation der Variablen und der Art der Zielfunktion ab.
3.7 Wiedereinfügen
Nachdem die Produktion der Nachkommen durch Rekombination und Mutation und
die Bewertung durch die Anwendung der Zielfunktion abgeschlossen ist, müssen die
Nachkommen wieder in die Population eingefügt werden. Das Wiedereinfügen
entscheidet darüber, wie viele und welche Nachkommen in die Population eingefügt
werden und welche Individuen der Population durch die einzufügenden
Nachkommen ersetzt werden.
3.8 Abbruchkriterium
Ein Evolutionärer Algorithmus läuft solange bis ein definiertes Abbruchkriterium erfüllt
wird. Das Kriterium sollte nach Möglichkeit so definiert sein, dass die Optimierung
erst beendet wird, wenn ein ausreichend gutes Ergebnis erreicht wurde und nicht
mehr Berechnungen durchgeführt werden, als notwendig zur Erreichung des Ziels.
Abbruchkriterien werden unterschieden in direkte- und abgeleitete Kriterien. Direkte
Abbruchkriterien ergeben sich sofort aus dem Zusammenhang der Optimierung. Ein
Kriterium dieser Art greift, wenn eine maximale Anzahl von Generationen bzw.
maximale Anzahl an Zielfunktionsberechnungen durchgeführt werden oder die
maximale Rechenzeit oder ein „globales“ Optimum erreicht wird. Abgeleitete Kriterien
ergeben sich aus der Berechnung von Hilfsgrößen. Beispielsweise werden aus allen
5
Zielfunktionswerten der aktuellen Generation deren Standardabweichung berechnet
und mit dem vorgegebenem Abbruchwert verglichen. Erreicht der berechnete Wert
den vorgegebenen Abbruchwert, so wird die Optimierung beendet.Weitere
Hilfsgrößen neben der Standardabweichung sind „laufender Mittelwert“, „GuterSchlechtester“, „Phi“ und „Kappa“ [POHLHEIM 2000]. Bei der Anwendung
Evolutionärer Algorithmen ist das am häufigsten verwendete Abbruchkriterium die
maximale Anzahl von Generationen. Der Vorteil dieses Kriteriums ist die gute
Überschaubarkeit und der garantierte Abbruch der Optimierung. Gleichzeitig lässt
sich das Ende des Optimierungslaufes vorhersagen. Im Gegensatz ist die
Entwicklung der abgeleiteten Abbruchkriterien während eines Optimierungslaufes
fast nie genau vorhersehbar.
4 Standardalgorithmen
In diesem Kapitel werden die vier Standardalgorithmen Genetische Algorithmen,
Genetische
Programmierung,
Evolutionsstrategien
und
Evolutionäre
Programmierung vorgestellt. Zunächst wird die historische Entwicklung dieser
Standardalgorithmen erläutert.
Genetische Algorithmen gehen auf Arbeiten von John Holland in den 60er Jahren
zurück. Das Ziel von Holland war, Mechanismen adaptiver Systeme zu erklären und
in Form von Genetischen Algorithmen auf Computern zu implementieren. Dabei
diente ihm die natürliche Evolution als Vorbild. Heute sind Genetische Algorithmen in
Forschung und Anwendung die zahlenmäßig dominierenden Verfahren der
Evolutionären Algorithmen. Evolutionäre Programmierung geht auf Arbeiten von L.J.
Fogel, A.J. Owens und M.J. Walsh Mitte der 60er Jahre zurück. Hier war das Ziel,
mittels simulierter Evolution künstlich intelligente Automaten, heute als Agenten
bezeichnet, zu erzeugen. Auch die Evolutionsstrategien entstanden in den 60er
Jahren. Sie wurden von Rechenberg und Schwefel an der TU Berlin entwickelt.
Damals ging es um Fragen der praktischen Optimierung im Rahmen
ingenieurwissenschaftlicher Anwendungen. Schließlich beeinflusste J.R. Koza 1994
die Richtung der Genetischen Programmierung. Der Grundgedanke bestand darin,
Lösungen in Form von Computerprogrammen zu repräsentieren, die dann mit den
Mechanismen der Evolution verändert werden [NISSEN 1997].
Abbildung 2 zeigt die historische Entwicklung Evolutionärer Algorithmen grafisch.
6
Evolutionary Computing
Genetische
Algorithmen
Evolutionäres
Programmieren
Holland (1962)
Fogel, Owens,
Walsh (1965)
Evolutionsstrategien
Rechenberg,
Schwefel (1969)
Genetisches
Programmieren
Koza (1994)
Abbildung 2: Historische Entwicklung Evolutionärer Algorithmen
Im Folgenden werden die Standardalgorithmen in einer Basisform dargestellt, die als
Ausgangspunkt bei der Entwicklung eines leistungsfähigen Lösungsverfahrens zu
sehen ist.
4.1 Genetische Algorithmen
Im Folgenden wird ein Grundkonzept eines Genetischen Algorithmus vorgestellt.
Genetische Algorithmen arbeiten oft mit der binären Lösungsrepräsentation. Damit ist
die Repräsentation eines Individuums nicht immer identisch zur Repräsentation des
zu lösenden Problems. Probleme, deren Variablen reelle oder ganzzahlige Zahlen
sind, werden in eine binäre Repräsentation umgewandelt. Dazu werden verschiede
Kodierungen eingesetzt. Üblicherweise sind es die binäre und die gray Kodierung
[WEICKER 2002]. Jedes Individuum ist ein String bestehend aus einer Menge von
Bits. Jeder String unterteilt sich außerdem in eine bestimmte Anzahl von Segmenten,
die jeweils in Verbindung zu einer Variablen des Optimierungsproblems stehen.
Damit enthält jedes Segment den Wert einer Entscheidungsvariablen des
Optimierungsproblems in binär codierter Form. Die einzelnen Bits auf dem String
werden als “Gene” und ihre Ausprägung als “Allel” bezeichnet [NISSEN 1997]. In
Abbildung 3 wird die binäre Lösungscodierung beim Genetischen Algorithmus
grafisch dargestellt.
Die Initialisierung beim Genetischen Algorithmus erfolgt indem eine
Anfangspopulation von Individuen stochastisch erzeugt wird. Dies geschieht indem
die Bits aller Individuen der Population stochastisch unabhängig voneinander und mit
gleicher Wahrscheinlichkeit entweder auf den Wert Eins oder Null gesetzt werden.
Danach erfolgt die Bewertung der Ausgangslösungen um im anschließenden
Selektionsschritt nach der Güte vergleichen zu können. Dies erfolgt durch
Anwendung der Fitnessfunktion.
Nach der Bewertung werden aus der aktuellen Population Individuen stochastisch
gezogen und als Eltern ausgewählt. Es können Duplikate entstehen, da „mit
Zurücklegen“ gezogen wird. Die Selektionswahrscheinlichkeit eines Individuums
hängt von dem Funktionswert des Individuums und der Summe der Funktionswerte
7
aller anderen Individuen ab. Diese stochastische Selektion wird als
fitnessproportionale Selektion bezeichnet und entspricht der in Abschnitt 3.4
beschriebenen
Rouletteselektion.
Alle Individuen
haben
eine positive
Selektionswahrscheinlichkeit und können damit Nachkommen zeugen. Diese
Eigenschaft ist bei Selektionsformen bei Evolutionsstrategien und Evolutionärer
Programmierung nicht gegeben.
String (Individuum)
codierter Wert von
Entscheidungsvariable xj
… 0
1
1
0
0
1
0
1
codierter Wert von
Entscheidungsvariable xj+1
1
0
Gen
0
0
0
1
1
0
0
1
…
Allel (Wert)
Abbildung 3: Binäre Lösungscodierung beim Genetischen Algorithmus
Nach der Selektion werden Nachkommen erzeugt. Dazu wird aus der Menge der
Eltern, die durch die Rouletteselektion entstanden ist, ein Elternpaar mit gleicher
Wahrscheinlichkeit und ohne Zurücklegen gezogen. Aus diesem Elternpaar
entstehen im weiteren Verlauf durch den Variationsoperator Crossover und Mutation
zwei Nachkommen. In Genetischen Algorithmen ist die Rekombination eher der
primäre Operator und die Mutation mehr ein Hintergrundoperator [NISSEN 1997].
In einem Basis-Genetischem-Algorithmus wird der 1-Punkt-Crossover angewendet.
Dieser ist die einfachste Abwandlung des Crossover. Neben dem 1-Punkt-Crossover
gibt es Varianten wie, N-Punkt-Crossover, Uniform Crossover, Shuffel Crossover
sowie den Diagonal Crossover [NISSEN 1997]. Bei dem 1-Punkt-Crossover wird
zunächst auf Basis der a-priori festgelegten Crossover-Wahrscheinlichkeit
entschieden ob der Crossover zum Einsatz kommt. Der empfohlene
Wahrscheinlichkeitswert ist größer oder gleich 0,6. Zum Vergleich wählt man eine
Zufallsvariable aus dem Intervall [0,1[. Demnach findet ein Crossover statt, wenn der
Wert der Zufallsvariablen kleiner oder gleich der Crossover-Wahrscheinlichkeit ist. In
dem Fall, dass kein Crossover stattfindet, wird das Elternpaar unverändert weiter an
den Mutationsoperator gegeben. Andernfalls wird der Crossover durchgeführt.
Abbildung 4 zeigt den 1-Punkt-Crossover grafisch. Es wird eine Schnittposition
gleichverteilt zufällig in den Elternindividuen ausgewählt. Nach dem Schnittpunkt
werden die Variablen zwischen den Elternindividuen zur Bildung zweier
Nachkommen ausgetauscht.
Im nächsten Schritt erfolgt die Mutation vgl. Abbildung 5. Hierbei werden die Bits
eines Individuums mit einer Mutationswahrscheinlichkeit, gleichverteilt zufällig,
ausgewählt und invertiert.
8
Eltern
Nachkommen
Abbildung 4: 1-Punkt-Crossover
vor der Mutation
1
0
0
1
0
nach der Mutation
1
1
1
0
0
0
0
1
1
Abbildung 5: Mutation beim Genetischen Algorithmus
Der letzte Schritt beim Erzeugen neuer Nachkommen ist das Bewerten und das
Ergänzen der neuen Population. Die nach der Mutation gewonnen Individuen werden
mit der Fitnessfunktion bewertet und in die anfangs noch leere neue Population
übernommen. Enthält diese Population genauso viele Elemente wie die bisherige
Population, wird diese vollständig ersetzt.
Der Genetische Algorithmus endet wenn ein Abbruchkriterium erfüllt wird, andernfalls
wird eine neue Population generiert. Als resourcenabhängige Abbruchkriterien
können gewählt werden: „Maximale Anzahl an Generationen erreicht“, „maximale
Rechenzeit erreicht“. Andere Abbruchkriterien, die sich auf die erreichte
Lösungsqualität beziehen sind: „Nach längerer Zeit wurde keine Verbesserung mehr
beobachtet“, „Individuen der Population stimmen an vielen Bitpositionen überein
(Ineffektivität des Crossover)“.
Als Ergebnis bekommt der Nutzer die beste während des gesamten Laufes
gefundene Lösung.
4.2 Genetische Programmierung
Die Genetische Programmierung ist im Zusammenhang mit den genetischen
Algorithmen entstanden. Ähnlich wie bei den genetischen Algorithmen ist die
Rekombination der Hauptoperator während die Mutation nur als Hintergrundoperator
wirkt. Charakteristisch für die Genetische Programmierung ist, dass die
Repräsentation keine feste vorgeschriebene Größe hat. Die Individuen und
Strukturen sind Computerprogramme unterschiedlicher Größe und Komplexität, die
9
aus Funktionen, Variablen und Konstanten bestehen. Nachfolgend wird das
Grundkonzept der Genetischen Programmierung vorgestellt.
Die Initialisierung Genetischer Programmierung erfolgt wie bei Genetischen
Algorithmen indem eine Anfangspopulation von Individuen stochastisch erzeugt wird.
In dem Fall sind die Individuen Programme. Sie werden gebildet aus den Elementen
einer Menge problempassender elementarer Funktionen, dem sogenannten „function
set“, sowie den Elementen einer Menge von problempassender Variablen und
Konstanten, dem sogenannten „terminal set“ [NISSEN 1997]. Die Individuen werden
allgemein als Syntaxbäume dargestellt. Diese können beliebige mathematische
Ausdrücke oder auch beliebige Programme, beispielsweise durch die Verwendung
der Sprache LISP, darstellen. Abbildung 6 zeigt ein Programmbaum und den
zugehörigen LISP Ausdruck.
*
+
2
5
6
<=>
(*(+254)6)
4
Abbildung 6: Programmbaum mit zugehörigem LISP-Ausdruck
Jedes Programm wird generiert, indem man mit gleicherWahrscheinlichkeit zufällig
eine Funktion aus dem function set auswählt und sie zur Wurzel des
Programmbaumes bestimmt. Danach wird ein Element stochastisch und mit gleicher
Wahrscheinlichkeit aus der Vereinigung des function set und des terminal set
ausgewählt und zum Programmbaum hinzugefügt. Ist das Element eine Variable
bzw. eine Konstante, ist der Generierungsprozess für diesen Ast beendet. Handelt es
sich dagegen um eine weitere Funktion, so wird der Generierungsprozess rekursiv
fortgesetzt. Zusätzlich wird noch eine maximale Baumtiefe festgelegt, um komplexe
Bäume zu vermeiden [NISSEN 1997].
Im nächsten Schritt des Laufs von Genetischer Programmierung geht es um die
Bewertung der Ausgangslösungen. Dies geschieht wieder mit einer Fitnessfunktion
wie bei den Genetischen Algorithmen beschrieben. Im Allgemeinen sind die
Fitnesswerte der Anfangspopulation bei Genetischer Programmierung ziemlich
schlecht. Trotz alledem liegen bessere und schlechtere Lösungen vor, die sich
gegeneinander abgrenzen.
Nach dem Bewerten der Programme soll eine neue Population gebildet werden.
Dazu werden die drei Schritte Operatorauswahl, stochastische Selektion und
Replikation und Operatoranwendung und Ergänzen der neuen Population so oft
durchlaufen, bis die Anzahl der Programme der zunächst leeren neuen Population
10
der Anzahl der Programme der aktuellen Population entspricht. Bei der
Operatorauswahl geht es darum, probabilistisch zu entscheiden, welcher der beiden
evolutionären Operatoren Reproduktion und Crossover zum Einsatz kommt. Die
Auswahl der Individuen erfolgt dann auf Basis der Fitnesswerte und kann mittels der
fitnessproportionalen Selektion erfolgen. Die ausgewählten Programme verbleiben
gleichzeitig in der alten Population und es wird ausschließlich auf Duplikaten
gearbeitet. Dieses Muster entspricht dem Ziehen mit Zurücklegen. Schließlich wird
der zuvor ausgewählte Operator auf die eben selektierten Programmduplikate
angewendet. Der Replikationsoperator kopiert ein Individuum unverändert in die
neue Population. Der Crossover wird in Abbildung 7 grafisch aufgezeigt. In diesem
Fall werden zwei Elternindividuen gewählt und in beiden stochastisch und
unabhängig voneinander ein Crossover-Punkt bestimmt. Anschließend werden die
mit dem Crossover-Punkt als Wurzelknoten beginnenden Teilbäume, zwischen den
Eltern vertauscht und man erhält zwei Nachkommen. Diese werden hinsichtlich ihrer
Fitness bewertet und zur neuen Population hinzugefügt.
Eltern
*
+
+
2
5
6
*
4
+
8
Nachkommen
5
7
6
+
8
4
+
*
4
3
5
*
+
2
*
5
*
3
4
7
Abbildung 7: Crossover bei Genetischer Programmierung
Überschreitet ein Nachkomme die maximal erlaubte Baumhöhe, so wird dieser
verworfen. Als Ersatz wird der dazugehörige Elter in die neue Population
übernommen.
Dieser Ablauf der Erstellung neuer Populationen wird so lange wiederholt bis ein
vordefiniertes Abbruchkriterium erfüllt ist. Auf diese Weise entstehen aus den
11
zufälligen Ausgangslösungen schrittweise bessere Lösungen des gegebenen
Anwendungsproblems.
4.3 Evolutionsstrategien
Evolutionsstrategien werden Überwiegend zur Optimierung kontinuierlicher
Entscheidungsvariablen verwendet. Im Folgenden wird ein Grundkonzept von
Evolutionsstrategien vorgestellt, dabei soll eine Funktion F von n kontinuierlichen
Entscheidungsvariablen optimiert werden:
F : Rn → R
Bei den Evolutionsstrategien werden im Allgemeinen Vektoren reeller Zahlen
zur Lösungsrepräsentation verwendet. Jedes Individuum enthält Werte für alle
Entscheidungsvariablen und eine bzw. mehrere Standardabweichungen, die
für die Mutation von Bedeutung sind. Im Folgenden wird der Fall betrachtet,
dass nur mit einer Standardabweichung σ gearbeitet wird.
Die Initialisierung erfolgt durch die Erzeugung einer Anfangspopulation von µ
Individuen. Dies kann für jede Entscheidungsvariable stochastisch auf Basis
einer Gleichverteilung innerhalb definierter Ober- und Untergrenzen erfolgen.
Ist die Initialisierungsphase abgeschlossen, so werden die Individuen der
Anfangspopulation bewertet, indem jedem Individuum ein Fitnesswert
zugeordnet wird.
Nach der Bewertung der Lösungen folgt das Erzeugen neuer Nachkommen. In
der Grundform der Evolutionsstrategien werden in einer Generation, aus µ
Eltern λ Nachkommen erzeugt. Allgemein werden zunächst Eltern wiederholt
ausgewählt, dies entspricht dem „Ziehen mit Zurücklegen“. Danach werden
ihre Komponenten rekombiniert und der entstehende Nachkomme
anschließend mutiert. Die nächsten vier Schritte werden zur Entstehung einer
neuen Population λ-mal wiederholt.
Schritt 1: Aus der aktuellen Population wird stochastisch ein Elternpaar
bestimmt.
Dabei
haben
alle
Individuen
die
gleiche
Selektionswahrscheinlichkeit.
Schritt 2: Die Bestandteile der Elternvektoren werden rekombiniert. Dies kann
beispielsweise mit der diskreten Rekombination durchgeführt werden. Dabei
wird entweder der Wert des einen oder des anderen Elters mit gleicher
Wahrscheinlichkeit gewählt und an den Nachkommen vererbt. Abbildung 8
zeigt die diskrete Rekombination grafisch.
12
Eltern
3,0
1,2
5,3
Nachkomme
2,4
0,6
3,0
2,3
4,0
0,8
6,2
4,0
5,3
6,2
0,5
0,5
Abbildung 8: Diskrete Rekombination
Schritt 3: In diesem Schritt wird der Nachkomme mutiert. Zunächst wird die
Standardabweichung σ durch Multiplikation mit einer logarithmisch normalverteilten
Zufallszahl verändert. Anschließend wird zum Wert jeder Entscheidungsvariablen
des Individuums eine normalverteilte Zufallsgröße mit Erwartungswert 0 und der
veränderten Standardabweichung hinzuaddiert. Daraus folgt, dass kleine
Veränderungen eine größere Wahrscheinlichkeit als große Veränderungen haben.
Schritt 4: Im letzten Schritt wird der neu erzeugte Nachkomme mittels der
Fitnessfunktion bewertet und zur neuen, anfangs noch leeren Zwischenpopulation
hinzugefügt.
Sobald die eben beschriebenen vier Schritte λ-mal durchlaufen wurden, existiert eine
Zwischenpopulation mit λ Nachkommen. Aus den λ Nachkommen werden nun die
bezogen auf ihre Fitness µ besten Individuen zur neuen Population. Man nennt diese
Selektionsstrategie auch die Komma-Selektion ((µ; λ)-Evolutionsstrategie). Bei dieser
Selektionsart wird standardmäßig ein Verhältnis µ/λ von 1/7 bis 1/5 empfohlen
[WEICKER 2002]. Daneben gibt es auch die Plus- Selektion ((µ+λ)
Evolutionsstrategie). Hierbei werden nicht nur aus den Kindern sondern auch aus
den Eltern die Individuen der nächsten Generation ausgewählt. Bei der Komma
Selektion hat man jedoch keine Garantie, dass die beste bis dahin gefundene
Lösung auch in der Schlusspopulation enthalten ist. Daher wird empfohlen die
bisherige beste Lösung gesondert zu speichern und laufend zu aktualisieren.
Dieser iterative Prozess der Erzeugung neuer Populationen wird solange fortgesetzt
bis eine Abbruchbedingung erfüllt ist. Bei den Evolutionsstrategien können
Abbruchkriterien resourcenabhängig definiert oder auch erfolgsorientiert formuliert
sein. Erfolgsorientiert bedeutet in diesem Zusammenhang, dass über einen gewissen
Zeitraum keine besseren Lösungen mehr erzielt werden können. In [NISSEN 1997]
wird das abgeleitete Abbruchkriterium „Guter-Schlechtester“ für Evolutionsstrategien
vorgeschlagen, dabei wird die Differenz zwischen dem Zielfunktionswert des besten
und schlechtesten Individuums der aktuellen Generation berechnet. Liegen die
Zielfunktionswerte nah bei einander, so terminiert der Algorithmus.
4.4 Evolutionäre Programmierung
Die heutigen Formen von Evolutionärer Programmierung wurden zur Optimierung
insbesondere kontinuierlicher Entscheidungsgrößen entwickelt [NISSEN 1997]. Sie
basieren auf der Annahme, die Evolution auf einer eher verhaltensbestimmten Ebene
13
nachzubilden, d.h. es wird kein Wert darauf gelegt, die genetischen Strukturen zu
berücksichtigen, sondern ist die Ähnlichkeit zwischen Nachkommen und Eltern von
Interesse. Aus diesem Grund wird in evolutionärer Programmierung keine
Rekombination verwendet. Stattdessen kommt die Mutation als einziger
Suchoperator zum Einsatz. Im folgenden Grundkonzept der evolutionären
Programmierung [NISSEN 1997] soll die Minimierung einer Funktion F von n
kontinuierlichen Variablen als Optimierungsproblem gelten:
F : Rn → R
Als Lösungsrepräsentation für die Optimierung kontinuierlicher Variablen wird ein
Vektor reeller Zahlen verwendet. Demnach besteht ein Individuum aus
Vektorelementen, die den Werten der n Entscheidungsvariablen entsprechen. Die
Initialisierung erfolgt, indem eine Anfangspopulation von µ Individuen stochastisch
erzeugt wird. Dabei werden die Werte des Individuums auf Basis einer
Gleichverteilung innerhalb definierter Ober- und Untergrenzen festgelegt.
Die Individuen werden wieder bewertet, indem ihnen ein Fitnesswert zugewiesen
wird. Die bewerteten µ Individuen bilden die Menge der Eltern. Es folgt das
Erzeugen von Nachkommen. Dazu werden die nächsten Schritte µ-mal durchlaufen.
1. Schritt: Es wird eine Kopie vom ersten Elter erstellt (Replikation).
2. Schritt: Diese Kopie wird mutiert, indem ihr eine normalverteilte Zufallszahl
mit Erwartungswert Null und dynamisch veränderter Standardabweichung dazu
addiert wird. Die Standardabweichung der Zufallszahl hängt dabei vom
Fitnesswert des Elters ab. Der global optimale Fitnesswert ist Null. Dabei gilt die
Annahme, dass die Optimierung effektiver werden soll, indem man die
Standardabweichung bei Annäherung an das Optimum verkleinert.
3. Schritt: Dem Nachkommen wird ein Fitnesswert zugeordnet. Danach wird er
in die Zwischenpopulation aufgenommen.
Nachdem die 3 Schritte µ-mal durchlaufen wurden, bilden Eltern und Nachkommen
eine Zwischenpopulation vom Umfang 2 × µ. Aus dieser Population wird stochastisch
die bessere Hälfte als neue Elternpopulation für die nächste Generation selektiert.
Dazu werden Turniere ausgetragen, bei denen Eltern und Nachkommen paarweise
gegen h Gegner antreten, wobei h eine nutzerdefinierte natürliche Zahl größer oder
gleich 1 ist. Häufig wird für die Zahl h der Wert 0; 05 × µ gewählt [NISSEN 1997]. Die
Gegner werden dann auf Basis einer Gleichverteilung stochastisch aus der
Zwischenpopulation gezogen. Sieger und Verlierer eines Turniers werden durch
paarweises Vergleichen der Fitnesswerte bestimmt. “Ein Individuum erzielt den Sieg,
wenn sein Fitnesswert mindestens so gut ist wie der des Gegners”. Nach dem
Wettkampf werden die Individuen nach der Anzahl ihrer Siege sortiert und die µ
besten anhand dieser Rangfolge als neue Population von Eltern ausgewählt. Bei
gleicher Anzahl von Siegen werden die Fitnesswerte verglichen und danach
entschieden welches Individuum in die neue Population aufgenommen wird. Bei
dieser Selektionsart wird immer garantiert, dass das beste Individuum immer
gewinnt, im Gegensatz zur Selektion bei den Evolutionsstrategien.
14
Der Generationsprozess wird mit einem Abbruchkriterium gestoppt. Abbruchkriterien
können wieder resourcenabhängig gewählt werden oder sich am erreichten Niveau
der besten gefundenen Lösung richten. Im Allgemeinen ist das Ergebnis die beste
während des gesamten Laufes gefundene Lösung.
4.5 Unterschiede und Gemeinsamkeiten der Standardalgorithmen
Die Standardalgorithmen sind als Instanzen des in Kapitel 2.2 vorgestellten
allgemeinen Ablaufschemas zu sehen. Grundsätzlich stimmen sie hier überein.
Jedoch ergeben sich zwischen den Standardalgorithmen methodische Unterschiede,
die Abbildung 9 wiedergibt.
Abbildung 9: Methodische Unterschiede zwischen den Standardalgorithmen
Alle diese Standardalgorithmen imitieren das Evolutionsgeschehen auf
unterschiedlichsten Abstraktionsebenen. Genetische Algorithmen und Genetische
Programmierung unterstreichen genetische Mechanismen auf der Abstraktionsebene
des Chromosoms, d.h. auf der codierten Ebene der Lösungen. Demgegenüber
bilden Evolutionsstrategien das Evolutionsgeschehen auf der decodierten Ebene ab.
Die Evolutionäre Programmierung betrachtet schließlich die Evolution auf der Ebene
ganzer Populationen bzw. Arten. Demzufolge nimmt der Abstraktionsgrad von
Genetischen Algorithmen über Evolutionsstrategien zu Evolutionärer
Programmierung hin zu.
5 Fazit
Evolutionäre Algorithmen bieten verschiedene Verfahren und Operatoren zur Lösung
komplexer Problemstellungen. Die Basisformen der Standardalgorithmen können
beliebig erweitert werden und somit neben einer Fülle von Optimierungsansätzen,
leistungsfähige Lösungsverfahren entwickeln. Praktische Erfahrungen zeigen, dass
Evolutionäre Algorithmen, soweit sie an die Struktur der Problemstellung angepasst
15
wurden, zuverlässige Lösungsverfahren für komplexe Optimierungsprobleme sind.
Viele Optimierungsverfahren sind von einem Startpunkt der Optimierung abhängig.
Bei Evolutionären Algorithmen hingegen verringert sich diese Abhängigkeit durch
den Populationsansatz und die stochastischen Komponenten. Ein großer Vorteil von
Evolutionären Algorithmen ist, dass sie sich sehr gut mit lokalen
Verbesserungsverfahren kombinieren lassen. Es können nichtevolutionäre
Komponenten in Evolutionäre Algorithmen integriert werden. Zusätzlich bestehen
vielfältige Kombinationsmöglichkeiten mit künstlichen Neuronalen Netzen,
regelbasierten Systemen und Fuzzy-Systemen.
Auf der anderen Seite sind Evolutionäre Algorithmen oft rechenintensiv. Meistens
durchlaufen sie viele Generationen um gute Lösungen zu finden. Alle Formen
Evolutionärer Algorithmen benötigen außerdem eine große Anzahl von Zufallszahlen.
Auch das erfordert Rechenzeit. Optimierungsanwendungen mit hoher Komplexität
sowie auch mit stochastischen Einflüssen sind prinzipiell als geeignet für
Evolutionäre
Algorithmen
anzusehen.
Einen
weiteren
geeigneten
Anwendungsbereich für Evolutionäre Algorithmen bilden die kombinatorischen
Optimierungsprobleme. Zusätzliche Anwendungsmöglichkeiten gibt es im Rahmen
lernender Classifier-Systeme, sowie im Bereich von Artificial Life.
Literatur
[DE JONG 2006] DE JONG, KENNETH A. (2006), Evolutionary Computation: A
Unified Approach. A Unified Approach MIT Press.
[GERDES 2004] GERDES, INGRID; KLAWONN, FRANK; KRUSE, RUDOLF (2004).
Evolutionäre Algorithmen: Genetische Algorithmen- Strategien und
Optimierungsverfahren- Beispielanwendungen. Vieweg +Teubner, Wiesbaden.
[NISSEN 1997] NISSEN, VOLKER (1997). Einführung in evolutionäre Algorithmen:
Optimierung nach dem Vorbild der Evolution. Vieweg, Braunschweig.
[POHLHEIM 2000] POHLHEIM, HARTMUT (2000). Evolutionäre Algorithmen.
Springer-Verlag, Berlin Heidelberg.
[WEICKER 2002] WEICKER, KARSTEN (2002). Evolutionäre Algorithmen. B.G.
Teubner Stuttgart, Leipzig, Wiesbaden.
16
Herunterladen