蒙特卡洛树搜索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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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