山地车连续

../../../_images/mountain_car_continuous.gif

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

动作空间

Box(-1.0, 1.0, (1,), float32)

观察空间

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

导入

gymnasium.make("MountainCarContinuous-v0")

描述

山地车 MDP 是一个确定性 MDP,它包含一辆随机放置在正弦曲线山谷底部的汽车,唯一可能的动作是可以在汽车任一方向施加的加速度。MDP 的目标是策略性地加速汽车以到达位于右山顶上的目标状态。在健身房中,有两种版本的山地车领域:一种是离散动作的,另一种是连续的。这个版本是具有连续动作的版本。

此 MDP 首次出现在 安德鲁·摩尔的博士论文 (1990)

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

观察空间

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

编号

观察

最小值

最大值

单位

0

汽车沿 x 轴的位置

-Inf

Inf

位置 (m)

1

汽车的速度

-Inf

Inf

位置 (m)

动作空间

动作是一个 ndarray,形状为 (1,),代表施加在汽车上的方向力。动作被剪裁到范围 [-1,1],并乘以 0.0015 的幂。

转换动力学:

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

速度t+1 = 速度t+1 + 力 * self.power - 0.0025 * cos(3 * 位置t)

位置t+1 = 位置t + 速度t+1

其中力是剪裁到范围 [-1,1] 的动作,功率是常数 0.0015。两端的碰撞都是非弹性的,速度在与墙壁碰撞时被设置为 0。位置被剪裁到范围 [-1.2, 0.6],速度被剪裁到范围 [-0.07, 0.07]。

奖励

在每个时间步长上都会收到 * -0.1 * 动作2 的负奖励,以惩罚采取幅度较大的动作。如果山地车到达目标,则会将 +100 的正奖励添加到该时间步长的负奖励中。

起始状态

汽车的位置被分配在 [-0.6 , -0.4] 中的均匀随机值。汽车的起始速度始终分配为 0。

剧集结束

如果发生以下任何情况,剧集将结束

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

  2. 截断:剧集的长度为 999。

参数

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

>>> import gymnasium as gym
>>> env = gym.make("MountainCarContinuous-v0", render_mode="rgb_array", goal_velocity=0.1)  # default goal_velocity=0
>>> env
<TimeLimit<OrderEnforcing<PassiveEnvChecker<Continuous_MountainCarEnv<MountainCarContinuous-v0>>>>>
>>> env.reset(seed=123, options={"low": -0.7, "high": -0.5})  # default low=-0.6, high=-0.4
(array([-0.5635296,  0.       ], dtype=float32), {})

版本历史

  • v0:初始版本发布