Reacher

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

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

Action Space

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

Observation Space

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

import

gymnasium.make("Reacher-v5")

描述

“Reacher” 是一個雙關節機械手臂。目標是將機械手臂的末端執行器(稱為指尖)移動到隨機位置產生的目標附近。

Action Space

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

Action space 是一個 Box(-1, 1, (2,), float32)。一個 action (a, b) 代表施加在鉸鏈關節上的扭矩。

Num

Action

Control Min

Control Max

Name (在對應的 XML 檔案中)

Joint

Type (Unit)

0

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

-1

1

joint0

hinge

torque (N m)

1

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

-1

1

joint1

hinge

torque (N m)

Observation Space

Observation space 由以下部分組成(依序)

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

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

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

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

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

Observation space 是一個 Box(-Inf, Inf, (10,), float64),其中元素如下

Num

Observation

Min

Max

Name (在對應的 XML 檔案中)

Joint

Type (Unit)

0

第一個手臂的角度的餘弦值

-Inf

Inf

cos(joint0)

hinge

unitless

1

第二個手臂的角度的餘弦值

-Inf

Inf

cos(joint1)

hinge

unitless

2

第一個手臂的角度的正弦值

-Inf

Inf

sin(joint0)

hinge

unitless

3

第二個手臂的角度的正弦值

-Inf

Inf

sin(joint1)

hinge

unitless

4

目標的 x 座標

-Inf

Inf

target_x

slide

position (m)

5

目標的 y 座標

-Inf

Inf

target_y

slide

position (m)

6

第一個手臂的角速度

-Inf

Inf

joint0

hinge

angular velocity (rad/s)

7

第二個手臂的角速度

-Inf

Inf

joint1

hinge

angular velocity (rad/s)

8

position_fingertip - position_target 的 x 值

-Inf

Inf

NA

slide

position (m)

9

position_fingertip - position_target 的 y 值

-Inf

Inf

NA

slide

position (m)

excluded

position_fingertip - position_target 的 z 值 (由於 reacher 是 2d,因此恆為 0)

-Inf

Inf

NA

slide

position (m)

大多數 Gymnasium 環境僅返回 .xml 檔案中關節的位置和速度作為環境的狀態。然而,在 reacher 中,狀態是透過僅組合位置和速度的某些元素並對它們執行一些函數轉換而建立的。reacher.xml 包含這 4 個關節

Num

Observation

Min

Max

Name (在對應的 XML 檔案中)

Joint

Unit

0

第一個手臂的角度

-Inf

Inf

joint0

hinge

angle (rad)

1

第二個手臂的角度

-Inf

Inf

joint1

hinge

angle (rad)

2

目標的 x 座標

-Inf

Inf

target_x

slide

position (m)

3

目標的 y 座標

-Inf

Inf

target_y

slide

position (m)

Rewards

總獎勵為:reward = reward_distance + reward_control

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

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

info 包含個別的獎勵項。

Starting State

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

Episode End

Termination

Reacher 永遠不會終止。

Truncation

一個 episode 的預設持續時間為 50 個時間步。

Arguments

Reacher 提供一系列參數來修改 observation space、reward function、初始狀態和終止條件。這些參數可以在 gymnasium.make 中以以下方式應用

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

Parameter

Type

Default

Description

xml_file

str

"reacher.xml"

MuJoCo 模型的路徑

reward_dist_weight

float

1

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

reward_control_weight

float

0.1

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

Version History

  • v5

    • 現在最低 mujoco 版本為 2.3.3。

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

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

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

    • 從 observation space 中移除 "z - position_fingertip",因為它始終為 0,因此沒有為 agent 提供有用的資訊,這應該會導致訓練速度稍微加快(相關的 GitHub issue)。

    • 新增 xml_file 參數。

    • 新增 reward_dist_weightreward_control_weight 參數來配置 reward function(預設值與 v4 中的預設值大致相同)。

    • 修正 info["reward_ctrl"] 未乘以 reward weight 的問題。

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

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

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

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

  • v0:初始版本發佈