Python API RetroEnv Python API 主要由 retro.make()retro.RetroEnv 和一些枚举组成。大多数用户将要用到的主要函数是 retro.make()

retro.make(game, state=<State.DEFAULT: -1>, inttype=<Integrations.DEFAULT: <retro.data.DefaultIntegrations object>>, **kwargs)[source] 为指定的游戏创建一个 Gym 环境

class retro.RetroEnv(game, state=<State.DEFAULT: -1>, scenario=None, info=None, use_restricted_actions=<Actions.FILTERED: 1>, record=False, players=1, inttype=<Integrations.STABLE: 1>, obs_type=<Observations.IMAGE: 0>)[source] Gym Retro 环境类

为经典视频游戏提供 Gym 接口

如果你想要指定游戏集成的 metadata.json 中默认的状态或者指定从控制台的初始开机状态开始,你可以使用 retro.State 枚举:

class retro.State[source] 设置环境重启状态的特殊值。你也可以指定一个 .state 文件的名称字符串

DEFAULT= -1metadata.json 中的默认 savestate 开始游戏

NONE= 0 从模拟器的开机界面开始游戏

动作 retro.RetroEnv 包含一些可能的动作空间:

class retro.Actions[source] 环境动作空间的不同设置

ALL= 0 没有过滤动作的 MultiBinary 动作空间

DISCRETE= 2 经过过滤的离散动作空间

FILTERED= 1 带有无效或不允许的动作过滤的 MultiBinary 动作空间

MULTI_DISCRETE= 3 经过过滤的 MultiDiscete 动作空间

你也可以创建从这些空间派生的自己的动作空间。例如,请参见 discretizer.py。这个文件展示了如何使用 retro.Actions.Discrete,以及如何制作一个自定义包装器,将动作空间从 126 个动作减少到 7 个动作

观测 默认观测是游戏的 RGB 图像,但你也可以查看 RAM 值(通常比 RGB 图像小得多,而且你的代理可以更直接地观察游戏状态)。如果你想要变量值,任何在 data.json 中定义的变量都会在每个步骤后出现在 info 字典中。

class retro.Observations[source] 环境观测空间的不同设置

IMAGE= 0 使用 RGB 图像观测

RAM= 1 使用 RAM 观测,在这里你可以看到游戏的内存而不是屏幕

多人游戏环境 少数游戏支持多人游戏。要使用此功能,请将 players=<n> 传递给 retro.RetroEnv。这是一个控制 Pong-Atari2600 中的两个挡板的示例随机代理:

import retro

def main():
    env = retro.make(game='Pong-Atari2600', players=2)
    obs = env.reset()
    while True:
        # 动作空间现在将是 MultiBinary(16) 而不是 MultiBinary(8)
        # 动作的下半部分将是玩家 1 的动作,上半部分将是玩家 2 的动作
        obs, rew, done, info = env.step(env.action_space.sample())
        # rew 将是一个 [player_1_rew, player_2_rew] 的列表
        # done 和 info 仍将保持不变
        env.render()
        if done:
            obs = env.reset()
    env.close()


if __name__ == "__main__":
    main()

回放文件 Gym Retro 可以创建 .bk2 文件,记录了一个初始游戏状态和一系列按钮按下。因为模拟器是确定性的,每次播放此文件时都会看到相同的输出。因为它只存储按钮按下,所以文件可以比存储完整视频小约 1000 倍。

此外,如果你希望使用存储的按钮按下进行训练,它们可能会很有用。例如,为 Gym Retro Contest 提供了每个 Sonic The Hedgehog 关卡的回放文件。

你可以使用集成 UI(游戏 > 播放电影...)创建和查看回放文件。如果你想从 Python 使用回放文件,请参阅以下部分。

记录 如果你有一个代理在玩游戏,你可以将游戏过程记录到 .bk2 文件中以供以后处理:

import retro

env = retro.make(game='Airstriker-Genesis', record='.')
env.reset()
while True:
    _obs, _rew, done, _info = env.step(env.action_space.sample())
    if done:
        break

播放 给定一个 .bk2 文件,你可以在 Python 中加载它,然后播放它或使用它进行训练。

import retro

movie = retro.Movie('Airstriker-Genesis-Level1-000000.bk2')
movie.step()

env = retro.make(
    game=movie.get_game(),
    state=None,
    # bk2s 可以包含任何按钮按下,因此允许所有按钮
    use_restricted_actions=retro.Actions.ALL,
    players=movie.players,
)
env.initial_state = movie.get_state()
env.reset()

while movie.step():
    keys = []
    for p in range(movie.players):
        for i in range(env.num_buttons):
            keys.append(movie.get_key(i, p))
    env.step(keys)

渲染到视频 这需要安装 ffmpeg,并将输出写入输入文件所在的目录。

python3 -m retro.scripts.playback_movie Airstriker-Genesis-Level1-000000.bk2
Python API | RetroEnv:经典游戏模拟环境

原文地址: https://www.cveoy.top/t/topic/ooge 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录