倒立摆¶

此环境属于经典控制环境,其中包含有关该环境的通用信息。
动作空间 |
|
观测空间 |
|
import |
|
描述¶
该环境对应于 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)
之间均匀随机的值。
回合结束¶
如果发生以下任一情况,回合结束:
终止:杆角度大于 ±12°
终止:小车位置大于 ±2.4(小车中心到达显示器边缘)
截断:回合长度大于 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), {})
参数 |
类型 |
默认值 |
描述 |
---|---|---|---|
|
bool |
|
如果为 |
向量化环境¶
为了增加每秒的步数,用户可以使用自定义向量环境或环境向量化器。
>>> 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: 初始版本发布。