Kennt sich jemand in AI-Entwicklung aus?
Ich arbeite mich gerade etwas in ANN und GA ein. Mein Ziel ist es eine AI für TicTacToe zu kreieren. Ich habe also eine Population von Individuen (ANNs), die pro Generation einmal jeder gegen jeden spielt - jeder darf mal anfangen. Leider konvergiert meine Fitnessfunktion sehr rapide auf einen fixen Wert.
Als Fitnessfunktion habe ich schon einiges ausprobiert, mit dem Ziel, dass die Fitness eines ANN nicht von der Spielweise eines anderen ANN abhängt. Messe ich die Fitness zum Beispiel an der Anzahl der gespielten Züge und der schwächere Gegner versagt schon beim ersten Zug, so wird das ja auch auf den stärkeren Spieler bezogen.
Vielversprechend klang für mich der Ansatz:
Code:
fitness = (gamesPlayed-badMoves)/gamesPlayed
Wenn nun der Gegner einen verbotenen Zug macht (bereits besetztes Feld), dann ist das nur dessen Problem. Allerdings konvergiert die Fitness auch hierbei ziemlich schnell.
Interessant ist auch, dass die Fitness nicht unbedingt ins Positive konvergiert. Die minimale und maximale Fitness einer Population pendelt um diesen Fixpunkt.
In der ersten Generation gilt meist maxFit != minFit und maxFit >endFit>minFit
Mit der Zeit überleben die stärkeren Individuen und es folgt:
maxFit == minFit == endFit.
Die maximale Fitness wird also kleiner.
Wie schaffe ich es, dass es eine Steigerung gibt? Mein Ziel ist es vorerst, dass die ANNs es schaffen nur legale Züge zu machen und danach erst darauf zu trainieren, welche Züge besser sind. Siege werden zwar belohnt aber Niederlagen nicht bestraft (Es gab noch keinen einzigen Sieg in 100 * 1000 Generationen * 99*99 Spielen!)
Für das crossover nutze ich entweder 'tournament Selection' oder 'Roulette Selection'. Für jedes Bit des Genoms wähle ich zufällig zwischen Vater und Mutter aus (Wahrscheinlichkeit ist basierend auf der Fitness).
1000-2000 Generationen und eine Population von 100 ANNs.
Mutationrate = 0.01-0.05
Ich habe auch schon probiert zufällig ein ANN durch ein komplett neues zu ersetzen um mehr Vielfalt zu erhalten.