山地车

../../../_images/mountain_car.gif

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

动作空间

离散(3)

观测空间

Box([-1.2 -0.07], [0.6 0.07], (2,), float32)

导入

gymnasium.make("MountainCar-v0")

描述

山地车 MDP 是一个确定性 MDP,它由一辆随机放置在正弦曲线山谷底部的汽车组成,唯一可能的动作是对汽车在任一方向施加的加速度。MDP 的目标是策略性地加速汽车,使其到达右侧山顶的目标状态。gymnasium 中山地车领域有两个版本:一个是离散动作版本,一个是连续动作版本。此版本是离散动作版本。

此 MDP 首次出现在 Andrew Moore 的博士论文 (1990)

@TECHREPORT{Moore90efficientmemory-based,
    author = {Andrew William Moore},
    title = {Efficient Memory-based Learning for Robot Control},
    institution = {University of Cambridge},
    year = {1990}
}

观测空间

观测是一个形状为 (2,)ndarray,其中元素对应于以下内容

编号

观测

最小值

最大值

单位

0

汽车沿 x 轴的位置

-1.2

0.6

位置 (米)

1

汽车的速度

-0.07

0.07

速度 (v)

动作空间

有 3 个离散确定性动作

  • 0:向左加速

  • 1:不加速

  • 2:向右加速

转移动力学:

给定一个动作,山地车遵循以下转移动力学

velocityt+1 = velocityt + (action - 1) * force - cos(3 * positiont) * gravity

positiont+1 = positiont + velocityt+1

其中 force = 0.001,gravity = 0.0025。两端的碰撞是非弹性的,速度在与墙壁碰撞时设置为 0。位置被裁剪到范围 [-1.2, 0.6],速度被裁剪到范围 [-0.07, 0.07]

奖励:

目标是尽快到达放置在右侧山顶的旗帜,因此,智能体在每个时间步都会因 -1 的奖励而受到惩罚。

初始状态

汽车的位置被分配一个在 [-0.6, -0.4] 范围内的均匀随机值。汽车的初始速度始终设置为 0。

Episode 结束

如果发生以下任一情况,则 episode 结束

  1. 终止:汽车的位置大于或等于 0.5(右侧山顶的目标位置)

  2. 截断:episode 的长度为 200。

参数

山地车对于带有 render_modegoal_velocitygymnasium.make 有两个参数。在重置时,options 参数允许用户更改用于确定新随机状态的边界。

>>> import gymnasium as gym
>>> env = gym.make("MountainCar-v0", render_mode="rgb_array", goal_velocity=0.1)  # default goal_velocity=0
>>> env
<TimeLimit<OrderEnforcing<PassiveEnvChecker<MountainCarEnv<MountainCar-v0>>>>>
>>> env.reset(seed=123, options={"x_init": np.pi/2, "y_init": 0.5})  # default x_init=np.pi, y_init=1.0
(array([-0.46352962,  0.        ], dtype=float32), {})

版本历史

  • v0:初始版本发布