2017-05-15 5 views
2

Ich habe ein bestimmtes Spiel, das nicht buchstäblich Nullsummen ist, weil Punkte durch das Spiel während eines Matches vergeben werden, aber nahe daran, in dem Sinne, dass die Zahl von Die Gesamtpunkte haben eine klare Obergrenze. Je mehr Punkte Sie erzielen, desto weniger Punkte stehen Ihren Gegnern zur Verfügung. Das Spiel wird von 5 Spielern gespielt, ohne irgendwelche Teams.Verhindern Genetischer Algorithmus im Nullsummenspiel von der Zusammenarbeit

Ich mache einen genetischen Algorithmus spielen Runden gegen sich mit pseudo-zufälligen "Mutationen" zwischen den Generationen.

Aber nach ein paar hundert Generationen taucht immer ein Muster auf. Der Algorithmus endet stark zugunsten eines bestimmten Spielers (Beispiel: der Spieler, der zuerst spielt). Da die Mutationen, die die "besten Ergebnisse" liefern, als Grundlage für die nächste Generation dienen, scheint dies in Richtung einer Version von "Wenn du der erste Spieler bist, spiele diesen Weg (die Art ist eine sehr spezifische, aber ziemlich zufällige Technik, die gibt schlechte oder bestenfalls durchschnittliche Ergebnisse), und wenn nicht, dann spiele auf diese spezifische Weise, die indirekt, aber stark den ersten Spieler begünstigt ".

Für die nächsten Generationen beginnt der Spieler, dessen Zug stark favorisiert ist, völlig willkürlich zu mutieren, da er jede Runde gewinnt, egal was er tut, solange der Teil des Algorithmus, der diesen Spieler bevorzugt, noch intakt ist.

Ich bin auf der Suche nach einer Möglichkeit, diese spezielle Entwicklungsroute zu verhindern, aber ich kann nicht herausfinden, wie man den Sieg durch Ihre eigene Strategie mehr als Sieg belohnen kann, weil Ihnen viel geholfen wurde.

+0

Das gleiche genetische Algo. wird für alle Spieler verwendet (mit vielleicht separaten Mutationen pro Spieler)? Ich kenne die Evolution besser als genetische Algorithmen, aber das scheint ein inhärentes Problem zu sein.Sie haben im Wesentlichen das Äquivalent eines Bienenstocks entwickelt: Arbeitsbienen reproduzieren sich nicht, sondern arbeiten, um ihre Königin zu schützen (die ihre genetische Schwester ist). Das Optimierungsziel ist nicht "Ich gewinne", sondern "Dieser Algo produziert einen Gewinner." Anstatt dass alle Spieler denselben Algo verwenden. (Modulo-Mutationen), ich glaube, dass eine Anzahl von Algorithmen gleichzeitig (oder einzeln) entwickelt werden sollte. – jwimberley

+0

Eine Idee wäre, (während des Trainings) Spieler für Punkte zu bestrafen, die ihre Gegner erzielen. Oder möglicherweise Bonuspunkte vergeben, um mehr Punkte zu erzielen als jeder andere Spieler oder Gewichtspunkte nicht-linear. Ein großer Teil von Problemen wie diesen ist Experimentieren, also vermute ich, dass diese Frage für [so] etwas zu weit gefasst ist. – Dukeling

Antwort

1

Ich denke, das passiert, weil nur der Gewinner des Round Robbins Turnier auf jeder Generation befördert und mutiert wird. Am Anfang gewinnen Spieler mehr oder weniger zufällig, aber dann kommt eine Strategie, die eine Position begünstigt. Nun, ich denke, dass eine leichte Abweichung von dieser Strategie (pseudozufällige Mutationen) dazu führt, dass man nur die Spiele verliert, in denen man in der favorisierten Position ist, aber keine der anderen gewinnt, also wird man nie von dieser Strategie ablenken Gleichgewicht.

Sie könnten versuchen, mehr als eine Person pro Generation zu behalten und daraus Mutationen zu generieren. Aber ich bezweifle, dass dies helfen wird, und im besten Fall den Effekt verzögern. Denn bald wird sich der Code des besten Individuums auf alle verteilen. Dies scheint die Ursache des Problems zu sein.

Deshalb wäre mein Vorschlag, t Stämme zu haben, wo jeder Stamm x/t Individuen hat. Anstatt nun ein Round Robbin Turnier zu spielen, spielt jeder einzelne nur gegen die Individuen anderer Stämme. Dann behältst du das beste Individuum pro Stamm, mutierst und machst mit der nächsten Generation weiter. Damit die Stämme niemals Gene mischen.

0

Für mich scheint es, als ob es eine einfache Lösung gibt: spielen mehrere Spiele jede Auswertung.

Anstatt jede Generation nur ein Spiel zu testen, den Startspieler stark zu favorisieren, 5 Spiele spielen und verteilen, wer zuerst gleich beginnt (so startet jeder Spieler mindestens einmal).


Ich nehme an, Ihre Bevölkerung ist größer als 5, oder? Wie testen Sie die Genome gegeneinander? Sie sollten sie definitiv nicht nur ein Spiel spielen lassen, weil Sie vielleicht einen mittleren Spieler gegen 4 einfache Spieler gepaart haben, so dass es scheint, dass der mittlere Spieler besser ist.

+0

Vielleicht war ich unklar. Ich spiele mehrere Spiele in jeder Generation. Ich erstelle eine Population von x und spiele ein Spiel für jede mögliche Kombination von Spielern (alle zufällig anders mutiert) und behalte den, der die meisten Spiele gewonnen hat, und ich bin natürlich randomisiert die Startreihenfolge. Sie favorisieren nicht immer den ersten Spieler, aber sie bevorzugen immer eine bestimmte Startnummer, und solange dieser Teil des Codes nicht mutiert ist, entwickeln sie sich alle ziemlich zufällig für Aktionen, wenn sie sich in diesem "favorisiert" befinden "Position, denn das wird sowieso gewinnen –

Verwandte Themen