Tag 22: Wie man einen AI Game Bot mit OpenAI Gym und Universe baut

Seien wir ehrlich, KI ist überall. Zwischen Elon Musk und Mark Zuckerberg findet ein Kampf um die Zukunft der KI statt. Es gibt einige, die es dämonisieren. Und einige, deren utopische Ansichten behaupten, dass KI fast gottähnlich sein könnte, um der Menschheit zu helfen. Unabhängig davon, auf welcher Seite sich Ihre Ansichten befinden, ist AI hier, um zu bleiben.

"Mit künstlicher Intelligenz rufen wir den Dämon herbei." - Elon Musk "Die Angst vor einem Aufstieg von Killerrobotern ist wie die Sorge um die Überbevölkerung auf dem Mars." - Andrew Ng

Wenn Sie begeistert sind, direkt in die KI einzutauchen und daran zu basteln, sind Spiele ein guter Anfang. Sie waren die erste Wahl für KI. Aber bevor Sie loslegen, hier ein wenig Geschichte darüber, wie sich die Spielprogrammierung im Laufe der Zeit entwickelt hat.

Die Geschichte der Spielprogrammierung

Spielprogrammierer verwendeten heuristische Wenn-Dann-Sonst-Entscheidungen, um fundierte Vermutungen anzustellen. Wir haben dies in den frühesten Arcade-Videospielen wie Pong und PacMan gesehen. Dieser Trend war lange Zeit die Norm. Spieleentwickler können jedoch nur so viele Szenarien und Randfälle vorhersagen, dass Ihr Bot nicht im Kreis läuft!

Die Spieleentwickler versuchten dann nachzuahmen, wie Menschen ein Spiel spielen würden, und modellierten die menschliche Intelligenz in einem Spielbot.

Das Team von DeepMind hat dies getan, indem es die Intelligenz verallgemeinert und modelliert hat, um jedes darauf geworfene Atari-Spiel zu lösen. Der Spielbot verwendete tief lernende neuronale Netze, die kein spielspezifisches Wissen hätten. Sie schlagen das Spiel basierend auf den Pixeln, die sie auf dem Bildschirm gesehen haben, und ihrem Wissen über die Spielsteuerung. Teile von DeepMind sind jedoch immer noch keine Open-Source-Produkte, da Google sie verwendet, um die Konkurrenz zu schlagen.

Die Demokratisierung der KI

Um zu vermeiden, dass die unglaubliche Kraft der KI in den Händen einiger weniger konzentriert wird, gründete Elon Musk OpenAI. Sie versucht, die KI zu demokratisieren, indem sie allen zugänglich gemacht wird. Heute werden wir OpenAI Gym und das kürzlich veröffentlichte Universum erkunden, das auf Gym aufgebaut ist.

OpenAI Gym bietet eine einfache Oberfläche für die Interaktion mit und die Verwaltung beliebiger dynamischer Umgebungen. OpenAI Universe ist eine Plattform, mit der Sie einen Bot erstellen und testen können.

Es gibt Tausende von Umgebungen. Sie reichen von klassischen Atari-Spielen, Minecraft und Grand Theft Auto bis hin zu Proteinfaltungssimulationen, die Krebs heilen können. Sie können einen Bot erstellen und in jeder Umgebung mit nur wenigen Zeilen Python-Code ausführen. Das ist zu großartig, um es nicht zu versuchen!

Projekt (1 Stunde)

Wir werden einen KI-Spiel-Bot bauen, der die Technik des „Reinforcement Learning“ verwendet. Ich werde das später erklären. Es wird autonom gegen das Atari-Spiel Neon Race Car spielen und es schlagen (Sie können jedes gewünschte Spiel auswählen). Wir werden diesen Spielbot unter Verwendung der OpenAI-Bibliotheken Gym und Universe erstellen.

Schritt 1: Installation

Stellen Sie sicher, dass Sie Python installiert haben, oder installieren Sie es mit Homebrew. Sie können eine dedizierte Python-IDE wie PyCharm oder iPython-Notebook herunterladen. Ich mag es einfach zu halten und Sublime zu verwenden. Installieren Sie abschließend Gym, Universe und andere erforderliche Bibliotheken mit pip.

// Install python using brewbrew install python3// Install the required OpenAI librariespip3 install gympip3 install numpy incrementalbrew install golang libjpeg-turbo pip install universe

Alles im Universum (die Umgebungen) wird als Container in Docker ausgeführt. Falls Sie es noch nicht haben, installieren Sie Docker und führen Sie es von hier aus aus.

Schritt 2: Codieren Sie den Game Bot

Der Game Bot ist in Python codiert, daher importieren wir zunächst die einzigen zwei benötigten Abhängigkeiten: Gym und Universe.

import gymimport universe

Verwenden wir für diesen Game Bot mein Lieblingsspiel aus der Kindheit, Neon Race Cars, als Testumgebung. Eine vollständige Liste anderer Umgebungen / Spiele, aus denen Sie auswählen können, finden Sie hier.

Mit Universe können Sie so viele Umgebungen gleichzeitig ausführen, wie Sie möchten. Für dieses Projekt werden wir jedoch nur eines verwenden.

env = gym.make(‘flashgames.NeonRace-v0’)env.configure(remotes=1) # creates a local docker container

Verstärkungslernen

Jetzt fügen wir die Spielbot-Logik hinzu, die die Verstärkungstechnik verwendet. Diese Technik beobachtet den vorherigen Status und die Belohnung des Spiels (z. B. die auf dem Bildschirm angezeigten Pixel oder die Spielpunktzahl). Anschließend wird eine Aktion für die Umgebung erstellt.

Das Ziel ist es, die nächste Beobachtung zu verbessern (in unserem Fall - um die Spielpunktzahl zu maximieren). Diese Aktion wird von einem Agenten (Game Bot) ausgewählt und ausgeführt, um die Punktzahl zu maximieren. Es wird dann auf die Umgebung angewendet. Die Umgebung zeichnet den resultierenden Zustand und die Belohnung auf, basierend darauf, ob die Aktion nützlich war oder nicht (hat sie das Spiel gewonnen?).

Jetzt können wir die Liste der Beobachtungen für jede Umgebung abrufen, die mit der Methode env.reset () initialisiert wurde.

observation_n = env.reset()

Die Beobachtung hier ist ein umgebungsspezifisches Objekt. Es stellt dar, was beobachtet wurde, wie z. B. die Rohpixeldaten auf dem Bildschirm oder den Spielstatus / die Punktzahl.

Der nächste Schritt besteht darin, einen Spielagenten mithilfe einer Endlosschleife zu erstellen, die basierend auf der Beobachtung kontinuierlich einige Aktionen ausführt. Definieren wir in unserem Bot eine einzelne Aktion, bei der der Aufwärtspfeil wiederholt gedrückt wird (Dummer Bot! Sie können ihn gerne zu einem komplexen weiterentwickeln…). Die Aktion wird hier durch den Ereignistyp (KeyEvent), den Steuerschlüssel (Aufwärtspfeil) definiert und für alle Beobachtungen, die der Agent sieht, auf true gesetzt.

while True:action_n = [[('KeyEvent', 'ArrowUp', True)] for ob in observation_n]

Wir verwenden dann die env.step()Methode, um die Aktion zu verwenden, um einen Zeitschritt vorwärts zu gehen. Dies ist eine sehr grundlegende Implementierung von verstärktem Lernen.

 observation_n, reward_n, done_n, info = env.step(action_n)

Die Schrittmethode gibt hier vier Variablen zurück:

  1. observation_n: Beobachtungen der Umwelt
  2. reward_n: Wenn Ihre Aktion vorteilhaft war oder nicht: + 1 / -1
  3. done_n: Zeigt an, ob das Spiel beendet ist oder nicht: Ja / Nein
  4. info: Zusätzliche Informationen wie Leistung und Latenz für Debugging-Zwecke

Sie können diese Aktion gleichzeitig für alle Umgebungen ausführen, in denen Sie Ihren Bot trainieren. Verwenden Sie die Methode env.render (), um den Bot zu starten.

env.render()

Jetzt haben Sie den Game Bot bereit, um mit der Umgebung zu konkurrieren. Der vollständige Code für diesen Basis-Bot sowie eine erweiterte Version finden Sie in meinem Github-Repo hier.

Schritt 3: Führen Sie den Game Bot aus

Nun zum lustigen Teil: Stellen Sie sicher, dass Docker ausgeführt wird, und führen Sie den Bot aus. Sehen Sie es in Aktion, wie Sie andere Autos schlagen oder dies nicht tun. Wenn es fehlschlägt, optimieren Sie Ihren Bot weiter, damit er die Intelligenz übertrifft!

python gamebot.py

Basteln Sie weiter an der KI und schließlich können Sie den Gott-Modus freischalten! # 100DaysOfCode

Wenn Ihnen das gefallen hat, klatschen Sie bitte ? s o andere können es auch sehen! Folgen Sie mir auf Twitter @H ariniLabs oder M edium , um die neuesten Updates zu anderen Geschichten zu erhalten oder einfach nur Hallo zu sagen :)

PS: Sign up for my newsletter here to be the first to get fresh new content and it’s filled with a dose of inspiration from the world of #WomenInTech and yes men can signup too!