Bringen Sie einem neuronalen Netzwerk bei, ein Kartenspiel zu spielen

9

Ich schreibe gerade eine Engine, um ein Kartenspiel zu spielen, da es für dieses spezielle Spiel noch keine Engine gibt.

Ich hoffe, dass ich danach ein neuronales Netz in das Spiel einführen und lernen kann, das Spiel zu spielen.

Ich schreibe die Engine so, dass sie für einen KI-Spieler hilfreich ist. Es gibt Auswahlpunkte, und an diesen Punkten wird eine Liste gültiger Optionen angezeigt. Eine zufällige Auswahl könnte das Spiel spielen (wenn auch nicht gut).

Ich habe viel über neuronale Netze (hauptsächlich NEAT und HyperNEAT) gelernt und sogar meine eigene Implementierung erstellt. Ich bin mir immer noch nicht sicher, wie ich am besten eine KI erstellen kann, die alle Variablen in einem dieser Spieltypen berücksichtigt. Gibt es einen gemeinsamen Ansatz? Ich weiß, dass Keldon eine gute KI für RftG geschrieben hat, die eine anständige Komplexität aufweist. Ich bin mir nicht sicher, wie er es geschafft hat, eine solche KI aufzubauen.

Irgendein Rat? Ist es machbar? Gibt es dafür gute Beispiele? Wie wurden die Eingänge zugeordnet?

EDIT: Ich habe online gesucht und gelernt, wie neuronale Netze funktionieren und wie sie sich normalerweise auf die Bilderkennung oder die Steuerung eines einfachen Agenten beziehen. Ich bin mir nicht sicher, ob oder wie ich es anwenden würde, um eine Auswahl mit Karten zu treffen, die eine komplexe Synergie aufweisen. Jede Richtung, in die ich schauen sollte, wäre sehr dankbar.

Über das Spiel: Das Spiel ähnelt Magic: The Gathering. Es gibt einen Kommandanten, der Gesundheit und Fähigkeiten hat. Die Spieler haben einen Energiepool, mit dem sie Schergen und Zauber auf das Brett legen. Schergen haben Gesundheit, Angriffswerte, Kosten usw. Karten haben auch Fähigkeiten, die nicht einfach aufzuzählen sind. Karten werden aus der Hand gespielt, neue Karten werden aus einem Deck gezogen. Dies sind alles Aspekte, die das neuronale Netzwerk berücksichtigen sollte.

pcaston2
quelle
Hey, willkommen bei AI.SE! Aus heutiger Sicht erscheint es etwas zu weit gefasst, als dass wir es gut beantworten könnten. Glaubst du, du könntest es bearbeiten , um es ein wenig einzugrenzen? Vielen Dank!
Mithical
Während die Frage weit gefasst ist, ist sie eine offensichtliche und häufige Frage für jemanden, der neu auf dem Gebiet ist. Auch eine, bei der Antworten mit Google schwer zu finden sind (da sich die meisten Tutorials zu NN auf Bilderkennung und Sprachbeispiele zu konzentrieren scheinen). Ich denke, es verdient eine Antwort, die auf gute Ressourcen zu Ansätzen und Techniken für die Verwendung von NN zum Spielen von Spielen hinweist, in diesem Fall insbesondere von Kartenspielen.
user12889
Danke für die Rückmeldung. Ich habe meine Frage etwas bearbeitet. Jede Richtung zum Lernmaterial wäre hilfreich. Ich finde meistens Bilderkennung, wie Sie erwähnt haben. Ich bin lernbegierig und freue mich über eine große Anzahl empfohlener Lesungen und nicht nur über eine einfache Antwort.
pcaston2

Antworten:

3

Ich denke, Sie werfen eine gute Frage auf, insbesondere WRT, wie die Ein- und Ausgänge der NNs auf die Mechanik eines Kartenspiels wie MtG abgebildet werden, bei dem die verfügbaren Aktionen je nach Kontext stark variieren.

Ich habe keine wirklich zufriedenstellende Antwort zu bieten, aber ich habe Keldons Race for the Galaxy NN-basierte KI gespielt - stimme zu, dass es ausgezeichnet ist - und untersucht, wie es dieses Problem angegangen ist.

Der neueste Code für Keldons KI kann jetzt auf Github durchsucht und durchsucht werden .

Der AI-Code befindet sich in einer Datei . Es werden zwei unterschiedliche NNs verwendet, eine zum "Bewerten von Hand- und aktiven Karten" und die andere zum "Vorhersagen von Rollenentscheidungen".

Was Sie bemerken werden, ist, dass es eine angemessene Menge an Nicht-NN-Code verwendet, um die Spielmechanik zu modellieren. Sehr viel eine hybride Lösung.

Die Zuordnung des Spielzustands zur Auswertung NN erfolgt hier . Verschiedene relevante Merkmale sind One-Hot-codiert, z. B. die Anzahl der Waren, die in dieser Runde verkauft werden können.


Eine weitere hervorragende Fallstudie zur Zuordnung eines komplexen Spiels zu einem NN ist die Starcraft II-Lernumgebung, die Deepmind in Zusammenarbeit mit Blizzard Entertainment erstellt hat. Dieses Dokument gibt einen Überblick darüber, wie ein Starcraft-Spiel auf eine Reihe von Funktionen abgebildet wird, die ein NN interpretieren kann, und wie Aktionen von einem NN-Agenten für die Spielsimulation ausgegeben werden können.

Ben Hutchison
quelle
2

Dies ist völlig machbar, aber die Art und Weise, wie die Eingaben zugeordnet werden, hängt stark von der Art des Kartenspiels und der Art und Weise ab, wie es gespielt wird.

Ich werde einige Möglichkeiten berücksichtigen:

  1. Ist Zeit in diesem Spiel wichtig? Würde ein vergangener Schritt einen zukünftigen beeinflussen? In diesem Fall ist es besser, wiederkehrende neuronale Netze (LSTMs, GRUs usw.) zu verwenden.
  2. Möchten Sie, dass das Neuronale Netz aus den von Ihnen gesammelten Daten lernt oder selbst lernt? Wenn allein, wie? Wenn Sie Daten von sich selbst sammeln, die das Spiel zehn- oder hunderte Male spielen, es in das Neuronale Netz einspeisen und es von Ihnen lernen lassen, dann tun Sie etwas, das als "Verhaltensklonen" bezeichnet wird. Wenn Sie jedoch möchten, dass der NN selbstständig lernt, haben Sie zwei Möglichkeiten:

    a) Reinforcement Learning - RL ermöglicht es dem Neuronalen Netz zu lernen, indem es viele Male gegen sich selbst spielt .

    b) NEAT / Genetischer Algorithmus - Mit NEAT kann das Neuronale Netz mithilfe eines genetischen Algorithmus lernen.

Um jedoch genauer zu bestimmen, wie die Ein- und Ausgänge des Neuronalen Netzes codiert werden sollen, müsste ich mehr über das Kartenspiel selbst wissen.

TajyMany
quelle
Hallo, danke für die Antwort! Ich werde diese Bereiche untersuchen, um zu sehen, was zutrifft. Ich habe eine kurze Beschreibung des Spiels hinzugefügt, in der Hoffnung, dass dies für Sie eingegrenzt wird. Meine Engine unterstützt Undos, so dass dies in Verbindung mit NN nützlich sein kann. Da die Engine noch nicht fertig ist, habe ich kein Beispielset, aber ich plane, alle Spielverläufe vom Hosting-Server zwischen 2 Spielern zu speichern. Ich dachte darüber nach, die Rückausbreitung zu verwenden, um den Prozess zu beschleunigen.
pcaston2
Wenn der Spielstatus wichtig ist, aber nicht, wie Sie zu diesem Status gekommen sind , würden Sie dann sagen, dass die Zeit wichtig ist? Können Sie Beispiele für Spiele nennen, bei denen Zeit wichtig ist, und einige, bei denen Zeit keine Rolle spielt? Im Moment kann ich nur an Situationen denken, in denen der aktuelle Status wichtig ist (wer an der Reihe ist, welche bekannten Karten oder Spielsteine ​​wo sind), aber nicht wie Sie dorthin gekommen sind (das einzige, was zählt, ist, wo sie jetzt sind , nicht wo sie sind waren vor zwei Runden)
Simon Forsberg
2

Sie möchten auf jeden Fall, dass Ihr Netzwerk wichtige Informationen über das Spiel erhält, z. B. welche Karten der AI-Agent hat (ihre Werte und Typen), den Manavorrat, wie viele Karten auf dem Tisch und ihre Werte, die Anzahl der Runden und so weiter. Diese Dinge müssen Sie selbst herausfinden. Die Frage, die Sie sich stellen sollten, lautet: "Wenn ich diesen Wert hinzufüge, um einzugeben, wie und warum dies mein System verbessert." Aber das erste, was zu verstehen ist, ist, dass die meisten NNs eine konstante Eingabegröße haben, und ich würde annehmen, dass dies in diesem Spiel wichtig ist, da die Spieler eine andere Anzahl von Karten auf der Hand oder auf dem Tisch haben können. Wenn Sie beispielsweise NN wissen lassen möchten, welche Karten es hat, nehmen wir an, dass der Spieler maximal 5 Karten auf der Hand haben kann und jede Karte 3 Werte (Mana, Angriff und Gesundheit) haben kann, sodass Sie dies als 5 codieren können * 3 Vektor, wobei die ersten 3 Werte die Karte Nummer eins darstellen und so weiter. Was aber, wenn der Spieler derzeit 3 ​​Karten hat, wäre ein einfacher Ansatz, den letzten 6 Eingaben Nullen zuzuweisen. Dies kann jedoch zu Problemen führen, da einige Karten 0 Manakosten oder 0 Angriff haben können. Sie müssen also herausfinden, wie Sie dieses Problem lösen können. Sie können nach NN-Modellen suchen, die eine variable Eingabegröße verarbeiten können, oder herausfinden, wie die Eingabe als Vektor konstanter Größe codiert wird.

Zweitens sind Ausgänge auch Vektoren konstanter Größe. Bei dieser Art von Spiel kann es sich um einen Vektor handeln, der Aktionen codiert, die der Agent ausführen kann. Nehmen wir also an, wir haben drei Aktionen: Legen Sie eine Karte, überspringen Sie den Zug und geben Sie zu. Es kann sich also um einen Hot-Encoder handeln, z. B. wenn Sie einen 1 0 0-Ausgang haben. Dies bedeutet, dass der Agent eine Karte einsetzen sollte. Um zu wissen, welche Karte platziert werden soll, können Sie der Ausgabe ein weiteres Element hinzufügen, das eine Zahl im Bereich von 1 bis 5 erzeugt (5 ist die maximale Anzahl von Karten in der Hand).

Der wichtigste Teil beim Training eines neuronalen Netzwerks ist jedoch, dass Sie eine Verlustfunktion entwickeln müssen, die für Ihre Aufgabe geeignet ist. Vielleicht sind Standardverlustfunktionen wie Mean-Squared Loss oder L2 gut, vielleicht müssen Sie sie ändern, um Ihren Anforderungen zu entsprechen. Dies ist der Teil, in dem Sie eine Recherche durchführen müssen. Ich habe noch nie mit NEAT gearbeitet, aber wie ich richtig verstanden habe, verwendet es einen genetischen Algorithmus, um NN zu erstellen und zu trainieren, und GA verwendet eine Fitnessfunktion, um eine Person auszuwählen. Grundsätzlich müssen Sie wissen, welche Metrik Sie verwenden, um die Leistung Ihres Modells zu bewerten, und basierend auf dieser Metrik werden Sie die Parameter des Modells ändern.

PS. Es ist möglich, dieses Problem mit dem neuronalen Netzwerk zu lösen. Neuronale Netzwerke sind jedoch keine Magie und nicht die universelle Lösung für alle Probleme. Wenn Ihr Ziel darin besteht, dieses bestimmte Problem zu lösen, würde ich Ihnen auch empfehlen, sich mit der Spieltheorie und ihrer Anwendung in der KI zu befassen. Ich würde sagen, dass die Lösung dieses Problems komplexes Wissen aus verschiedenen Bereichen der KI erfordern würde.

Wenn Sie jedoch etwas über neuronale Netze lernen möchten, würde ich empfehlen, viel einfachere Aufgaben zu übernehmen. Beispielsweise können Sie NN implementieren, das für Benchmark-Datasets geeignet ist, z. B. NN, das Ziffern aus MNIST-Datasets klassifiziert. Der Grund dafür ist, dass viele Artikel über die Klassifizierung dieses Datensatzes geschrieben wurden und Sie viel lernen und schneller lernen, wenn Sie einfache Dinge implementieren.

Andrew
quelle
1

Ja. Es ist machbar.

Überblick über die Frage

Das Designziel des Systems scheint darin zu bestehen, einen gewinnbringenden strategischen Vorteil zu erzielen, indem ein oder mehrere künstliche Netzwerke in Verbindung mit einer Kartenspiel-Engine eingesetzt werden.

Die Frage zeigt ein allgemeines Bewusstsein für die Grundlagen des Spielens, wie in Morgenstern und von Neumans Spieltheorie dargelegt .

  • An bestimmten Punkten während des Spiels kann ein Spieler aufgefordert werden, einen Zug auszuführen.
  • Es gibt eine Reihe von Bewegungsoptionen, die den Spielregeln entsprechen.
  • Einige Strategien zur Auswahl eines Zuges führen über mehrere Spiele zu höheren Gewinnrekorden als andere Strategien.
  • Ein künstliches Netzwerk kann verwendet werden, um Spielstrategien zu entwickeln, die häufiger als zufällige Spielauswahl siegreich sind.

Andere Merkmale des Spiels können so offensichtlich sein oder auch nicht.

  • An jedem Bewegungspunkt gibt es einen Spielstatus, der von jeder Komponente benötigt wird, die zur Verbesserung des Spielerfolgs beiträgt.
  • Zusätzlich dazu, dass man nicht weiß, wann der Gegner bluffen wird, kann die geheime Reihenfolge der gemischten Karten in Kartenspielen das Äquivalent eines virtuellen Spielers einführen, dessen Bewegungen ungefähr zufällig sind.
  • In Spielen mit drei oder mehr Spielern kann die Signalisierung von Partnern oder potenziellen Partnern die Bestimmung der Gewinnspielstrategie zu jedem Zeitpunkt um ein komplexes Element erweitern. Aufgrund der Änderungen scheint dieses Spiel nicht so komplex zu sein.
  • Psychologische Faktoren wie Einschüchterung können ebenfalls eine Rolle beim Gewinnen des Spiels spielen. Ob der Motor dem Gegner ein Gesicht zeigt oder nicht, ist unbekannt, daher wird diese Antwort darüber hinweggehen.

Allgemeine Ansatzhinweise

Es gibt einen gemeinsamen Ansatz für die Zuordnung von Ein- und Ausgängen, aber in einer Stack Exchange-Antwort gibt es zu viel zu erklären. Dies sind nur einige Grundprinzipien.

  • Alle Modellierungen, die explizit durchgeführt werden können, sollten durchgeführt werden. Obwohl ein künstliches Netz theoretisch lernen kann, wie man Karten zählt (wobei die möglichen Positionen jeder der Karten verfolgt werden), kann dies ein einfacher Zählalgorithmus tun. Verwenden Sie daher den bekannten Algorithmus und geben Sie diese Ergebnisse in das künstliche Netzwerk ein Eingang.
  • Verwenden Sie als Eingabe alle Informationen, die mit der optimalen Ausgabe korreliert sind, verwenden Sie jedoch keine Informationen als Eingabe, die möglicherweise nicht mit der optimalen Ausgabe korrelieren können.
  • Codieren Sie Daten, um die Redundanz im Eingabevektor sowohl während des Trainings als auch während des automatisierten Spielens zu verringern. Abstraktion und Verallgemeinerung sind die beiden gängigen Wege, um dies zu erreichen. Die Feature-Extraktion kann als Werkzeug zum Abstrahieren oder Verallgemeinern verwendet werden. Dies kann sowohl an den Ein- als auch an den Ausgängen erfolgen. Ein Beispiel ist, dass wenn in diesem Spiel J> 10 auf die gleiche Weise wie A> K, K> Q, Q> J und 10> 9 ist, die Karten als ganze Zahl von 2 bis 14 oder 0 bis 12 von codiert werden subtrahieren eins. Codieren Sie die Farben als 0 bis 3 anstelle von vier Textzeichenfolgen.

Die Bilderkennungsarbeit ist nur aus der Ferne miteinander verbunden und unterscheidet sich zu stark vom Kartenspiel, um sie direkt zu verwenden, es sei denn, Sie müssen die Karten anhand eines visuellen Bildes erkennen. In diesem Fall ist möglicherweise LSTM erforderlich, um zu sehen, was die anderen Spieler für Züge ausgewählt haben. Das Erlernen von Gewinnstrategien würde höchstwahrscheinlich von MLP- oder RNN-Designs oder einem ihrer abgeleiteten künstlichen Netzwerkdesigns profitieren.

Was ein künstliches Netzwerk tun würde und Trainingsbeispiele

Die Hauptaufgabe künstlicher Netzwerke dieser Art besteht darin, eine Funktion aus Beispieldaten zu lernen. Wenn Sie die Bewegungssequenzen von echten Spielen haben, ist dies ein großer Vorteil für Ihr Projekt. Eine sehr große Anzahl von ihnen wird für das Training sehr hilfreich sein.

Es ist erwägenswert, wie Sie die Beispiele anordnen und ob und wie Sie sie kennzeichnen. Ohne die Kartenspielregeln ist es jedoch schwierig, eine verlässliche Richtung anzugeben. Ob es Partner gibt, ob es auf der Punktzahl basiert, ob die Anzahl der Züge zu einem Sieg und ein Dutzend anderer Faktoren die Parameter des Szenarios liefern, das für diese Entscheidungen erforderlich ist.

Pauken

Der wichtigste Rat, den ich geben kann, ist, nicht so viele allgemeine Artikel im Internet zu lesen, sondern einige Bücher und einige der Artikel zu lesen, die Sie zu den oben genannten Themen verstehen können. Suchen Sie dann einen Code, den Sie herunterladen können, und versuchen Sie es, nachdem Sie die Terminologie gut genug verstanden haben, um zu wissen, was heruntergeladen werden soll.

Dies bedeutet, dass Buchsuchen und akademische Suchen Sie viel eher in die richtige Richtung lenken als allgemeine Websuchen. Es gibt Tausende von Posern im allgemeinen Webspace, die KI-Prinzipien mit einer großen Anzahl von Fehlern erklären. Verlage von Büchern und wissenschaftlichen Artikeln fordern von ihren Autoren eine höhere Sorgfalt.

Douglas Daseeco
quelle