Gym库(https://gym.openai.com) 是OpenAI推出的强化学习实验环境库。它用Python语言实现了离散之间智能体-环境接口中的环境部分。每个环境就代表着一类强化学习问题,用户通过设计和训练自己的智能体来解决这些强化学习问题。
OpenAI 已经将 Gym 的维护权移交给了 FARAMA 基金会。Gym 的官方继任者是 Gymnasium。
Gym/Gymnasium 中的主要环境类别
可以通过 gym.make('环境ID')
来创建这些环境。
1. 经典控制问题
低维、连续或离散状态/动作空间的经典问题,非常适合算法验证和教学。
-
CartPole-v1
-
描述:控制一个小车,使其上的杆子保持直立不倒。
-
目标:保持杆子直立的时间尽可能长。
-
动作空间:离散(左推,右推)。
-
状态空间:连续(小车位置、速度、杆子角度、角速度)。
奖励机制:每一步杆子没有倒下,就给予 +1 的奖励。
终止条件:
杆子与垂直线的夹角超过 ±12°。
小车移动超出轨道边界(x坐标超过 ±2.4)。
步数达到 500(对于v1版本,这意味着最高奖励是500)
MountainCar-v0
-
描述:一辆动力不足的小车位于山谷中,需要通过来回摆动才能爬上右边的山顶。
-
目标:以最少的步骤到达右侧标志旗处。
-
动作空间:离散(左加速,不加速,右加速)。
-
状态空间:连续(小车位置,速度)。
-
奖励机制:在每一步,只要没有到达目标,就给予 -1 的奖励。
终止条件:小车到达目标位置(x >= 0.5)。
特点:这是一个典型的负奖励设计。智能体必须尽快到达目标,因为每一步都在“扣分”。它被迫学会“来回摆动”以积累动量,这是一种延迟满足的经典例子。
Pendulum-v1
-
描述:一个无摩擦的钟摆,初始位置随机。
-
目标:施加扭矩,使钟摆保持直立,并且消耗的能量最少。
-
动作空间:连续(扭矩大小)。
-
状态空间:连续(角度,角速度)。
-
-
奖励机制:奖励计算是一个联合公式,旨在平衡角度和扭矩(能量消耗):
奖励 = -(θ² + 0.1 * θ̇² + 0.001 * τ²)
-
θ
:角度(0度是顶端,弧度表示)。越偏离顶端,惩罚越大。 -
θ̇
:角速度。速度越快,惩罚越大,鼓励稳定。 -
τ
:施加的扭矩。扭矩越大,惩罚越大,鼓励节能。
-
-
特点:这是一个连续负奖励。奖励始终为负,智能体的目标是最大化这个负值(即让它尽可能接近0)。这是一个多目标优化的典型设计。
Acrobot-v1
-
描述:一个由两个连杆组成的系统,像一个倒立的双摆。
-
目标:通过摆动下方的连杆,使系统末端的点达到指定高度。
-
动作空间:离散(对下方连杆施加正向、负向扭矩或不施加)。
-
状态空间:连续(两个连杆的角度和角速度)。
-
奖励机制:每一步没有达到目标,就给予 -1 的奖励。
终止条件:末端点的y坐标超过指定高度。
特点:与MountainCar类似,是稀疏的负奖励。智能体需要找到一种高效的摆动策略,以最少的步骤完成任务。
2. Box2D 物理引擎环境
这些是使用 Box2D 物理引擎构建的连续控制任务,比经典控制问题更复杂。
-
LunarLander-v2
-
描述:控制一个登月舱在月球表面平稳着陆。
-
目标:在着陆点平稳着陆,速度不能太快。
-
动作空间:离散(不点火,主引擎点火,左/右侧引擎点火)。
-
状态空间:连续(位置、速度、角度、角速度、腿部是否触地等)。
-
奖励机制:这是一个非常精细的稠密塑形奖励,包含多个部分:
-
-
成功着陆:在着陆坪中心平稳着陆(速度慢、角度正),奖励约 +100 到 +140。
-
坠毁:如果以过快速度撞击地面,奖励 -100。
-
着陆位置:离着陆坪中心越近,奖励越高。
-
燃料消耗:使用主引擎会有一个小的负奖励(约-0.3/帧),鼓励节省燃料。
-
存活奖励:每一帧智能体还“活着”(未坠毁或成功),就有一个小的正奖励。
-
腿接触地面:每条腿接触到着陆坪时有一个正奖励(约+10)。
-
特点:这是一个奖励塑形的典范,它清晰地分解了任务目标(平稳、居中、省燃料),引导智能体学习复杂的控制策略。
-
BipedalWalker-v3
和BipedalWalkerHardcore-v3
-
描述:控制一个双足机器人向前行走。
-
目标:走得越远越好,同时消耗的能量越少越好。
-
动作空间:连续(对四个关节施加的扭矩)。
-
状态空间:连续(身体速度,关节角度,激光雷达测距数据等)。
-
Hardcore 版本:增加了障碍物、陷阱等,难度极大。
-
奖励机制:
-
前进奖励:每向前移动一步,奖励等于向前移动的距离。
-
能量惩罚:对每个关节施加的扭矩进行惩罚(
-0.001 * Σ(torque²)
),鼓励高效行走。 -
关节稳定性惩罚:对关节的角速度进行小惩罚,鼓励平滑运动。
-
终止惩罚:如果机器人摔倒(躯干碰到地面),奖励 -100,并且episode结束。
-
特点:这是一个典型的权衡型奖励。智能体需要在“走得更快”和“消耗更少能量/更稳定”之间做出权衡。
-
CarRacing-v2
-
描述:一个顶视角的赛车游戏,需要控制一辆车在赛道上行驶。
-
观察空间:RGB 图像(96x96像素)。
-
动作空间:连续(转向,油门,刹车)。
-
3. Atari 游戏环境
这些是基于 Arcade Learning Environment (ALE) 的经典雅达利2600游戏,是测试智能体从像素中学习能力的基准。
-
特点:
-
观察空间:通常是原始的 RGB 图像(210x160像素),但常被预处理为灰度并下采样(如84x84)。
-
动作空间:离散(游戏手柄的操作,如上下左右、开火等)。
-
-
常见示例:
-
Breakout-v4
(打砖块) -
Pong-v4
(乒乓球) -
SpaceInvaders-v4
(太空侵略者) -
MsPacman-v4
(吃豆人小姐) -
Seaquest-v4
(海底大战)
-
-
奖励机制:奖励直接来自于游戏的原始分数变化。
-
例如,在
Pong
中,赢一个球得 +1 分,输一个球得 -1 分。 -
在
Breakout
中,每打掉一个砖块,就获得相应的分数(如+1到+7)。 -
在
SpaceInvaders
中,击毁一个外星人获得相应分数。
-
4. MuJoCo 物理引擎环境
MuJoCo 是一个高性能的物理模拟器,用于复杂的连续控制机器人任务。注意:MuJoCo 自 2021 年 10 月起已开源,但安装过程可能稍复杂。
这些环境现在通常包含在 Gymnasium Robotics 或 DeepMind Control Suite 中。
-
Ant-v4
-
描述:控制一个四足“蚂蚁”机器人前进。
-
目标:向前移动,同时减少能量消耗和保持稳定。
-
-
HalfCheetah-v4
-
描述:控制一个双足“猎豹”机器人快速奔跑。
-
-
Hopper-v4
-
描述:控制一个单足“袋鼠”机器人向前跳跃。
-
-
Humanoid-v4
-
描述:控制一个仿人机器人行走,非常复杂。
-
-
Reacher-v4
-
描述:一个两关节机械臂,需要让末端执行器触达目标点。
-
5. 其他环境和第三方扩展
-
Toy Text
环境:非常简单的网格世界式环境,用于演示表格型方法(如Q-Learning)。-
FrozenLake-v1
:智能体需要穿越一个结冰的湖面到达目标,避免掉入冰窟。 -
Taxi-v3
:智能体(出租车)需要接上乘客并将其送到目的地。 -
Blackjack-v1
:二十一点扑克游戏。
-
-
第三方环境:Gym 的强大之处在于其开放的接口,社区创建了大量环境。
-
procgen
: OpenAI 发布的程序化生成环境,用于测试泛化能力。 -
Minigrid
: 简单的网格世界环境,包含部分可观察性和语言指令。 -
Safety Gym
: 专注于安全强化学习的环境,包含成本约束。 -
PyBullet
: 一个替代 MuJoCo 的免费开源物理引擎,也提供了许多机器人环境。
-