倒立擺

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

此環境屬於經典控制環境,其中包含有關該環境的通用資訊。

動作空間

離散(2)

觀測空間

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

import

gymnasium.make("CartPole-v1")

描述

該環境對應於 Barto、Sutton 和 Anderson 在“可以解決困難學習控制問題的神經元狀自適應元件”中描述的倒立擺問題。一個杆透過一個未驅動的關節連線到一輛小車上,小車沿無摩擦軌道移動。擺錘垂直放置在小車上,目標是透過向小車施加左右方向的力來平衡擺錘。

動作空間

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

  • 0: 向左推動小車

  • 1: 向右推動小車

注意:施加的力所減小或增加的速度不是固定的,它取決於杆的指向角度。杆的重心會改變在杆下方移動小車所需的能量。

觀測空間

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

編號

觀測

最小值

最大值

0

小車位置

-4.8

4.8

1

小車速度

-無窮

無窮

2

杆角度

~ -0.418 弧度 (-24°)

~ 0.418 弧度 (24°)

3

杆角速度

-無窮

無窮

注意:雖然上述範圍表示每個元素觀測空間的可能值,但這並不反映未終止回合中狀態空間的允許值。特別是:

  • 小車 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: 初始版本釋出。