Die Agar.io-Lernumgebung (Agarle) ist eine leistungsfähige Implementierung des beliebten Online-Multi-Player-Spiels Agar.io sowie eine OpenAI-Gymnastikoberfläche, die für das Verstärkungslernen in Python geeignet ist.
Klonen Sie dieses Repository (mit Submodulen)
git clone --recursive https://github.com/jondeaton/AgarLE.git
Führen Sie das mitgelieferte Installationsskript aus
python setup.py install
Die Installation hat das Python Modul gym_agario
installiert, das beim Import die Agarle Gym -Umgebungen registriert hat. Sie müssen nur gym_agario
importieren und dann eine Umgebung auf die Standardmethode herstellen
import gym
import gym_agario
env = gym . make ( "agario-grid-v0" )
game_state = env . reset ()
print ( game_state . shape ) # (128, 128, 10) , (grid_size, grid_size, num_channels)
action = np . array ([ 0 , 0 ]), 0 # don't move, don't split
while True :
game_state , reward , done , info = env . step ( action )
if done : break
Das Agar.IO -Spiel und der Beobachtungsraum sind sehr konfigurierbar. Sie können die Parameter der Spiel- und Beobachtungseigenschaften wie SO (Standardkonfiguration gezeigt) ändern.
config = {
'ticks_per_step' : 4 , # Number of game ticks per step
'num_frames' : 2 , # Number of game ticks observed at each step
'arena_size' : 1000 , # Game arena size
'num_pellets' : 1000 ,
'num_viruses' : 25 ,
'num_bots' : 25 ,
'pellet_regen' : True , # Whether pellets regenerate randomly when eaten
'grid_size' : 128 , # Size of spatial dimensions of observations
'observe_cells' : True , # Include an observation channel with agent's cells
'observe_others' : True , # Include an observation channel with other players' cells
'observe_viruses' : True , # Include an observation channel with viruses
'observe_pellets' : True # Include an observation channel with pellets
}
env = gym . make ( "agario-grid-v0" , ** config )
Dieses Fitnessstudio unterstützt mehrere Agenten im selben Spiel. Standardmäßig gibt es nur einen einzelnen Agenten, und das Fitnessstudio entspricht der typischen Fitnessoberfläche (beachten Sie, dass es in der Umgebung möglicherweise noch eine beliebige Anzahl von "Bots" gibt). Wenn Sie jedoch "multi_agent": True
an der Umgebungskonfiguration bestehen, hat die Umgebung mehrere Agenten, die alle gleichzeitig innerhalb desselben Agar.IO -Spiels interagieren.
env = gym.make("agario-grid-v0", **{
"multi_agent": True,
"num_agents": 5
})
Mit dieser Konfiguration entspricht die Umgebung nicht mehr der typischen OpenAI -Gymnastikoberfläche auf folgende Weise.
step()
erwartet eine Liste von Aktionen mit derselben Länge wie die Anzahl der Agenten, die die Aktion für jeden Agenten angeben.
Der Rückgabewert von step()
wird eine Liste von Beobachtungen, Belohnungen und Liste der Spones mit einer Länge sein, die der Anzahl der Agenten entspricht. Die i
'Th -Elemente jeder Listen entsprechen dem i
-Agenten während der gesamten Episode konsequent.
reset()
gibt eine Liste von Längenbeobachtungen zurück, die der Anzahl der Agenten entsprechen.
Wenn ein Agent "fertig" ist, sind Beobachtungen für diesen Agenten keine. Die Umgebung kann immer noch gestärkt werden, während es mindestens einen Agenten gibt, der nicht "erledigt" wird. Nur wenn alle Agenten fertig sind, müssen die Umgebung zurückgesetzt werden.
Beachten Sie, dass multi_agent
automatisch eingestellt wird, wenn Sie num_agents
mehr als 1 übergeben.
Derzeit arbeitet Compilation/Installation nur mit Clang zusammen. Wenn Sie sich also unter Linux befinden, müssen Sie Ihren C ++ - Compiler vor der Installation auf Clang in Ihre Umgebung einstellen.
CXX=`which clang++`
Die einzige Umgebung, die ausgiebig getestet wurde, ist agario-grid-v0
, obwohl die Agario-Screen-V0-Umgebung agario-ram-v0
und Screen agario-screen-v0
Umgebung mit einigen Überreden funktionieren sollte. Der agario-screen-v0
erfordert, dass ein Fenstermanager funktioniert. So funktioniert dies beispielsweise nicht auf kopflosen Linux-Maschinen. Das Aufrufen von render
funktioniert nur, wenn die ausführbare Datei mit dem Einschalten des Renders erstellt wurde, wie es nach dem Advanced -Setup -Leitfaden erfolgen kann. Das Rendering funktioniert nicht mit der "Bildschirm" -Enumgebung, obwohl diese Umgebung das Bildschirmbild als Beobachtung der Umgebung verwendet.
Um das Spiel selbst zu spielen oder das Rendering in der Fitnessumgebung zu ermöglichen, müssen Sie den Spielkunden selbst auf einem System aufbauen, in dem OpenGL installiert wurde. Dies ist am wahrscheinlichsten mit MacOS erfolgreich, wird aber wahrscheinlich unter Linux funktionieren. Geben Sie die folgenden Befehle aus
git submodule update --init --recursive
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j 2 client agarle
Dadurch wird ein ausführbarer client
im agario
ausgegeben
agario/client # play the game
Wenn Sie auch das agarle
-Ziel erstellen, wurde eine python-importierbare dynamische Bibliothek (dh *.so
Datei) namens agarle
erstellt. Um es zu verwenden, kopieren Sie es in die "Site -Pakete" für Ihren Python -Interpreter wie SO:
cp environment/agarle* `python -m site --user-site`
Die zugrunde liegenden Fitnessumgebungen können so kompiliert werden, dass das render()
das Spiel auf den Bildschirm rendert. Diese Funktion wird standardmäßig aus Leistungs- und Portabilitätsgründen ausgeschaltet, kann jedoch während der Zusammenstellung durch den folgenden CMAKE -Befehl anstelle des oben gezeigten Einsatzes eingeschaltet werden.
cmake -DCMAKE_BUILD_TYPE=Release -DDEFINE_RENDERABLE=ON ..