倒立雙擺

../../../_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: 初始版本釋出。