我正在尝试了解 MCTS 算法的工作原理以及如何在纸牌游戏中实现它以改进 AI 引擎。
我已经阅读了 mcts.ai/ 网站和许多关于它的论文,其中一篇显示了一些关于在 AI 中应用 Monte Carlo Search 和 UCB 成功进行魔术纸牌游戏的结果,这或多或少是我需要做的,但是我在尝试理解某些要点以及如何应用它时遇到了一些麻烦,因此请解决我需要的问题。我在数学方面也没有那么丰富的经验,所以当论文用复杂的公式解释所有这些东西时,我会迷失方向。
到目前为止,这是我想出的:
给定一个游戏状态(用户参与游戏),确定哪些是可以进行的所有可能的合法游戏,然后我将创建一个节点列表(一个代表每个游戏)作为 MCTSTree 根节点中的一个属性,每个节点的结果(分值?)
使用随机玩家模拟每个合法游戏的完整(直到结束)游戏,并在每个节点中记录结果,无论玩家是赢还是输,以便获得完整的画面。
这里是“我认为”蒙特卡洛 + UCB 应该应用的地方:
使用 UCB 递归地选择更有希望的游戏(节点),如果是它的叶子,则使用其 gameState 中的所有可能游戏扩展该节点。
从选定的节点模拟n次播放,直到达到一定的时间。
- 在这个阶段我有一些疑问......假设我尝试随机播放给定可能的播放列表......为了继续模拟,我与第一个结果有什么关系?那我应该让树长大吗?
如何反向传播结果?
然后,
请记住,由于这是一个复杂的纸牌游戏,而且我有很多可能的动作……它的性能是否足够好,可以在任何节点中拥有这么多孩子?
如果每个模拟都基于一个游戏状态,并且每次玩家应用动作时游戏都会改变状态,那么我怎么知道这棵树是否真的有用?
我真的很感激这方面的任何帮助。
非常感谢!