首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AI玩家表现不好吗?为什么?

AI玩家表现不好吗?为什么?
EN

Stack Overflow用户
提问于 2016-05-24 09:29:51
回答 1查看 262关注 0票数 0

我正在尝试实现一个使用Q学习来玩卢多的代理。我用一个电子贪婪的动作选择器来训练它,它的感应器为0.1,学习率为0.6,折扣率为0.8。

我跑了大约50K步的比赛,一场比赛都没有赢过。这是令人费解的,因为Q表似乎与我想要的是相当准确的。为什么我会输给随机玩家呢?如果q表没有发生那么大的变化,系统不应该赢吗?一般来说,我需要训练我的代理人多少次迭代?

我不知道需要多少信息,如果需要的话,我会用相关信息更新帖子。

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

  1. 在家里
  2. 在地球上
  3. 在星星上
  4. 在目标中
  5. 在胜利者之路
  6. 在安全的情况下,同色播放器
  7. 关于自由空间

可能的操作,表示为每个状态的列:

  1. 从家里搬出去
  2. 入球
  3. 搬到地球去
  4. 转到明星
  5. 通过星移动到球门
  6. 用相同颜色的标记安全地进入安全区域
  7. 进入赢家之路
  8. 如果对手在地球上自杀
  9. 杀死对手
  10. 只要动一下
  11. 不可能移动

我首先用随机值初始化我的q表,然后在5000次迭代后以如下所示的表结尾:

代码语言:javascript
复制
-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吗?

通常情况下,我的球员总是向球门移动.仅此而已。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-26 03:26:40

为什么我要输给随机玩家这么多?如果Q表没有那么大的变化,系统不应该赢吗?

这可能是你的Q学习实现中的一个错误。你说学识Q表中的值与你所期望的非常接近。如果这些值正在收敛,那么我认为它不太可能是一个bug,而更有可能的是.

您的代理正在尽最大努力给出状态表示.

Q表项收敛到在给定状态下采取行动的最优值.为了使这种“最优策略”真正转化为我们所说的“良好的Ludo游戏”,代理所学习的状态需要直接对应于棋盘游戏的状态。看看你的状态,你可以看到板上的多个碎片排列,它们映射到相同的状态。例如,如果允许参与者拥有多个令牌,则状态空间并不表示所有令牌的位置(动作空间也不代表)。这可能是为什么您观察到代理只移动一个令牌,然后停止:它看不到它有任何其他操作,因为它相信它已经完成了!要给出这是一个问题的另一个例子,请注意,代理可能想采取不同的行动取决于对手的棋子位置,因此,为了发挥最佳,代理也需要这些信息。此信息需要包含在状态表示中。

您可以开始将行添加到q表中,但是您会遇到以下问题:中有太多可能的状态,无法用表格(使用Q表)进行实际学习。的大小与当前的状态类似,乘以板上其他令牌的每一个可能的位置。

因此,要回答这个问题:

一般来说,我需要多少次迭代来训练我的经纪人?

由于状态空间能准确地表示董事会的所有安排,迭代次数过多而不可行。您需要研究如何定义状态的https://en.wikipedia.org/wiki/Feature_(machine_learning)来学习。这些特性将突出说明状态之间的重要差异,并丢弃其他状态,因此您可以将其视为压缩代理正在学习的状态空间。然后,您还可以考虑使用函数逼近器而不是Q表来处理可能仍然存在的大量特性。您可以在“强化学习:介绍”中更多地了解这一点,尤其是关于3.9的介绍。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37409528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档