開始使用免費開始

實作 Every-Visit Monte Carlo

Every-Visit Monte Carlo 與 First-Visit 的差異在於:它會在每次遇到相同的「狀態-動作」配對時都進行更新,而不是只在首次出現時更新。這種作法能充分利用每個回合中的所有資訊,對策略進行更完整的評估;然而,由於納入了回合中任意時刻的所有樣本,估計的數值可能具有較高變異。你的任務是完成 every_visit_mc() 函式,於 num_episodes 個回合中估計動作價值函式 Q。

以「狀態-動作」配對為鍵的字典 returns_sumreturns_count 已為你初始化並載入,同時也提供了 generate_episode() 函式。

本練習屬於課程

使用 Python 的 Gymnasium 進行強化學習

檢視課程

練習說明

  • 使用 generate_episode() 函式產生一個回合。
  • 在該回合內,為每個「狀態-動作」配對更新報酬總和與其出現次數。
  • 計算估計出的 Q 值。

動手互動練習

試著完成這個範例程式碼,體驗一下這個練習。

Q = np.zeros((num_states, num_actions))
for i in range(100):
  # Generate an episode
  episode = ____
  # Update the returns and their counts
  for j, (state, action, reward) in ____:
    returns_sum[(state,  action)] += sum(____)
    returns_count[(state,  action)] += ____

# Update the Q-values for visited state-action pairs 
nonzero_counts = ____
Q[nonzero_counts] = ____
    
render_policy(get_policy())
編輯並執行程式碼