外观
数据集与工具档案
一句话定位:这一页是 RL 工程的"五金店货架"——环境库、基准套件、离线数据集、训练工具链四大类资源全部按表格列清:名字、干什么用、动作空间什么样、怎么装、什么时候选它,省去你到处搜安装文档的时间。
先看全貌
RL 的"数据集"和 ML 不太一样:多数时候数据集是环境本身(你在和它交互采样),只有离线 RL 才用静态数据集。所以本页先讲环境与基准(占日常工作的 80%),再讲离线数据集,最后是训练工具链。
一、环境库(Environment Libraries)
| 环境库 | 用途 / 典型问题 | 动作空间 | 安装 | 备注 |
|---|---|---|---|---|
| Gymnasium | 标准接口规范 + 经典环境集合(CartPole、MountainCar、Pendulum、LunarLander…) | 离散/连续都有 | pip install gymnasium | 事实标准,几乎一切库都兼容,建议第一个学 |
| MuJoCo | 连续控制物理仿真(机器人关节、行走) | 连续 | pip install mujoco(再装 gymnasium[mujoco]) | 深度 RL 连续控制的主力基准;现由 DeepMind 维护 |
| Brax | GPU 并行物理仿真(可达百万环境同时跑) | 连续 | pip install brax(需要 JAX) | 训练吞吐比 CPU 高两个量级,研究/大规模用 |
| Isaac Gym / Isaac Lab | NVIDIA 的 GPU 仿真,面向腿式/灵巧手/具身智能 | 连续 | 需单独下载 Isaac Sim | Isaac Gym 已并入 Isaac Lab,新项目直接用 Isaac Lab |
| PettingZoo | 多智能体环境标准(合作/对抗) | 离散/连续 | pip install pettingzoo | MARL 的事实标准,配套 SuperSuit 包装器 |
| VizDoom | 第一人称 3D 环境(Doom 引擎) | 离散 | pip install vizdoom | 视觉导航 + 部分可观测研究的经典 |
| Minigrid | 2D 网格世界,极简可调 | 离散 | pip install minigrid | 教学与算法消融的首选,跑得快 |
| HighwayEnv | 驾驶/交通场景 | 离散/连续 | pip install highway-env | 自动驾驶决策的轻量研究环境 |
| Jumanji | InstaDeep 的组合优化环境套件 | 离散/连续 | pip install jumanji | 调度、路由、游戏等组合问题,JAX 加速 |
| SMAC | 《星际争霸2》微观战斗(学术版) | 离散 | 需要 SC2 本体 | MARL 经典基准(已停更,但论文仍常用) |
Gymnasium 与旧版 Gym 的关系
OpenAI Gym 在 2022 年停止维护,社区接力维护为 Gymnasium(Farama Foundation)。新代码一律用 import gymnasium as gym。老教程里的 gym.Env 与新接口差异主要在 reset() 返回与 render 模式,本站渐进式教程里有详细对照。
环境安装速查
最常用的三个安装命令(Python 3.9+,建议先用 conda/venv 建独立环境):
bash
pip install gymnasium # 标准环境接口 + 经典小环境
pip install gymnasium[mujoco] # 顺手装 MuJoCo 连续控制环境(会自动装 mujoco)
pip install brax # GPU 加速仿真(需要 JAX,CPU 也能跑但慢)装完自测:
python
import gymnasium as gym
env = gym.make("CartPole-v1", render_mode="rgb_array")
obs, info = env.reset(seed=42) # 新版 API:reset 返回 (obs, info)
obs, reward, terminated, truncated, info = env.step(env.action_space.sample())
print(obs.shape, reward, terminated, truncated)安装的三个常见坑
- 渲染缺包:
render_mode报错多因缺pygame等依赖,装pip install gymnasium[classic-control]可一起带上。 - MuJoCo 报 GL 错误:服务器无显示器时用
render_mode="rgb_array"或MUJOCO_GL=egl。 - 版本锁定:记录
pip freeze > requirements.txt,否则几天后重跑结果就可能对不上。更多坑见常见陷阱与反模式。
二、基准套件(Benchmark Suites)
基准不是"环境",而是一组约定好评估协议的任务集,用来横向比较算法。
| 基准套件 | 内容 | 动作空间 | 特点 / 适合评估什么 | 来源 |
|---|---|---|---|---|
| Atari(ALE) | 50+ 个雅达利游戏(像素输入) | 离散(18 种动作) | 视觉 RL 与样本效率的标准战场,DQN/Rainbow 的主场 | Farama 维护:https://github.com/Farama-Foundation/Arcade-Learning-Environment |
| MuJoCo 套件(Gym 版) | HalfCheetah、Hopper、Ant、Walker2d、Humanoid | 连续 | 连续控制与策略梯度/AC 家族的标配 | MuJoCo 官网:https://mujoco.org/ |
| Procgen | 16 个程序化生成的游戏 | 离散 | 泛化测试:每个游戏训练分布与测试分布不同 | OpenAI:https://github.com/openai/procgen |
| DM Control Suite | 30+ 个连续控制任务(含视觉版) | 连续 | 更精细的物理任务 + 视觉版本,DeepMind 系论文常用 | DeepMind:https://github.com/deepmind/dm_control |
| Meta-World | 50 个桌面机械臂操作任务 | 连续 | 多任务/元学习评估(单任务、多任务、快速适应三档) | Farama 维护:https://github.com/Farama-Foundation/Meta-World |
| RLBench | 100+ 个桌面操作任务(仿真臂) | 连续 | 机器人操作 + 大规模 RL 训练的现代基准 | https://github.com/stepjam/RLBench |
| Maze | Meta 的多智能体任务库 | 离散/连续 | MARL 与分层决策研究 | Facebook Research:https://github.com/facebookresearch/maze |
基准的"江湖地位"与批评
Atari 和 MuJoCo 是 2013–2020 年的黄金基准,但今天有明确批评:样本效率是主要瓶颈,经典基准太"廉价"——一个简单算法在经典基准上可能看起来很好,却无法泛化到真实问题。因此 2020 年代的新基准(Procgen、Meta-World、RLBench、Isaac Lab)强调"泛化"与"部署前测试"。评估协议怎么设计才公平,见评估与基准与从零搭一套 RL 评估。
三、离线 RL 数据集
离线 RL 需要固定历史数据集(交互记录),常见的公共数据集如下。
| 数据集 | 内容 / 来源 | 数据形态 | 典型用途 | 地址 |
|---|---|---|---|---|
| D4RL | 四类域:Gym-MuJoCo(机器人)、Adroit(灵巧手)、FrankaKitchen(厨房任务)、AntMaze(蚂蚁走迷宫) | (s, a, r, s′) 轨迹,按数据质量分 medium/expert/replay 档 | 离线 RL 论文事实标准,几乎所有方法都在这里评测 | https://github.com/Farama-Foundation/D4RL |
| RL Unplugged | DeepMind 提供:Atari 与 DM Control 的大规模交互数据(按 agent 的收集强度分档) | 海量轨迹 | 大规模离线评估与数据缩放研究 | https://github.com/deepmind/rl_unplugged |
| NeoRL | 工业友好型离线数据集(含数据质量分层) | 轨迹 + 离线策略评估配套 | 离线评估方法研究 | https://github.com/polixir/NeoRL |
D4RL 的四个数据域(都在一个数据集里,别只跑一个域)
D4RL 常被误当成"一个数据集",其实它是四类任务域的合集,算法在不同域上的表现差异巨大:
| 数据域 | 任务形态 | 状态/动作 | 算法必须克服的难点 |
|---|---|---|---|
| Gym-MuJoCo | 机器人行走(Hopper、HalfCheetah 等) | 连续 | 最容易上手,几乎所有离线算法都在此验证 |
| AntMaze | 蚂蚁机器人导航穿越迷宫 | 连续 | 稀疏奖励 + 长时序,是区分方法强弱的试金石 |
| Adroit | 灵巧手操作(开门、转笔) | 高维连续 | 数据稀缺(人类演示少),考验样本利用率 |
| FrankaKitchen | 厨房多阶段操作 | 连续 | 多阶段长程任务,考验组合泛化 |
论文结论别跨域外推
在 Gym-MuJoCo 上好用的方法(如简单 BC 回归)到 AntMaze 可能完全失效;反之亦然。看离线 RL 论文时,必须确认它报告了哪几个域,别拿一个域的结果当全局结论。详见离线强化学习。
数据质量分档的含义
D4RL 里同一环境会有 -medium、-medium-replay、-expert 等版本,这直接决定任务难度:
| 分档 | 数据是怎么来的 | 对算法的考验 |
|---|---|---|
-expert | 专家策略采样 | 几乎"最简单",行为克隆都能做得不错 |
-medium | 中等水平策略采样 | 要求算法学会改进而非模仿 |
-medium-replay | 训练过程的回放缓冲区 | 数据混合了多种质量,考验利用非最优数据 |
-random | 随机策略采样 | 几乎不可学,作为下界对照 |
离线 RL 的评估陷阱
离线 RL 最隐蔽的坑是:训练时没有"在线验证"这一步。你只能在训练集上评测,而策略会利用 OOD 高估刷分。可靠的检查方式是:(1) 和D4RL 等基准上的官方实现结果对比;(2) 用离线评估方法(如 fitted Q-evaluation)做二次确认。别只信训练曲线。
四、训练工具链
工具链按"记录 → 调参 → 配置 → 实验管理 → 并行加速"五类组织。
| 类别 | 工具 | 干什么 | 地址 |
|---|---|---|---|
| 指标记录 | TensorBoard | 学习曲线、标量/直方图可视化,RL 入门标配 | https://www.tensorflow.org/tensorboard |
| 指标记录 | Weights & Biases(W&B) | 云端实验跟踪、对比与团队协作 | https://wandb.ai/ |
| 超参调优 | Optuna | 贝叶斯优化/随机搜索,轻量、与任意训练循环可集成 | https://optuna.org/ |
| 超参调优 | Ray Tune | 分布式超参搜索,适合大规模并行的 RL 实验 | https://docs.ray.io/en/latest/tune/ |
| 配置管理 | Hydra | 用 YAML 声明式管理实验配置,RL 复现神器 | https://hydra.cc/ |
| 实验管理 | MLflow | 实验记录 + 模型注册 + 部署追踪 | https://mlflow.org/ |
| 实验管理 | Sacred | 学术实验日志与配置管理(较老但仍常用) | https://github.com/IDSIA/sacred |
| 分布式/加速 | Ray | 分布式任务调度,RLlib 的底座 | https://www.ray.io/ |
| 环境吞吐加速 | EnvPool | 高吞吐并行环境采样(C++ 核心) | https://github.com/sail-sg/envpool |
| 环境吞吐加速 | Sample Factory | 异步大规模 RL 训练框架(Atari/机器人) | https://github.com/alex-petrenko/sample-factory |
工具链怎么搭配:一个最小实验骨架
工具不是堆得越多越好。下面这个骨架覆盖"跑通 → 记录 → 调参 → 复现"全流程,个人项目够用:
python
# 1. 固定 seed(先于一切)
seed = 42
env = gym.make("CartPole-v1")
obs, _ = env.reset(seed=seed)
# 2. 训练循环(以 SB3 为例)
from stable_baselines3 import PPO
model = PPO("MlpPolicy", env, seed=seed,
tensorboard_log="./logs/") # TensorBoard 记录
model.learn(total_timesteps=200_000)
# 3. 调参交给 Optuna(示例只列关键超参)
# search_space = {"learning_rate": (1e-5, 3e-3, "log-uniform"), "gamma": (0.9, 0.999)}
# optuna.create_study(direction="maximize").optimize(objective, n_trials=50)
# 4. 配置与复现交给 Hydra:把上面所有参数放进 config.yaml,固定版本后存 requirements.txt配套职责分工:TensorBoard 看曲线 → Optuna 找超参 → Hydra 管配置 → MLflow/W&B 管实验归档。要上规模的团队再加 Ray;个人项目加 Ray 基本是过度工程。
最小工程组合
对绝大多数个人项目,一套够用的组合是:Gymnasium + Stable-Baselines3(或 CleanRL)+ TensorBoard + Optuna + Hydra。等你需要分布式训练或产出级实验矩阵时,再引入 Ray/W&B。别一开始就上全套,RL 的坑主要在算法与环境,不在工具数量。
五、怎么选:一张决策表
| 你的场景 | 环境/基准 | 算法库 | 数据集 | 工具链 |
|---|---|---|---|---|
| 第一次学 RL | Gymnasium 的 CartPole / LunarLander | 手写 + CleanRL | 不需要 | TensorBoard |
| 研究连续控制 | MuJoCo / DM Control | SB3、Tianshou | D4RL(若做离线) | W&B + Optuna |
| 机器人仿真 → 部署 | MuJoCo → Isaac Lab / RLBench | SAC/PPO(SB3 或自研) | 自采数据 + 域随机化 | Hydra + MLflow |
| 大规模并行实验 | Brax / EnvPool | PureJaxRL / Ray RLlib | RL Unplugged | W&B + Ray Tune |
| 多智能体 | PettingZoo / SMAC / Maze | MAPPO(自研或 MARLlib) | 自采 | W&B + Hydra |
| 离线 RL 研究 | D4RL / NeoRL | d3rlpy(第三方离线库)或自研 | D4RL / RL Unplugged | W&B + Optuna |
d3rlpy 是知名的离线 RL 库(https://github.com/takuseno/d3rlpy),做离线 RL 实验时值得一用。
六、与本站其他页面联动
- 环境与基准怎么"公平评估":见评估与基准。
- 评估协议怎么落地成实验:见从零搭一套 RL 评估。
- 离线 RL 原理与 OOD 高估问题:见离线强化学习。
- 六个算法框架的详细对比:见框架与工具怎么选。
- 环境自建与封装的工程实践:见从零构建一个 RL 项目。
工具链版本锁定
RL 实验复现失败的最常见原因之一就是环境/库版本漂移:Gymnasium API 改过、SB3 版本算法行为不同、MuJoCo 渲染接口变化。工程上务必用 requirements.txt(甚至 conda-lock)锁定全部依赖版本,并在 README 里写清 pip freeze。细节见常见陷阱与反模式。
延伸阅读
- 评估与基准 —— 为什么 RL 评估难、基准图谱怎么读。
- 框架与工具怎么选 —— 本页工具链的算法库部分深度对比。
- 从零搭一套 RL 评估 —— 拿到环境后,实验矩阵、指标与报告怎么写。
- 离线强化学习 —— 本页 D4RL/RL Unplugged 背后的方法与陷阱。
- 从零构建一个 RL 项目 —— 环境选型、自建与封装的完整流程。
- 渐进式教程:Gymnasium 三版跑起来 —— 用本页环境库实跑一个完整项目。
参考资料
- Gymnasium 官方文档:https://gymnasium.farama.org/
- MuJoCo 官网:https://mujoco.org/
- Brax(Google):https://github.com/google/brax
- Isaac Lab(NVIDIA):https://isaac-sim.github.io/IsaacLab/
- PettingZoo:https://pettingzoo.farama.org/
- Atari / ALE(Farama):https://github.com/Farama-Foundation/Arcade-Learning-Environment
- Procgen(OpenAI):https://github.com/openai/procgen
- DM Control(DeepMind):https://github.com/deepmind/dm_control
- Meta-World(Farama):https://github.com/Farama-Foundation/Meta-World
- RLBench:https://github.com/stepjam/RLBench
- Maze(Meta):https://github.com/facebookresearch/maze
- D4RL:https://github.com/Farama-Foundation/D4RL
- RL Unplugged(DeepMind):https://github.com/deepmind/rl_unplugged
- Optuna:https://optuna.org/ ;Hydra:https://hydra.cc/ ;Ray:https://www.ray.io/
- TensorBoard:https://www.tensorflow.org/tensorboard ;W&B:https://wandb.ai/ ;MLflow:https://mlflow.org/