Gymnasium 是 Python 中一个标准化的强化学习环境库(它是原始 OpenAI Gym 的升级版)。它的作用是:

把复杂问题(如机器人走路、自驾车避障)包装成统一的“游戏接口”,让强化学习模型可以跟它反复互动、学会做决策。

换句话说,它是一个统一标准,让算法和环境能“说上话”。只要环境符合 Gymnasium 接口,你就能直接套用主流算法如 PPO、DDPG、DQN 去训练。


如何安装 Gymnasium?

在终端输入以下命令安装(建议使用虚拟环境):

pip install gymnasium[all]

如果你只用基本环境,不包括 Atari、Box2D 等,可以简化为:

pip install gymnasium

在代码中如何导入并使用

import gymnasium as gym

env = gym.make("CartPole-v1")
obs, info = env.reset()

for _ in range(100):
    action = env.action_space.sample()  # 随机动作(一般训练中由模型决定)
    obs, reward, terminated, truncated, info = env.step(action)
    if terminated or truncated:
        obs, info = env.reset()

这段代码展示了标准的强化学习交互流程:

  1. 初始化环境(reset()
  2. 持续循环:选择动作 → 执行动作 → 接收反馈

环境的输入与输出:Env 接口结构

输入:action

你给环境的输入是一个“动作”,比如:

  • 对于离散环境(如控制小车前进/后退),动作是整数(0、1、2)
  • 对于连续环境(如控制无人机的速度),动作是一个浮点向量
action = 0  # 或 action = np.array([0.2, -0.3])

动作必须来自 env.action_space 所描述的范围。


输出:obs, reward, terminated, truncated, info

环境每执行一步,会返回 5 个值:

obs, reward, terminated, truncated, info = env.step(action)
项目 说明
obs 当前状态(通常是向量或图像)
reward 当前步的奖励值(float)
terminated 是否成功结束(例如到达目标、杆子倒了)
truncated 是否因步数过多等原因被强制结束
info 附加信息,如调试数据(一般不用来训练)

你每次给环境一个动作,它就“走一步”,并返回反馈。


observation_space 一般是什么信号?

observation_space 描述的是智能体从环境中“看到”的状态信号。它可以有多种形式:

  • 低维向量(最常见):例如 CartPole 中的状态是 4 个连续数值:杆子角度、位置、速度等 → Box(-inf, inf, (4,), float32)
  • 图像输入:在 Atari 游戏或视觉导航中,obs 是一张灰度图或彩色图 → Box(0, 255, (84, 84, 3), uint8)
  • 字典结构(Dict):多模态输入,如同时包含图像和速度等 → Dict({"image": ..., "speed": ...})
  • 多离散变量(MultiDiscrete):状态中包含多个离散变量组合,比如棋盘类任务

总结一句话:obs 反映的是你希望模型“感知”的信息,越重要、越相关越要包含在 obs 里。


总结

Gymnasium 是强化学习的桥梁,它帮我们统一了环境和算法之间的交互方式。

只需要记住两件事:

  • 环境的输入是一个动作(action)
  • 环境的输出是一组反馈(obs, reward, done, info)

observation_space 描述的是模型“眼睛看到”的状态信号,它可能是向量、图像,甚至是组合结构。


下一篇:状态空间和动作空间是什么?