强化学习SARSA(λ)算法不学习任务

时间:2021-03-09 11:25:52

标签: python python-3.x reinforcement-learning hyperparameters sarsa

我正在学习有关 RL 的课程,我必须在该课程中完成一项任务,其中涉及使用自己设计的环境和代理解决 RL 问题。我决定创建一个代理来训练自己玩老式 Atari 游戏 Pong。我试图弄清楚我是否犯了基本的理论错误,或者我只需要调整我的超参数(步长、奖励衰减率、资格跟踪衰减率、epsilon、epsilon 衰减率)

状态是:

  • 球的 x 位置(36 个选项)
  • 球的 y 位置(32 个选项)
  • 球的 x 速度(2 个选项,左右)
  • 球的 y 速度(4 个选项,上下,2 种不同速度)
  • 桨/代理的 y 位置(32 个选项)

动作是:

  • 向上移动桨/代理
  • 不要移动桨/代理
  • 向下移动桨/代理

这使状态-动作空间成为一个 6D (36x32x2x4x32x3 = 884,736) 数组,我想使用以下 SARSA(λ) 伪算法对其进行训练:

  • 设置超参数(alpha = 0.001,gamma = 0.99,lambda = 0.99,epsilon_start = 0.9999,epsilon_end = 0.01)<-- 我认为这是出错的地方
  • 初始化 Q 零矩阵
  • 初始化资格跟踪矩阵为零
  • 循环播放完整剧集
    • 将成功反弹和不成功反弹的计数器设置为零
    • 获取当前的 epsilon
    • 初始化状态
    • 根据政策采取第一行动
    • 虽然不满足中断条件
      • 动作后获取新状态(请注意,有些状态已超出代理控制范围)
      • 如果对手得分:reward = -1,如果agent成功击球:reward = +1(也可以设置为0)
      • 根据政策采取新的行动
      • 获得 delta = 奖励 + gamma x Q(newstate, newaction) – Q(state, action)
      • 更新资格跟踪:ET(state, action) = 1(替换)
      • 更新所有状态动作的 Q:Q = Q + alpha x delta x ET
      • 更新所有状态动作的 ET:ET = ET x gamma x lambda
      • 更新政策(epsilon-greedy)
      • 用 state 和 action 替换 newstate 和 newaction
      • 如果中断条件失败(1 次不成功反弹):中断,如果中断条件 PASS(10 次成功反弹):保存策略并中断

您对超参数有什么建议吗?伪算法看起来还可以,或者您对此也有建议吗?我真的认为这与两者之一有关,因为我无数次检查了我的环境。

如果有人能在这里给我一些建议,我会得到很多帮助!提前致谢!

0 个答案:

没有答案