2

Ich bin dabei, ein Panzerspiel in Pygame zu machen, wo man einen Panzer um Wände herum bewegt und andere Panzer schießt.Python-Spiel Neuronales Netzwerk. Wie man Eingänge einstellt

Ich versuche einen Weg zu finden, ein neuronales Netzwerk zu bilden, wahrscheinlich Verstärkung für die Gegner zu lernen, so dass das Spiel Entscheidungen darüber treffen wird, welche Panzer sich wo bewegen sollten, wenn sie schießen sollten, indem sie Attribute von jedem Objekt weitergeben.

Attributes: 
Enemy -> x,y,width,height,speed,health and other items 
Wall -> x,y,width,height 
Bullet -> x,y,width,height,speed 
Player -> x,y,width,height,speed,health 

Ich hatte geplant, den keras Python-Modul zu verwenden, um ein neuronales Netzwerk zu schaffen, aber ich kann nicht einen Weg finden, um es einzurichten, so dass die Eingangsdaten die richtige Form und Größe ist, da es eine variable Zahl sein von Wänden und Kugeln.

Was würde ich tun:

action = Network.predict(state) 

wo
state = (Enemy, Player, Tuple_of_Wall_Data, Tuple_of_Bullet_Data)

und Aktion ist eine Option, wo der Feind in Form
action = (Direction,Should_Shoot)

TLDR bewegen sollte Mein Die Frage ist, wie würde ich eine neuronale Netzwerkeingabeschicht einrichten, so dass es möglich ist (1 Feind, 1 Spieler, m mehrere Wände, mehrere Kugeln) und trainieren das neuronale Netzwerk, um dem Feind eine Richtung zu geben und wenn er mit verstärkendem Lernen feuern sollte?

+1

Willkommen bei StackOverflow! Insgesamt eine gute Frage, ich werde nur empfehlen, den Titel zu bearbeiten, um ihn genauer zu machen. – edzillion

+0

Danke. Bearbeitet. – Scratchcat1

+1

Das Problem, das Sie präsentieren, ist wirklich komplexer als "nur ein neuronales Netzwerk verwenden". Die größte Herausforderung besteht darin, die "richtige" Repräsentation für Ihre Daten als Grundlage für ein (überwachtes?) Neuronales Netzwerk zu erstellen. Die Beantwortung Ihrer Frage geht wahrscheinlich weit über eine einfache Antwort auf dieser Website hinaus. Ich schlage vor, einleitende Lektüre über [das Entwerfen von Spiel IA] (https://www.raywenderlich.com/24824/introduction-to-ai-programming-for-games) [auf NNs und Spielen] (http://natureofcode.com)/book/chapter-10-neural-networks /) und [speziell zum Thema verstärkendes Lernen] (https://arxiv.org/pdf/1312.5602.pdf). – agtoever

Antwort

1

Es gibt drei typische Arten der Darstellung den Spielstatus für einen AI-Agenten:

  1. internen Spielzustand, ziemlich viel, was Sie vorschlagen - Liste der Objekte im Spiel, mit ihren rohen Attributen. Wenn man ML dafür benutzen will, braucht man eine Architektur, die sich mit verschiedenen Größen beschäftigt, und so kommt man wahrscheinlich mit wiederkehrenden neuronalen Netzen, die Objekte nacheinander bearbeiten. Beachten Sie, dass dies wahrscheinlich stark suboptimal Darstellung ist. Insbesondere als Mensch erhält man keinen solchen Spielzustand, man erhält keinen Strom von Objekten.

  2. Globale Kartenansicht. Wenn das Spiel eine Karte hat, die klein genug ist, kann es als Eingabe für den Agenten verwendet werden, endet mit einem vollständig beobachtbaren Problem und Daten der Form W x H x K, wobei W, H Breite und Höhe der Karte ist , und K ist die Anzahl der Objekttypen (somit erhalten Sie eine Hotcodierung für jedes Objekt)

  3. Agent "Vision", die wahrscheinlich die beliebteste in modernen RL ist, wo Agent wieder mit W x H präsentiert wird x K, aber jetzt W und H ist die Größe seiner Vision (die sich mit dem Agenten bewegt).