Evolutionäre Algorithmen

Werbung
Math. - Naturwiss. Fakultät
Fachbereich Informatik
Kognitive Systeme . Prof. A. Zell
Evolutionäre Algorithmen
Übungsblatt 8 , SS 2015
Ausgabe: 16.06.2015 - Abgabe: 23.06.2015
Aufgabe 22 (Genetisches Programmieren: Baumstrukturen - 6 Punkte)
In einem gewurzelten Baum beschreibt die Tiefe k eines Knotens den Abstand zur Wurzel und die Höhe
h des Baumes die Länge des längsten Pfades zur Wurzel. Ein m-ärer Baum (m > 2) ist ein gewurzelter
Baum, in dem jeder Knoten bis zu m Kindknoten besitzt. Ein vollständiger m-ärer Baum ist ein m-ärer
Baum Baum, der an jedem internen Knoten genau m Kinder hat und alle Blätter (Knoten ohne Kinder)
dieselbe Tiefe haben.
(a) (1 P.) Zeigen Sie per Induktion: Die maximale Zahl von Blättern mit Tiefe k in einem m-ären
Baum ist mk .
(b) (1 P.) Leiten Sie die minimale Zahl an Knoten in einem m-ären Baum der Höhe h her.
(c) (2 P.) Zeigen Sie per Induktion: Die Knotenzahl für einen vollständigen m-ären Baum der Höhe
h+1
h ist mm−1−1 .
(d) (2 P.) Gegegeben sei untenstehender Baum. Führen Sie Crossover durch, indem Sie diesen Baum
mit seinem Klon rekombinieren. Tauschen Sie dazu die Subbäume bei 1 und 2 aus. Geben Sie die
vereinfachten Formeln an, die durch den originalen und neuen Baum beschrieben werden.
1
Aufgabe 23 (GP-Bäume - 8 Punkte)
In Genetic Programming (GP) werden Programme als Bäume repräsentiert. Sei o ein Operator und
o(u, v) ein Knoten mit Operator o und zwei Unterknoten, so entspricht bspw.
+(sin(−(x, y)), ∗(+(1, 1), x))
dem Term sin(x−y)+2x. In diesem Übungsblatt soll eine abstrakte Klasse GPTree entwickelt werden,
die eine Binärbaum-Struktur repräsentiert und als GP-Individuum verwendet werden kann.
Jeder GPTree enthält bis zu zwei Unterknoten, die wiederum Instanzen der Klasse GPTree sind, außerdem eine ganzzahlige Kennnummer (type), über die ihm eine spezifische Funktion zugeordnet wird.
Es gibt drei Arten von Knoten: Terminale, unäre und binäre Funktionen, welche entsprechend unterschiedliche Stelligkeit haben. Der obige Term kann mit den Mengen term = {1, x, y}, unary =
{sin, cos} und binary = {+, −, ∗, /} durch 0(0(1(1,2)),2(0(0,0),1)) kodiert werden, wobei
0( , ) mit zwei Argumenten eindeutig + zugeornet ist, während etwa 2 ohne Argument das dritte Terminal y darstellt. Da die Funktionsbasis problemabhängig ist, ist sie in der abstrakten Klasse GPTree
nicht spezifiziert, aber für Instanzen vorausgesetzt und verwendet.
Verwenden Sie das Framework von der Übungsseite. Zu implementieren sind eine Initialisierungs-Methode,
die einen zufälligen (nicht-leeren) Baum mit maximaler Tiefe d erzeugt, ein Copy-Konstruktur für die
Replikation, sowie Kreuzungs- und Mutationsoperatoren, welche die Konsistenz der Nachkommen beibehalten und die Tiefenbeschränkung einhalten.
Als Initialisierungs-Modi sind full und grow populär: Bei full (mode 0) liegen alle Terminale in maximaler Tiefe d, der Baum ist in diesem Sinne vollständig. Bei grow (mode 1) wird an jedem Knoten
randomisiert entschieden, ob ein Terminal oder ein Nonterminal eingesetzt wird, wodurch variable Strukturen entstehen.
Vervollständigen Sie mit TODO gekennzeichneten Methoden der Klasse GPTree und testen Sie Ihren
Code mit der Klasse DummyGPIndividual, welche dazu in EvolutionaryAlgorithm eingetragen
werden muß. Beachten Sie die Kommentare im Quellcode! Auch das Verwenden schon implementierter
Methoden in GPTree kann hilfreich sein.
2
Aufgabe 24 (Symbolische Regression mit GP - 6 Punkte)
Gegeben ist die Funktion y(x) = x + x2 + x3 + x4 . Ein Programm soll optimiert werden, so dass es
die Funktion möglichst gut approximiert. Als Fehlermaß (Fitness) soll
φ(I) =
100
X
i=−100
|y(
i 2
i
) − fI (
)|
100
100
verwendet werden. Dabei sei fI die durch ein GP-Individuum I kodierte Funktion.
(a) Programmieren Sie eine Klasse RegrIndividual, die GPIndividual erweitert und auf GPTree
aufbaut. Sie können sich dabei an DummyGPIndidivual orientieren. Verwenden Sie als Terminalmenge {1, x, π}, als unäre Funktionen {exp, sin, cos} und als binäre Funktionen {+, −, ∗}.
Verwenden Sie Bäume der maximalen Tiefe 5, große Populationen (z.B. µ ≈ 500) und kurze
Laufzeiten (z.B. tmax ≈ 50) zur Optimierung.
(4 Punkte)
(b) Wie ist die Approximationsqualität? In wieviel Prozent Ihrer Testläufe wird die tatsächliche Funktion gefunden? Geben Sie Ihre beste gefundene Lösung, die ungleich y(x) ist, inklusive Fitness
an. Geben Sie auch den mathematisch möglichst weit vereinfachten Term dazu an.
Hinweis: Sollten Sie Probleme mit den Aufgabenteil (a) haben können sie auch Eva2 verwenden. Wählen Sie dafür das PSymbolicRegression -Problem mit der Zielfunktion Koza 7.3 “aus.
”
Im Feld area kann nun die Funktionsmenge für GP ausgewählt werden. Im Feld Statistics kann der
Textoutput aktiviert werden. Nutzen Sie diesen um das beste Individuum mit der tatsächlichen
Lösung zu vergleichen.
(2 Punkte)
Allgemeiner Hinweis: Abgabe per E-Mail ([email protected]) ist erwünscht,
besonders für die Programmieraufgaben. Bitte die Klassen vorher testen, da Syntaxfehler zu Punktabzug
führen. Die Klassen sollten ohne irgendwelche Extras mit dem JDK 1.7 laufen. Bitte grundsätzlich keine
grafischen Oberflächen programmieren, denn dies kostet meist deutlich mehr Zeit als geplant. Wer es
dennoch für unerlässlich hält, möge ausschließlich das AWT und Swing verwenden.
3
Herunterladen