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!