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.
quelle
Antworten:
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.
quelle
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:
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.
quelle
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.
quelle
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 .
Andere Merkmale des Spiels können so offensichtlich sein oder auch nicht.
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.
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.
quelle