Genetischer Optimierer für den Fuzzy-geregelten Pendel
- Direkt in die Klasse OptimiererModGrad wurde in dem Projekt im Ordner 05genetisch ein genetischer Optimierungsalgorithmus implementiert.
- D.h. ohne den namen zu ändern wurde ein anderer als der bezeichnete Optimierer eingefügt, um gegenüber den vorherigen Projekten möglichst wenig ändern zu müssen.
- Die Arbeitsweise eines Optimierers auf Basis eines genetischen Algorithmus wurde an anderer Stelle bereits erläutert.
- Zum besseren Verständnis wird an dieser Stelle das UML-Klassen-Diagramm der Klasse betrachtet:
|
Bild 0-1: UML-KLassendiagramm des Genetischen Optimierers
- Die Teilaufgaben für die genetische Optimierung wurde zum leichteren Verständnis in eine Vielzahl an Hilfsmethoden aufgespalten.
- Die Konfiguration des Optimierers geschieht über groß geschriebene private-Konstanten am Beginn der Klasse.
- Die Bedeutungen der Konstanten und die Aufgaben der Hilfsfunktion wird im folgenden beschrieben:
|
ANZAHL_BITS Anzahl der Bits, aus denen ein Gen besteht.
ANZAHL_GEN Anzahl der DNA einer Generation
ANZAHL_BEST_GEN Anzahl der in der Gruppe der Besten befindlichen DNA
ANZAHL_MUTIEREN Anzahl der Bits, die bei Auswahl in einer DNA mutiert werden.
PMUTATION Prozentuale Wahrscheinlchkeit für die Mutation
BITWERTMAX Wert des höchstwertigsten Bits in einem Gen
ANZAHL_GENERATIONEN Anzahl der in einemOptimierungsdurchgang durchgespielten Generationen
Code 0-1: Beschreibung der Konfigurations-Konstanten
- Hinweise:
- ANZAHL_BITS*anzahlParameter == Anzahl der Bits einer DNA.
- int[][] gen enthält alle DNA: gen[0]==0.DNA, gen[1]==1.DNA usw.
|
genToParam wandelt ein Gen in einen double-Parameter mit Wertebereich [0,1] um.
paramToGen Umkehrung zu genToParam
rekombinieren würfelt die Bits zweier DNA zufällig zu einer dritten neu zusammen.
kopieren kopiert eine DNA in ein anderen Integer-Array
mutieren zufälliges flippen von Bits in einer DNA
allokieren Vorbereiten aller notwendigen Arrays
findeBestenIndex Findet die n besten DNA-Sätze heraus.
neueGeneration Bildet aus den n besten DNA-Sätzen eine neue Generation von DNAs
findeIndexKleinsterFehler Sucht den Index der DNA heraus, die den kleinsten Fehler liefert.
initialisieren Füllt das DNA-Array, sucht daraus die besten heraus und bereitet eine neue Generation vor.
Code 0-2: Aufgaben der Hilfsfunktion
fuzzy_genetisch.zip - Das Projekt mit genetischem Algorithmus in Ordner 05genetisch und auch noch einmal alle vorhergehenden.
Index kleinster Fehler:98 Kleinster Fehler:44.21206672635522
Start-Parametersatz:
Parameter Nr.0: 1.0
Parameter Nr.0: 1.0
Parameter Nr.0: 1.0
Parameter Nr.0: 1.0
Parameter Nr.0: 1.0
Parameter Nr.0: 1.0
Parameter Nr.0: 1.0
Parameter Nr.0: 1.0
Parameter Nr.0: 1.0
Parameter Nr.0: 1.0
Startfehler: 304.4315343901353
Minimierter Fehler: 44.21206672635522
Bester gefundener Parametersatz:
Parameter Nr.0: 0.5032967032967033
Parameter Nr.1: 0.5262515262515263
Parameter Nr.2: 0.5003663003663004
Parameter Nr.3: 2.442002442002442E-4
Parameter Nr.4: 0.5003663003663004
Parameter Nr.5: 0.5001221001221001
Parameter Nr.6: 0.0
Parameter Nr.7: 0.7094017094017094
Parameter Nr.8: 0.5003663003663004
Parameter Nr.9: 0.5628815628815629
Code 0-3: Verlauf eines Optimierungsvorgangs
Bild 0-2: Vergleich der Simulationen vor und nach der Optimierung mittels genetischem Algorithmus.
Übung zum genetisch optimierten Hängependel im Projektordner fuzzy_genetisch/05genetisch
- Sorgen Sie dafür, dass die Fehlerfunktion berechneFehler(...) in der Klasse FehlerfunktionAntrieb aus mehreren Simulationen mit sinnvollen Anfangsbedingungen gebildet wird.
- Hierzu können Sie folgendermaßen vorgehen:
- Ergänzen Sie die Klasse SimulatorAntrieb in 05genetisch durch eine zweite Methode simulieren(phi0,omega0), der die Anfangsbedingungen für die Simulation mitgegeben werden.
- Rufen Sie diese neue Methode von berechneFehler(...) in FehlerfunktionAntrieb aus mehrmals mit unterschiedlichen Anfangsbedingungen auf und geben Sie den Gesamtfehler zurück.
|
- Modifizieren Sie die verwendeten Fuzzy-Regeln in der Klasse Antrieb.java so, dass sie dem an der Tafel entwickelten Entwurf entsprechen.
- Vergleichen Sie die Güte des alten und des neuen Parametersatzes für die Fuzzy-Regeln, insbesondere für Auslenkungen des Pendels von mehr als 90o.
|
- Versuchen Sie möglichst Regelparameter zu finden, die möglichst gut für beliebige Anfangsbedingungen der Simulation funktionieren.
|