Dieses Tutorial verbessert eine genetische Algorithmussimulation durch das Hinzufügen von Funktionen wie Elite-Hervorhebung, erhöhter Hinderniskomplexität, einem „Erreicht“-Zähler und Crossover-Züchtung. Lassen Sie uns die Verbesserungen aufschlüsseln.
Teil 1: Visuelle Verbesserungen und Hinderniskomplexität
Die Simulation wurde verbessert, um Elite-Punkte (die in der vorherigen Generation am besten abschneiden) durch blaue Einfärbung visuell zu unterscheiden. Dies wird erreicht, indem der is_elite
-Methode der Dot
-Klasse ein boolescher Parameter draw
hinzugefügt und die blaue Farbe bedingt angewendet wird. Die Population
-Methode der draw
-Klasse wird so geändert, dass sie diesen booleschen Wert basierend darauf übergibt, ob sich ein Punkt in der elites
-Liste befindet.
Die Hindernisgenerierung wurde für mehr Flexibilität überarbeitet. Obstacle
- und Goal
-Klassen werden in eine separate obstacles.py
-Datei verschoben, was eine sauberere Codeorganisation fördert. Eine constants.py
-Datei wird eingeführt, um globale Variablen wie Bildschirmabmessungen und Bevölkerungsgröße zu speichern und so Redundanz zwischen Dateien zu verhindern. In OBSTACLES0
sind mehrere Hinderniskonfigurationen (OBSTACLES1
, OBSTACLES2
, OBSTACLES3
, OBSTACLES4
, OBSTACLES5
, obstacles.py
) definiert, die einen einfachen Wechsel zwischen verschiedenen Herausforderungsstufen ermöglichen. Das Hauptskript importiert diese Konfigurationen und wählt die gewünschte aus. Es wird eine Prüfung hinzugefügt, um sicherzustellen, dass das Ziel immer vorhanden ist, auch wenn Hindernislisten verwendet werden, die über Listenverständnisse generiert wurden (wie OBSTACLES4
).
Ein „Erreicht“-Zähler wird hinzugefügt, um die Anzahl der Punkte anzuzeigen, die das Ziel in der vorherigen Generation erfolgreich erreicht haben. Dies wird durch Ändern der generate_next_generation
-Methode in der Population
-Klasse implementiert, um diesen Wert zu zählen und zurückzugeben. Die Hauptschleife zeigt diesen Zählerstand dann auf dem Bildschirm an.
Teil 2: Implementierung von Single-Point Crossover
Die Simulation geht von der Replikation zum Single-Point-Crossover für die Nachkommenerzeugung über. Eine crossover
-Klassenmethode wird zur Dot
-Klasse hinzugefügt. Diese Methode verwendet zwei Elternpunkte als Eingabe, wählt einen zufälligen Kreuzungspunkt aus und erstellt zwei Nachkommen, indem Teile der Bewegungssequenz jedes Elternteils kombiniert werden (dargestellt als Liste von Richtungsvektoren). Die generate_next_generation
-Methode wurde aktualisiert, um diese Crossover-Methode zu nutzen und Paare von Nachkommen anstelle einzelner Klone zu erzeugen. Die Mutation wird weiterhin auf die Nachkommen angewendet.
Die verbesserte Simulation bietet eine verbesserte Visualisierung, einen anpassbaren Schwierigkeitsgrad und einen ausgefeilteren Zuchtmechanismus, was sie zu einem robusteren und aufschlussreicheren Beispiel eines genetischen Algorithmus macht. Zu den erwähnten zukünftigen Verbesserungen gehören die Speicher-/Ladefunktion und die Geschwindigkeitsoptimierung. Der Autor empfiehlt außerdem, seiner Discord-Community für eine weitere Zusammenarbeit beizutreten.
Das obige ist der detaillierte Inhalt vonPunktesimulation mit genetischem Algorithmus – Teil 2. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!