Wie trainiere ich ein künstliches neuronales Netzwerk, um Diablo 2 mit visuellen Eingaben zu spielen?


138

Ich versuche gerade, eine ANN dazu zu bringen, ein Videospiel zu spielen, und ich hatte gehofft, Hilfe von der wunderbaren Community hier zu bekommen.

Ich habe mich für Diablo 2 entschieden. Das Spiel ist also in Echtzeit und aus isometrischer Sicht, wobei der Spieler einen einzelnen Avatar steuert, auf den die Kamera zentriert ist.

Um die Dinge konkret zu machen, besteht die Aufgabe darin, deinen Charakter x Erfahrungspunkte zu erhalten, ohne dass seine Gesundheit auf 0 sinkt, wobei Erfahrungspunkte durch das Töten von Monstern gewonnen werden. Hier ist ein Beispiel für das Gameplay:

Hier

Da ich nun möchte, dass das Netz nur auf der Grundlage der Informationen arbeitet, die es von den Pixeln auf dem Bildschirm erhält, muss es eine sehr reichhaltige Darstellung lernen, um effizient spielen zu können, da dies vermutlich erfordern würde, dass es (zumindest implizit) weiß, wie Teilen Sie die Spielwelt in Objekte auf und wie Sie mit ihnen interagieren können.

Und all diese Informationen müssen irgendwie ins Netz gebracht werden. Ich kann mir für mein ganzes Leben nicht vorstellen, wie ich dieses Ding trainieren soll. Meine einzige Idee ist, ein separates Programm zu haben, das etwas von Natur aus Gutes / Schlechtes im Spiel (z. B. Gesundheit, Gold, Erfahrung) visuell vom Bildschirm extrahiert und diesen Wert dann in einem Verstärkungslernverfahren verwendet. Ich denke, das wird Teil der Antwort sein, aber ich denke nicht, dass es ausreichen wird. Es gibt einfach zu viele Abstraktionsebenen von rohen visuellen Eingaben bis hin zu zielorientiertem Verhalten, als dass ein derart begrenztes Feedback ein Netz in meinem Leben trainieren könnte.

Meine Frage: Welche anderen Möglichkeiten können Sie sich vorstellen, um ein Netz zu trainieren, um zumindest einen Teil dieser Aufgabe zu erledigen? vorzugsweise ohne Tausende von markierten Beispielen zu machen.

Nur für ein bisschen mehr Richtung: Ich suche nach anderen Quellen für verstärkendes Lernen und / oder nach unbeaufsichtigten Methoden, um nützliche Informationen in dieser Umgebung zu extrahieren. Oder ein überwachter Algorithmus, wenn Sie sich eine Möglichkeit vorstellen können, beschriftete Daten aus einer Spielwelt herauszuholen, ohne sie manuell beschriften zu müssen.

UPDATE (27.04.12):

Seltsamerweise arbeite ich immer noch daran und scheine Fortschritte zu machen. Das größte Geheimnis, um einen ANN-Controller zum Laufen zu bringen, ist die Verwendung der fortschrittlichsten ANN-Architekturen, die für die Aufgabe geeignet sind. Daher habe ich ein tiefes Glaubensnetz verwendet, das aus faktorisierten, bedingten, eingeschränkten Boltzmann-Maschinen besteht , die ich unbeaufsichtigt trainiert habe (auf einem Video, in dem ich das Spiel spiele), bevor ich eine Feinabstimmung mit zeitlicher Differenz-Rückausbreitung (dh Verstärkungslernen mit Standard) vorgenommen habe Feed-Forward-ANNs).

Ich suche aber immer noch nach wertvolleren Informationen, insbesondere zum Problem der Aktionsauswahl in Echtzeit und zum Codieren von Farbbildern für die ANN-Verarbeitung :-)

UPDATE (21.10.15):

Ich erinnere mich nur daran, dass ich diese Frage früher gestellt habe und dachte, ich sollte erwähnen, dass dies keine verrückte Idee mehr ist. Seit meinem letzten Update hat DeepMind sein Naturpapier veröffentlicht, in dem es darum geht, neuronale Netze dazu zu bringen, Atari-Spiele über visuelle Eingaben zu spielen . In der Tat ist das einzige, was mich daran hindert, ihre Architektur zum Spielen zu verwenden, eine begrenzte Teilmenge von Diablo 2, der fehlende Zugriff auf die zugrunde liegende Spiel-Engine. Das Rendern auf dem Bildschirm und das anschließende Umleiten an das Netzwerk ist viel zu langsam, um in angemessener Zeit zu trainieren. Daher werden wir wahrscheinlich nicht sehen, dass diese Art von Bot bald Diablo 2 spielt, sondern nur, weil es entweder Open Source oder mit API-Zugriff auf das Rendering-Ziel spielt. (Beben vielleicht?)


1
Schauen Sie sich dieses Papier an. : D ri.cmu.edu/pub_files/pub2/pomerleau_dean_1992_1/…
Zergylord

Ein großer Unterschied zwischen dem Fahrproblem in der Zeitung und einem Spiel besteht darin, dass bei dem Fahrproblem die visuelle Eingabe eine ausreichend vollständige Zustandsdarstellung ist: Wenn sich rechts ein Hindernis befindet, biegen Sie links ab, wenn sich links ein Hindernis befindet richtig. In einem Spiel müssen Sie jedoch häufig Entscheidungen treffen, die auf Dingen basieren, die nicht auf dem Bildschirm angezeigt werden. Jedes Mal, wenn Sie einen Shop betreten, sieht er möglicherweise gleich aus, Sie müssen jedoch verschiedene Artikel kaufen.
Don Reba

1
Um das Beste aus meiner Erinnerung zu machen, verwendet Diablo 2 leicht zu extrahierende Sprite-Blätter. Es sollte ziemlich einfach sein, Objekte (Spieler, Feinde usw.) an eine Liste der zugehörigen Sprites zu binden. Es löst nicht das Problem, dass Objekte voneinander verdeckt werden, aber es ist ein Anfang.
Ryan Jenkins

@zergylord Es wäre hilfreich, wenn Sie sagen könnten, wie fest Sie Ihre Kriterien einhalten möchten: a) Spielen von Diablo 2 und b) Verwenden von auf dem Bildschirm gezeichneten Pixeln als einzige Eingabequelle. Wenn Sie es sich leichter machen wollen, müssen Sie wahrscheinlich einen (oder beide) davon ein wenig entspannen - sind Sie dazu bereit?
Stompchicken

1
Abstimmung zu schließen als zu breit.
Ciro Santilli 法轮功 冠状 病 六四 事件 8

Antworten:


53

Ich kann sehen, dass Sie sich Sorgen darüber machen, wie Sie die ANN trainieren sollen, aber dieses Projekt verbirgt eine Komplexität , die Sie möglicherweise nicht kennen. Die Erkennung von Objekten / Charakteren bei Computerspielen durch Bildverarbeitung ist eine äußerst herausfordernde Aufgabe (nicht verrückt nach FPS- und RPG-Spielen). Ich zweifle nicht an Ihren Fähigkeiten und ich sage auch nicht, dass dies nicht möglich ist, aber Sie können problemlos 10x mehr Zeit damit verbringen, Dinge zu erkennen, als das ANN selbst zu implementieren (vorausgesetzt, Sie haben bereits Erfahrung mit der digitalen BildverarbeitungBildverarbeitungstechniken ).

Ich finde Ihre Idee sehr interessant und auch sehr ehrgeizig . An dieser Stelle möchten Sie es vielleicht noch einmal überdenken. Ich spüre, dass Sie dieses Projekt für die Universität planen. Wenn der Schwerpunkt der Arbeit also wirklich auf ANN liegt, sollten Sie sich wahrscheinlich ein anderes Spiel aussuchen, etwas Einfacheres.

Ich erinnere mich, dass jemand anderes vor nicht allzu langer Zeit nach Tipps für ein anderes, aber irgendwie ähnliches Projekt gesucht hat. Es lohnt sich, es sich anzusehen.

Andererseits gibt es möglicherweise bessere / einfachere Ansätze zum Identifizieren von Objekten im Spiel, wenn Sie Vorschläge annehmen. Aber zuerst nennen wir dieses Projekt das, was Sie wollen: einen Smart-Bot .

Eine Methode zum Implementieren von Bots greift auf den Speicher des Spielclients zu, um relevante Informationen zu finden, z. B. die Position des Charakters auf dem Bildschirm und seine Gesundheit. Das Lesen des Computerspeichers ist trivial, aber nicht genau herauszufinden, wo im Speicher gesucht werden muss. Speicherscanner wie Cheat Engine können dabei sehr hilfreich sein.

Eine andere Methode , die unter dem Spiel funktioniert, besteht darin, die Renderinformationen zu manipulieren. Alle Objekte des Spiels müssen auf dem Bildschirm gerendert werden. Dies bedeutet, dass die Positionen aller 3D-Objekte schließlich zur Verarbeitung an die Grafikkarte gesendet werden. Seien Sie bereit für ernsthaftes Debuggen.

In dieser Antwort habe ich kurz zwei Methoden beschrieben, um durch Bildverarbeitung das zu erreichen, was Sie wollen. Wenn Sie an ihnen interessiert sind, finden Sie weitere Informationen zu Exploiting Online Games (Kapitel 6), einem hervorragenden Buch zu diesem Thema.


42

UPDATE 26.07.2018: Das war's! Wir nähern uns jetzt dem Punkt, an dem diese Art von Spiel lösbar sein wird! Mit OpenAI und basierend auf dem Spiel DotA 2 könnte ein Team eine KI erstellen , die semiprofessionelle Spieler in einem 5-gegen-5-Spiel schlagen kann . Wenn Sie DotA 2 kennen, wissen Sie, dass dieses Spiel in Bezug auf die Mechanik Diablo-ähnlichen Spielen ziemlich ähnlich ist, aber man könnte argumentieren, dass es aufgrund des Teamspiels noch komplizierter ist.

Wie erwartet wurde dies dank der neuesten Fortschritte beim verstärkten Lernen mit Deep Learning und der Verwendung von Open-Game-Frameworks wie OpenAI erreicht, die die Entwicklung einer KI erleichtern, da Sie eine ordentliche API erhalten und das Spiel beschleunigen können (die KI spielte) das entspricht 180 Jahren Gameplay gegen sich selbst jeden Tag!).

Am 5. August 2018 (in 10 Tagen!) Ist geplant, diese KI gegen Top-DotA-2-Spieler auszuspielen. Wenn dies klappt, erwarten Sie eine große Revolution, die vielleicht nicht so mediatisiert ist wie die Lösung des Go-Spiels, aber dennoch ein großer Meilenstein für die KI der Spiele sein wird!

UPDATE 2017-01: Das Feld bewegt sich seit dem Erfolg von AlphaGo sehr schnell und es gibt neue Frameworks, die die Entwicklung von Algorithmen für maschinelles Lernen für Spiele fast jeden Monat erleichtern. Hier ist eine Liste der neuesten, die ich gefunden habe:

  • OpenAIs Universum : Eine Plattform, um praktisch jedes Spiel mit maschinellem Lernen zu spielen . Die API befindet sich in Python und führt die Spiele hinter einer VNC-Remotedesktopumgebung aus, sodass die Bilder jedes Spiels erfasst werden können! Sie können wahrscheinlich Universe verwenden, um Diablo II über einen Algorithmus für maschinelles Lernen zu spielen!
  • OpenAI's Gym : Ähnlich wie Universe, aber speziell auf Verstärkungslernalgorithmen ausgerichtet (es ist also eine Art Verallgemeinerung des von AlphaGo verwendeten Frameworks, aber auf viel mehr Spiele). Es gibt einen Kurs über Udemy , der die Anwendung des maschinellen Lernens auf Spiele wie Breakout oder Doom mit OpenAI Gym behandelt.
  • TorchCraft : eine Brücke zwischen Torch (Framework für maschinelles Lernen) und StarCraft: Brood War.
  • pyGTA5 : Ein Projekt zum Bau selbstfahrender Autos in GTA5, bei dem nur Screenshots verwendet werden (mit vielen Online-Videos ).

Sehr aufregende Zeiten!

WICHTIGES UPDATE (2016-06): Wie von OP festgestellt, wird dieses Problem des Trainings künstlicher Netzwerke zum Spielen von Spielen nur mit visuellen Eingaben jetzt von mehreren seriösen Institutionen angegangen, mit vielversprechenden Ergebnissen wie DeepMind Deep-Qlearning-Network (DQN) ) .

Und jetzt, wenn Sie sich der nächsten Herausforderung stellen möchten, können Sie eine der verschiedenen AI Vision-Spieleentwicklungsplattformen wie ViZDoom verwenden , eine hochoptimierte Plattform (7000 fps), um Netzwerke für das Spielen von Doom zu trainieren, wobei nur visuelle Eingaben verwendet werden ::

Mit ViZDoom können KI-Bots entwickelt werden, die Doom nur mit den visuellen Informationen (dem Bildschirmpuffer) spielen. Es ist in erster Linie für die Erforschung des maschinellen visuellen Lernens und insbesondere des vertieften Lernens gedacht. ViZDoom basiert auf ZDoom, um die Spielmechanik bereitzustellen.

Und die Ergebnisse sind ziemlich erstaunlich. Sehen Sie sich die Videos auf ihrer Webseite und das nette Tutorial (in Python) hier an!

Es gibt auch ein ähnliches Projekt für Quake 3 Arena namens Quagents , das auch einen einfachen API-Zugriff auf zugrunde liegende Spieldaten bietet. Sie können es jedoch verschrotten und nur Screenshots und die API verwenden, um Ihren Agenten zu steuern.

Warum ist eine solche Plattform nützlich, wenn wir nur Screenshots verwenden? Selbst wenn Sie nicht auf zugrunde liegende Spieldaten zugreifen, bietet eine solche Plattform:

  • Hochleistungsimplementierung von Spielen (Sie können mehr Daten / Spiele / Lerngenerationen mit weniger Zeit generieren, damit Ihre Lernalgorithmen schneller konvergieren können!).
  • Eine einfache und reaktionsschnelle API zur Steuerung Ihrer Agenten (dh wenn Sie versuchen, menschliche Eingaben zur Steuerung eines Spiels zu verwenden, gehen möglicherweise einige Ihrer Befehle verloren, sodass Sie auch mit der Unzuverlässigkeit Ihrer Ausgaben umgehen müssen ...).
  • Einfache Einrichtung von benutzerdefinierten Szenarien .
  • anpassbares Rendering (kann nützlich sein, um die Bilder zu "vereinfachen", die Sie erhalten, um die Verarbeitung zu vereinfachen)
  • synchronisiertes Spielen ("Turn-by-Turn") (damit Ihr Algorithmus zunächst nicht in Echtzeit arbeitet, ist dies eine enorme Reduzierung der Komplexität).
  • Zusätzliche Komfortfunktionen wie plattformübergreifende Kompatibilität, Retrokompatibilität (Sie riskieren nicht, dass Ihr Bot bei einem neuen Spielupdate nicht mehr mit dem Spiel arbeitet) usw.

Zusammenfassend ist das Tolle an diesen Plattformen, dass sie viele der vorherigen technischen Probleme, mit denen Sie sich befassen mussten (wie man Spieleingaben manipuliert, Szenarien einrichtet usw.), lindern , so dass Sie sich nur mit dem Lernalgorithmus befassen müssen selbst.

Also mach dich jetzt an die Arbeit und mache uns zum besten visuellen KI-Bot aller Zeiten;)


Alter Beitrag , der die technischen Probleme bei der Entwicklung einer KI beschreibt, die sich nur auf visuelle Eingaben stützt:

Im Gegensatz zu einigen meiner oben genannten Kollegen halte ich dieses Problem nicht für unlösbar. Aber es ist sicherlich eine harte Sache!

Das erste Problem, auf das oben hingewiesen wurde, ist das der Darstellung des Status des Spiels : Sie können nicht den vollständigen Status mit nur einem einzigen Bild darstellen, sondern müssen eine Art von Bild beibehalten Auswendiglernen(Gesundheit, aber auch ausgerüstete Objekte und verfügbare Gegenstände, Quests und Ziele usw.). Um solche Informationen abzurufen, haben Sie zwei Möglichkeiten: entweder durch direkten Zugriff auf die Spieldaten, die am zuverlässigsten und einfachsten sind; Oder Sie können eine abstrakte Darstellung dieser Informationen erstellen, indem Sie einige einfache Verfahren implementieren (Inventar öffnen, Screenshot machen, Daten extrahieren). Natürlich müssen Sie beim Extrahieren von Daten aus einem Screenshot entweder eine überwachte Prozedur (die Sie vollständig definieren) oder eine unbeaufsichtigte Prozedur (über einen Algorithmus für maschinelles Lernen, aber dann wird die Komplexität erheblich vergrößert ...). Für unbeaufsichtigtes maschinelles Lernen müssen Sie eine neuere Art von Algorithmen verwenden, die als strukturelle Lernalgorithmen bezeichnet werden (die die Struktur von Daten lernen, anstatt sie zu klassifizieren oder einen Wert vorherzusagen).http://techtalks.tv/talks/54422/

Ein weiteres Problem ist, dass das Spiel nur teilweise beobachtbar ist, selbst wenn Sie alle benötigten Daten abgerufen haben . Daher müssen Sie ein abstraktes Modell der Welt einfügen und es mit verarbeiteten Informationen aus dem Spiel füttern, z. B. dem Standort Ihres Avatars, aber auch dem Standort von Questgegenständen, Zielen und Feinden außerhalb des Bildschirms. Vielleicht schauen Sie sich dazu Mixture Particle Filters von Vermaak 2003 an.

Außerdem benötigen Sie einen autonomen Agenten , dessen Ziele dynamisch generiert werden. Eine bekannte Architektur, die Sie ausprobieren können, ist der BDI-Agent. Sie müssen sie jedoch wahrscheinlich anpassen, damit diese Architektur in Ihrem praktischen Fall funktioniert. Alternativ gibt es auch das rekursive Petri-Netz, das Sie wahrscheinlich mit allen Arten von Variationen der Petri-Netze kombinieren können, um das zu erreichen, was Sie möchten, da es sich um ein sehr gut untersuchtes und flexibles Framework mit hervorragenden Formalisierungs- und Beweisverfahren handelt.

Und schließlich müssen Sie, selbst wenn Sie alle oben genannten Schritte ausführen, einen Weg finden, um das Spiel in beschleunigter Geschwindigkeit zu emulieren (die Verwendung eines Videos mag nett sein, aber das Problem ist, dass Ihr Algorithmus nur ohne Kontrolle zuschaut und in der Lage ist es selbst zu versuchen ist sehr wichtig für das Lernen). Es ist in der Tat bekannt, dass der derzeitige Algorithmus nach dem Stand der Technik viel mehr Zeit benötigt, um das zu lernen, was ein Mensch lernen kann (umso mehr beim Lernen mit Verstärkung), wenn er den Prozess nicht beschleunigen kann ( Wenn Sie also die Spielzeit nicht beschleunigen können, konvergiert Ihr Algorithmus nicht einmal in einem einzigen Leben ...

Zusammenfassend lässt sich sagen, dass das, was Sie hier erreichen möchten, an der Grenze (und möglicherweise etwas darüber hinaus) der aktuellen Algorithmen auf dem neuesten Stand der Technik liegt . Ich denke, es mag möglich sein, aber selbst wenn es so ist, werden Sie viel Zeit damit verbringen , denn dies ist kein theoretisches Problem, sondern ein praktisches Problem, das Sie hier angehen, und daher müssen Sie viel implementieren und kombinieren von verschiedenen KI-Ansätzen , um es zu lösen.

Mehrere Jahrzehnte Forschung mit einem ganzen Team, das daran arbeitet, würden möglicherweise nicht ausreichen. Wenn Sie also alleine sind und in Teilzeit daran arbeiten (da Sie wahrscheinlich einen Job haben, um Ihren Lebensunterhalt zu verdienen), verbringen Sie möglicherweise ein ganzes Leben, ohne in die Nähe zu gelangen eine funktionierende Lösung.

Mein wichtigster Rat hier wäre also, dass Sie Ihre Erwartungen senken und versuchen, die Komplexität zu reduzieren Ihr Problem lösen, indem Sie alle Informationen verwenden, die Sie können, und vermeiden, sich so weit wie möglich auf Screenshots zu verlassen (dh versuchen Sie, sich direkt in das Spiel einzubinden, nach DLL-Injection zu suchen) und einige zu vereinfachen Lassen Sie Ihren Algorithmus nicht alles lernen, indem Sie überwachte Prozeduren implementieren (dh lassen Sie die Bildverarbeitung vorerst so weit wie möglich fallen und verlassen Sie sich auf interne Spielinformationen. Wenn Ihr Algorithmus später gut funktioniert, können Sie einige Teile Ihres KI-Programms durch ersetzen Bildverarbeitung, um so Ihr volles Ziel zu erreichen. Wenn Sie beispielsweise etwas zum Laufen bringen können, können Sie versuchen, Ihr Problem zu komplexieren und überwachte Prozeduren und Speicherspieldaten durch unbeaufsichtigte Algorithmen für maschinelles Lernen in Screenshots zu ersetzen.

Viel Glück, und wenn es funktioniert, stellen Sie sicher, dass Sie einen Artikel veröffentlichen. Sie können sicher dafür bekannt werden, ein so schwieriges praktisches Problem zu lösen!


27

Das Problem, das Sie verfolgen, ist so unlösbar, wie Sie es definiert haben. Es ist normalerweise ein Fehler zu glauben, dass ein neuronales Netzwerk "magisch" eine reichhaltige Darstellung eines Problems lernen würde. Eine gute Tatsache, die Sie bei der Entscheidung, ob ANN das richtige Werkzeug für eine Aufgabe ist, berücksichtigen sollten, ist, dass es sich um eine Interpolationsmethode handelt. Überlegen Sie, ob Sie Ihr Problem so gestalten können, dass Sie eine Annäherung an eine Funktion finden, bei der Sie viele Punkte aus dieser Funktion und viel Zeit für das Entwerfen und Trainieren des Netzwerks haben.

Das von Ihnen vorgeschlagene Problem besteht diesen Test nicht. Die Spielsteuerung ist keine Funktion des Bildes auf dem Bildschirm. Es gibt viele Informationen, die der Spieler im Speicher behalten muss. Für ein einfaches Beispiel ist es oft richtig, dass der Bildschirm jedes Mal, wenn Sie einen Shop in einem Spiel betreten, gleich aussieht. Was Sie kaufen, hängt jedoch von den Umständen ab. Egal wie kompliziert das Netzwerk ist, wenn die Bildschirmpixel seine Eingabe sind, würde es beim Betreten des Geschäfts immer dieselbe Aktion ausführen.

Außerdem gibt es das Problem der Skalierung. Die von Ihnen vorgeschlagene Aufgabe ist einfach zu kompliziert, um sie in angemessener Zeit zu erlernen. Sie sollten aigamedev.com sehen, wie Spiel-KI funktioniert. Künstliche Neuronale Netze wurden in einigen Spielen erfolgreich eingesetzt, jedoch nur in sehr begrenztem Umfang. Die Entwicklung von Spiel-KI ist schwierig und oft teuer. Wenn es einen allgemeinen Ansatz zum Aufbau funktionaler neuronaler Netze gegeben hätte, hätte die Industrie ihn höchstwahrscheinlich genutzt. Ich empfehle Ihnen, mit viel, viel einfacheren Beispielen wie Tic-Tac-Toe zu beginnen.


Meinetwegen. Man könnte fast alles, was einem Netzwerk ähnelt, als ANN bezeichnen, aber es könnte kaum zu einer inhaltlichen Diskussion führen. :)
Don Reba

Heh yeah ... Ich hätte meine Motivation genauer erklären sollen. Ich weiß, dass es bessere Möglichkeiten gibt, Spiel-AIs zu erstellen, aber ich mache das, um die Grenzen des ANN-Simulators zu erweitern, den ich aktualisiert habe. Siehe: stanford.edu/group/pdplab/pdphandbook
zergylord

1
Auf jeden Fall hat Don Reba Recht, auch ich denke nicht, dass es machbar sein wird, eine Strategie für so etwas wie Diablo zu lernen, ohne viel Vorwissen einzubeziehen und nützliche Funktionen zu extrahieren, auf denen ein Ansatz des verstärkenden Lernens basieren könnte. Nur aus dem Videoeingang zu lernen, wird mit den heutigen Computern extrem schwierig, wenn nicht unmöglich sein.
Ahans

18

Es scheint, als ob das Herz dieses Projekts darin besteht, zu untersuchen, was mit einem ANN möglich ist. Daher würde ich vorschlagen, ein Spiel auszuwählen, bei dem Sie sich nicht mit Bildverarbeitung befassen müssen (was nach den Antworten anderer hier eine wirklich schwierige Aufgabe zu sein scheint Echtzeitspiel). Sie können die Starcraft-API verwenden, um Ihren Bot zu erstellen. Sie bieten Ihnen Zugriff auf alle relevanten Spielstatus.

http://code.google.com/p/bwapi/


2

Als ersten Schritt können Sie den Unterschied zwischen aufeinanderfolgenden Frames betrachten. Sie müssen zwischen Hintergrund- und tatsächlichen Monster-Sprites unterscheiden. Ich denke, die Welt kann auch Animationen enthalten. Um diese zu finden, würde ich den Charakter bewegen und alles, was sich mit der Welt bewegt, in einem großen Hintergrundbild / einer Animation sammeln.

Sie können Feinde mit Korrelation erkennen und identifizieren (mithilfe von FFT). Wenn sich die Animationen jedoch pixelgenau wiederholen, ist es schneller, nur einige Pixelwerte zu betrachten. Ihre Hauptaufgabe besteht darin, ein robustes System zu schreiben, das erkennt, wann ein neues Objekt auf dem Bildschirm angezeigt wird, und nach und nach alle Frames des Sprite-Frames in eine Datenbank überträgt. Wahrscheinlich müssen Sie auch Modelle für Waffeneffekte bauen. Diese können abgezogen werden, damit Ihre gegnerische Datenbank nicht überladen wird.


2
Da ich mit dem Diablo II-Spiel vertraut bin, kann ich sagen, dass es 256 Farben verwendet (es sei denn, in einem Modus werden hohe oder echte Farben verwendet). Sprites werden auch häufig verwendet, um verschiedene Objekte anzuzeigen. Wenn Sie in der Lage sind, einige Sprites zu extrahieren (auch aus Screenshots), können Sie Ihr Werkzeug trainieren, um Objekte basierend auf dem Sprite zu erkennen (zum Beispiel sieht ein fallengelassener 'Minor Healing Potion' immer gleich aus). Wenn ich mich jedoch eingehender mit Diablo II befasse, werden sich auch weitere Fragen ergeben. Viel Glück
Ivaylo Slavov

1

Angenommen, Sie könnten jederzeit eine Reihe von "Ergebnissen" (möglicherweise Wahrscheinlichkeiten) aus einer Reihe aller möglichen "Züge" generieren und es gibt eine gewisse Vorstellung von Konsistenz im Spiel (z. B. können Sie Level X immer und immer wieder spielen wieder), Sie könnten mit N neuronalen Netzen mit zufälligen Gewichten beginnen und jedes von ihnen das Spiel auf folgende Weise spielen lassen:

1) Erstellen Sie für jeden möglichen 'Zug' eine Liste möglicher 'Ergebnisse' (mit zugehörigen Wahrscheinlichkeiten). 2) Verwenden Sie für jedes Ergebnis Ihr neuronales Netzwerk, um einen zugehörigen 'Wert' (Punktzahl) des 'Ergebnisses' zu bestimmen (z. B. a Zahl zwischen -1 und 1, wobei 1 das bestmögliche Ergebnis ist, -1 das schlechteste ist) 3) Wählen Sie den 'Zug', der zur höchsten Wahrscheinlichkeit führt * Punktzahl 4) Wenn der Zug zu einem 'Gewinn' oder 'Verlust' führte, Anhalten, andernfalls fahren Sie mit Schritt 1 fort.

Bewerten Sie nach einer bestimmten Zeit (oder einem "Gewinn" / "Verlust"), wie nahe das neuronale Netzwerk am "Ziel" war (dies erfordert wahrscheinlich einige Domänenkenntnisse). Werfen Sie dann die 50% (oder einen anderen Prozentsatz) der NNs weg, die am weitesten vom Ziel entfernt waren, führen Sie eine Überkreuzung / Mutation der oberen 50% durch und führen Sie den neuen Satz von NNs erneut aus. Laufen Sie weiter, bis ein zufriedenstellendes NN herauskommt.


Ah, es ist interessant, einen GA in die Mischung aufzunehmen. Da das Netzwerk tatsächlich Tastendrücke / Mausbewegungen als Aktionen sendet, würde ich leider einen physischen Computer pro Netzwerk benötigen>. <Ein weiteres Problem ist, dass der Zustandsraum der Umgebung nicht diskret ist (technisch gesehen ist es das, aber bei ein sehr feines Korn). Stellen Sie sich zum Beispiel das mögliche Ergebnis eines Mausklicks vor: Ein Charakter unter der Kontrolle des Netzes könnte sich bewegen oder angreifen, aber auch Feinde könnten sich bewegen, und es würde pixelweise Unterschiede in der Umgebung von Dingen wie Schatten und Wettereffekten geben .
Zergylord

Aus meiner Sicht kann man mit einem neuronalen Netz nur so viel anfangen. Scheint bestenfalls als lernbare heuristische Funktion einer Vorstellung von einem diskreten Zustandsraum verwendet zu werden. Um die Variabilität des Feindes zu berücksichtigen, müssten Sie wahrscheinlich eine andere Heuristik verwenden. Dann könnten Sie diese verwenden, um eine Reihe möglicher Ergebniszustände pro Zug mit zugehörigen Wahrscheinlichkeiten zu erstellen. Solange es einen statischen Begriff für die Anfangs- und Endkonfiguration gibt, können Sie jedes neuronale Netz einzeln ausführen.
Tstramer

1

Ich denke, Ihre beste Wahl wäre eine komplexe Architektur, an der einige / viele Netzwerke beteiligt sind: dh eine, die Gegenstände erkennt und darauf reagiert, eine für den Laden, eine für den Kampf (vielleicht benötigen Sie hier eine für die Erkennung von Feinden, eine für Angriffe) usw. .

Versuchen Sie dann, an das einfachste Diablo II-Gameplay zu denken, wahrscheinlich an einen Barbaren. Halten Sie es dann zunächst einfach, wie in Akt I, nur im ersten Bereich.

Dann denke ich, dass wertvolle "Ziele" das Verschwinden feindlicher Objekte und die Verringerung der Gesundheitsanzeige (umgekehrt erzielt) wären.

Sobald Sie diese separaten, "einfacheren" Aufgaben erledigt haben, können Sie mithilfe eines "Master" -AnN entscheiden, welcher Sub-ANN aktiviert werden soll.

Was das Training betrifft, sehe ich nur drei Optionen: Sie könnten die oben beschriebene Evolutionsmethode verwenden, aber dann müssen Sie die "Gewinner" manuell auswählen, es sei denn, Sie codieren dafür ein ganzes separates Programm. Sie könnten die Netzwerke jemanden spielen lassen. Hier lernen sie, den Stil eines Spielers oder einer Gruppe von Spielern zu emulieren. Das Netzwerk versucht, die nächste Aktion des Spielers vorherzusagen, wird für eine korrekte Vermutung verstärkt usw. Wenn Sie tatsächlich die gewünschte ANN erhalten, kann dies mit Videospielen geschehen, ohne dass ein tatsächliches Live-Gameplay erforderlich ist. Schließlich können Sie das Netzwerk das Spiel spielen lassen, indem Sie feindliche Todesfälle, Level-Ups, wiedererlangte Gesundheit usw. als positive Verstärkung und Todesfälle von Spielern, verlorene Gesundheit usw. als negative Verstärkung haben. Aber selbst wenn ein einfaches Netzwerk Tausende konkreter Schulungsschritte erfordert, um selbst einfache Aufgaben zu erlernen,

Alles in allem ist Ihr Projekt sehr ehrgeizig. Aber ich denke, es könnte "theoretisch getan werden", wenn genügend Zeit zur Verfügung steht.

Hoffe es hilft und viel Glück!

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.