Algorithm 基于UCB的蒙特卡罗方法在复杂纸牌游戏中的应用

Algorithm 基于UCB的蒙特卡罗方法在复杂纸牌游戏中的应用,algorithm,artificial-intelligence,upperbound,Algorithm,Artificial Intelligence,Upperbound,我试图了解MCTS算法是如何工作的,以及我将如何在纸牌游戏中实现它以改进AI引擎 我已经阅读了mcts.ai/网站和许多关于它的文章,其中一篇文章显示了在ai中成功地将蒙特卡罗搜索与UCB应用于魔术纸牌游戏的一些结果,这或多或少是我需要做的,但是我在试图理解一些要点以及如何应用它时遇到了一些困难,因此解决了我需要的问题。我在数学方面也不是很有经验,所以当论文用复杂的公式解释所有这些东西时,我就迷路了 这就是我到目前为止的想法: 给定游戏中的一个游戏状态用户手,确定可以进行的所有可能的合法游戏,然

我试图了解MCTS算法是如何工作的,以及我将如何在纸牌游戏中实现它以改进AI引擎

我已经阅读了mcts.ai/网站和许多关于它的文章,其中一篇文章显示了在ai中成功地将蒙特卡罗搜索与UCB应用于魔术纸牌游戏的一些结果,这或多或少是我需要做的,但是我在试图理解一些要点以及如何应用它时遇到了一些困难,因此解决了我需要的问题。我在数学方面也不是很有经验,所以当论文用复杂的公式解释所有这些东西时,我就迷路了

这就是我到目前为止的想法:

给定游戏中的一个游戏状态用户手,确定可以进行的所有可能的合法游戏,然后我将创建一个节点列表,其中一个节点将每个游戏表示为MCTSTree根节点中的一个属性,每个节点的结果分数值是多少

用随机玩家模拟一个完整的游戏,直到游戏结束,并在每个节点上记录结果,无论玩家是赢了还是输了,以获得完整的画面

以下是我认为蒙特卡罗+UCB应该应用的地方:

使用UCB递归地选择更有前途的游戏节点,如果是它的叶子,则使用其游戏状态中的所有可能游戏扩展该节点

从选定节点模拟n个播放,直到达到一定的时间

在这个阶段我有一些疑问。。。假设我尝试一个随机播放,给出一个可能的播放列表。。。为了继续模拟,我必须对第一个结果做什么?那我应该让树长起来吗? 如何反向传播结果

那么

考虑到这是一个复杂的纸牌游戏,我有很多可能的动作。。。它的性能是否足够好,以至于在任何节点中都有这么多子节点

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

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


多谢各位

MCTS仅包括以下内容:

我对它的描述与图中所示略有不同,这可能更适合于实现

从你的根节点下降到游戏的当前状态,在每一步使用UCB,直到你决定一个未实例化的节点l。选择 把我加到你的树上。扩大 从l开始,玩一个随机游戏。模拟 使用播放结果更新从l返回到根节点的路径上的所有节点。 重复,直到时间用完。

如果你的分支因子很大,正如你所提到的,你可能需要考虑其他策略来选择继承者,同时降低树,比如Rave. 关于第二点:从leaf l的游戏状态中,我获得了所有可能的游戏,并为每个游戏随机进行游戏,对吗?这就是定义分支因子有多大的原因。如果我错了,请纠正我。谢谢@马格尼奥斯:不,你只玩一个随机游戏,它正好经过l。这个随机游戏的第一步被添加为新的一页,我很抱歉,忘了这一部分。然后你在1点再开始。分支因子是每个状态下可能移动的次数,通常情况下会有所不同,所以你可以考虑平均分支因子。好的,我想我现在知道了。。正如你所描述的过程,你先执行模拟,然后执行扩展,对吗?@magnoz好吧,再看一遍,我再次改变了描述的顺序,使它更精确。在模拟之前,最好考虑一下发生的扩展。关键是,然后通过UCT选择新的子级,而不是通过随机播放,当子级实例化了同级时,随机播放会产生不同。所以基本上我改变的是:下降并不是选择一个叶子,而是一个模拟运行的未实例化的节点形式。顺便说一句,如果你只有一个孩子,你只模拟一个游戏,对吗?如果你有更多的孩子,你可以在两个平行的线程中模拟他们,还有一件事,你只需要在模拟的第一个动作中展开树?或者,您是否也为每种可能性添加一个孩子?如一篇论文所述:扩展:根据可用操作,添加一个或多个子节点以扩展树。2012年3月的这篇调查论文展示了核心MCTS框架,然后讨论了许多变体:包括计算UCB的详细信息。