雅达利¶
通过 Stella 和 Arcade Learning Environment 模拟的 Atari 2600 环境集合。
Atari 环境通过 Stella 模拟器通过街机学习环境(ALE)[1] 进行模拟。
AutoROM (安装ROMs)¶
ALE-py 不包含运行任何 Atari 环境所需的 Atari ROMs(pip install gymnasium[atari]
)。要安装 Atari ROM,请使用 pip install gymnasium[accept-rom-license]
,这将安装 AutoROM 并下载 ROMs,将其安装在默认位置。在此过程中,您声明拥有这些 Atari 2600 ROMs 的许可证,并同意不进行这些 ROMs 的分发。
可以在备用位置安装 ROM,AutoROM 提供了更多信息。
动作空间¶
每个环境将使用下面列出的完整动作空间的一个子集:
值 |
意义 |
值 |
意义 |
值 |
意义 |
---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
默认情况下,大多数环境使用一个较小的合法动作子集,排除了在游戏中没有效果的任何动作。如果用户对使用所有可能的动作感兴趣,请将关键字参数 full_action_space=True
传递给 gymnasium.make
。
观察空间¶
Atari 环境的观察可以
使用
obs_type="rgb"
显示给人类玩家的RGB图像,其观测空间为Box(0, 255, (210, 160, 3), np.uint8)
使用
obs_type="grayscale"
和观察空间Box(0, 255, (210, 160), np.uint8)
的 RGB 图像的灰度版本使用
obs_type="ram"
从控制台获取的RAM状态(128字节),其观测空间为Box(0, 255, (128), np.uint8)
奖励¶
奖励的具体动态取决于环境,通常在游戏手册中有详细说明。你可以在 AtariAge 找到这些手册。
随机性¶
由于Atari游戏是完全确定的,代理可以通过简单地记忆一系列最优动作来达到最先进的性能,同时完全忽略来自环境的观察。
为了避免这种情况,有几种方法可以避免。
粘性动作:不是总是模拟传递给环境的动作,而是有很小的概率使用之前执行的动作。在 v0 和 v5 环境中,重复动作的概率是
25%
,而在 v4 环境中,这个概率是0%
。用户可以使用repeat_action_probability
来指定重复动作的概率,通过make
来实现。帧跳过:在每个环境步骤中,动作可以重复随机数量的帧。这种行为可以通过将关键字参数
frameskip
设置为正整数或两个正整数的元组来改变。如果frameskip
是整数,帧跳过是确定性的,并且在每个步骤中动作重复frameskip
次。否则,如果frameskip
是一个元组,跳过的帧数在每个环境步骤中在frameskip[0]
(包含)和frameskip[1]
(不包含)之间均匀随机选择。
常见参数¶
通过 gymnasium.make
初始化 Atari 环境时,您可以传递一些额外的参数。这些参数适用于任何 Atari 环境。
模式:
整数
。游戏模式,参见 [2]。合法值取决于环境,并在上表中列出。difficulty:
int
。游戏的难度,参见 [2]。合法值取决于环境,并在上表中列出。与mode
一起,这决定了游戏的“风格”。obs_type:
str
. 此参数决定环境返回的观察类型。其值为:“ram”: 返回的RAM为128字节
“rgb”: 返回游戏的RGB渲染
“grayscale”: 返回灰度渲染
frameskip:
int
或两个int
的元组。此参数控制随机帧跳过,如随机性部分所述。repeat_action_probability:
float
。动作重复的概率,也称为“粘性动作”,如随机性一节所述。full_action_space:
bool
。如果设置为True
,动作空间将包含控制台上的所有合法动作。否则,动作空间将被缩减为一个子集。render_mode:
str
. 指定渲染模式。其值为:human: 显示屏幕并启用游戏声音。这将锁定模拟器到指定的 ROM FPS。
rgb_array: 返回当前环境的RGB帧。
版本历史与命名方案¶
所有Atari游戏都有三个版本。它们在上述参数的默认设置上有所不同。差异列在下表中:
版本 |
|
|
|
---|---|---|---|
v0 |
根据后缀变化(见下文)。 |
|
|
v4 |
根据后缀变化(见下文)。 |
|
|
v5 |
|
|
|
版本 v5 遵循 [2] 中概述的最佳实践。因此,建议在必要时过渡到 v5 并使用上述参数自定义环境。
对于每个Atari游戏,Gymnasium中注册了几个不同的配置。v0和v4的命名方案是类似的。让我们来看看Gymnasium中注册的所有Amidar-v0的变体:
名称 |
|
|
|
---|---|---|---|
Amidar-v0 |
|
|
|
AmidarDeterministic-v0 |
|
|
|
AmidarNoframeskip-v0 |
|
|
|
Amidar-ram-v0 |
|
|
|
Amidar-ramDeterministic-v0 |
|
|
|
Amidar-ramNoframeskip-v0 |
|
|
|
v5 版本中的变化:后缀 “Deterministic” 和 “NoFrameskip” 不再可用。取而代之的是,您必须通过传递给 gymnasium.make
的参数来指定环境配置。此外,v5 环境位于 “ALE” 命名空间中。后缀 “-ram” 仍然可用。因此,我们得到以下表格:
名称 |
|
|
|
---|---|---|---|
ALE/Amidar-v5 |
|
|
|
ALE/Amidar-ram-v5 |
|
|
|
风味¶
一些游戏允许用户设置难度级别和游戏模式。不同的模式/难度可能有不同的游戏动态和(如果使用减少的动作空间)不同的动作空间。我们遵循 [2] 的惯例,将难度级别和游戏模式的组合称为游戏的口味。下表显示了不同Atari游戏的可用模式和难度级别:
环境 |
可能的模式 |
默认模式 |
可能的困难 |
默认难度 |
---|---|---|---|---|
冒险 |
[0, 1, 2] |
0 |
[0, 1, 2, 3] |
0 |
AirRaid |
[1, …, 8] |
|
[0] |
0 |
外星人 |
[0, 1, 2, 3] |
0 |
[0, 1, 2, 3] |
0 |
Amidar |
[0] |
0 |
[0, 3] |
0 |
袭击 |
[0] |
0 |
[0] |
0 |
Asterix |
[0] |
0 |
[0] |
0 |
小行星 |
[0, …, 31, 128] |
0 |
[0, 3] |
0 |
亚特兰蒂斯 |
[0, 1, 2, 3] |
0 |
[0] |
0 |
亚特兰蒂斯2 |
[0] |
0 |
[0] |
0 |
西洋双陆棋 |
[0] |
0 |
[3] |
0 |
银行抢劫 |
[0, 4, 8, 12, 16, 20, 24, 28] |
0 |
[0, 1, 2, 3] |
0 |
基本数学 |
[5, 6, 7, 8] |
5 |
[0, 2, 3] |
0 |
BattleZone |
[1, 2, 3] |
|
[0] |
0 |
BeamRider |
[0] |
0 |
[0, 1] |
0 |
狂暴 |
[1, …, 9, 16, 17, 18] |
|
[0] |
0 |
二十一点 |
[0] |
0 |
[0, 1, 2, 3] |
0 |
保龄球 |
[0, 2, 4] |
0 |
[0, 1] |
0 |
拳击 |
[0] |
0 |
[0, 1, 2, 3] |
0 |
突破 |
[0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44] |
0 |
[0, 1] |
0 |
嘉年华 |
[0] |
0 |
[0] |
0 |
赌场 |
[0, 2, 3] |
0 |
[0, 1, 2, 3] |
0 |
蜈蚣 |
[22, 86] |
22 |
[0] |
0 |
ChopperCommand |
[0, 2] |
0 |
[0, 1] |
0 |
疯狂攀岩者 |
[0, 1, 2, 3] |
0 |
[0, 1] |
0 |
弩 |
[0, 2, 4, 6] |
0 |
[0, 1] |
0 |
暗室 |
[0] |
0 |
[0] |
0 |
防御者 |
[1, …, 9, 16] |
|
[0, 1] |
0 |
恶魔攻击 |
[1, 3, 5, 7] |
|
[0, 1] |
0 |
DonkeyKong |
[0] |
0 |
[0] |
0 |
DoubleDunk |
[0, …, 15] |
0 |
[0] |
0 |
地球世界 |
[0] |
0 |
[0] |
0 |
ElevatorAction |
[0] |
0 |
[0] |
0 |
Enduro |
[0] |
0 |
[0] |
0 |
埋葬 |
[0] |
0 |
[0, 2] |
0 |
和 |
[0, 1, 2] |
0 |
[0, 1, 2, 3] |
0 |
钓鱼大赛 |
[0] |
0 |
[0, 1, 2, 3] |
0 |
FlagCapture |
[8, 9, 10] |
8 |
[0] |
0 |
高速公路 |
[0, …, 7] |
0 |
[0, 1] |
0 |
青蛙过河 |
[0, 1, 2] |
0 |
[0, 1] |
0 |
霜冻 |
[0, 2] |
0 |
[0] |
0 |
Galaxian |
[1, …, 9] |
|
[0, 1] |
0 |
Gopher |
[0, 2] |
0 |
[0, 1] |
0 |
Gravitar |
[0, 1, 2, 3, 4] |
0 |
[0] |
0 |
Hangman |
[0, 1, 2, 3] |
0 |
[0, 1] |
0 |
闹鬼的房子 |
[0, …, 8] |
0 |
[0, 1] |
0 |
英雄 |
[0, 1, 2, 3, 4] |
0 |
[0] |
0 |
HumanCannonball |
[0, …, 7] |
0 |
[0, 1] |
0 |
冰球 |
[0, 2] |
0 |
[0, 1, 2, 3] |
0 |
詹姆斯·邦德 |
[0, 1] |
0 |
[0] |
0 |
JourneyEscape |
[0] |
0 |
[0, 1] |
0 |
爆炸 |
[0] |
0 |
[0] |
0 |
袋鼠 |
[0, 1] |
0 |
[0] |
0 |
KeystoneKapers |
[0] |
0 |
[0] |
0 |
金刚 |
[0, 1, 2, 3] |
0 |
[0] |
0 |
Klax |
[0, 1, 2] |
0 |
[0] |
0 |
Koolaid |
[0] |
0 |
[0] |
0 |
克鲁尔 |
[0] |
0 |
[0] |
0 |
功夫大师 |
[0] |
0 |
[0] |
0 |
LaserGates |
[0] |
0 |
[0] |
0 |
LostLuggage |
[0, 1] |
0 |
[0, 1] |
0 |
马里奥兄弟 |
[0, 2, 4, 6] |
0 |
[0] |
0 |
迷你高尔夫 |
[0] |
0 |
[0, 1] |
0 |
蒙特祖玛的复仇 |
[0] |
0 |
[0] |
0 |
MrDo |
[0, 1, 2, 3] |
0 |
[0] |
0 |
吃豆小姐 |
[0, 1, 2, 3] |
0 |
[0] |
0 |
命名这个游戏 |
[8, 24, 40] |
8 |
[0, 1] |
0 |
奥赛罗 |
[0, 1, 2] |
0 |
[0, 2] |
0 |
Pacman |
[0, …, 7] |
0 |
[0, 1] |
0 |
凤凰 |
[0] |
0 |
[0] |
0 |
陷阱 |
[0] |
0 |
[0] |
0 |
陷阱2 |
[0] |
0 |
[0] |
0 |
Pong |
[0, 1] |
0 |
[0, 1, 2, 3] |
0 |
波扬 |
[10, 30, 50, 70] |
10 |
[0] |
0 |
PrivateEye |
[0, 1, 2, 3, 4] |
0 |
[0, 1, 2, 3] |
0 |
Qbert |
[0] |
0 |
[0, 1] |
0 |
Riverraid |
[0] |
0 |
[0, 1] |
0 |
RoadRunner |
[0] |
0 |
[0] |
0 |
Robotank |
[0] |
0 |
[0] |
0 |
海底探险 |
[0] |
0 |
[0, 1] |
0 |
兰斯洛特爵士 |
[0] |
0 |
[0] |
0 |
滑雪 |
[0] |
0 |
[0] |
0 |
Solaris |
[0] |
0 |
[0] |
0 |
太空入侵者 |
[0, …, 15] |
0 |
[0, 1] |
0 |
太空大战 |
[6, …, 17] |
6 |
[0] |
0 |
星际枪手 |
[0, 1, 2, 3] |
0 |
[0] |
0 |
超人 |
[0] |
0 |
[0, 1, 2, 3] |
0 |
环绕 |
[0, 2] |
0 |
[0, 1, 2, 3] |
0 |
网球 |
[0, 2] |
0 |
[0, 1, 2, 3] |
0 |
俄罗斯方块 |
[0] |
0 |
[0] |
0 |
TicTacToe3D |
[0, …, 8] |
0 |
[0, 2] |
0 |
时间飞行员 |
[0] |
0 |
[0, 1, 2] |
0 |
Trondead |
[0] |
0 |
[0, 1] |
0 |
动荡 |
[0, …, 8] |
0 |
[0] |
0 |
图坦卡蒙 |
[0, 4, 8, 12] |
0 |
[0] |
0 |
UpNDown |
[0] |
0 |
[0, 1, 2, 3] |
0 |
冒险 |
[0] |
0 |
[0, 1, 2, 3] |
0 |
视频检查器 |
[1, …, 9, 11, …, 19] |
|
[0] |
0 |
VideoChess |
[0, 1, 2, 3, 4] |
0 |
[0] |
0 |
VideoCube |
[0, 1, 2, 100, 101, 102, …, 5000, 5001, 5002] |
0 |
[0, 1] |
0 |
视频弹球 |
[0, 2] |
0 |
[0, 1] |
0 |
WizardOfWor |
[0] |
0 |
[0, 1] |
0 |
WordZapper |
[0, …, 23] |
0 |
[0, 1, 2, 3] |
0 |
YarsRevenge |
[0, 32, 64, 96] |
0 |
[0, 1] |
0 |
Zaxxon |
[0, 8, 16, 24] |
0 |
[0] |
0 |
参考文献¶
[1] MG Bellemare, Y Naddaf, J Veness, 和 M Bowling. “街机学习环境:通用代理的评估平台.” 人工智能研究杂志 (2012).
[2] Machado 等人。“重新审视街机学习环境:通用代理的评估协议和开放问题”《人工智能研究杂志》(2018) URL: https://jair.org/index.php/jair/article/view/11182