倒立摆

../../../_images/inverted_pendulum.gif

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

动作空间

Box(-3.0, 3.0, (1,), float32)

观察空间

Box(-inf, inf, (4,), float64)

导入

gymnasium.make("InvertedPendulum-v5")

描述

此环境是 Cartpole 环境,基于 Barto、Sutton 和 Anderson 在 “可以解决复杂学习控制问题的类神经元自适应元素” 中的工作,就像在经典环境中一样,但现在由 Mujoco 物理模拟器提供支持 - 允许进行更复杂的实验(例如改变重力的影响)。此环境包含一个可以线性移动的小车,其一端连接着一根杆,另一端是自由的。小车可以向左或向右推,目标是通过对小车施加力来平衡小车顶部的杆。

动作空间

智能体采取一个 1 元素向量来进行动作。

动作空间是一个连续的 (action)[-3, 3] 中,其中 action 代表施加到小车的数值力(大小代表力的大小,符号代表方向)

编号

动作

控制最小值

控制最大值

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

关节

类型(单位)

0

施加到小车的力

-3

3

滑块

滑动

力(N)

观察空间

观察空间包含以下部分(按顺序)

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

  • qvel(2 个元素): 小车和杆的速度(它们的导数)。

观察空间是一个 Box(-Inf, Inf, (4,), float64),其中元素如下

编号

观察

最小值

最大值

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

关节

类型(单位)

0

小车沿线性表面的位置

-Inf

Inf

滑块

滑动

位置(m)

1

小车上的杆的垂直角度

-Inf

Inf

铰链

铰链

角度(rad)

2

小车的线速度

-Inf

Inf

滑块

滑动

速度(m/s)

3

小车上的杆的角速度

-Inf

Inf

铰链

铰链

角速度(rad/s)

奖励

目标是尽可能长时间地保持倒立摆直立(在一定角度限制内) - 因此,对于杆直立的每个时间步,都会获得 +1 的奖励。

如果杆满足以下条件,则被认为是直立的:\(|angle| < 0.2\).

并且 info 也包含奖励。

起始状态

初始位置状态为 \(\mathcal{U}_{[-reset\_noise\_scale imes I_{2}, reset\_noise\_scale imes I_{2}]}\)。初始速度状态为 \(\mathcal{U}_{[-reset\_noise\_scale imes I_{2}, reset\_noise\_scale imes I_{2}]}\).

其中 \(\mathcal{U}\) 是多元均匀连续分布。

回合结束

终止

当倒立摆不健康时,环境会终止。如果发生以下情况,则倒立摆不健康

  1. 任何状态空间值不再是有限的。

  2. 杆和小车之间的垂直角度的绝对值大于 0.2 弧度。

截断

回合的默认持续时间为 1000 个时间步。

参数

InvertedPendulum 提供了一系列参数来修改观察空间、奖励函数、初始状态和终止条件。这些参数可以在 gymnasium.make 中以以下方式应用

import gymnasium as gym
env = gym.make('InvertedPendulum-v5', reset_noise_scale=0.1)

参数

类型

默认值

描述

xml_file

str

"inverted_pendulum.xml"

指向 MuJoCo 模型的路径

reset_noise_scale

float

0.01

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

版本历史

  • v5

    • 最小 mujoco 版本现在是 2.3.3。

    • 添加了对使用 xml_file 参数的完全自定义/第三方 mujoco 模型的支持(以前只能对现有模型进行一些更改)。

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

    • 添加了 env.observation_structure,它是一个字典,用于指定观察空间的组成(例如 qposqvel),这对于为 MuJoCo 环境构建工具和包装器很有用。

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

    • 修复了错误:healthy_reward 在每一步都给出(即使摆不健康),现在只有在摆健康(未终止)时才会给出(相关的 GitHub 问题)。

    • 添加了 xml_file 参数。

    • 添加了 reset_noise_scale 参数来设置初始状态的范围。

    • 添加了 info["reward_survive"],它包含奖励。

  • v4:所有 MuJoCo 环境现在都使用 mujoco >= 2.1.3 中的 MuJoCo 绑定。

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

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

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

  • v0:初始版本发布。