倒立双摆

../../../_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在“能够解决困难学习控制问题的类神经自适应单元”中的工作,在车杆环境的基础上构建,由Mujoco物理模拟器驱动——允许进行更复杂的实验(例如改变重力或约束的影响)。这个环境涉及一个可以线性移动的小车,一根杆子连接在小车上,第二根杆子连接在第一根杆子的另一端(使第二根杆子成为唯一一端自由的杆子)。小车可以向左或向右推动,目标是通过对小车施加连续力来平衡第二根杆子在第一根杆子上方,而第一根杆子又在小车上方。

动作空间

智能体采取1个元素的向量作为动作。动作空间是一个在[-1, 1]范围内的连续(action),其中action表示施加在小车上的数值力(幅度表示力的大小,符号表示方向)。

编号

动作

控制最小值

控制最大值

名称(在相应的XML文件中)

关节

类型 (单位)

0

施加在小车上的力

-1

1

滑块

滑动

力 (N)

观测空间

观测空间由以下部分组成(按顺序):

  • qpos (1个元素): 机器人小车的位置值。

  • sin(qpos) (2个元素): 杆子角度的正弦值。

  • cos(qpos) (2个元素): 杆子角度的余弦值。

  • qvel (3个元素): 这些独立身体部分的速度(它们的导数)。

  • qfrc_constraint (1个元素): 小车的约束力。每个自由度有1个接触约束力(共3个)。MuJoCo处理约束的方法是模拟器独有的,并且基于他们的研究。更多信息可以在他们的文档或他们的论文“具有接触和约束的解析可逆动力学:MuJoCo中的理论与实现”中找到。

观测空间是Box(-Inf, Inf, (9,), float64),其中元素如下:

编号

观测

最小值

最大值

名称(在相应的XML文件中)

关节

类型 (单位)

0

小车沿线性表面的位置

-Inf

Inf

滑块

滑动

位置 (m)

1

小车与第一根杆子之间角度的正弦

-Inf

Inf

sin(铰链)

铰链

无单位

2

两根杆子之间角度的正弦

-Inf

Inf

sin(铰链2)

铰链

无单位

3

小车与第一根杆子之间角度的余弦

-Inf

Inf

cos(铰链)

铰链

无单位

4

两根杆子之间角度的余弦

-Inf

Inf

cos(铰链2)

铰链

无单位

5

小车速度

-Inf

Inf

滑块

滑动

速度 (m/s)

6

小车与第一根杆子之间角度的角速度

-Inf

Inf

铰链

铰链

角速度 (rad/s)

7

两根杆子之间角度的角速度

-Inf

Inf

铰链2

铰链

角速度 (rad/s)

8

约束力 - x

-Inf

Inf

滑块

滑动

力 (N)

已排除

约束力 - y

-Inf

Inf

滑块

滑动

力 (N)

已排除

约束力 - z

-Inf

Inf

滑块

滑动

力 (N)

奖励

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

  • 存活奖励: 倒立摆在健康状态下的每个时间步(参见“回合结束”部分中的定义),都会获得固定值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个时间步。

参数

倒立双摆提供了多种参数来修改观测空间、奖励函数、初始状态和终止条件。这些参数可以在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

如果摆是健康的(直立状态),则给予的固定奖励(参见奖励部分)

reset_noise_scale

float

0.1

初始位置和速度随机扰动的尺度(参见起始状态部分)

版本历史

  • v5

    • 最低mujoco版本现在是2.3.3。

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

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

    • 修复了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版本发布。已移至gymnasium-robotics仓库

  • v2: 所有连续控制环境现在都使用mujoco-py >= 1.50。已移至gymnasium-robotics仓库

  • v1: 基于机器人的任务(包括倒立摆)的最大时间步数增加到1000。

  • v0: 初始版本发布。