Gymnasium框架运行Atari游戏时step函数触发game_over()类型错误求助
问题分析与解决思路
错误根源
这个类型错误的核心是Gymnasium与ale-py版本不兼容:新版Gymnasium在处理Atari环境的结束逻辑时,会向ale-py的game_over()方法传递with_truncation=False参数,但你当前安装的旧版ale-py的game_over()方法只接受self一个参数,不支持额外的关键字参数,因此触发了参数不匹配的错误。
具体解决步骤
检查并升级依赖版本
- 先查看当前安装的版本:
pip list | grep -E "gymnasium|ale-py" - 升级到兼容的版本组合:
- 如果你的Gymnasium版本≥0.28.0,需要将ale-py升级到≥0.8.1,执行:
pip install --upgrade ale-py
- 如果你的Gymnasium版本≥0.28.0,需要将ale-py升级到≥0.8.1,执行:
- 安装Atari ROM文件(必须步骤,否则无法运行Atari游戏):
注意:ROM文件需要是合法获取的Atari游戏ROM,放到指定目录后执行上述命令导入。ale-import-roms ./path-to-your-roms-folder
- 先查看当前安装的版本:
修正代码中的不规范/兼容问题
- 规范
reset()的返回值处理:新版Gymnasium的reset()返回(observation, info),你的代码里直接调用env.reset()虽然不会报错,但建议接收返回值:obs, info = env.reset() - 替换旧的
wrap_env为Gymnasium官方的Atari包装器(如果wrap_env是自定义或旧版Gym的包装器):import gymnasium as gym from gymnasium.wrappers import AtariPreprocessing, FrameStack game_name = 'VideoPinball-v0' # 基础环境初始化 env = gym.make(game_name, render_mode="rgb_array") # 添加Atari预处理包装器(处理帧跳过、灰度化等) env = AtariPreprocessing(env) # 添加帧堆叠包装器(强化学习常用) env = FrameStack(env, num_stack=4) # 重置环境 obs, info = env.reset() - 修正循环内的重置逻辑:你代码里的
observation变量未使用,改成与循环内的obs保持一致:if terminated: obs, info = env.reset()
- 规范
内容的提问来源于stack exchange,提问作者satubus
相关产品推荐
相关产品推荐

