DeepMind Lab是一个通过 ioquake3 和其他开源软件基于 id Software 的 Quake III Arena 的 3D 学习环境。
DeepMind Lab为学习代理提供了一套具有挑战性的 3D 导航和解谜任务。其主要目的是作为人工智能研究的测试平台,特别是深度强化学习。
免责声明:这不是 Google 官方产品。
如果您在研究中使用DeepMind Lab并希望引用DeepMind Lab环境,我们建议您引用 DeepMind Lab 论文。
您可以通过 [email protected] 联系我们。
从 bazel.io 获取 Bazel。
克隆 DeepMind Lab,例如通过运行
$ git clone https://github.com/deepmind/lab
$ cd lab
对于随机代理的实时示例,请运行
lab$ bazel run :python_random_agent --define graphics=sdl --
--length=10000 --width=640 --height=480
这里有一些更详细的构建文档,包括如何安装依赖项(如果没有)。
要启用编译器优化,请将标志--compilation_mode=opt
或简称-c opt
传递给每个bazel build
、 bazel test
和bazel run
命令。为了简洁起见,此处的示例中省略了该标志,但它应该用于性能重要的实际训练和评估。
要使用人工输入控件测试游戏,请运行
lab$ bazel run :game -- --level_script=tests/empty_room_test --level_setting=logToStdErr=true
# or:
lab$ bazel run :game -- -l tests/empty_room_test -s logToStdErr=true
将logToStdErr
设置保留为关闭状态以禁用大多数日志输出。
通过为每个感兴趣的观察添加标志--observation OBSERVATION_NAME
可以在每一步打印环境公开的观察值。
lab$ bazel run :game -- --level_script=lt_chasm --observation VEL.TRANS --observation VEL.ROT
DeepMind Lab在python/random_agent.py
中附带了一个示例随机代理,它可以用作实现学习代理的起点。要让该代理与 DeepMind Lab 交互进行训练,请运行
lab$ bazel run :python_random_agent
Python API 用于代理与环境的交互。我们还提供了 DeepMind 用于强化学习的“dm_env”通用 API 的绑定,以及构建独立 PIP 包的方法;有关详细信息,请参阅单独的文档。
DeepMind Lab具有不同的级别来执行不同的任务。这些任务可以使用 Lua 脚本进行配置,如 Lua API 中所述。
DeepMind Lab基于ioquake3游戏引擎构建,使用q3map2和bspc工具进行地图创建。源自这些项目的错误修复和清理最好在上游修复,然后合并到DeepMind Lab中。
bspc取自 github.com/TTimo/bspc,修订版 d9a372db3fb6163bc49ead41c76c801a3d14cf80。尽管我们将此代码与主 ioq3 代码集成并且不在deps
目录中使用它们的副本,但实际上没有本地修改。我们希望这段代码是稳定的。
q3map2取自 github.com/TTimo/GtkRadiant,修订版 d3d00345c542c8d7cc74e2e8a577bdf76f79c701。一些小的本地修改添加了同步。我们还希望此代码稳定。
ioquake3取自 github.com/ioquake/ioq3,修订版 29db64070aa0bae49953bddbedbed5e317af48ba。该代码包含大量修改和添加。我们的目标是偶尔合并上游更改。
我们非常感谢这些存储库的维护者为维护高质量代码库所做的辛勤工作。
DeepMind Lab目前仅以源代码形式提供。它依赖于一些外部软件库,我们以几种不同的方式提供这些库:
zlib
、 glib
、 libxml2
、 jpeg
和png
库被引用为外部 Bazel 源,并提供了 Bazel BUILD 文件。依赖代码本身应该具有相当的可移植性,但我们发布的 BUILD 规则特定于 x86 上的 Linux。要在不同的平台上构建,您很可能必须编辑这些 BUILD 文件。
消息摘要算法包含在此包中(在//third_party/md
中),取自各自 RFC 的参考实现。 //third_party/rl_api
中包含“通用强化学习 API”,它也是由DeepMind 实验室作者创建的。该代码是可移植的。
EGL 标头包含在此包中(在//third_party/GL/{
EGL
,
KHR
}
中),取自 www.khronos.org/registry/EGL 上的 Khronos OpenGL/OpenGL ES XML API 注册表。标头已稍作修改,以消除 EGL 对 X 的依赖。
需要几个额外的库,但不以任何形式提供;它们必须存在于您的系统上:
glib
需要)--define headless=...
构建设置。构建规则使用一些特定于 GCC 的编译器设置。如果您的编译器无法识别某些标志(通常是特定的警告抑制),您可能必须编辑这些标志。警告应该是吵闹但无害的。