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