Ein Scoring-Ansatz für Computergegner, der ausgeglichen werden muss


16

In dieser Frage geht es um eine Herangehensweise an Computergegner, die ich erstellt habe und die derzeit in mehreren Computerspielen verwendet wird oder für die geplant ist.

Hintergrund

Als ich letztes Jahr versuchte, einen Computergegner für ein Spiel namens "Minesweeper Flags" zu verbessern (kurze Beschreibung: Eine rundenbasierte Mehrspielerversion von Minesweeper, bei der Sie mehr Minen nehmen müssen als Ihr Gegner) , habe ich die Funktionsweise meiner Algorithmen stark verändert . Anstatt einen Ansatz wie if-else-if-else zu verwenden, verwende ich eine Reihe von "Scorern" mit festgelegten Gewichten, um den besten Zug zu bestimmen.

Man könnte meinen, dass es bei einem Spiel wie Minesweeper Flags nur darum geht, Züge zu machen, die die höchste Wahrscheinlichkeit bieten, eine Mine zu erobern, aber so einfach ist das nicht. Welche Bewegung der Computer ausführt, hängt normalerweise von verschiedenen Funktionen für diese bestimmte Bewegung im aktuellen Spielstatus ab. Beispiele für Funktionen:

  • Wie hoch ist die Wahrscheinlichkeit, dass dieser Schritt eine Mine einbringt?
  • Wie groß ist die Wahrscheinlichkeit, dass ich meinem Gegner hier etwas verrate?

Beschreibung des Systems

Das System funktioniert grundsätzlich so:

  1. "Pre-scorers": Für den aktuellen Spielstatus wird eine Voranalyse durchgeführt (in Bezug auf Minesweeper-Flags ist dies normalerweise: Berechnung aller Wahrscheinlichkeiten).
  2. "Scorer": Eine Reihe von normalen Scorern wird gebeten, die Punktzahl für jeden möglichen Zug zu ermitteln. Jeder Scorer wendet die Punktzahlen nach seinen eigenen Kriterien an. Die Torschützen können die Ergebnisse der durchgeführten Voranalyse überprüfen.
  3. Die im obigen Schritt berechneten Punktzahlen werden summiert und als Punktzahl für einen Zug festgelegt.
  4. Die Züge werden nach ihrer Punktzahl sortiert und geordnet, sodass alle Züge mit derselben Punktzahl den gleichen Rang erhalten.
  5. "Nachscorer": Das Ergebnis der oben genannten Aktion kann an "Nachscorer" gesendet werden, die die Möglichkeit haben, die Punktzahlen aller Felder nach den eigenen Regeln des Nachscorers nach Belieben zu ändern.

Wenn man eine Reihe von Pre-Scorern, Scorern (mit ihren Gewichten) und Post-Scorern kombiniert, wird dies zu einer so genannten Score-Konfiguration .

Beispielergebnis

Dies ist ein Beispiel für Punkte, die auf Minensuchflaggen angewendet wurden. Dies ist die Karte, die gewertet wurde:

Minesweeper Flags-Karte, die erzielt wurde

Und dies ist die Ausgabe einer tatsächlichen Score-Konfiguration. Es zeigt den Rang der möglichen Züge, wobei 1 der beste Rang ist und weiß hervorgehoben wurde:

Beispielausgabe des Scoring-Ansatzes

Dank des hochflexiblen Codes kann dieser Ansatz für AIs auch in andere Spiele eingefügt werden.

Vorteile und Nachteile

Nachfolgend sind einige Vor- und Nachteile dieses Systems aufgeführt, die ich mir vorstellen kann

Vorteile

  • Es ist sehr einfach, viele verschiedene Konfigurationen für AIs zu erstellen.
  • Es ist möglich, mit genetischen Algorithmen zu arbeiten: Jeder Schreiber hat ein zugehöriges Gewicht, das Gewicht kann zum Gen werden.
  • Mit einigen Tools kann überprüft werden, warum ein bestimmter Zug ausgeführt wurde und welche Torschützen hauptsächlich für diesen Zug verantwortlich waren
  • Mithilfe von Werkzeugen ist es möglich, eine Karte der Gesamtpunktzahl / Rangfolge möglicher Züge zu erstellen (wie im obigen Screenshot).
  • Durch Anwenden von Scores auf die Art und Weise, wie der Mensch spielt, ist es möglich, einen "#AI_Mirror" zu erstellen, der versucht, Bewegungen auszuführen, von denen er denkt, dass der Mensch sie ausführen würde

Nachteile

  • Es kann extrem schwierig sein, eine Score-Konfiguration "korrekt" anzupassen, um die KI so gut wie möglich zu spielen.

Fragen

  • Ist das System, das ich hier aufgebaut habe, in der KI-Welt weithin bekannt? Wie würde es in realen AI-Begriffen heißen?

  • Ist dieser Ansatz sinnvoll oder gibt es einen anderen Ansatz, den Sie empfehlen würden?

  • Welche Möglichkeiten bieten sich an, um das Ändern einer Score-Konfiguration zu vereinfachen?

In Bezug auf die letzte Frage bin ich mir der Möglichkeit bewusst, genetische Algorithmen zu verwenden, und bin mir auch der Tatsache bewusst, dass SARSA (und ich denke, dass meine Scorer der Beschreibung von Features mit Gewichten auf dieser Site ähneln, aber nach meinem Verständnis ist das nicht genau das, was ich erstellt habe Hier). Ich denke, dass ein Problem mit SARSA darin besteht, dass Sie die Belohnung erst kennen, wenn das Spiel vorbei ist. Der beste Zug ist oft ein Zug, der überhaupt keine Belohnung (eine Mine) gibt. Ihre aktuellen Gewinnchancen hängen sowohl von der aktuellen Punktzahl (wie viele Minen Sie und Ihr Gegner genommen haben) als auch davon ab, wie die aktuelle Karte aussieht.


Diese Frage wurde ursprünglich auf einer nicht mehr existierenden Website für künstliche Intelligenz gestellt .
Der für diesen Ansatz verwendete (Java-) Code wurde jetzt unter Code Review veröffentlicht .

Antworten:


7

Kurz gesagt, es ist ein Expertensystem (wie Fuzzy-Logik). Da Sie keinen Algorithmus ausführen, um basierend auf der Ausgabe eine Rückmeldung zu den Entscheidungsparametern durchzuführen, lernt dieser Algorithmus nicht wirklich. Feedback ist jedoch nicht der einzige Indikator dafür, ob ein Alogirthm AI ist. Man könnte argumentieren, dass wenn es sich auf eine Weise verhält, die intelligent erscheint, das alles ist, was zählt - besonders wenn das Spiel von einem menschlichen Gegner gespielt wird.

Die Art von Algorithmus, die Sie angegeben haben, ist wirklich eine parametrisierte Gleichung, die Art, die Sie in Versicherungsberechnungen finden. Nach jeder Bewegung ändert sich der Eingaberaum, der Algorithmus benötigt jedoch keinen Speicher für den vorherigen Status, sodass jede Bewegung als neue, separate Karte behandelt wird.

Verwendung genetischer Algorithmen

Es gibt zwei klare Optionen für genetische Algorithmen:

  • Verwenden Sie die Parameter für das Genom (wie Sie vorgeschlagen haben). Sie optimieren die Regeln, die Sie haben, aber Sie haben immer noch ein Expertensystem.
  • Verwenden Sie das Learning Classifier System (LCS), um die Regeln für Sie auszuwählen. Ein LCS ist eine Art genetischer Algorithmus, bei dem Sie sowohl die Regeln als auch die Parameter codieren. Die Konvergenz dauert länger und reagiert empfindlich auf die Fitnessfunktion. Ich denke, die daraus resultierende Spielweise könnte interessanter sein.

Simuliertes Glühen

Eine andere Möglichkeit, das Problem zu lösen, ist die Verwendung von Simulated Annealing (SA). Ihr Problem ist ein begrenzter Eingabebereich, und Sie können analytisch eine Funktion schreiben, die das beste Quadrat für ein bestimmtes Szenario findet. Mit Simulated Annealing finden Sie ein globales Optimum für Ihre Parameter.

Wenn ich es zu gut mache

Ich weiß, Sie möchten, dass der Algorithmus so gut wie möglich ist, aber vergessen Sie nicht, dass ein Mensch dagegen spielt. Es gibt eine taktisch perfekte Möglichkeit, solche deterministischen Spiele zu spielen, und wenn der KI-Spieler das macht, wäre es nur Glück, dass der Spieler gewinnt.


Ihre Antwort hat mir viel zum Lernen gegeben, vielen Dank! Obwohl ich mir nicht so sicher bin, stimme ich der Einstufung dieses bestimmten Spiels als "deterministisch" zu.
Simon Forsberg

Der Grund, warum ich dies für deterministisch halte, ist, dass die Anzahl der Möglichkeiten für ein bestimmtes Spiel begrenzt ist. Obwohl der menschliche Spieler scheinbar willkürliche Entscheidungen trifft, geschieht dies in einem so eng definierten Raum, dass es deterministisch ist. Als Faustregel gilt: Wenn Sie irgendwo einen Zufallszahlengenerator (oder einen externen Faktor, den Sie nicht kontrollieren) verwenden, ist dies stochastisch. Wenn nicht, ist es deterministisch.
Dr. Rob Lang

Nun, Minesweeper ist, würde ich sagen, stochastisch, da Sie den Inhalt eines Feldes erst kennen, wenn Sie den Versuch unternommen haben, es zu enthüllen.
Simon Forsberg

1
IMHO, das macht es nicht stochastisch. Es wäre stochastisch, wenn: bei gleichen Startbedingungen (dem versteckten Brett) das Ergebnis bei jedem Klicken auf das Quadrat anders ausfallen könnte.
Dr. Rob Lang

2
Stochastisch / deterministisch und vollständig beobachtbar / teilweise beobachtbar sind streng unterschiedliche orthogonale Eigenschaften. Per Definition (sagen wir Russel / Norvig "Wenn der nächste Zustand der Umgebung vollständig durch den aktuellen Zustand und die vom Agenten ausgeführte Aktion bestimmt wird ...") ist Minesweeper deterministisch, obwohl er nicht vollständig beobachtbar ist.
Peteris

0

Ja, die Technik, Punkte basierend auf bestimmten Aspekten der Position zuzuweisen, ist Standard beim Schreiben von AIs zum Spielen von Spielen. Zum Beispiel arbeiten fast alle Schachprogramme so, dass Positionen am wichtigsten anhand der verfügbaren Figuren bewertet werden, wobei kleinere Boni auf ihren Positionen basieren (z. B. Schachfiguren, die sich gegenseitig schützen). Sie versuchen dann, den besten verfügbaren Zug mithilfe eines gegnerischen Suchalgorithmus wie Alpha-Beta zu berechnen.

Eine gegnerische Suche könnte hier aufgrund des großen Verzweigungsfaktors schwierig sein - in jeder Position müssen die rechtlichen Schritte ein unbekanntes Quadrat markieren oder aufdecken. Andererseits ist es möglich, dass Sie den Verzweigungsfaktor durch Heuristiken erheblich reduzieren können. Zum Beispiel ist das Markieren oder Aufdecken eines Quadrats, von dem Sie nichts wissen, sehr selten der beste Zug. Wenn Sie die Standorte einiger nicht markierter Minen kennen, ist es wahrscheinlich die meiste Zeit der beste Schritt, eine von ihnen zu markieren. Die Aufrechterhaltung einer Umsetzungstabelle würde wahrscheinlich ebenfalls helfen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.