Swimmer¶
該環境是 Mujoco 環境的一部分,其中包含關於該環境的通用資訊。
動作空間 |
|
觀察空間 |
|
匯入 |
|
描述¶
該環境對應於 Rémi Coulom 博士論文 “使用神經網路的強化學習及其在運動控制中的應用” 中描述的 Swimmer 環境。該環境旨在與經典控制環境相比,增加獨立狀態和控制變數的數量。Swimmer 由三節或更多節 (’links’) 以及少一個的關節 (’rotors’) 組成——一個轉子關節恰好連線兩節以形成線性鏈。Swimmer 懸浮在二維水池中,總是從相同位置開始(服從均勻分佈的某些偏差),目標是透過向轉子施加扭矩並利用流體摩擦,儘可能快地向右移動。
註釋¶
問題引數為:
n: 身體部件數量
mi: 部件 i 的質量 (i ∈ {1…n})
li: 部件 i 的長度 (i ∈ {1…n})
k: 粘滯摩擦係數
預設環境的 n = 3,li = 0.1,和 k = 0.1。可以在構造時傳入自定義 MuJoCo XML 檔案以增加連線數量,或調整任何引數。
動作空間¶
動作空間是一個 Box(-1, 1, (2,), float32)。一個動作代表施加在“關節”之間的扭矩。
編號 |
動作 |
控制最小值 |
控制最大值 |
名稱 (在對應的 XML 檔案中) |
關節 |
型別 (單位) |
|---|---|---|---|---|---|---|
0 |
施加在第一個轉子上的扭矩 |
-1 |
1 |
motor1_rot |
鉸鏈 |
扭矩 (N m) |
1 |
施加在第二個轉子上的扭矩 |
-1 |
1 |
motor2_rot |
鉸鏈 |
扭矩 (N m) |
觀察空間¶
觀察空間由以下部分組成(按順序)
qpos (預設3個元素): 機器人身體部件的位置值。
qvel (5個元素): 這些獨立身體部件的速度(它們的導數)。
預設情況下,觀察不包括前尖端的 x 和 y 座標。透過在構造時傳入 exclude_current_positions_from_observation=False 可以包含這些座標。在這種情況下,觀察空間將是 Box(-Inf, Inf, (10,), float64),其中前兩個觀察值是前尖端的 x 和 y 座標。無論 exclude_current_positions_from_observation 設定為 True 還是 False,x 和 y 座標都將透過 info 返回,鍵分別為 "x_position" 和 "y_position"。
然而,預設情況下,觀察空間是 Box(-Inf, Inf, (8,), float64),其元素如下:
編號 |
觀察 |
最小值 |
最大值 |
名稱 (在對應的 XML 檔案中) |
關節 |
型別 (單位) |
|---|---|---|---|---|---|---|
0 |
前尖端的角度 |
-Inf |
Inf |
free_body_rot |
鉸鏈 |
角度 (rad) |
1 |
第一個轉子的角度 |
-Inf |
Inf |
motor1_rot |
鉸鏈 |
角度 (rad) |
2 |
第二個轉子的角度 |
-Inf |
Inf |
motor2_rot |
鉸鏈 |
角度 (rad) |
3 |
尖端沿 x 軸的速度 |
-Inf |
Inf |
slider1 |
滑動 |
速度 (m/s) |
4 |
尖端沿 y 軸的速度 |
-Inf |
Inf |
slider2 |
滑動 |
速度 (m/s) |
5 |
前尖端的角速度 |
-Inf |
Inf |
free_body_rot |
鉸鏈 |
角速度 (rad/s) |
6 |
第一個轉子的角速度 |
-Inf |
Inf |
motor1_rot |
鉸鏈 |
角速度 (rad/s) |
7 |
第二個轉子的角速度 |
-Inf |
Inf |
motor2_rot |
鉸鏈 |
角速度 (rad/s) |
已排除 |
尖端沿 x 軸的位置 |
-Inf |
Inf |
slider1 |
滑動 |
位置 (m) |
已排除 |
尖端沿 y 軸的位置 |
-Inf |
Inf |
slider2 |
滑動 |
位置 (m) |
獎勵¶
總獎勵為:獎勵 = forward_reward - ctrl_cost。
forward_reward: 向前移動的獎勵,如果 Swimmer 向前移動(在正 \(x\) 方向 / 向右方向),則此獎勵為正。\(w_{forward} \times \frac{dx}{dt}\),其中 \(dx\) 是(前)“尖端”的位移(\(x_{after-action} - x_{before-action}\)),\(dt\) 是動作之間的時間,這取決於
frame_skip引數(預設為 4),以及frametime(為 \(0.01\))——因此預設情況下 \(dt = 4 \times 0.01 = 0.04\),\(w_{forward}\) 是forward_reward_weight(預設為 \(1\))。ctrl_cost: 一個負獎勵,懲罰 Swimmer 採取過大的動作。\(w_{control} \times \|action\|_2^2\),其中 \(w_{control}\) 是
ctrl_cost_weight(預設為 \(10^{-4}\))。
info 包含各個獎勵項。
起始狀態¶
初始位置狀態是 \(\mathcal{U}_{[-reset\_noise\_scale \times I_{5}, reset\_noise\_scale \times I_{5}]}\)。初始速度狀態是 \(\mathcal{U}_{[-reset\_noise\_scale \times I_{5}, reset\_noise\_scale \times I_{5}]}\)。
其中 \(\mathcal{U}\) 是多元均勻連續分佈。
回合結束¶
終止¶
Swimmer 永不終止。
截斷¶
一個回合的預設持續時間是 1000 個時間步。
引數¶
Swimmer 提供了一系列引數來修改觀察空間、獎勵函式、初始狀態和終止條件。這些引數可以在 gymnasium.make 期間按以下方式應用:
import gymnasium as gym
env = gym.make('Swimmer-v5', xml_file=...)
引數 |
型別 |
預設值 |
描述 |
|---|---|---|---|
|
str |
|
MuJoCo 模型的路徑 |
|
float |
|
forward_reward 項的權重(參見 |
|
float |
|
ctrl_cost 項的權重(參見 |
|
float |
|
初始位置和速度隨機擾動的尺度(參見 |
|
bool |
|
是否從觀察中省略 x 和 y 座標。排除位置可以作為一種歸納偏置,以在策略中引入與位置無關的行為(參見 |
版本歷史¶
v5
mujoco的最低版本現在是 2.3.3。添加了對使用
xml_file引數完全自定義/第三方mujoco模型的支援(以前只能對現有模型進行少量更改)。添加了
default_camera_config引數,一個用於設定mj_camera屬性的字典,主要對自定義環境有用。添加了
env.observation_structure,一個用於指定觀察空間組成(例如qpos、qvel)的字典,對構建 MuJoCo 環境的工具和包裝器有用。reset()現在返回非空的info,之前返回的是空字典,新鍵與step()的狀態資訊相同。添加了
frame_skip引數,用於配置dt(step()的持續時間),預設值因環境而異,請查閱環境文件頁面。恢復了
xml_file引數(在v4中已移除)。添加了
forward_reward_weight、ctrl_cost_weight,用於配置獎勵函式(預設值與v4中基本相同)。添加了
reset_noise_scale引數以設定初始狀態的範圍。添加了
exclude_current_positions_from_observation引數。將
info["reward_fwd"]和info["forward_reward"]替換為info["reward_forward"],以便與其他環境保持一致。
v4: 所有 MuJoCo 環境現在都使用 mujoco >= 2.1.3 中的 MuJoCo 繫結。
v3: 支援
gymnasium.makekwargs,例如xml_file、ctrl_cost_weight、reset_noise_scale等。rgb 渲染來自跟蹤相機(因此代理不會跑出螢幕)。移至 gymnasium-robotics 倉庫。v2: 所有連續控制環境現在都使用 mujoco-py >= 1.50。移至 gymnasium-robotics 倉庫。
v1: 基於機器人的任務的最大時間步數提高到 1000。向環境添加了 reward_threshold。
v0: 初始版本釋出。