雅达利

通过 StellaArcade 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 提供了更多信息。

动作空间

每个环境将使用下面列出的完整动作空间的一个子集:

意义

意义

意义

0

NOOP

1

FIRE

2

UP

3

RIGHT

4

LEFT

5

DOWN

6

UPRIGHT

7

UPLEFT

8

DOWNRIGHT

9

DOWNLEFT

10

UPFIRE

11

RIGHTFIRE

12

LEFTFIRE

13

DOWNFIRE

14

UPRIGHTFIRE

15

UPLEFTFIRE

16

DOWNRIGHTFIRE

17

DOWNLEFTFIRE

默认情况下,大多数环境使用一个较小的合法动作子集,排除了在游戏中没有效果的任何动作。如果用户对使用所有可能的动作感兴趣,请将关键字参数 full_action_space=True 传递给 gymnasium.make

观察空间

Atari 环境的观察可以

  1. 使用 obs_type="rgb" 显示给人类玩家的RGB图像,其观测空间为 Box(0, 255, (210, 160, 3), np.uint8)

  2. 使用 obs_type="grayscale" 和观察空间 Box(0, 255, (210, 160), np.uint8) 的 RGB 图像的灰度版本

  3. 使用 obs_type="ram" 从控制台获取的RAM状态(128字节),其观测空间为 Box(0, 255, (128), np.uint8)

奖励

奖励的具体动态取决于环境,通常在游戏手册中有详细说明。你可以在 AtariAge 找到这些手册。

随机性

由于Atari游戏是完全确定的,代理可以通过简单地记忆一系列最优动作来达到最先进的性能,同时完全忽略来自环境的观察。

为了避免这种情况,有几种方法可以避免。

  1. 粘性动作:不是总是模拟传递给环境的动作,而是有很小的概率使用之前执行的动作。在 v0 和 v5 环境中,重复动作的概率是 25%,而在 v4 环境中,这个概率是 0%。用户可以使用 repeat_action_probability 来指定重复动作的概率,通过 make 来实现。

  2. 帧跳过:在每个环境步骤中,动作可以重复随机数量的帧。这种行为可以通过将关键字参数 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游戏都有三个版本。它们在上述参数的默认设置上有所不同。差异列在下表中:

版本

frameskip=

repeat_action_probability=

full_action_space=

v0

根据后缀变化(见下文)。

0.25

False

v4

根据后缀变化(见下文)。

0.0

False

v5

4

0.25

False

版本 v5 遵循 [2] 中概述的最佳实践。因此,建议在必要时过渡到 v5 并使用上述参数自定义环境。

对于每个Atari游戏,Gymnasium中注册了几个不同的配置。v0和v4的命名方案是类似的。让我们来看看Gymnasium中注册的所有Amidar-v0的变体:

名称

obs_type=

frameskip=

repeat_action_probability=

Amidar-v0

"rgb"

(2, 5,)

0.25

AmidarDeterministic-v0

"rgb"

4

0.0

AmidarNoframeskip-v0

"rgb"

1

0.25

Amidar-ram-v0

"ram"

(2, 5,)

0.25

Amidar-ramDeterministic-v0

"ram"

4

0.0

Amidar-ramNoframeskip-v0

"ram"

1

0.25

v5 版本中的变化:后缀 “Deterministic” 和 “NoFrameskip” 不再可用。取而代之的是,您必须通过传递给 gymnasium.make 的参数来指定环境配置。此外,v5 环境位于 “ALE” 命名空间中。后缀 “-ram” 仍然可用。因此,我们得到以下表格:

名称

obs_type=

frameskip=

repeat_action_probability=

ALE/Amidar-v5

"rgb"

4

0.25

ALE/Amidar-ram-v5

"ram"

4

0.25

风味

一些游戏允许用户设置难度级别和游戏模式。不同的模式/难度可能有不同的游戏动态和(如果使用减少的动作空间)不同的动作空间。我们遵循 [2] 的惯例,将难度级别和游戏模式的组合称为游戏的口味。下表显示了不同Atari游戏的可用模式和难度级别:

环境

可能的模式

默认模式

可能的困难

默认难度

冒险

[0, 1, 2]

0

[0, 1, 2, 3]

0

AirRaid

[1, …, 8]

toctree 是一个 reStructuredText :dfn:指令 ,这是一个非常多功能的标记。指令可以有参数、选项和内容。

[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]

toctree 是一个 reStructuredText :dfn:指令 ,这是一个非常多功能的标记。指令可以有参数、选项和内容。

[0]

0

BeamRider

[0]

0

[0, 1]

0

狂暴

[1, …, 9, 16, 17, 18]

toctree 是一个 reStructuredText :dfn:指令 ,这是一个非常多功能的标记。指令可以有参数、选项和内容。

[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]

toctree 是一个 reStructuredText :dfn:指令 ,这是一个非常多功能的标记。指令可以有参数、选项和内容。

[0, 1]

0

恶魔攻击

[1, 3, 5, 7]

toctree 是一个 reStructuredText :dfn:指令 ,这是一个非常多功能的标记。指令可以有参数、选项和内容。

[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]

toctree 是一个 reStructuredText :dfn:指令 ,这是一个非常多功能的标记。指令可以有参数、选项和内容。

[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]

toctree 是一个 reStructuredText :dfn:指令 ,这是一个非常多功能的标记。指令可以有参数、选项和内容。

[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