擺錘

../../../_images/pendulum.gif

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

動作空間

Box(-2.0, 2.0, (1,), float32)

觀測空間

Box([-1. -1. -8.], [1. 1. 8.], (3,), float32)

匯入

gymnasium.make("Pendulum-v1")

描述

倒立擺上擺問題基於控制理論中的經典問題。該系統由一個擺錘組成,一端連線到固定點,另一端自由。擺錘從隨機位置開始,目標是對自由端施加扭矩,使其擺動到直立位置,重心恰好位於固定點正上方。

下圖詳細說明了用於實現擺錘動力學方程的座標系。

Pendulum Coordinate System

  • x-y:擺錘末端以米為單位的笛卡爾座標。

  • theta :以弧度表示的角度。

  • tau:以牛頓米(N m)表示的扭矩。定義為正值表示逆時針方向。

動作空間

動作是一個形狀為 (1,)ndarray,表示施加到擺錘自由端的扭矩。

編號

動作

最小值

最大值

0

扭矩

-2.0

2.0

觀測空間

觀測值是一個形狀為 (3,)ndarray,表示擺錘自由端的 x-y 座標及其角速度。

編號

觀測值

最小值

最大值

0

x = cos(theta)

-1.0

1.0

1

y = sin(theta)

-1.0

1.0

2

角速度

-8.0

8.0

獎勵

獎勵函式定義為

r = -(theta2 + 0.1 * theta_dt2 + 0.001 * torque2)

其中 theta 是擺錘在 [-pi, pi] 之間歸一化後的角度(0 表示直立位置)。根據上述方程,可以獲得的最小獎勵為 -(pi2 + 0.1 * 82 + 0.001 * 22) = -16.2736044,而最大獎勵為零(擺錘直立,速度為零,未施加扭矩)。

初始狀態

初始狀態是 [-pi, pi] 範圍內的隨機角度和 [-1,1] 範圍內的隨機角速度。

劇集截斷

劇集在 200 個時間步後截斷。

引數

  • g: .

擺錘在 gymnasium.make 中有兩個引數:render_modeg,其中 g 表示用於計算擺錘動力學的重力加速度(單位為 m s-2)。預設值為 g = 10.0。在重置時,options 引數允許使用者更改用於確定新隨機狀態的邊界。

>>> import gymnasium as gym
>>> env = gym.make("Pendulum-v1", render_mode="rgb_array", g=9.81)  # default g=10.0
>>> env
<TimeLimit<OrderEnforcing<PassiveEnvChecker<PendulumEnv<Pendulum-v1>>>>>
>>> env.reset(seed=123, options={"low": -0.7, "high": 0.5})  # default low=-0.6, high=-0.5
(array([ 0.4123625 ,  0.91101986, -0.89235795], dtype=float32), {})

版本歷史

  • v1: 簡化數學方程,行為無差異。

  • v0: 初始版本釋出