AI Player表现不佳?为什么?

时间:2016-05-24 09:29:52

标签: c++ artificial-intelligence reinforcement-learning q-learning

我正在尝试实现一个使用Q-learning来播放Ludo的代理。我用e-greedy动作选择器训练它,ε为0.1,学习率为0.6,折扣系数为0.8。

我跑了大约50K步,并没有赢得一场比赛。这令人费解,因为Q表似乎非常准确,我希望它是什么。为什么我会对随机玩家失去这么多?如果Q表没有那么大的变化,系统是否应该能够获胜?一般来说,我需要多少次迭代才能训练我的代理人?

我不确定需要多少信息,如果需要,我会用相关信息更新帖子。

可能的状态,表示为Q表中的行:

  1. 在家里
  2. 在地球上
  3. 在明星上
  4. 目标
  5. 在胜利之路上
  6. 安全地使用同色球员
  7. 自由空间
  8. 可能的操作,表示为每个州的列:

    1. 离家出走
    2. 进入目标
    3. 移至环球
    4. 转到星标
    5. 通过明星
    6. 转移到目标
    7. 使用相同颜色的标记进入安全状态
    8. 进入胜利之路
    9. 如果对手在地球上自杀
    10. 杀死对手
    11. 移动
    12. 无法移动
    13. 我首先用随机值初始化我的Q表,然后在5000次迭代后以一个看起来像这样的表结束:

      -21.9241  345.35 169.189 462.934 308.445 842.939 256.074  712.23 283.328 137.078   -32.8
      398.895   968.8 574.977 488.216 468.481 948.541  904.77 159.578 237.928 29.7712 417.599
      1314.25 756.426 333.321  589.25 616.682 583.632  481.84 457.585  683.22 329.132 227.329
      1127.58 1457.92 1365.58 1429.26 1482.69 1574.66 1434.77 1195.64 1231.01 1232.07    1068
      807.592 1070.17  544.13 1385.63 883.123 1662.97  524.08 966.205 1649.67 509.825 909.006
      225.453 1141.34 536.544 242.647 1522.26 1484.47 297.704 993.186 589.984  689.73 1340.89
      1295.03 310.461 361.776 399.866 663.152 334.657 497.956  229.94 294.462 311.505 1428.26
      

      我的直接奖励是基于在执行某个动作后每个令牌在游戏中的距离乘以常数10。主位置具有位置-1并且目标位置具有位置99.并且其间的所有位置具有0-55之间的位置。如果令牌处于目标中,则将额外奖励+100添加到目标中的每个标记的即时奖励。 。

      通常情况下,我的玩家总会将一个令牌移动到目标......就是这样。

1 个答案:

答案 0 :(得分:1)

  

为什么我对随机玩家的损失如此之大?如果Q表没有那么大的改变,系统不应该能够获胜吗?

这可能是您的Q学习实施中的错误。你说学习Q表中的值与你期望的接近。如果值正在收敛,那么我认为它不太可能是一个错误,更可能是......

您的代理人在给定州代表权的情况下做得最好。

Q表条目收敛到在给定状态下执行操作的最佳值。对于实际转化为我们称之为优秀Ludo游戏的“最佳策略”,代理学习的状态需要直接对应于棋盘游戏的状态。查看您的状态,您可以在电路板上看到映射到同一状态的多个部分排列。例如,如果您允许玩家拥有多个标记,则状态空间不代表所有标记的位置(动作空间也不是)。这可能就是为什么你观察到代理只移动一个令牌然后停止:它无法看到它有任何其他动作要采取,因为它认为它已经完成了!为了给出这是一个问题的另一个例子,请注意代理可能希望根据对手棋子的位置采取不同的动作,因此为了最佳地发挥作用,代理也需要这些信息。此信息需要包含在您的州代表中。

你可以开始在Q表中添加行,但是这里遇到的问题是:在Ludo中有太多可能的状态可行地学习(使用Q表)。大小将类似于您当前的所有状态,乘以棋盘上每个其他令牌的每个可能位置。

所以回答这个问题:

  

一般来说,我需要多少次迭代来培训我的代理人?

具有准确表示电路板所有布置的状态空间,太多迭代是可行的。您需要研究定义要学习的州的 features 。这些功能将突出显示状态之间的重要差异并丢弃其他功能,因此您可以将其视为压缩代理正在学习的状态空间。然后你也可以考虑使用函数逼近器而不是Q表来处理可能仍然是大量特征的东西。您可以在强化学习:简介中详细了解这一点,特别是在3.9附近。