Gymnasium
强化学习环境标准API库,为AI算法提供统一的训练场接口
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
强化学习环境标准API库,为AI算法提供统一的训练场接口
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
图1:Gymnasium 项目 Logo(来源:GitHub 仓库)
如果你曾经想让一个 AI 学会下棋、学会走路、学会在复杂环境中做出最优决策,那你一定绕不开一个名字——OpenAI Gym。
2016 年,OpenAI 开源了 Gym,这是一个用于强化学习的 Python 环境库。它像一座"AI 训练场":你定义好环境和规则,Gym 提供统一的接口让算法和训练场对话。在那个年代,无数研究者靠它训练出了 AlphaGo 的前身、DQN 玩 Atari 游戏的各种变体。
但到了 2023 年,OpenAI 宣布不再维护 Gym。维护权交给了一个独立的非营利组织——Farama Foundation。这个组织接手后,将项目更名为 Gymnasium,意思是"体操馆",寓意 AI 在里面锻炼、成长。如今 Gymnasium 已成长为强化学习领域最具影响力的标准环境库,超过 11000 颗 GitHub 星标,被斯坦福大学、UC 伯克利等顶尖高校广泛使用。
打个比方:如果把强化学习算法比作"学生",那么 Gymnasium 就是一座"健身房"。健身房里有各种器械(环境),学生用统一的动作规范(API)和器械交互,每完成一次训练得到一个"分数"(reward),然后调整策略,争取下次拿更高分。
Gymnasium 提供三大类环境:
经典控制类(Classic Control):倒立摆(CartPole)、山地车(MountainCar)、钟摆(Pendulum)等基于物理学的经典问题。代码简单、训练快速,是入门强化学习的最佳起点。你可以在几分钟内跑通一个倒立摆的控制实验,亲眼看到 AI 如何让一根杆子保持平衡。
Box2D 类:月球登陆器(Lunar Lander)、赛车(Racing)等二维物理仿真环境。这些环境模拟了真实的物理引擎,AI 需要处理更复杂的连续动作空间,比如控制引擎推力方向。月球登陆器是强化学习领域的"Hello World"进阶题——入门者往往需要数百次尝试才能让它稳稳落地。
文本/棋盘类(Toy Text):冰湖(FrozenLake)、悬崖行走(CliffWalking)等网格世界环境。这类环境状态空间离散、动作简单,适合验证算法逻辑和教学演示。虽然视觉效果朴素,但背后涉及的策略推理(如动态规划 vs 蒙特卡洛)同样深刻。
此外,Gymnasium 还通过插件式依赖支持更高级的环境:Atari 2600 游戏(需要 atari 插件)、Mujoco 物理仿真(需要 mujoco 插件,支持三维人形机器人仿真)。
Gymnasium 的灵魂在于它的 API 设计哲学:极简、统一、正交。所有环境都遵循同一个接口:
reset():重置环境,返回初始状态step(action):执行动作,返回 (next_state, reward, terminated, truncated, info)render():渲染可视化(可选)这种设计被称为"环境标准协议"。一旦一个环境实现了这个协议,任何强化学习算法都可以无缝接入。无论你是用 Stable-Baselines3、RLlib、Tianshou 还是自研算法,写一次 env,就能跑遍所有兼容 Gymnasium 的环境。反过来,任何新的强化学习算法,只要符合这个接口,就能立刻在所有已有环境中测试。
这种"正交化设计"是 Gymnasium 生态繁荣的根本原因——它把环境和算法解耦了,让整个社区可以各专其长:环境开发者专心做仿真,研究者专心优化算法,工具链作者提供基础设施,彼此互不干扰。
对于大规模训练,Gymnasium 提供了 VectorEnv(向量化环境):同时运行多个并行环境,显著提升数据采集效率。它还提供了一套完整的 Wrapper 系统:无需修改原始环境代码,就能对环境的输入输出做变换(比如归一化奖励、将离散动作映射为连续动作)。这让算法的通用性进一步提升。
Gymnasium 还维护着一个配套项目 Shimmy,专门负责将第三方环境(如 DeepMind Control Suite、DMGym、Metaworld)转换为 Gymnasium 兼容格式。目前已支持数十种主流仿真套件。
Gymnasium 核心仅依赖 numpy 和 cloudpickle,做到了极简依赖。代码采用现代 Python(type hints 全覆盖),实现了完整的 py.typed 标注,符合 PEP 561,可被 mypy/ pyright 等静态分析工具良好支持。测试套件使用 pytest,覆盖率较高。代码规范遵循 Black formatter + pre-commit CI,每次提交都会自动检查代码风格。
可选依赖按功能模块化拆分:Atari、Box2D、Mujoco、JAX、PyTorch 等均为独立插件,用户按需安装即可,不强制引入重型依赖。
零基础推荐路径:安装 gymnasium[classic-control] 插件,在 Jupyter Notebook 里直接跑 CartPole 实验。官方文档 gymnasium.farama.org 提供了完整的分步教程,从"什么是强化学习"讲起,涵盖基础概念、API 用法、常见算法实现(Q-learning、Policy Gradient 等)。
进阶挑战:如果想训练 Mujoco 人形机器人,需要额外安装 mujoco >= 2.1.5(商业使用需注意许可),以及较新的 numpy 环境。Mujoco 环境对 GPU 无硬性要求,但训练速度会明显慢于无物理约束的简单环境。
Gymnasium 本质上是一个离线仿真环境库,而非一个完整的训练框架。它不包含神经网络、不含优化器、不提供训练循环的默认实现。使用者需要自行组合算法库(如 Stable-Baselines3)与 Gymnasium 环境。这一点既是优势(灵活、无锁定)也是门槛(新手需要自己搭架子)。
此外,随着多智能体(Multi-Agent)场景的兴起,Gymnasium 的"单代理"定位也受到一些质疑。PettingZoo 项目填补了这一空白,提供了多智能体版的 Gymnasium 接口,但两者尚未合并。
在强化学习领域,有一句流行的话:"没有 Gym 就没有现代 RL 的繁荣"。从 2016 年至今,Gymnasium 催生了数千篇论文的实验基础,支撑了 Stable-Baselines3、RLlib、Tianshou 等主流算法库的崛起。今天,当你在 Papers With Code 上查看某个 RL 算法的基准成绩,几乎总能看到 Gymnasium 或其前身 Gym 的身影。
它的意义不仅是一个代码库,更是一种标准化运动:用统一接口让整个领域的研究者站在同一条起跑线上,让想法的验证成本降到最低。这种"基础设施"属性,恰恰是开源社区对 AI 领域最珍贵的贡献。