我不明白如何更新井字游戏的 Q 值。我阅读了所有相关内容,但我无法想象如何做到这一点。我读到Q值是在游戏结束时更新的,但我不明白是否每个动作都有Q值?
2 回答
Q
每个状态-动作对都有一个值。Q
在执行每个操作后更新一个值。a1
更准确地说,如果从 state应用 actions1
让你进入 states2
并给你带来一些奖励r
,那么你更新Q(s1, a1)
如下:
Q(s1, a1) = Q(s1, a1) + learning_rate * (r + discount_factor * max Q(s2, _) - Q(s1, a1))
在许多游戏中,比如井字游戏,直到游戏结束你才能获得奖励,这就是为什么你必须通过几集来运行算法的原因。这就是有关最终状态效用的信息如何传播到其他状态的方式。
标准 Q 学习算法的问题在于,将值从最后一步传播到第一步需要太长时间,因为你只知道游戏结束时的结果。
因此应该修改 Q 学习算法。以下文件详细介绍了可能的修改:
- 游戏结束后给予非负奖励(平局除外),然后不会在每个动作步骤执行 Q 更新(不会改变任何内容),而仅在游戏结束后执行
- Q 更新是通过将其新值从最后一步向后传播到第一步来执行的
- 由于两人游戏的轮换性质,另一个更新公式也考虑了对手的观点
抽象的:
本文报告了我们应用 Q Learning 算法学习玩井字游戏的实验。原始算法通过仅在游戏结束时更新 Q 值进行修改,将更新过程从最终移动向后传播到第一个移动,并结合新的更新规则。我们使用全板和部分板表示来评估代理性能。在此评估中,代理与人类玩家玩井字游戏。评估结果表明,具有部分棋盘表示的改进 Q 学习算法的性能与人类玩家的性能相当。
学习玩井字游戏 (2009),作者:Dwi H. Widyantoro 和 Yus G. Vembrina
(不幸的是,它位于付费墙后面。您可以访问 IEEE 档案,也可以要求作者在 researchgate 上提供副本:https ://www.researchgate.net/publication/251899151_Learning_to_play_Tic-tac-toe )