蒙特卡洛树搜索(MCTS)

许多人会混淆蒙特卡洛树搜索和蒙特卡洛方法。这两者有本质区别。用做过渲染器的朋友会理解的话来说:蒙特卡洛方法有偏差(Bias),而MCTS没有偏差(Bias)。
而蒙特卡洛树搜索在一段时间模拟后,b1和b2的胜率就会向48%和45%(或者其他概率)收敛,从而给出正确的答案


下图是一个例子

这里写图片描述

上图中每个节点代表一个局面。而 A/B 代表这个节点被访问 B 次,黑棋胜利了 A 次。例如一开始的根节点是 12/21,代表总共模拟了 21 次,黑棋胜利了 12 次。
我们将不断重复一个过程(很多万次):

1,这个过程的第一步叫选择(Selection)。从根节点往下走,每次都选一个“最值得看的子节点”(如果轮到黑棋走,就选对于黑棋有利的;如果轮到白棋走,就选对于黑棋最不利的。但不能太贪心,不能每次都只选择“最有利的/最不利的”,因为这会意味着搜索树的广度不够,容易忽略实际更好的选择,我们使用UCB选择公式,调节参数C,兼顾广度和深度),直到来到一个“存在未扩展的子节点”的节点,如图中的 3/3 节点。什么叫做“存在未扩展的子节点”,其实就是指这个局面存在未走过的后续着法。
(注意,如果是对方棋子走,需要把胜率估计倒过来,上图有错误)

2,第二步叫扩展(Expansion),我们给这个节点加上一个 0/0 子节点,对应之前所说的“未扩展的子节点”,就是还没有试过的一个着法。

3,第三步是模拟(Simluation)。从上面这个没有试过的着法开始,用快速走子策略(Rollout policy)走到底,得到一个胜负结果。按照普遍的观点,快速走子策略适合选择一个棋力很弱但走子很快的策略。因为如果这个策略走得慢(比如用 AlphaGo 的策略网络走棋),虽然棋力会更强,结果会更准确,但由于耗时多了,在单位时间内的模拟次数就少了,所以不一定会棋力更强,有可能会更弱。这也是为什么我们一般只模拟一次,因为如果模拟多次,虽然更准确,但更慢。

4,第四步是回溯(Backpropagation)。把模拟的结果加到它的所有父节点上。例如第三步模拟的结果是 0/1(代表黑棋失败),那么就把这个节点的所有父结点加0/1。


注意:最终应该选择访问量最大的节点,而不是胜率最高的节点,简单地说是因为访问量最大的节点的结果更可靠

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于蒙特卡洛树搜索 (Monte Carlo Tree Search, MCTS) 算法是一种用于决策问题的启发式搜索算法。MCTS 在不完全信息和高复杂度的问题中具有很好的效果。下面将介绍 MCTS 算法的 Java 版实现。 MCTS 算法的主要流程如下: 1. 创建一个根节点,表示当前的游戏状态。 2. 重复以下步骤,直到时间或迭代次数达到上限: a. 选择最有价值的子节点。从根节点开始,递归地选择子节点,直到找到一个未完全探索的节点。 b. 扩展选择的节点。根据游戏规则,生成该节点所有的合法子节点,并将其加入到树中。 c. 随机模拟选择节点的子节点。从扩展的子节点中随机选择一个,并进行模拟。直到游戏结束,得到一个模拟结果。 d. 更新选择节点和其祖先节点的价值。根据模拟结果,更新选择节点及其祖先节点的胜利次数和访问次数。 3. 选择最优的子节点作为下一步的决策。 在 MCTS 的实现中,主要涉及以下几个关键的类和方法: 1. Node 类:表示搜索树的节点,包含节点的游戏状态、访问次数和胜利次数等信息。 2. Selection 方法:通过选择最有价值的子节点来进行节点的选择。 3. Expansion 方法:扩展选中的节点,生成其所有合法的子节点。 4. Simulation 方法:随机模拟选中节点的子节点进行游戏,得到模拟结果。 5. Backpropagation 方法:根据模拟结果,更新节点和其祖先节点的访问次数和胜利次数。 6. BestChild 方法:选择最优的子节点作为下一步的决策。 通过以上关键步骤和方法的结合,可以实现 MCTS 算法的 Java 版本。使用该版本,可以在不完全信息和高复杂度问题上进行决策。例如,在棋类游戏中,MCTS 算法可以从当前局面搜索出最有希望的下一步,并进行决策。 总结而言,基于蒙特卡洛树搜索 (MCTS) 算法的 Java 版实现,通过节点的选择、扩展、模拟和回溯等关键步骤,可以用于解决复杂的决策问题。这种算法在游戏、人工智能等领域具有广泛的应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值