注意

此示例與 Gymnasium 1.2.0 版相容。

處理時間限制

本教程解釋瞭如何正確處理帶有終止截斷訊號的時間限制。

env.step 接收到的 done 訊號(在 OpenAI Gym 之前的版本 < 0.26 中)表示一個回合是否結束。然而,此訊號並未區分回合是由於終止還是截斷而結束的。

終止

終止是指回合在達到作為環境定義一部分的終止狀態後結束。例如:任務成功、任務失敗、機器人跌倒等。值得注意的是,這也包括在有限時域環境中因環境固有的時間限制而結束的回合。請注意,為了保持馬爾可夫性質,在有限時域環境中,智慧體的觀測中必須包含剩餘時間的表示。(參考文獻)

截斷

截斷是指回合在外部定義條件(超出馬爾可夫決策過程範圍)後結束。這可能是一個時間限制,機器人超出邊界等。

無限時域環境是需要此功能的一個明顯例子。我們不能永遠等待回合完成,因此我們設定一個實際的時間限制,在此之後我們強制中止回合。在這種情況下,最後一個狀態不是終止狀態,因為它根據定義RL問題的馬爾可夫決策過程,具有非零的轉移到另一個狀態的機率。這與有限時域環境中的時間限制也不同,因為在這種情況下,智慧體不知道這個時間限制。

在學習程式碼中的重要性

自舉(使用一個或多個變數的估計值來更新同一變數的估計)是強化學習的一個關鍵方面。價值函式將告訴你,如果你遵循給定策略,從特定狀態將獲得多少折扣獎勵。當一個回合在任何給定點停止時,透過檢視最終狀態的價值,智慧體能夠估計如果回合繼續下去,可以獲得多少折扣獎勵。這是處理截斷的一個例子。

更正式地說,強化學習中自舉的一個常見例子是更新 Q-價值函式的估計,

\[Q_{target}(o_t, a_t) = r_t + \gamma . \max_a(Q(o_{t+1}, a_{t+1}))\]

在經典強化學習中,新的 Q 估計是之前的 Q 估計和 Q_target 的加權平均值,而在深度 Q-學習中,Q_target 和之前的 Q 估計之間的誤差被最小化。

然而,在終止狀態下,不進行自舉,

\[Q_{target}(o_t, a_t) = r_t\]

這就是終止和截斷之間區別變得重要的地方。當一個回合因終止而結束時,我們不進行自舉;當它因截斷而結束時,我們進行自舉。

在使用 Gymnasium 環境時,done 訊號(v0.26 之前的預設值)經常用於決定是否進行自舉。然而,這是不正確的,因為它沒有區分終止和截斷。

下面展示了一個簡單的價值函式示例。這是一個說明性示例,不屬於任何特定演算法的一部分。

# INCORRECT
vf_target = rew + gamma * (1 - done) * vf_next_state

這在因截斷導致回合結束的情況下是不正確的,此時需要進行自舉,但實際上並未發生。

解決方案

從 v0.26 版本開始,Gymnasium 的 env.step API 明確返回終止和截斷資訊。在之前的版本中,截斷資訊透過 info 鍵 TimeLimit.truncated 提供。現在處理終止和截斷的正確方法是,

# terminated = done and 'TimeLimit.truncated' not in info
# This was needed in previous versions.

vf_target = rew + gamma * (1 - terminated) * vf_next_state