0

我正在学习关于 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
    • 初始化状态
    • 根据政策采取第一行动
    • WHILE 不满足中断条件
      • 动作后获取新状态(请注意,有些状态已超出代理控制)
      • 如果对手得分:reward = -1,如果代理成功击球: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 次不成功的反弹):中断,如果中断条件通过(10 次成功的反弹):保存策略并中断

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

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

4

0 回答 0