Reacher

../../../_images/reacher.gif

此環境是 Mujoco 環境的一部分,其中包含有關環境的一般資訊。

動作空間

Box(-1.0, 1.0, (2,), float32)

觀察空間

Box(-inf, inf, (10,), float64)

匯入

gymnasium.make("Reacher-v5")

描述

「Reacher」是一個雙關節機器手臂。目標是移動機器人的末端執行器(稱為指尖)靠近隨機位置產生的目標。

動作空間

../../../_images/reacher.png

動作空間是一個 Box(-1, 1, (2,), float32)。動作 (a, b) 代表施加在鉸鏈關節上的扭矩。

編號

動作

控制最小值

控制最大值

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

關節

類型(單位)

0

施加在第一個鉸鏈上的扭矩(將連結連接到固定點)

-1

1

joint0

鉸鏈

扭矩 (N m)

1

施加在第二個鉸鏈上的扭矩(連接兩個連結)

-1

1

joint1

鉸鏈

扭矩 (N m)

觀察空間

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

  • cos(qpos) (2 個元素): 兩個手臂角度的餘弦值。

  • sin(qpos) (2 個元素): 兩個手臂角度的正弦值。

  • qpos (2 個元素): 目標的座標。

  • qvel (2 個元素): 手臂的角速度(它們的導數)。

  • xpos (2 個元素): 目標與 reacher 之間的向量。

觀察空間是一個 Box(-Inf, Inf, (10,), float64),其中元素如下

編號

觀察

最小值

最大值

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

關節

類型(單位)

0

第一個手臂角度的餘弦值

-Inf

Inf

cos(joint0)

鉸鏈

無單位

1

第二個手臂角度的餘弦值

-Inf

Inf

cos(joint1)

鉸鏈

無單位

2

第一個手臂角度的正弦值

-Inf

Inf

sin(joint0)

鉸鏈

無單位

3

第二個手臂角度的正弦值

-Inf

Inf

sin(joint1)

鉸鏈

無單位

4

目標的 x 座標

-Inf

Inf

target_x

滑動

位置 (m)

5

目標的 y 座標

-Inf

Inf

target_y

滑動

位置 (m)

6

第一個手臂的角速度

-Inf

Inf

joint0

鉸鏈

角速度 (rad/s)

7

第二個手臂的角速度

-Inf

Inf

joint1

鉸鏈

角速度 (rad/s)

8

position_fingertip - position_target 的 x 值

-Inf

Inf

不適用

滑動

位置 (m)

9

position_fingertip - position_target 的 y 值

-Inf

Inf

不適用

滑動

位置 (m)

已排除

position_fingertip - position_target 的 z 值(因為 reacher 是 2d,所以恆為 0)

-Inf

Inf

不適用

滑動

位置 (m)

大多數健身房環境只會在 .xml 檔案中回傳關節的位置和速度,作為環境的狀態。但是,在 reacher 中,狀態是透過僅組合位置和速度的某些元素,並對其執行某些函數轉換來建立的。reacher.xml 包含這 4 個關節

編號

觀察

最小值

最大值

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

關節

單位

0

第一個手臂的角度

-Inf

Inf

joint0

鉸鏈

角度 (rad)

1

第二個手臂的角度

-Inf

Inf

joint1

鉸鏈

角度 (rad)

2

目標的 x 座標

-Inf

Inf

target_x

滑動

位置 (m)

3

目標的 y 座標

-Inf

Inf

target_y

滑動

位置 (m)

獎勵

總獎勵為:獎勵 = 獎勵_距離 + 獎勵_控制

  • 獎勵_距離:此獎勵衡量 reacher 的指尖(未連接的末端)與目標的距離,如果 reacher 的指尖離目標更遠,則會指派更負面的值。它是 \(-w_{near} \|(P_{fingertip} - P_{target})\|_2\)。其中 \(w_{near}\)reward_near_weight(預設為 \(1\))。

  • 獎勵_控制:一個負獎勵,用於懲罰 walker 採取過大的動作。它是以動作的負平方歐幾里得範數來衡量的,即 \(-w_{control} \|action\|_2^2\)。其中 \(w_{control}\)reward_control_weight。(預設為 \(0.1\)

info 包含個別獎勵項。

起始狀態

reacher 手臂的初始位置狀態是 \(\mathcal{U}_{[-0.1 \times I_{2}, 0.1 \times I_{2}]}\)。目標的位置狀態(永久)是 \(\mathcal{S}(0.2)\)。Reacher 手臂的初始速度狀態是 \(\mathcal{U}_{[-0.005 \times 1_{2}, 0.005 \times 1_{2}]}\)。物件的速度狀態(永久)是 \(0_2\)

其中 \(\mathcal{U}\) 是多元均勻連續分佈,而 \(\mathcal{S}\) 是均勻連續球面分佈。

預設影格率為 \(2\),每個影格持續時間為 \(0.01\),因此 dt = 5 * 0.01 = 0.02

回合結束

終止

Reacher 永遠不會終止。

截斷

回合的預設持續時間為 50 個時間步長。

引數

Reacher 提供一系列參數來修改觀察空間、獎勵函數、初始狀態和終止條件。這些參數可以在 gymnasium.make 期間以以下方式應用

import gymnasium as gym
env = gym.make('Reacher-v5', xml_file=...)

參數

類型

預設值

描述

xml_file

str

"reacher.xml"

MuJoCo 模型的路徑

reward_dist_weight

float

1

reward_dist 項的權重(請參閱 獎勵 章節)

reward_control_weight

float

0.1

reward_control 項的權重(請參閱 獎勵 章節)

版本歷史

  • v5

    • 現在最低 mujoco 版本為 2.3.3。

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

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

    • 修正錯誤:reward_distance 是基於物理步驟之前的狀態,現在它是基於物理步驟之後的狀態(相關 GitHub 問題)。

    • 從觀察空間中移除 "z - position_fingertip",因為它始終為 0,因此不會為代理提供任何有用資訊,這應該會導致訓練速度略微加快(相關的 GitHub issue)。

    • 新增 xml_file 參數。

    • 新增 reward_dist_weightreward_control_weight 參數以配置獎勵函數(預設值與 v4 中的效果相同)。

    • 修正 info["reward_ctrl"] 未乘以獎勵權重的問題。

  • v4:所有 MuJoCo 環境現在都使用 mujoco >= 2.1.3 中的 MuJoCo 綁定。

  • v3:此環境沒有 v3 版本。

  • v2:所有連續控制環境現在都使用 mujoco-py >= 1.50。

  • v1:機器人相關任務的最大時間步數提高到 1000(不包括最大時間步數為 50 的 reacher)。為環境新增了 reward_threshold。

  • v0:初始版本發佈。