Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Bewertungsfunktion per Evolution verbessern
lutz - Fr 09.01.09 13:49
Titel: Bewertungsfunktion per Evolution verbessern
hallo
ich habe ein viergewinnt mit ki programmiert.
Das läuft auch alles. Die KI ist auch recht vernünftig, allerding habe ich hier
http://www.delphi-forum.de/viewtopic.php?t=59658&start=0&postorder=asc
gelesen, dass man die Koeffizienten per Evolution optimieren kann.
Da schreibt alzaimar auf Seite 4
Zitat: |
Sei A der Satz von Koeffizienten.
1. Erstelle eine Kopie (B) von A.
2. Mutiere B, indem Du irgendeinen Koeffizienten veränderst.
3. Lass A gegen B spielen (10x) und dann B gegen A (auch 10x).
4. Wenn B öfter gewonnen hat, als A, dann ist wohl der veränderte Koeffizientensatz besser. Ersetze A mit B und mach bei 1 weiter.
5. Wenn B öfter verloren hat, war B wohl keine gute Idee, mach bei 1 weiter.
Anmerkung zu 2: Die Veränderung sollte nach der Gaußschen Verteilung geschehen. Ich meine, in der Math-Unit ist so eine Random-Funktion. |
Meine Frage
Wenn ich A gegen B spielen lasse, müsste da nicht immer das selbe Ergebnis rauskommen?
Also entweder A gewinnt immer, B gewinnt immer oder immer unentschieden?
Weil der Computer macht ja immer die selben Rechenschritte.
Weshalb sollte man die dann 10x gegeneinander spielen lassen?
lutz
JayEff - Fr 09.01.09 15:11
Das kommt darauf an, was "Spielen" ist. Bei Kniffel würde ich es schon 10 mal laufen lassen, oder bei Mensch Ärgere dich Nicht, weil (durch das Werfen der Würfel) eine Zufallskomponente im Spiel ist. Wenn ich aber ein Spiel wie 4 Gewinnt habe und meine KI ohne Zufall arbeitet, kannst ich natürlich getrost nur 1 Spiel machen.
lutz - Fr 09.01.09 15:19
ok danke
hab auch mal die evolution bei mir implementiert und es kommt auch immer dasselbe raus
aber wie bewerte ich, ob ein Satz neuer Koeffizienten besser ist als der alte?
ich lasse A gegen B spielen
ich lasse B gegen A spielen
wenn A 2 mal gewinnt ist A besser. Klar. Das selbe gilt für B.
Aber was ist, wenn A und B einmal gewinnt?
Wie bewerte ich das dann?
oder sollte ich für die Ki 2 Sätze Koeffizienten erzeugen.
Also einer, wenn PC anfängt und einer wenn Mensch anfängt?
JayEff - Fr 09.01.09 16:29
das könntes du natürlich machen, 2 verschiedene Verhalten für die Fälle wer anfängt, könnte eine gute optimierung und einen stärkeren Gegner erzeugen.
Wenn du das machst, kannst du natürlich *nur* die "KI beginnt" sätze mit ihresgleichen vergleichen und umgekehrt, indem du sie gegen die gleichen Gegner spielen lässt. KI-beginnt und Spieler-beginnt Evolutionen musst du dann getrennt voneinander durchführen...
Ich denke, du musst dann zunächst einen der beiden Sätze optimieren (Gegner nicht wechseln, wer anfängt ebenso nicht wechseln), dann den nächsten gegen den optimierten ersten, dann wieder umgekehrt. Dabei wirst du wohl eine "Abbruchbedingung" einbauen müssen, ich denke, je nach Spiel kann es vorkommen, dass man in eine art endlosschleife kommt.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!