倒立双摆¶
此环境是 Mujoco 环境的一部分,其中包含有关该环境的常规信息。
动作空间 |
|
观测空间 |
|
import |
|
描述¶
该环境源自控制理论,是在 Barto、Sutton 和 Anderson 在 “Neuronlike adaptive elements that can solve difficult learning control problems”(类神经自适应元件解决困难学习控制问题)一文中所述的倒立摆环境基础上构建的。它由 Mujoco 物理仿真器驱动,允许进行更复杂的实验(例如改变重力影响或约束条件)。该环境包含一个可以在线性轨道上移动的小车,小车上连接着第一根杆,第一根杆的另一端连接着第二根杆(第二根杆是唯一具有自由端的部分)。小车可以左右推动,目标是通过对小车施加连续的力,使第二根杆在第一根杆之上保持平衡,而第一根杆又在小车之上保持平衡。
动作空间¶
智能体使用一个 1 元素的向量作为动作。动作空间是一个连续的 (action),取值范围在 [-1, 1] 之间,其中 action 表示施加在小车上的数值力(大小表示力的大小,符号表示方向)。
编号 |
动作 |
控制最小值 |
控制最大值 |
名称(对应 XML 文件) |
关节 |
类型(单位) |
|---|---|---|---|---|---|---|
0 |
施加在小车上的力 |
-1 |
1 |
滑块 |
slide |
力 (N) |
观测空间¶
观测空间由以下部分组成(按顺序)
qpos (1 个元素): 机器人小车的位置值。
sin(qpos) (2 个元素): 杆角度的正弦值。
cos(qpos) (2 个元素): 杆角度的余弦值。
qvel (3 个元素): 这些独立身体部位的速度(其导数)。
qfrc_constraint (1 个元素): 小车的约束力。每个自由度(3个)都有一个接触约束力。MuJoCo 处理约束的方法是该仿真器特有的,基于其研究。更多信息可在其 文档 或论文 “Analytically-invertible dynamics with contacts and constraints: Theory and implementation in MuJoCo” 中找到。
观测空间是一个 Box(-Inf, Inf, (9,), float64),各元素含义如下:
编号 |
观测值 |
最小值 |
最大值 |
名称(对应 XML 文件) |
关节 |
类型(单位) |
|---|---|---|---|---|---|---|
0 |
小车沿线性表面的位置 |
-Inf |
Inf |
滑块 |
slide |
位置 (m) |
1 |
小车与第一根杆之间夹角的正弦值 |
-Inf |
Inf |
sin(铰链) |
铰链 (hinge) |
无量纲 |
2 |
两根杆之间夹角的正弦值 |
-Inf |
Inf |
sin(铰链2) |
铰链 (hinge) |
无量纲 |
3 |
小车与第一根杆之间夹角的余弦值 |
-Inf |
Inf |
cos(铰链) |
铰链 (hinge) |
无量纲 |
4 |
两根杆之间夹角的余弦值 |
-Inf |
Inf |
cos(铰链2) |
铰链 (hinge) |
无量纲 |
5 |
小车的速度 |
-Inf |
Inf |
滑块 |
slide |
速度 (m/s) |
6 |
小车与第一根杆之间夹角的角速度 |
-Inf |
Inf |
铰链 (hinge) |
铰链 (hinge) |
角速度 (rad/s) |
7 |
两根杆之间夹角的角速度 |
-Inf |
Inf |
铰链2 |
铰链 (hinge) |
角速度 (rad/s) |
8 |
约束力 - x |
-Inf |
Inf |
滑块 |
slide |
力 (N) |
已排除 |
约束力 - y |
-Inf |
Inf |
滑块 |
slide |
力 (N) |
已排除 |
约束力 - z |
-Inf |
Inf |
滑块 |
slide |
力 (N) |
奖励(Rewards)¶
总奖励为: reward = alive_bonus - distance_penalty - velocity_penalty。
alive_bonus: 每一步倒立摆保持“健康”(参见“回合结束”部分中的定义),都会获得固定值
healthy_reward(默认为 \(10\))。distance_penalty: 此奖励衡量第二根摆的尖端(唯一的自由端)移动了多远,计算公式为 \(0.01 x_{pole2-tip}^2 + (y_{pole2-tip}-2)^2\),其中 \(x_{pole2-tip}, y_{pole2-tip}\) 是第二根杆尖端的 xy 坐标。
velocity_penalty: 用于惩罚智能体运动过快的负奖励。计算公式为 \(10^{-3} \omega_1 + 5 \times 10^{-3} \omega_2\),其中 \(\omega_1, \omega_2\) 是铰链的角速度。
info 包含各个奖励项。
起始状态¶
初始位置状态为 \(\mathcal{U}_{[-reset\_noise\_scale \times I_{3}, reset\_noise\_scale \times I_{3}]}\)。初始速度状态为 \(\mathcal{N}(0_{3}, reset\_noise\_scale^2 \times I_{3})\)。
其中 \(\mathcal{N}\) 是多元正态分布,\(\mathcal{U}\) 是多元均匀连续分布。
回合结束¶
终止¶
当倒立双摆处于非健康状态时,环境终止。如果发生以下任何情况,倒立双摆即为非健康状态:
1. 终止:第二根杆尖端的 y 坐标 \(\leq 1\)。
注意:当所有部件垂直堆叠在彼此上方时,系统的最大站立高度为 1.2 米。
截断¶
一集的默认持续时间为 1000 个时间步。
参数¶
InvertedDoublePendulum 提供了一系列参数来修改观测空间、奖励函数、初始状态和终止条件。这些参数可以在 gymnasium.make 中按以下方式应用:
import gymnasium as gym
env = gym.make('InvertedDoublePendulum-v5', healthy_reward=10, ...)
参数 |
类型 |
默认值 |
描述 |
|---|---|---|---|
|
str |
|
MuJoCo 模型的路径 |
|
float |
|
如果摆处于 |
|
float |
|
初始位置和速度的随机扰动比例(参见 |
版本历史¶
v5
最低
mujoco版本现为 2.3.3。添加了
default_camera_config参数,这是一个用于设置mj_camera属性的字典,主要对自定义环境有用。添加了
frame_skip参数,用于配置dt(step()的持续时间),默认值因环境而异,请检查环境文档页面。修复 Bug:
healthy_reward之前在每一步都会给出(即使摆不健康),现在仅在双摆健康(未终止)时才给予(相关 GitHub issue)。从观测空间中排除了铰链的
qfrc_constraint(“约束力”)(因为它始终为 0,无法为智能体提供有用信息,从而略微加快了训练速度)(相关 GitHub issue)。添加了
xml_file参数。添加了
reset_noise_scale参数以设置初始状态的范围。添加了
healthy_reward参数以配置奖励函数(默认值实际上与v4相同)。在
info中添加了单独的奖励项(info["reward_survive"],info["distance_penalty"],info["velocity_penalty"])。
v4:所有 MuJoCo 环境现在使用 mujoco >= 2.1.3 的绑定。
v3:此环境没有 v3 版本。已迁移至 gymnasium-robotics 仓库。
v2:所有连续控制环境现在都使用 mujoco-py >= 1.50。已移至 gymnasium-robotics 仓库。
v1: 机器人相关任务(包括倒立摆)的 max_time_steps 提高到 1000。
v0:初始版本发布。