蒙特卡洛树搜索UCT实现

你能解释一下如何构建树吗?

我已经相当理解节点是如何选择的,但更详细的解释将有助于我实现这个算法。我已经有一个表示游戏状态的棋盘,但我不知道(不理解)如何生成树。

有人能指给我一个带有详细注释的算法实现吗(我需要用于AI)?或者更好的解释/示例?

我在网上没找到很多资源,这个算法相当新…


回答:

生成树的最佳方法是一系列随机模拟。诀窍在于能够在探索和利用之间取得平衡(这就是UCT的用武之地)。这里有一些很好的代码样本和大量的研究论文参考:https://web.archive.org/web/20160308043415/http://mcts.ai:80/index.html

当我实现这个算法时,我使用随机模拟直到达到终点或终止状态。我有一个静态评估函数来计算此时的收益,然后将此点的得分传播回树上。每个玩家或“团队”都假设对方团队会为自己选择最佳行动,同时为对手选择最差的行动。

我还建议查看Chaslot的论文和他的博士论文,以及引用他工作的一些研究(基本上是自那以后的所有MCTS工作)。


例如:玩家1的第一步可以模拟未来10步,交替进行玩家1和玩家2的行动。每次你必须假设对方玩家会尽量最小化你的得分,同时最大化他们自己的得分。这是一个基于此的整个领域,称为博弈论。一旦你模拟到10场比赛的结束,你会从起点再次迭代(因为只模拟一组决策没有意义)。树的每个分支都必须被评分,其中得分被传播到树上,得分代表模拟玩家可能获得的最佳收益,假设另一玩家也在为自己选择最佳行动。

MCTS包括四个战略步骤,只要有时间就重复进行。这些步骤如下。

  1. 在选择步骤中,从根节点遍历树,直到我们到达一个节点E,在那里我们选择一个尚未添加到树中的位置。

  2. 接下来,在模拟步骤中,通过自我对弈进行移动,直到游戏结束。该“模拟”游戏的结果R在黑方(LOA中的第一玩家)获胜时为+1,平局时为0,白方获胜时为-1。

  3. 随后,在扩展步骤中,将E的子节点添加到树中。

  4. 最后,在回溯步骤中,R沿着从E到根节点的路径传播。当时间用完时,程序执行的移动是根节点中值最高的子节点。(这个例子取自这篇论文 – PDF

www.ru.is/faculty/yngvi/pdf/WinandsBS08.pdf

这里有一些实现:

使用一些MCTS实现的库和游戏列表http://senseis.xmp.net/?MonteCarloTreeSearch

以及一个名为Fuego的独立于游戏的开源UCT MCTS库http://fuego.sourceforge.net/fuego-doc-1.1/smartgame-doc/group__sguctgroup.html

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注