倒立双摆

../../../_images/inverted_double_pendulum.gif

此环境是 Mujoco 环境的一部分,其中包含有关环境的常规信息。

动作空间

Box(-1.0, 1.0, (1,), float32)

观测空间

Box(-inf, inf, (9,), float64)

导入

gymnasium.make("InvertedDoublePendulum-v5")

描述

此环境起源于控制理论,并基于 Barto、Sutton 和 Anderson 在 “Neuronlike adaptive elements that can solve difficult learning control problems” 中的工作,构建于倒立摆环境之上,由 Mujoco 物理模拟器提供支持 - 允许更复杂的实验(例如改变重力或约束的影响)。此环境涉及一个可以线性移动的小车,其上连接着一根杆子,第二根杆子连接到第一根杆子的另一端(使第二根杆子成为唯一具有自由端的杆子)。小车可以向左或向右推动,目标是通过对小车施加连续力来平衡第二根杆子在第一根杆子的顶部,而第一根杆子又在小车的顶部。

动作空间

智能体采用 1 元素向量作为动作。动作空间是 [-1, 1] 中的连续 (action),其中 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)

奖励

总奖励为:奖励 = 存活奖励 - 距离惩罚 - 速度惩罚

  • 存活奖励:在倒立摆处于健康状态的每个时间步(请参阅“Episode End”部分中的定义),它都会获得固定值 healthy_reward 的奖励(默认值为 \(10\))。

  • 距离惩罚:此奖励衡量第二根摆杆(唯一的自由端)的尖端移动的距离,计算公式为 \(0.01 x_{pole2-tip}^2 + (y_{pole2-tip}-2)^2\),其中 \(x_{pole2-tip}, y_{pole2-tip}\) 是第二根杆尖端的 xy 坐标。

  • 速度惩罚:惩罚智能体移动过快的负奖励。\(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, ...)

参数

类型

默认值

描述

xml_file

str

"inverted_double_pendulum.xml"

MuJoCo 模型的路径

healthy_reward

float

10

如果摆锤处于 healthy(直立)状态,则给予恒定奖励(请参阅 奖励 部分)

reset_noise_scale

float

0.1

初始位置和速度的随机扰动比例(请参阅 起始状态 部分)

版本历史

  • v5

    • 最低 mujoco 版本现在为 2.3.3。

    • 添加了 default_camera_config 参数,一个用于设置 mj_camera 属性的字典,主要用于自定义环境。

    • 添加了 frame_skip 参数,用于配置 dtstep() 的持续时间),默认值因环境而异,请查看环境文档页面。

    • 修复了错误:healthy_reward 在每一步都会给出(即使在摆锤不健康时),现在仅在 DoublePendulum 健康(未终止)时给出(相关 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 中的 MuJoCo 绑定。

  • v3:此环境没有 v3 版本。

  • v2:所有连续控制环境现在都使用 mujoco-py >= 1.50。

  • v1:对于基于机器人的任务(包括倒立摆),max_time_steps 增加到 1000。

  • v0:初始版本发布。