計程車¶

此環境是 Toy Text 環境的一部分,其中包含有關環境的一般資訊。
動作空間 |
|
觀察空間 |
|
import |
|
計程車問題涉及在網格世界中導航至乘客,接載他們並將他們送到四個地點之一。
描述¶
在 5x5 網格世界中有四個指定的接載和下車地點(紅色、綠色、黃色和藍色)。計程車從隨機方格開始,乘客在其中一個指定地點。
目標是將計程車移動到乘客的位置,接載乘客,移動到乘客期望的目的地,然後放下乘客。一旦乘客被放下,此回合結束。
玩家因成功將乘客送到正確地點而獲得正向獎勵。因不正確嘗試接載/放下乘客以及未收到其他獎勵的每個步驟而獲得負向獎勵。
地圖
+---------+
|R: | : :G|
| : | : : |
| : : : : |
| | : | : |
|Y| : |B: |
+---------+
出自 Tom Dietterich 的 "Hierarchical Reinforcement Learning with the MAXQ Value Function Decomposition" [1]。
動作空間¶
動作形狀為 (1,)
,範圍為 {0, 5}
,表示移動計程車的方向或接載/放下乘客。
0:向南移動(向下)
1:向北移動(向上)
2:向東移動(向右)
3:向西移動(向左)
4:接載乘客
5:放下乘客
觀察空間¶
由於有 25 個計程車位置、乘客的 5 個可能位置(包括乘客在計程車中的情況)和 4 個目的地位置,因此有 500 個離散狀態。
地圖上的目的地以顏色的第一個字母表示。
乘客位置
0:紅色
1:綠色
2:黃色
3:藍色
4:在計程車中
目的地
0:紅色
1:綠色
2:黃色
3:藍色
觀察值以 int()
傳回,其編碼對應的狀態,計算方式為 ((taxi_row * 5 + taxi_col) * 5 + passenger_location) * 4 + destination
請注意,在一個回合中實際可以達到 400 個狀態。遺失的狀態對應於乘客與其目的地位於同一位置的情況,因為這通常表示回合結束。在成功回合後,當乘客和計程車都位於目的地時,可以觀察到另外四個狀態。這總共給出 404 個可到達的離散狀態。
起始狀態¶
初始狀態是從可能的狀態中均勻採樣的,其中乘客既不在目的地也不在計程車內。有 300 個可能的初始狀態:25 個計程車位置、4 個乘客位置(不包括在計程車內)和 3 個目的地(不包括乘客目前的位置)。
獎勵¶
每步 -1,除非觸發其他獎勵。
+20 交付乘客。
-10 非法執行 “接載” 和 “放下” 動作。
導致空操作的動作(例如撞牆)將產生時間步懲罰。可以透過採樣 info
中傳回的 action_mask
來避免空操作。
回合結束¶
如果發生以下情況,回合結束
終止:1. 計程車放下乘客。
截斷(當使用 time_limit wrapper 時):1. 回合長度為 200。
資訊¶
step()
和 reset()
傳回具有以下鍵的 dict
p - 狀態的轉換機率。
action_mask - 動作是否會導致轉換到新狀態。
由於計程車不是隨機的,因此轉換機率始終為 1.0。實作符合 Dietterich 論文(‘The fickle taxi task’)的轉換機率是一個待辦事項。
在某些情況下,採取動作對回合的狀態沒有影響。在 v0.25.0 中,info["action_mask"]
包含一個 np.ndarray,用於指定動作是否會改變狀態的每個動作。
若要採樣修改動作,請使用 action = env.action_space.sample(info["action_mask"])
或使用基於 Q 值的演算法 action = np.argmax(q_values[obs, np.where(info["action_mask"] == 1)[0]])
。
引數¶
import gymnasium as gym
gym.make('Taxi-v3')
參考文獻¶
[1] T. G. Dietterich, “Hierarchical Reinforcement Learning with the MAXQ Value Function Decomposition,” Journal of Artificial Intelligence Research, vol. 13, pp. 227–303, Nov. 2000, doi: 10.1613/jair.639.
版本歷史¶
v3:地圖修正 + 更清晰的領域描述,v0.25.0 動作遮罩新增至 reset 和 step 資訊
v2:不允許計程車起始位置 = 目標位置,更新 rollout 中的計程車觀察值,更新計程車獎勵閾值。
v1:從 locs 中移除 (3,2),新增 passidx<4 檢查
v0:初始版本發佈