实现 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())