NLE in seiner neuen Heimat finden Sie unter github.com/heiner/nle
Die NetHack Learning Environment (NLE) ist eine Reinforcement Learning-Umgebung, die auf der NeurIPS 2020 vorgestellt wurde. NLE basiert auf NetHack 3.6.6 und wurde entwickelt, um eine Standard-RL-Schnittstelle zum Spiel bereitzustellen, und enthält Aufgaben, die als erster Schritt zur Bewertung von Agenten dienen in dieser neuen Umgebung.
NetHack ist eines der ältesten und wohl einflussreichsten Videospiele der Geschichte und eines der härtesten Roguelikes, die derzeit von Menschen gespielt werden. Es wird prozedural generiert, ist reich an Entitäten und Dynamik und insgesamt eine äußerst anspruchsvolle Umgebung für aktuelle RL-Agenten auf dem neuesten Stand der Technik, während der Betrieb im Vergleich zu anderen anspruchsvollen Testumgebungen viel kostengünstiger ist. Durch NLE möchten wir NetHack als eine der nächsten Herausforderungen für die Forschung in den Bereichen Entscheidungsfindung und maschinelles Lernen etablieren.
Weitere Informationen zu NLE finden Sie im NeurIPS 2020-Artikel und zu NetHack in der Original-README-Datei, auf nethack.org und im NetHack-Wiki.
Wir danken ngoodger für die Implementierung des NLE Language Wrappers, der die nichtsprachlichen Beobachtungen von NetHack-Aufgaben in ähnliche Sprachdarstellungen übersetzt. Optional können Aktionen auch in Textform bereitgestellt werden, die in die diskreten Aktionen des NLE umgewandelt werden.
Der NetHack Learning Dataset (NLD)-Code wird jetzt mit NLE
geliefert, sodass Benutzer die in Dungeons and Data: A Large-Scale NetHack Dataset vorgestellten großen Datensätze laden und gleichzeitig ihre eigenen Datensätze generieren und laden können.
import nle . dataset as nld
if not nld . db . exists ():
nld . db . create ()
# NB: Different methods are used for data based on NLE and data from NAO.
nld . add_nledata_directory ( "/path/to/nld-aa" , "nld-aa-v0" )
nld . add_altorg_directory ( "/path/to/nld-nao" , "nld-nao-v0" )
dataset = nld . TtyrecDataset ( "nld-aa-v0" , batch_size = 128 , ...)
for i , mb in enumerate ( dataset ):
foo ( mb ) # etc...
Informationen zum Herunterladen von NLD-AA und NLD-NAO finden Sie im Datensatzdokument hier.
Ansonsten können Sie sich hier das Tutorial zum Colab-Notizbuch ansehen.
Öffnen Sie eine Pull-Anfrage, um Papiere hinzuzufügen.
Der Einstieg in NLE-Umgebungen ist äußerst einfach, vorausgesetzt, man ist mit anderen Fitnessstudio-/RL-Umgebungen vertraut.
NLE erfordert, dass python>=3.5
und cmake>=3.15
sowohl beim Erstellen des Pakets als auch zur Laufzeit installiert und verfügbar sind.
Unter MacOS kann man Homebrew
wie folgt nutzen:
$ brew install cmake
Auf einer einfachen Ubuntu 18.04- Distribution können cmake
und andere Abhängigkeiten wie folgt installiert werden:
# Python and most build deps
$ sudo apt-get install -y build-essential autoconf libtool pkg-config
python3-dev python3-pip python3-numpy git flex bison libbz2-dev
# recent cmake version
$ wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2> /dev/null | sudo apt-key add -
$ sudo apt-add-repository ' deb https://apt.kitware.com/ubuntu/ bionic main '
$ sudo apt-get update && apt-get --allow-unauthenticated install -y
cmake
kitware-archive-keyring
Anschließend geht es darum, Ihre Umgebung einzurichten. Wir empfehlen hierfür die Verwendung einer Conda-Umgebung:
$ conda create -y -n nle python=3.8
$ conda activate nle
$ pip install nle
HINWEIS: Wenn Sie NLE erweitern/entwickeln möchten, installieren Sie das Paket bitte wie folgt:
$ git clone https://github.com/facebookresearch/nle --recursive
$ pip install -e " .[dev] "
$ pre-commit install
Wir haben einige Docker-Bilder bereitgestellt. Bitte beachten Sie die entsprechende README-Datei.
Nach der Installation kann man jede der bereitgestellten Aufgaben wie folgt ausprobieren:
>> > import gym
>> > import nle
>> > env = gym . make ( "NetHackScore-v0" )
>> > env . reset () # each reset generates a new dungeon
>> > env . step ( 1 ) # move agent '@' north
>> > env . render ()
NLE enthält außerdem einige Skripte, die es ermöglichen, einige Umgebungs-Rollouts durchzuführen und mit dem Aktionsbereich zu spielen:
# Play NetHackStaircase-v0 as a human
$ python -m nle.scripts.play
# Use a random agent
$ python -m nle.scripts.play --mode random
# Play the full game using directly the NetHack internal interface
# (Useful for debugging outside of the gym environment)
$ python -m nle.scripts.play --env NetHackScore-v0 # works with random agent too
# See all the options
$ python -m nle.scripts.play --help
Beachten Sie, dass nle.scripts.play
auch mit nle-play
ausgeführt werden kann, wenn das Paket ordnungsgemäß installiert wurde.
Darüber hinaus ist in nle.agent
ein TorchBeast-Agent zusammen mit einem einfachen Modell gebündelt, um einen Ausgangspunkt für Experimente zu bieten:
$ pip install " nle[agent] "
$ python -m nle.agent.agent --num_actors 80 --batch_size 32 --unroll_length 80 --learning_rate 0.0001 --entropy_cost 0.0001 --use_lstm --total_steps 1000000000
Stellen Sie die durchschnittliche Rendite der letzten 100 Episoden grafisch dar:
$ python -m nle.scripts.plot
averaged episode return
140 +---------------------------------------------------------------------+
| + + ++-+ ++++++++++++++++++++++++|
| : : ++++++++||||||||||||||||||||||||
120 |-+...........:.............:...+-+.++++|||||||||||||||||||||||||||||||
| : +++++++++++++++||||||||||AAAAAAAAAAAAAAAAAAAAAA|
| +++++++++++++||||||||||||||AAAAAAAAAAAA|||||||||||||||||||
100 |-+......+++++|+|||||||||||||||||||||||AA||||||||||||||||||||||||||||||
| +++|||||||||||||||AAAAAAAAAAAAAA|||||||||||+++++++++++++++++++|
| ++++|||||AAAAAAAAAAAAAA||||||||||||++++++++++++++-+: |
80 |-++++|||||AAAAAA|||||||||||||||||||||+++++-+...........:...........+-|
| ++|||||AAA|||||||||||||||++++++++++++-+ : : |
60 |++||AAAAA|||||+++++++++++++-+............:.............:...........+-|
|++|AA||||++++++-|-+ : : : |
|+|AA|||+++-+ : : : : |
40 |+|A+++++-+...:.............:.............:.............:...........+-|
|+AA+-+ : : : : |
|AA-+ : : : : |
20 |AA-+.........:.............:.............:.............:...........+-|
|++-+ : : : : |
|+-+ : : : : |
0 |-+...........:.............:.............:.............:...........+-|
|+ : : : : |
|+ + + + + |
-20 +---------------------------------------------------------------------+
0 2e+08 4e+08 6e+08 8e+08 1e+09
steps
Wir freuen uns über Beiträge zu NLE. Wenn Sie daran interessiert sind, einen Beitrag zu leisten, sehen Sie sich bitte dieses Dokument an.
NLE ist eine direkte Abzweigung von NetHack und enthält daher Code, der auf vielen verschiedenen Abstraktionsebenen arbeitet. Dies reicht von der Spielelogik auf niedriger Ebene über die Verwaltung wiederholter Nethack-Spiele auf höherer Ebene bis hin zur Anbindung dieser Spiele an die Python gym
.
Wenn Sie mehr über die Architektur von nle
und ihre Funktionsweise unter der Haube erfahren möchten, schauen Sie sich das Architekturdokument an. Dies kann ein nützlicher Ausgangspunkt für jeden sein, der zu den unteren Ebenen des NLE beitragen möchte.
Tim und Heiner von Facebook AI Research über die Demokratisierung der Reinforcement-Learning-Forschung.
Wenn Sie NLE in einer Ihrer Arbeiten verwenden, geben Sie bitte Folgendes an:
@inproceedings{kuettler2020nethack,
author = {Heinrich K{"{u}}ttler and
Nantas Nardelli and
Alexander H. Miller and
Roberta Raileanu and
Marco Selvatici and
Edward Grefenstette and
Tim Rockt{"{a}}schel},
title = {{The NetHack Learning Environment}},
booktitle = {Proceedings of the Conference on Neural Information Processing Systems (NeurIPS)},
year = {2020},
}
Wenn Sie NLD oder die Datensätze in einer Ihrer Arbeiten verwenden, geben Sie bitte Folgendes an:
@article{hambro2022dungeons,
title={Dungeons and Data: A Large-Scale NetHack Dataset},
author={Hambro, Eric and Raileanu, Roberta and Rothermel, Danielle and Mella, Vegard and Rockt{"a}schel, Tim and K{"u}ttler, Heinrich and Murray, Naila},
journal={Advances in Neural Information Processing Systems},
volume={35},
pages={24864--24878},
year={2022}
}