5

我正在尝试了解 MCTS 算法的工作原理以及如何在纸牌游戏中实现它以改进 AI 引擎。

我已经阅读了 mcts.ai/ 网站和许多关于它的论文,其中一篇显示了一些关于在 AI 中应用 Monte Carlo Search 和 UCB 成功进行魔术纸牌游戏的结果,这或多或少是我需要做的,但是我在尝试理解某些要点以及如何应用它时遇到了一些麻烦,因此请解决我需要的问题。我在数学方面也没有那么丰富的经验,所以当论文用复杂的公式解释所有这些东西时,我会迷失方向。

到目前为止,这是我想出的:

  1. 给定一个游戏状态(用户参与游戏),确定哪些是可以进行的所有可能的合法游戏,然后我将创建一个节点列表(一个代表每个游戏)作为 MCTSTree 根节点中的一个属性,每个节点的结果(分值?)

  2. 使用随机玩家模拟每个合法游戏的完整(直到结束)游戏,并在每个节点中记录结果,无论玩家是赢还是输,以便获得完整的画面。

这里是“我认为”蒙特卡洛 + UCB 应该应用的地方:

  1. 使用 UCB 递归地选择更有希望的游戏(节点),如果是它的叶子,则使用其 gameState 中的所有可能游戏扩展该节点。

  2. 从选定的节点模拟n次播放,直到达到一定的时间。

    • 在这个阶段我有一些疑问......假设我尝试随机播放给定可能的播放列表......为了继续模拟,我与第一个结果有什么关系?那我应该让树长大吗?
  3. 如何反向传播结果?

然后,

  • 请记住,由于这是一个复杂的纸牌游戏,而且我有很多可能的动作……它的性能是否足够好,可以在任何节点中拥有这么多孩子?

  • 如果每个模拟都基于一个游戏状态,并且每次玩家应用动作时游戏都会改变状态,那么我怎么知道这棵树是否真的有用?

我真的很感激这方面的任何帮助。

非常感谢!

4

1 回答 1

6

MCTS 如下:

在此处输入图像描述

我对它的描述与图像所暗示的有所不同,这可能更适合实施。

  1. 从你的根节点(游戏的当前状态)下降,在每一步都使用UCB,直到你决定一个未实例化的节点l。(选择)
  2. 添加l到您的树中。(扩张)
  3. l,玩随机游戏。(模拟)
  4. 更新路径上的所有节点l使用播放结果更新从返回到根节点
  5. 重复直到时间用完。

如果您的分支因子很大,正如您所提到的,您可能需要考虑其他策略来选择继任者,同时降低树,例如 RAVE。

于 2012-09-21T08:36:44.530 回答