ViZDoom 允许开发仅使用视觉信息(屏幕缓冲区)玩 Doom 的 AI 机器人。它主要用于机器视觉学习,特别是深度强化学习的研究。
ViZDoom 基于 ZDoom 引擎提供游戏机制。
特点
- 多平台支持(Linux,macOS,Windows),
- Python 和 C++ API,
- Gymnasium/OpenAI Gym 环境包装器(感谢 Arjun KG Benjamin Noah Beal,Lawrence Francis 和 Mark Towers),
- 易于创建的自定义场景(提供视觉编辑器、脚本语言和示例),
- 支持异步和同步单人和多人模式,
- 快速(在同步模式下单线程运行速度可达 7000 fps),
- 轻量(几 MB),
- 可自定义分辨率和渲染参数,
- 可访问深度缓冲区(3D 视觉),
- 自动标注帧中可见的游戏对象,
- 可访问音频缓冲区(感谢 Shashank Hegde),
- 可访问演员/对象列表和地图几何结构,
- 屏外渲染,
- 支持录制游戏剧集,
- 异步模式下的游戏时间缩放。
ViZDoom API 对于强化学习非常友好(也适合于示范学习、学徒学习或反向强化学习学徒等)。
Julia(感谢 Jun Tian),Lua 和 Java 绑定可在其他分支中找到,但不再维护。
引用
M Wydmuch, M Kempka & W Jaśkowski, ViZDoom Competitions: Playing Doom from Pixels, IEEE Transactions on Games, vol. 11, no. 3, pp. 248-259, 2019 (arXiv:1809.03470)
@article{Wydmuch2019ViZdoom,
author = {Marek Wydmuch and Micha{\l} Kempka and Wojciech Ja\'skowski},
title = {{ViZDoom} {C}ompetitions: {P}laying {D}oom from {P}ixels},
journal = {IEEE Transactions on Games},
year = {2019},
volume = {11},
number = {3},
pages = {248--259},
doi = {10.1109/TG.2018.2877047},
note = {The 2022 IEEE Transactions on Games Outstanding Paper Award}
}
或
M. Kempka, M. Wydmuch, G. Runc, J. Toczek & W. Jaśkowski, ViZDoom: A Doom-based AI Research Platform for Visual Reinforcement Learning, IEEE Conference on Computational Intelligence and Games, pp. 341-348, Santorini, Greece, 2016 (arXiv:1605.02097)
@inproceedings{Kempka2016ViZDoom,
author = {Micha{\l} Kempka and Marek Wydmuch and Grzegorz Runc and Jakub Toczek and Wojciech Ja\'skowski},
title = {{ViZDoom}: A {D}oom-based {AI} Research Platform for Visual Reinforcement Learning},
booktitle = {IEEE Conference on Computational Intelligence and Games},
year = {2016},
address = {Santorini, Greece},
month = {Sep},
pages = {341--348},
publisher = {IEEE},
doi = {10.1109/CIG.2016.7860433},
note = {The Best Paper Award}
}
Python 快速开始
Linux
要安装最新版本的 ViZDoom,只需运行:
pip install vizdoom
支持 x86-64 和 AArch64(ARM64)架构。 在 Linux 上为 Python 3.8+ 提供了 Wheels。
如果您的平台没有可用的 Python 轮文件(Python 版本 <3.8,多数发行版低于 manylinux_2_28 标准),pip 将尝试从源代码安装(构建)ViZDoom。 从源代码安装 ViZDoom 需要 C++11 编译器,CMake 3.12+,Boost 1.54+ SDL2,OpenAL(可选),以及 Python 3.7+。更多详细信息请参见文档。
macOS
要安装最新版本的 ViZDoom,只需运行(在 M1/M2 芯片上它可能需要几分钟,因为它会从源代码构建 ViZDoom):
brew install cmake boost sdl2 openal-soft
pip install vizdoom
支持 Intel 和 Apple Silicon CPU。 我们建议至少使用 macOS High Sierra 10.13+ 及 Python 3.7+。 在 Apple Silicon(M1 和 M2)上,确保您使用的是 Apple Silicon 的 Python/Pip。
Windows
要安装最新版本的 ViZDoom,只需运行:
pip install vizdoom
目前,Windows 上仅支持 x86-64 架构。 在 Windows 上为 Python 3.8+ 提供了 Wheels。
请注意,Windows 版本未经过与 Linux 和 macOS 版本同等的测试。 它可以用于开发和测试,但如果您希望在 Windows 上进行严肃的(耗时和资源密集型)实验, 请考虑使用 Docker 或 WSL 使用 Linux 版本。
Gymnasium/Gym 包装器
Gymnasium 环境随 ViZDoom 一起安装。 请参见文档和 示例 以了解 Gymnasium API 的使用。
OpenAI-Gym 包装器也可用,要安装它们,请运行:
pip install vizdoom[gym]
请参见文档和 示例 以了解 Gym API 的使用。 OpenAI-Gym 包装器已被弃用,并将在未来版本中移除,以支持 Gymnasium。
示例
目前 Python 示例最丰富,所以我们建议即使您计划使用其他语言,也可以先查看它们。API 对所有语言几乎相同。
另请参见 教程。
原版 Doom 图形
遗憾的是,我们无法与 ViZDoom 一起分发原版 Doom 图形。
如果您拥有原版 Doom 或 Doom 2 游戏,您可以通过将 doom.wad
或 doom2.wad
放置在您的工作目录或 vizdoom
包目录中来替换 Freedoom 图形。
或者,任何基本的游戏 WAD(包括其他 Doom 引擎游戏和自定义/社区游戏)都可以使用,通过set_doom_game_path/setDoomGamePath
方法指向它即可。
文档
详细的 ViZDoom 类型和方法描述请参见文档。
ZDoom 引擎和 ACS 脚本语言的完整文档请参见 ZDoom Wiki。
有用的文章(适用于希望创建自定义环境/场景的高级用户):
超赞的 Doom 工具/项目
- SLADE3 - 一款适用于 Linux、MacOS 和 Windows 的出色 Doom 地图(场景)编辑器。
- Doom Builder 2 - 另一款适用于 Windows 的出色 Doom 地图编辑器。
- OBLIGE - Doom 随机地图生成器,PyOblige 是其简单的 Python 封装。
- Omgifol - 优秀的 Python 库,用于操作 Doom 地图。
- NavDoom - 用于 ViZDoom 的迷宫导航生成器(类似于 DeepMind Lab)。
- MazeExplorer - 更复杂的 ViZDoom 迷宫导航生成器。
- Sample Factory - 为 ViZDoom 提供的高性能强化学习框架。
- EnvPool - 为 ViZDoom 提供的高性能矢量化环境。
- Obsidian - Doom 随机地图生成器,OBLIGE 的延续项目。
- LevDoom - ViZDoom 中通用化基准测试,具有视觉复杂度的难度等级。
- COOM - ViZDoom 中的持续学习基准测试,提供具有多样目标的任务序列。
贡献
这个项目在我们空闲时间维护和开发。欢迎所有错误修复、新示例、场景和其他贡献!我们也对功能创意和设计建议持开放态度。
我们为 ViZDoom 的未来开发工作提供了一个路线图,请访问这里。
许可
ViZDoom 原始代码使用 MIT 许可。ZDoom 引用了几种来源的代码,具有不同的许可方案。