倒立摆

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

此环境是经典控制环境的一部分,其中包含有关环境的通用信息。

动作空间

离散(2)

观测空间

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

导入

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

注意: 虽然上面的范围表示每个元素的观测空间的可能值,但它并不反映未终止 episode 中状态空间的允许值。特别是

  • 小车的 x 位置(索引 0)可以取值在 (-4.8, 4.8) 之间,但如果小车离开 (-2.4, 2.4) 范围,episode 将终止。

  • 杆的角度可以在 (-.418, .418) 弧度(或 ±24°)之间观察到,但如果杆的角度不在 (-.2095, .2095)(或 ±12°)范围内,episode 将终止

奖励

由于目标是尽可能长时间地保持杆的直立,因此默认情况下,每采取一步(包括终止步骤)都会获得 +1 的奖励。由于环境的时间限制,v1 的默认奖励阈值为 500,v0 的默认奖励阈值为 200。

如果 sutton_barto_reward=True,则对于每个非终止步骤奖励 0,对于终止步骤奖励 -1。因此,v0 和 v1 的奖励阈值为 0。

初始状态

所有观测都被分配一个在 (-0.05, 0.05) 范围内的均匀随机值。

Episode 结束

如果发生以下任何一种情况,episode 将结束:

  1. 终止:杆的角度大于 ±12°

  2. 终止:小车位置大于 ±2.4(小车中心到达显示屏边缘)

  3. 截断:Episode 长度大于 500(v0 为 200)

参数

Cartpole 仅将 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

布尔值

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: 初始版本发布。