购物车¶
此环境是经典控制环境的一部分,其中包含有关环境的常规信息。
动作空间 |
|
观察空间 |
|
导入 |
|
描述¶
此环境对应于 Barto、Sutton 和 Anderson 在 “可以解决困难学习控制问题的类神经元自适应元素” 中描述的购物车问题版本。一根杆子通过一个未驱动接头连接到一个购物车上,该购物车沿着无摩擦轨道移动。摆锤被放置在购物车上,目标是通过对购物车施加向左和向右方向的力来平衡摆锤。
动作空间¶
动作是一个形状为 (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)
中的均匀随机值
集结束¶
如果发生以下任何情况,集将结束
终止:杆子角度大于 ±12°
终止:购物车位置大于 ±2.4(购物车的中心到达显示屏的边缘)
截断:集长度大于 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), {})
参数 |
类型 |
默认值 |
描述 |
---|---|---|---|
|
布尔值 |
|
如果 |
矢量化环境¶
为了提高每秒的步数,用户可以使用自定义向量环境或环境矢量化器。
>>> 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:初始版本发布。