Gymnasium:强化学习环境的标准接口
Gymnasium:强化学习环境的标准接口
Gymnasium 是由 Farama Foundation 维护的开源 Python 库,目前获得 12,035 Star。它为开发和比较强化学习算法提供标准 API,以及符合该接口的环境集合。这个项目是 OpenAI Gym 的官方继任者,由原维护团队在 OpenAI 移交维护权后创建。


Gymnasium 的核心定位是建立学习算法与环境之间的标准通信方式。在强化学习的研究和开发中,算法与环境需要遵循统一的交互协议,才能确保不同方法之间的可比性和可复现性。Gymnasium 提供的正是这样的协议。
库中内置的环境分为几个家族。Classic Control 基于真实世界的物理问题,涵盖经典的控制任务,适合作为入门材料。Box2D 提供基于物理引擎的玩具游戏,使用 PyGame 进行渲染,侧重物理控制类任务。Toy Text 的状态空间和动作空间都很小,结构简单,常用于调试新算法的实现。MuJoCo 使用物理引擎模拟多关节控制,复杂度明显高于 Box2D。Atari 模拟 2600 游戏 ROM,任务难度从简单到复杂跨度很大。除内置环境外,大量第三方开发者基于 Gymnasium API 构建了兼容的外部环境。
安装过程直接。基础库通过 pip install gymnasium 即可部署。由于不同环境家族的依赖数量庞大,且部分依赖在特定系统上可能安装困难,官方将这些依赖拆分为可选组件。用户可按需安装,例如 pip install “gymnasium[atari]” 仅安装 Atari 相关依赖,pip install “gymnasium[all]” 则安装全部。官方测试覆盖 Python 3.10 到 3.14,平台限于 Linux 和 macOS。Windows 相关的 PR 会被接受,但不属于官方支持范围。
API 的设计保持极简。环境被建模为普通的 Python 类,创建实例和交互都很直接。以下代码展示 CartPole-v1 环境的典型用法:
import gymnasium as gym
env = gym.make("CartPole-v1")
observation, info = env.reset(seed=42)
for _ in range(1000):
action = env.action_space.sample()
observation, reward, terminated, truncated, info = env.step(action)
if terminated or truncated:
observation, info = env.reset()
env.close()
代码中 env.reset 初始化环境,返回初始观测值和 info 字典。env.step 接收动作,返回新观测值、即时奖励、终止标志、截断标志和 info。terminated 表示任务达到自然结束条件,truncated 表示因步数限制等外部条件被强制结束。两者合起来判断是否需要重置环境。
Gymnasium 的周边生态比较丰富。CleanRL 是基于该 API 的学习库,代码结构清晰,适合作为参考实现。PettingZoo 由同一团队维护,将 Gymnasium 扩展到多智能体场景。Farama Foundation 还维护着多个使用 Gymnasium API 的环境项目。
版本控制是 Gymnasium 的一个重要机制。每个环境名称都带有后缀如 -v0,当环境内部逻辑发生可能影响学习结果的变化时,版本号递增。这个做法从 Gym 时期延续至今,目的是保证研究工作的可复现性。
项目维护团队发表了配套论文《Gymnasium: A Standard Interface for Reinforcement Learning Environments》,发表在 arXiv 上。用户可以按照项目 README 中提供的 BibTeX 格式引用该论文。文档站点为 gymnasium.farama.org,开发协调通过 Discord 服务器进行。
sium.farama.org,开发协调通过 Discord 服务器进行。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)