我写了一个小井字游戏。到目前为止,计算机使用随机动作与自己对战。
现在,我想通过编写一个代理来应用强化学习,该代理将根据其对棋盘当前状态的知识进行探索或利用。
我不明白的部分是: 代理使用什么来训练自己以适应当前状态?假设 RNG 机器人 (o) 玩家会这样做:
[..][..][..]
[..][x][o]
[..][..][..]
现在智能体必须决定最好的举动应该是什么。训练有素的人会选择第一、第三、第七或第九。它是否在数据库中查找导致他获胜的类似状态?因为如果是这样,我想我需要将每一个动作保存到数据库中,直到最终它的最终状态(赢/输/平局状态),这对于单次游戏来说会是相当多的数据?
如果我的想法是错误的,我想知道如何正确地做到这一点。
学习
1)观察当前板状态s;
2)根据所有可用的下一步行动 V(s') 的分布进行下一步行动。严格来说,选择通常基于 V(s') 的玻尔兹曼分布,但可以简化为最大值移动(贪婪),或者使用某种概率 epsilon,如您所使用的随机移动;
3)按序列记录s';
4)如果游戏结束,则更新序列中访问过的状态的值并重新开始;否则,转1)。
玩游戏
1)观察当前板状态s;
2) 根据下一步所有可用的 V(s') 的分布进行下一步;
3)直到游戏结束并重新开始;否则,转到1)。
关于你的问题,是的,游戏阶段的查找表是在学习阶段建立的。每次状态都是从所有 V(s) 中选择,最大可能数量为 3^9=19683。这是由 Python 编写的示例代码,它在训练中运行了 10000 个游戏。