Gymnasium

OpenAI Gym 的后继标准:定义强化学习环境的 reset / step / render / 空间接口,是自定义 env 与算法库(如 Stable Baselines3)之间的契约层。

简介

Gymnasium 是 Python 强化学习社区的主流环境接口库。它规定了智能体与环境交互的标准形状:观测空间与动作空间声明、回合初始化、单步转移与奖励、终止与截断标志、可选渲染。算法库只需针对该接口编程,即可在不同任务间复用训练代码。

与「随便写一个模拟器」相比,Gymnasium 的价值在于可检查、可组合、可对接spaces.Box / Discrete / Dict 等声明让算法知道输入输出结构;check_env 能在训练前抓接口错误;terminatedtruncated 分离任务结束与时间截断,避免把超时当成「到达目标」类失败。

在自定义任务(如 GridWorld悬崖行走)中,实现一个 gym.Env 子类并正确填写 metadata、空间与五元 step 返回值,是从「懂 RL 概念」到「能训出策略」的关键工程步骤。

关键信息

核心特性

工具类必填项

  • 安装方式pip install gymnasium(教程中常与 numpystable-baselines3pygametensorboard 一并安装)
  • 基本用法
    1. 子类化 gym.Env,设置 observation_space / action_space
    2. 实现 reset(seed=...)(obs, info)step(action)(obs, reward, terminated, truncated, info)
    3. 可选 render / closemetadata 声明 render_modesrender_fps
  • 关键参数/配置
    • 空间类型Box(连续/归一化坐标)、Discrete(离散动作或 flag)、Dict(多模态结构化观测)
    • 五元 stepterminated(任务结束)vs truncated(步数上限等截断)——混用会导致算法对 bootstrap 处理错误
    • 随机源:必须用 self.np_random,否则 seed 不生效
  • 适用场景:网格世界、机器人仿真包装、课程实验、对接 SB3/CleanRL 等训练栈;不适合把业务逻辑全塞进 env 却不做空间声明与检查

概念侧要点(接口语义)

  • Dict 观测:把 agent 坐标、目标、障碍地图、边界 flag 按语义拆分,而不是展平为一维向量;便于网络分路处理与扩展传感器字段
  • 归一化:坐标除以 (size-1) 落到 [0,1],降低不同尺度对梯度的冲击
  • info 字典:可携带 termination_reasonis_successpos 等,供评估失败模式分布(撞墙 / 坠崖 / 超时)

不同素材中的观点

  • 2026-07-19-juejin-gridworld-cliff-ppo:以完整 GridWorldEnv 示范 Gymnasium 自定义环境——metadata 支持 human/ansi;Dict 观测四字段;出界硬终止;check_env 作为训练前防线;强调 render 只读无副作用、奖励绝对值建议落在 [-10,10]。作者结论:从零建环境的核心是任务语义清晰 + 结构化观测 + 奖励工程,而不是堆算法超参。

实用信息

  • 快速上手步骤
    1. pip install gymnasium numpy stable-baselines3
    2. class MyEnv(gym.Env),填空间与 cliff/goal 配置
    3. check_env(MyEnv()) 无报错后再 PPO(...).learn(...)
  • 常用命令/片段
    • 空间:spaces.Dict({...})spaces.Discrete(4)
    • 检查:from stable_baselines3.common.env_checker import check_env
  • 注意事项/避坑指南
    • 不要用全局 np.random 做 reset 采样
    • 超时用 truncated=True,不要写成 terminated
    • 撞墙若设计为失败,应明确惩罚幅度并终止,避免 agent 卡边无限蹭步
    • 奖励塑形系数过大(见 势能奖励塑形)会扭曲主任务信号

相关页面