倒單擺

../../../_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 個元素的向量作為動作。動作空間是一個連續的 (action),範圍在 [-1, 1] 內,其中 action 代表施加在台車上的數值力(大小代表力的量,符號代表方向)

編號

動作

控制最小值

控制最大值

名稱(在相應的 XML 檔案中)

關節

類型 (單位)

0

施加在台車上的力

-1

1

滑塊

滑動

力 (N)

觀察空間

觀察空間包含以下部分(依序)

  • qpos (1 個元素): 機器人台車的位置值。

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

  • cos(qpos) (2 個元素): 桿子角度的餘弦值。

  • qvel (3 個元素): 這些個別身體部位的速度(其導數)。

  • qfrc_constraint (1 個元素): 台車的約束力。對於每個自由度 (3) 的接觸點都有一個約束力。MuJoCo 對約束的處理和處理方式是模擬器獨有的,並且基於他們的研究。更多資訊可以在他們的文件或他們的論文 「具有接觸和約束的分析可逆動力學: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)

獎勵

總獎勵為:獎勵 = 存活獎勵 - 距離懲罰 - 速度懲罰

  • 存活獎勵:每次倒立擺處於健康狀態(請參閱「劇集結束」部分中的定義)時,它都會獲得固定值 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

如果擺錘處於 健康(直立)狀態,則給定的常數獎勵(請參閱 獎勵 部分)

reset_noise_scale

float

0.1

初始位置和速度隨機擾動的比例(請參閱 起始狀態 部分)

版本歷史

  • v5

    • 最低 mujoco 版本現在為 2.3.3。

    • 新增 default_camera_config 參數,這是一個用於設定 mj_camera 屬性的字典,主要用於自訂環境。

    • 新增 frame_skip 參數,用於設定 dtstep() 的持續時間),預設值因環境而異,請查看環境文件頁面。

    • 修正錯誤:healthy_reward 在每個步驟都會給予(即使擺錘不健康),現在只有在 DoublePendulum 健康(未終止)時才會給予(相關的 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:針對基於機器人的任務(包括倒單擺),max_time_steps 已提高至 1000。

  • v0:初始版本發佈。