Encontre o NLE em sua nova casa em github.com/heiner/nle
O NetHack Learning Environment (NLE) é um ambiente de Reinforcement Learning apresentado no NeurIPS 2020. NLE é baseado no NetHack 3.6.6 e projetado para fornecer uma interface RL padrão para o jogo, e vem com tarefas que funcionam como um primeiro passo para avaliar agentes neste novo ambiente.
NetHack é um dos videogames mais antigos e possivelmente mais impactantes da história, além de ser um dos roguelikes mais difíceis jogados atualmente por humanos. É gerado processualmente, rico em entidades e dinâmicas e, em geral, é um ambiente extremamente desafiador para os atuais agentes de RL de última geração, ao mesmo tempo que é muito mais barato de executar em comparação com outros ambientes de teste desafiadores. Através do NLE, desejamos estabelecer o NetHack como um dos próximos desafios para a pesquisa em tomada de decisão e aprendizado de máquina.
Você pode ler mais sobre NLE no artigo NeurIPS 2020 e sobre NetHack em seu README original, em nethack.org e no wiki NetHack.
Agradecemos a ngoodger por implementar o NLE Language Wrapper que traduz as observações não linguísticas das tarefas do NetHack em representações de linguagem semelhantes. As ações também podem ser fornecidas opcionalmente em formato de texto que são convertidas em ações discretas do NLE.
O código NetHack Learning Dataset (NLD) agora vem com NLE
, permitindo que os usuários carreguem conjuntos de dados em grande escala apresentados em Dungeons and Data: A Large-Scale NetHack Dataset, ao mesmo tempo que geram e carregam seus próprios conjuntos de dados.
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...
Para obter informações sobre como baixar NLD-AA e NLD-NAO, consulte o documento do conjunto de dados aqui.
Caso contrário, confira o tutorial do notebook Colab aqui.
Abra uma solicitação pull para adicionar documentos.
Começar com ambientes NLE é extremamente simples, desde que se esteja familiarizado com outros ambientes de academia/RL.
NLE requer que python>=3.5
, cmake>=3.15
esteja instalado e disponível durante a construção do pacote e em tempo de execução.
No MacOS , pode-se usar Homebrew
da seguinte forma:
$ brew install cmake
Em uma distribuição simples do Ubuntu 18.04 , cmake
e outras dependências podem ser instaladas fazendo:
# 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
Depois é uma questão de configurar o seu ambiente. Aconselhamos usar um ambiente conda para isso:
$ conda create -y -n nle python=3.8
$ conda activate nle
$ pip install nle
NOTA: Se você deseja estender/desenvolver NLE, instale o pacote da seguinte forma:
$ git clone https://github.com/facebookresearch/nle --recursive
$ pip install -e " .[dev] "
$ pre-commit install
Fornecemos algumas imagens do Docker. Consulte o README relevante.
Após a instalação, pode-se experimentar qualquer uma das tarefas fornecidas da seguinte forma:
>> > 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 ()
O NLE também vem com alguns scripts que permitem obter algumas implementações de ambiente e brincar com o espaço de ação:
# 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
Observe que nle.scripts.play
também pode ser executado com nle-play
, se o pacote tiver sido instalado corretamente.
Além disso, um agente TorchBeast é incluído no nle.agent
junto com um modelo simples para fornecer um ponto de partida para experimentos:
$ 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
Trace o retorno médio nos últimos 100 episódios:
$ 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
Aceitamos contribuições para NLE. Se você estiver interessado em contribuir, consulte este documento.
NLE é um fork direto do NetHack e, portanto, contém código que opera em muitos níveis diferentes de abstração. Isso varia desde a lógica do jogo de baixo nível até a administração de nível superior de jogos nethack repetidos e, finalmente, até a ligação desses jogos ao ambiente gym
Python.
Se você quiser saber mais sobre a arquitetura do nle
e como ela funciona nos bastidores, verifique o documento de arquitetura. Este pode ser um ponto de partida útil para quem deseja contribuir com os elementos de nível inferior do NLE.
Tim & Heiner, do Facebook AI Research, sobre a democratização da pesquisa de aprendizagem por reforço.
Se você usa NLE em algum de seus trabalhos, cite:
@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},
}
Se você usa NLD ou conjuntos de dados em algum de seus trabalhos, cite:
@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}
}