倒立双摆¶
此环境是 Mujoco 环境的一部分,其中包含有关环境的一般信息。
动作空间 |
|
观察空间 |
|
导入 |
|
描述¶
此环境源于控制理论,并基于 Barto、Sutton 和 Anderson 在 “Neuronlike adaptive elements that can solve difficult learning control problems” 中的工作,建立在倒立摆环境之上,由 Mujoco 物理模拟器提供支持 - 允许进行更复杂的实验(例如改变重力或约束的影响)。此环境涉及一个可以线性移动的小车,一个小车连接在一个杆子上,另一个杆子连接在第一个杆子的另一端(使第二个杆子成为唯一具有自由端的杆子)。小车可以向左或向右推,目标是通过对小车施加连续力来使第二个杆子平衡在第一个杆子的顶部,而第一个杆子又在小车的顶部。
动作空间¶
代理为动作采取一个 1 元素向量。动作空间是连续的 (action)
在 [-1, 1]
中,其中 action
代表施加在小车上的数值力(幅度代表力的大小,符号代表方向)
序号 |
动作 |
控制最小值 |
控制最大值 |
名称(在对应的 XML 文件中) |
关节 |
类型(单位) |
---|---|---|---|---|---|---|
0 |
施加在小车上的力 |
-1 |
1 |
滑块 |
滑动 |
力(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 |
滑块 |
滑动 |
位置(m) |
1 |
小车与第一个杆子之间的角度的正弦 |
-Inf |
Inf |
sin(hinge) |
hinge |
无量纲 |
2 |
两个杆子之间的角度的正弦 |
-Inf |
Inf |
sin(hinge2) |
hinge |
无量纲 |
3 |
小车与第一个杆子之间的角度的余弦 |
-Inf |
Inf |
cos(hinge) |
hinge |
无量纲 |
4 |
两个杆子之间的角度的余弦 |
-Inf |
Inf |
cos(hinge2) |
hinge |
无量纲 |
5 |
小车的速度 |
-Inf |
Inf |
滑块 |
滑动 |
速度(m/s) |
6 |
小车与第一个杆子之间的角度的角速度 |
-Inf |
Inf |
hinge |
hinge |
角速度(rad/s) |
7 |
两个杆子之间的角度的角速度 |
-Inf |
Inf |
hinge2 |
hinge |
角速度(rad/s) |
8 |
约束力 - x |
-Inf |
Inf |
滑块 |
滑动 |
力(N) |
排除 |
约束力 - y |
-Inf |
Inf |
滑块 |
滑动 |
力(N) |
排除 |
约束力 - z |
-Inf |
Inf |
滑块 |
滑动 |
力(N) |
奖励¶
总奖励为: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 问题)。从观察空间中排除了铰链的
qfrc_constraint
(“约束力”)(因为它始终为 0,因此不会向代理提供任何有用的信息,导致训练速度略微提高)(相关 GitHub 问题)。添加了
xml_file
参数。添加了
reset_noise_scale
参数来设置初始状态的范围。添加了
healthy_reward
参数来配置奖励函数(默认值与v4
中的默认值实际上相同)。在
info
中添加了单个奖励项(info["reward_survive"]
、info["distance_penalty"]
、info["velocity_penalty"]
)。
v4:所有 MuJoCo 环境现在使用 mujoco >= 2.1.3 中的 MuJoCo 绑定。
v3:此环境没有 v3 版本。
v2:所有连续控制环境现在使用 mujoco-py >= 1.50。
v1:基于机器人的任务(包括倒立摆)的最大时间步数增加到 1000。
v0:初始版本发布。