You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gymnasium框架运行Atari游戏时step函数触发game_over()类型错误求助

问题分析与解决思路

错误根源

这个类型错误的核心是Gymnasium与ale-py版本不兼容:新版Gymnasium在处理Atari环境的结束逻辑时,会向ale-py的game_over()方法传递with_truncation=False参数,但你当前安装的旧版ale-py的game_over()方法只接受self一个参数,不支持额外的关键字参数,因此触发了参数不匹配的错误。

具体解决步骤

  • 检查并升级依赖版本

    1. 先查看当前安装的版本:
      pip list | grep -E "gymnasium|ale-py"
      
    2. 升级到兼容的版本组合:
      • 如果你的Gymnasium版本≥0.28.0,需要将ale-py升级到≥0.8.1,执行:
        pip install --upgrade ale-py
        
    3. 安装Atari ROM文件(必须步骤,否则无法运行Atari游戏):
      ale-import-roms ./path-to-your-roms-folder
      
      注意:ROM文件需要是合法获取的Atari游戏ROM,放到指定目录后执行上述命令导入。
  • 修正代码中的不规范/兼容问题

    1. 规范reset()的返回值处理:新版Gymnasium的reset()返回(observation, info),你的代码里直接调用env.reset()虽然不会报错,但建议接收返回值:
      obs, info = env.reset()
      
    2. 替换旧的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()
      
    3. 修正循环内的重置逻辑:你代码里的observation变量未使用,改成与循环内的obs保持一致:
      if terminated:
        obs, info = env.reset()
      

内容的提问来源于stack exchange,提问作者satubus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 10:20:43