将gym更新到Gymnasium后需要修改哪些位置

gym更新到Gymnasium后需要修改的位置

    • [✅ 1. **导入方式变更**](#✅ 1. 导入方式变更)
    • [✅ 2. **环境创建不变**](#✅ 2. 环境创建不变)
    • [✅ 3. **`reset()` 返回值变更**](#✅ 3. reset() 返回值变更)
    • [✅ 4. **`step()` 返回值变更(最重要!)**](#✅ 4. step() 返回值变更(最重要!))
      • [旧版(4 元组)](#旧版(4 元组))
      • [新版(5 元组)](#新版(5 元组))
      • [✅ 如果你仍需要 `done` 变量:](#✅ 如果你仍需要 done 变量:)
    • [✅ 5. **训练循环典型修改示例**](#✅ 5. 训练循环典型修改示例)
    • [✅ 6. **Wrapper 和自定义环境**](#✅ 6. Wrapper 和自定义环境)
    • [✅ 7. **其他注意事项**](#✅ 7. 其他注意事项)
    • [✅ 8. **安装与版本**](#✅ 8. 安装与版本)
    • [✅ 总结:你需要修改的位置](#✅ 总结:你需要修改的位置)
      • [🔧 小技巧:快速检查](#🔧 小技巧:快速检查)

个人学习笔记,仅供自己方便查阅,无其他用途和意思。

将代码从 旧版 gym(≤0.21) 迁移到 新版 Gymnasium(≥0.26,官方继任者) 时,需要修改以下几个关键位置。以下是完整的迁移指南:


✅ 1. 导入方式变更

旧版(gym)

python 复制代码
import gym

新版(Gymnasium)

python 复制代码
import gymnasium as gym

💡 Gymnasium 是 OpenAI Gym 的官方维护版本,API 兼容但更规范。


✅ 2. 环境创建不变

python 复制代码
env = gym.make("CartPole-v1")  # 依然有效

✅ 这一行不需要改

⚠️ 但注意:CartPole-v0 已被标记为过时,建议使用 v1


✅ 3. reset() 返回值变更

旧版

python 复制代码
state = env.reset()  # 返回 observation(如 np.ndarray)

新版(Gymnasium)

python 复制代码
state, info = env.reset()  # 返回 (observation, info_dict)

📌 必须解包! 否则 state 会是 (obs, {}) 元组,导致后续错误。


✅ 4. step() 返回值变更(最重要!)

旧版(4 元组)

python 复制代码
next_state, reward, done, info = env.step(action)

新版(5 元组)

python 复制代码
next_state, reward, terminated, truncated, info = env.step(action)
  • terminated: 因任务逻辑结束(如掉杆、到达目标)
  • truncated: 因外部限制结束(如超时、步数限制)
  • 逻辑上的 "done" = terminated or truncated

✅ 如果你仍需要 done 变量:

python 复制代码
next_state, reward, terminated, truncated, info = env.step(action)
done = terminated or truncated

✅ 5. 训练循环典型修改示例

旧版代码(gym ≤0.21)

python 复制代码
state = env.reset()
for _ in range(max_steps):
    action = agent.get_action(state)
    next_state, reward, done, info = env.step(action)
    agent.store(state, action, reward, next_state, done)
    state = next_state
    if done:
        break

新版代码(Gymnasium)

python 复制代码
state, info = env.reset()  # ← 解包 reset()
for _ in range(max_steps):
    action = agent.get_action(state)
    next_state, reward, terminated, truncated, info = env.step(action)  # ← 5 个返回值
    done = terminated or truncated  # ← 手动合并
    agent.store(state, action, reward, next_state, done)
    state = next_state
    if done:
        break

🔁 每个 episode 开始都要调用 env.reset() 并解包!


✅ 6. Wrapper 和自定义环境

如果你写了自定义环境或使用了 wrapper,需确保:

  • reset() 返回 (obs, info)
  • step() 返回 (obs, reward, terminated, truncated, info)
  • info 必须是字典(可为空 {}

示例:

python 复制代码
class MyEnv(gym.Env):
    def reset(self, seed=None, options=None):
        super().reset(seed=seed)
        obs = ...  # your observation
        return obs, {}  # ← 必须返回 tuple

    def step(self, action):
        ...
        return obs, reward, terminated, truncated, {}

✅ 7. 其他注意事项

项目 说明
render() 用法基本不变,但某些模式(如 human)行为可能微调
seed() 已弃用!改用 reset(seed=123)
action_space.sample() 依然有效
observation_space 依然有效

✅ 8. 安装与版本

bash 复制代码
# 卸载旧 gym(可选)
pip uninstall gym

# 安装 Gymnasium
pip install gymnasium[box2d]  # 如果用 CarRacing 等
# 或
pip install gymnasium

gymnasium 和旧 gym 可共存,但建议统一用 gymnasium


✅ 总结:你需要修改的位置

文件/函数 修改内容
所有 import import gymimport gymnasium as gym
env.reset() 调用处 state = env.reset()state, info = env.reset()
env.step() 调用处 解包为 5 个变量,并用 done = terminated or truncated
自定义环境 确保 resetstep 返回正确元组
经验回放存储 确保存入的是纯 observation(不是 tuple)

🔧 小技巧:快速检查

在训练开始前加一行测试:

python 复制代码
obs, info = env.reset()
print("Reset returns:", type(obs), obs.shape, type(info))
obs, r, term, trunc, info = env.step(env.action_space.sample())
print("Step returns:", len([obs, r, term, trunc, info]))

如果输出符合预期,说明迁移成功。


完成以上修改后,RL代码就能在 Gymnasium 上稳定运行,并兼容 NumPy ≥1.24、PyTorch 等新版依赖。

相关推荐
染指11101 天前
26.RAG进阶(Advanced RAG)-假设性问题索引
人工智能·windows·agent·rag·advanced rag
闵孚龙1 天前
动态图机制:为什么 PyTorch 调试起来更舒服
人工智能·pytorch·python
甲维斯1 天前
还要啥Codex!DeepSeek接入Zcode远程连接!
人工智能
百胜软件@百胜软件1 天前
百胜软件亮相“AI消费新生活”主题日活动,AI智能运营平台入选市级案例征集
人工智能·生活·零售数字化·数智中台·珠宝行业
专注搞钱1 天前
GPT-4o写设备Recipe:从3小时到10分钟
数据库·人工智能·gpt·半导体
闻道参看1 天前
贝芯宠AI灵兽 ELFVET 大模型聚焦临床应用,强化宠物诊疗综合能力
人工智能·宠物
MartinYeung51 天前
[论文学习]重新思考大型语言模型忘却目标:梯度视角与超越
人工智能·学习·语言模型
财经资讯数据_灵砚智能1 天前
基于全球经济类多源新闻的NLP情感分析与数据可视化(夜间-次晨)2026年6月14日
大数据·人工智能·python·ai·信息可视化·自然语言处理·灵砚智能
m0_380167141 天前
加密货币价格 API、市场数据 API 与 分析 API 有什么区别?
人工智能·ai·区块链
zyplayer-doc1 天前
企业知识库安全与权限管理完全指南:从加密到审计的六层防护
人工智能·安全·pdf·编辑器·创业创新