桿子平衡車

../../../_images/cart_pole.gif

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

動作空間

Discrete(2)

觀察空間

Box([-4.8 -inf -0.41887903 -inf], [4.8 inf 0.41887903 inf], (4,), float32)

import

gymnasium.make("CartPole-v1")

描述

此環境對應於 Barto、Sutton 和 Anderson 在「Neuronlike Adaptive Elements That Can Solve Difficult Learning Control Problem」中描述的桿子平衡車問題版本。桿子通過一個無驅動的關節連接到一個小車上,該小車沿著無摩擦的軌道移動。擺錘垂直放置在小車上,目標是通過在小車上施加左右方向的力來平衡桿子。

動作空間

動作是一個形狀為 (1,)ndarray,它可以取值 {0, 1},表示小車被推動的固定力的方向。

  • 0:向左推小車

  • 1:向右推小車

注意:應用力所減少或增加的速度不是固定的,它取決於桿子指向的角度。桿子的重心會改變將小車移動到桿子下方所需的能量。

觀察空間

觀察是一個形狀為 (4,)ndarray,其值對應於以下位置和速度

編號

觀察

最小值

最大值

0

小車位置

-4.8

4.8

1

小車速度

-Inf

Inf

2

桿子角度

~ -0.418 弧度 (-24°)

~ 0.418 弧度 (24°)

3

桿子角速度

-Inf

Inf

注意: 雖然上面的範圍表示每個元素的觀察空間的可能值,但它並不反映未終止劇集中狀態空間的允許值。特別是

  • 小車 x 位置(索引 0)可以取 (-4.8, 4.8) 之間的值,但如果小車離開 (-2.4, 2.4) 範圍,則劇集終止。

  • 桿子角度可以在 (-.418, .418) 弧度(或 ±24°)之間觀察到,但如果桿子角度不在 (-.2095, .2095) 範圍內(或 ±12°),則劇集終止

獎勵

由於目標是盡可能長時間保持桿子直立,因此預設情況下,每採取一步都會給予 +1 的獎勵,包括終止步驟。由於環境的時間限制,v1 的預設獎勵閾值為 500,v0 為 200。

如果 sutton_barto_reward=True,則每個非終止步驟都會給予 0 的獎勵,而終止步驟會給予 -1 的獎勵。因此,v0 和 v1 的獎勵閾值為 0。

起始狀態

所有觀察值都被分配一個 (-0.05, 0.05) 範圍內均勻隨機的值

劇集結束

如果發生以下任一情況,則劇集結束

  1. 終止:桿子角度大於 ±12°

  2. 終止:小車位置大於 ±2.4(小車中心到達顯示器的邊緣)

  3. 截斷:劇集長度大於 500(v0 為 200)

引數

桿子平衡車只有 render_mode 作為 gymnasium.make 的關鍵字。在重置時,options 參數允許使用者更改用於確定新隨機狀態的邊界。

>>> import gymnasium as gym
>>> env = gym.make("CartPole-v1", render_mode="rgb_array")
>>> env
<TimeLimit<OrderEnforcing<PassiveEnvChecker<CartPoleEnv<CartPole-v1>>>>>
>>> env.reset(seed=123, options={"low": -0.1, "high": 0.1})  # default low=-0.05, high=0.05
(array([ 0.03647037, -0.0892358 , -0.05592803, -0.06312564], dtype=float32), {})

參數

類型

預設值

描述

sutton_barto_reward

bool

False

如果 True,則獎勵函式與原始 sutton barto 實作匹配

向量化環境

為了增加每秒步數,使用者可以使用自訂向量環境或使用環境向量化器。

>>> import gymnasium as gym
>>> envs = gym.make_vec("CartPole-v1", num_envs=3, vectorization_mode="vector_entry_point")
>>> envs
CartPoleVectorEnv(CartPole-v1, num_envs=3)
>>> envs = gym.make_vec("CartPole-v1", num_envs=3, vectorization_mode="sync")
>>> envs
SyncVectorEnv(CartPole-v1, num_envs=3)

版本歷史

  • v1:max_time_steps 提高到 500。

    • 在 Gymnasium 1.0.0a2 中,加入了 sutton_barto_reward 引數(相關GitHub 問題

  • v0:初始版本發布。