注意:翻译需要符合中文语序、流程、通顺
DeepMind Lab 是一个基于 id Software 的 Quake III Arena 通过 ioquake3 和 其他开源软件 构建的 3D 学习环境。
DeepMind Lab 提供了一套具有挑战性的 3D 导航和解谜任务,用于学习代理。其主要目的是作为人工智能,特别是深度强化学习研究的测试平台。
关于
免责声明:这不是谷歌的官方产品。
如果你在研究中使用了 DeepMind Lab 并且希望引用 DeepMind Lab 环境,我们建议你引用 DeepMind Lab 论文。
你可以通过 lab@deepmind.com 与我们联系。
在 Linux 上入门
-
克隆 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
这里有一些 更详细的构建文档,包括如何在没有依赖项的情况下安装它们。
要启用编译器优化,请在每个 bazel build
、bazel test
和 bazel run
命令中传递标志 --compilation_mode=opt
,或简写为 -c opt
。为了简洁,示例中省略了此标志,但在性能重要的实际训练和评估中应使用它。
作为人类玩家进行测试
要使用人类输入控制测试游戏,运行
lab$ bazel run :game -- --level_script=tests/empty_room_test --level_setting=logToStdErr=true
# 或者:
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 的参考实现。“通用强化学习 API”包含在//third_party/rl_api
,此代码由 DeepMind Lab 作者创建。该代码是可移植的。 -
EGL 头文件包含在此包中(位于 [
//third_party/GL/{
EGL
,
KHR
}
),取自 Khronos OpenGL/OpenGL ES XML API 注册表 www.khronos.org/registry/EGL。这些头文件稍作修改,以移除 EGL 对 X 的依赖。 -
还需要一些额外的库,但不以任何形式附带;它们必须存在于你的系统中:
- SDL 2
- gettext(
glib
需要) - OpenGL:需要硬件驱动程序和库以进行硬件加速的人工播放。机器学习代理想要使用的无头库可以使用 EGL 或 GLX 进行硬件加速渲染,或者使用 OSMesa 进行软件渲染,这取决于
--define headless=...
构建设置。 - Python 2.7(其他版本可能也能工作),带有 NumPy、PIL(一些测试要求 NumPy 版本至少为 1.8),或者 Python 3(至少 3.5 版本),带有 NumPy 和 Pillow。
构建规则使用了一些特定于 GCC 的编译器设置。如果你的编译器不识别某些标