登山車連續環境

../../../_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 的目標是策略性地加速汽車,以到達右側山頂上的目標狀態。在 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 軸的位置

-無限大

無限大

位置 (m)

1

汽車的速度

-無限大

無限大

位置 (m)

動作空間

動作是一個形狀為 (1,)ndarray,表示施加於汽車的方向力。動作被裁剪在 [-1,1] 的範圍內,並乘以 0.0015 的冪。

轉移動力學:

給定一個動作,登山車遵循以下轉移動力學

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

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

其中力是裁剪到 [-1,1] 範圍內的動作,而 power 是一個常數 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:初始版本發布