Frage

Ich habe ein Spiel-Programm für einen Wettbewerb geschrieben, die auf etwa 16 Floating-Point „Konstanten“ beruht. kann eine konstante ändern und auf die Spielweise und Erfolgsquote dramatische Auswirkungen haben.

Ich habe auch einen einfachen genetischen Algorithmus zu erzeugen, um die optimalen Werte für die Konstanten geschrieben. Allerdings ist der Algorithmus nicht „optimal“ Konstanten erzeugen.

Die wahrscheinlichen Gründe:

  • Der Algorithmus hat Fehler (für die Zeitregel ist dies aus!)
  • Die Bevölkerung ist zu klein
  • Die mutieren Rate ist zu hoch
  • Die Maat Rate könnte besser sein

Der Algorithmus geht wie folgt aus:

  • Zuerst wird die Anfangspopulation wird erstellt
  • Anfängliche Konstanten für jedes Mitglied zugeordnet sind (auf der Grundlage meiner Bias mit einem Zufallsfaktor multipliziert, zwischen 0,75 und 1,25)
  • für jede Generation Mitglieder der Bevölkerung für ein Spiel Spiel gepaart
  • Der Gewinner wird zweimal geklont, wenn beide einmal
  • geklonte remis
  • Das Klonieren eines Gens mutiert, wenn random () weniger als mutieren Rate
  • Mutation vervielfacht eine zufällige Konstante mit einem zufälligen Faktor zwischen 0,75 und 1,25
  • In festen Intervallen, abhängig von Mate Rate werden die Mitglieder gepaart und Gene sind gemischt

Meine aktuellen Einstellungen:

  • Bevölkerung: 40 (zu niedrig)
  • Mutate Rate 0,10 (10%)
  • Mate-Rate 0,20 (alle 5 Generationen)

Was bessere Werte für die Bevölkerungsgröße, mutiert Rate und Mate Rate wäre?

Guesses sind willkommen, sind genaue Werte nicht zu erwarten! Auch, wenn Sie Einblicke mit ähnlichen genetischen Algorithmen haben, werden Sie zu teilen möchten, tun Sie dies bitte.

PS: Das Spiel Spiel Wettbewerb in Frage, wenn jemand interessiert ist: http://ai-contest.com/

War es hilfreich?

Lösung

Ihre Mutation Größe scheint mir überraschend hoch. Es gibt auch ein wenig Bias in ihm steckt -. Desto größer ist der aktuelle Wert ist, desto größer wird die Mutation sein

Sie sollten erwägen

  1. Mit einem (viel!) Kleiner Mutation
  2. Geben Sie die Mutation einen festen Bereich
  3. Ihre Mutation Verteilen Größen unterschiedlich - z.B. Sie könnten eine Normalverteilung mit einem Mittelwert von 1 verwendet werden.

R. A. Fisher einmal die Mutation Größe im Vergleich mit einem Mikroskop zu fokussieren. Wenn Sie den Fokus ändern, können Sie in die richtige Richtung, oder die falsche Richtung gehen. Wenn Sie jedoch ziemlich nah am Optimum sind und es viel drehen - entweder Sie in der falschen Richtung gehen, oder Sie werden das Ziel hinausschießen. So ein subtiler Tweak ist im Allgemeinen besser!

Andere Tipps

Mit GAUL Rahmen, es ist wirklich einfach, so dass Sie Ihre Zielfunktion extrahieren könnte es zu GAUL stopfen. Wenn Sie ein Multi-Core-Maschine haben, dann würden Sie verwenden möchten omp (OpenMP) beim Kompilieren Ihre Auswertungen parallelisieren (das nehme ich an zeit consumming). Auf diese Weise können Sie eine größere Bevölkerungszahl haben. http://gaul.sourceforge.net/

Normalerweise verwenden sie hohe Crossover und niedrige Mutation. Da Sie Kreativität wollen empfehle ich Ihnen hohe Mutation und niedrige Crossover. http://games.slashdot.org/story/10/11/02/0211249/Developing-emStarCraft-2em-Build-Orders-With-Genetic-Algorithms? from = rss

Seien Sie vorsichtig wirklich in Ihrer Mutation Funktion in Ihrem Raum sucht (innen 0,75, 1,25) zu bleiben. Verwendung GAUL Zufallsfunktion wie random_double (min, max). Sie sind wirklich gut gestaltet. Bauen Sie Ihre eigene Mutation Funktion. Stellen Sie sicher, Eltern stirbt!

Dann möchten Sie können dies mit einem simplex (Nelder-Mead) kombinieren, in GAUL enthielt, da die genetische Programmierung mit niedrigem Crossover eine nicht optimale Lösung finden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top