Gymnasium
强化学习环境的标准 API,OpenAI Gym 的正统继任者。
标准接口
所有的环境都遵循 reset() 和 step() 的范式,学会一个,学会所有。
Wrappers (包装器)
极其强大的功能。你可以像“洋葱”一样层层包装环境,轻松修改 Observation、Action 或 Reward。
生态丰富
几乎所有第三方环境库(如 MuJoCo, Atari)都兼容 Gymnasium 接口。
进阶用法:使用 Wrappers
Wrappers 允许我们在不修改环境源码的情况下增强环境。比如,我们可以将环境的观测值归一化,或者将灰度图作为输入。
gym_wrappers.py
import gymnasium as gym from gymnasium.wrappers import FlattenObservation, NormalizeReward # 1. 创建基础环境 env = gym.make("CartPole-v1") # 2. 包装环境:将观测空间展平 env = FlattenObservation(env) # 3. 包装环境:将奖励归一化(有助于训练稳定) env = NormalizeReward(env) print(f"Wrapped Env: {env}") obs, _ = env.reset() action = env.action_space.sample() obs, reward, done, truncated, info = env.step(action) print(f"Normalized Reward: {reward}")