开始使用免费开始使用

实现 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())
编辑并运行代码