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()
这段代码展示了标准的强化学习交互流程:
- 初始化环境(
reset()
) - 持续循环:选择动作 → 执行动作 → 接收反馈
环境的输入与输出: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
描述的是模型“眼睛看到”的状态信号,它可能是向量、图像,甚至是组合结构。