Acrobot

../../../_images/acrobot.gif

此環境是經典控制環境的一部分,其中包含有關環境的一般資訊。

動作空間

Discrete(3)

觀察空間

Box([ -1. -1. -1. -1. -12.566371 -28.274334], [ 1. 1. 1. 1. 12.566371 28.274334], (6,), float32)

導入

gymnasium.make("Acrobot-v1")

描述

Acrobot 環境基於 Sutton 在 “Generalization in Reinforcement Learning: Successful Examples Using Sparse Coarse Coding”Sutton 與 Barto 的著作中的研究。 該系統由線性連接形成鏈的兩個連桿組成,鏈的一端固定。 兩個連桿之間的關節被致動。 目標是對致動關節施加扭矩,以將線性鏈的自由端擺動到給定高度以上,同時從向下懸掛的初始狀態開始。

Gif 中所示:兩個藍色連桿由兩個綠色關節連接。 兩個連桿之間的關節被致動。 目標是通過對致動器施加扭矩,將外連桿的自由端擺動到達到目標高度(系統上方的黑色水平線)。

動作空間

動作是離散的、確定性的,並且表示施加在兩個連桿之間致動關節上的扭矩。

編號

動作

單位

0

對致動關節施加 -1 扭矩

扭矩 (N m)

1

對致動關節施加 0 扭矩

扭矩 (N m)

2

對致動關節施加 1 扭矩

扭矩 (N m)

觀察空間

觀察是一個形狀為 (6,)ndarray,它提供有關兩個旋轉關節角度及其角速度的資訊

編號

觀察

最小值

最大值

0

theta1 的餘弦

-1

1

1

theta1 的正弦

-1

1

2

theta2 的餘弦

-1

1

3

theta2 的正弦

-1

1

4

theta1 的角速度

~ -12.567 (-4 * pi)

~ 12.567 (4 * pi)

5

theta2 的角速度

~ -28.274 (-9 * pi)

~ 28.274 (9 * pi)

其中

  • theta1 是第一個關節的角度,其中 0 度角表示第一個連桿直接向下。

  • theta2 相對於第一個連桿的角度。 0 度角對應於兩個連桿之間具有相同的角度。

theta1theta2 的角速度分別限制在 ±4π 和 ±9π rad/s。 [1, 0, 1, 0, ..., ...] 的狀態表示兩個連桿都向下。

獎勵

目標是讓自由端在盡可能少的步數內達到指定目標高度,因此所有未達到目標的步驟都會產生 -1 的獎勵。達到目標高度會終止並獲得 0 的獎勵。獎勵閾值為 -100。

初始狀態

基礎狀態中的每個參數(theta1theta2 和兩個角速度)都在 -0.1 和 0.1 之間均勻初始化。 這表示兩個連桿都向下,並帶有一些初始隨機性。

Episode 結束

如果發生以下情況之一,episode 將結束

  1. 終止:自由端達到目標高度,其構造方式為:-cos(theta1) - cos(theta2 + theta1) > 1.0

  2. 截斷:Episode 長度大於 500(v0 為 200)

參數

Acrobot 僅將 render_mode 作為 gymnasium.make 的關鍵字。 在重置時,options 參數允許使用者更改用於確定新隨機狀態的邊界。

>>> import gymnasium as gym
>>> env = gym.make('Acrobot-v1', render_mode="rgb_array")
>>> env
<TimeLimit<OrderEnforcing<PassiveEnvChecker<AcrobotEnv<Acrobot-v1>>>>>
>>> env.reset(seed=123, options={"low": -0.2, "high": 0.2})  # default low=-0.1, high=0.1
(array([ 0.997341  ,  0.07287608,  0.9841162 , -0.17752565, -0.11185605,
       -0.12625128], dtype=float32), {})

預設情況下,acrobot 的動力學遵循 Sutton 和 Barto 的著作 Reinforcement Learning: An Introduction 中描述的動力學。 然而,可以修改 book_or_nips 參數以將擺的動力學更改為原始 NeurIPS 論文中描述的動力學。

# To change the dynamics as described above
env.unwrapped.book_or_nips = 'nips'

有關詳細信息,請參閱以下註釋

動力學方程式在 NIPS 論文中缺少一些在書中出現的術語。 R. Sutton 在個人通信中證實,論文和書中顯示的實驗結果是使用書中顯示的方程式生成的。 但是,可以通過設置 book_or_nips = 'nips' 來使用論文方程式運行域

版本歷史

  • v1:最大步數從 200 增加到 500。 v0 的觀察空間提供了弧度制 theta1theta2 的直接讀數,範圍為 [-pi, pi]。 此處描述的 v1 觀察空間改為提供每個角度的正弦和餘弦。

  • v0:初始版本發布

參考文獻

  • Sutton, R. S. (1996). Generalization in Reinforcement Learning: Successful Examples Using Sparse Coarse Coding. In D. Touretzky, M. C. Mozer, & M. Hasselmo (Eds.), Advances in Neural Information Processing Systems (Vol. 8). MIT Press. https://proceedings.neurips.cc/paper/1995/file/8f1d43620bc6bb580df6e80b0dc05c48-Paper.pdf

  • Sutton, R. S., Barto, A. G. (2018 ). Reinforcement Learning: An Introduction. The MIT Press.