环境接口与模拟器
标准接口(reset/step/spaces)、包装器(wrapper)、观测与奖励的预处理约定。本章介绍 Gymnasium、PettingZoo(多智能体)、以及 Isaac Gym / Brax / MJX 等 GPU 并行模拟器带来的数量级吞吐提升。
标准接口:reset/step/spaces
Section titled “标准接口:reset/step/spaces”Gymnasium(原 OpenAI Gym,Farama 基金会维护)定义了 RL 环境的事实标准接口:
env = gym.make("CartPole-v1")obs, info = env.reset(seed=0) # 回合开始obs, reward, terminated, truncated, info = env.step(action)env.close()reset():回合开始,返回初始观测;seed管理环境的随机性;step(action):执行动作,返回观测、奖励、两个终止标志;- 两个终止标志是 Gymnasium 对旧 Gym 的关键修正:
terminated(环境真正的终止,如死亡/到达终点)与truncated(时间截断,如 200 步上限)。两者必须区别对待——时间截断不是环境终止,价值函数要 bootstrap;混为一谈是经典的实现 bug(价值学习会学到"200 步后世界毁灭"); spaces:观测与动作空间的声明(Box、Discrete、Dict等),算法据此初始化网络。
包装器:预处理是结果的一部分
Section titled “包装器:预处理是结果的一部分”wrapper 包装环境、修改观测/奖励/终止语义。预处理约定是结果的一部分(→ DQN 及其改进):同一算法、不同预处理,结果不可比。Atari 的标准预处理:灰度化、下采样到 84×84、帧堆叠 4 帧(给马尔可夫性提供速度信息)、奖励裁剪到 、帧跳过(frame skip,4 帧重复同一动作)。
其他常用 wrapper:观测归一化(RunningMeanStd)、奖励缩放、时间限制的语义修正(TimeLimit)、自动重置。每个 wrapper 都要记录——它们是"实现细节"(→ 评估协议与可复现性)。
PettingZoo:多智能体接口
Section titled “PettingZoo:多智能体接口”PettingZoo 是多智能体版的环境标准:智能体轮流行动(turn-based)或同时行动(parallel),接口返回所有智能体的观测/奖励/终止。SuperSuit 提供多智能体的 wrapper 库。与单智能体接口的差异主要在:动作是"谁在行动 + 动作"的二元组,奖励是向量(每个智能体一个)。
GPU 并行模拟器:数量级的吞吐
Section titled “GPU 并行模拟器:数量级的吞吐”传统 CPU 模拟器(MuJoCo、Atari ALE)每环境每步毫秒级,并行靠进程/线程(数千环境已是极限)。GPU 并行模拟器把环境的物理与渲染全部搬进 GPU,数千到数十万环境同时步进:
- Isaac Gym / Isaac Lab(NVIDIA):刚体物理在 GPU 上,四足/灵巧手训练的标准平台——数千环境的并行使机器人任务的训练从天缩到分钟;
- Brax(Google):JAX 写的可微物理引擎,全在 GPU/TPU 上;
- MJX(MuJoCo XLA):MuJoCo 的 JAX 版本,与 Brax 同思路;
- Isaac Gym 的意义:物理 step 与模型 step 在同一 GPU 上交替,数据传输几乎为零——这是吞吐提升的另一半来源(不只是并行数)。
配套的算法适配:GPU 环境天然配 on-policy 大批量方法(PPO + GAE,数千环境一步算一批优势),off-policy 的回放缓冲反而成为瓶颈(→ 向量化环境与分布式采样)。
环境的随机性(初始状态、随机事件)与算法的随机性(初始化、采样)要分开管理:
- 环境种子决定"哪个关卡/初始状态"——泛化实验的留出集靠它控制;
- 算法种子决定学习曲线的方差(→ 评估协议与可复现性);
- 向量化环境里,每个子环境一个独立种子流——种子碰撞(两个子环境同种子)是隐蔽的吞吐损失。
- 帧堆叠、奖励裁剪等预处理是 Atari 结果的一部分
- GPU 模拟器把机器人任务的训练从天缩到分钟
- 环境的随机种子管理