Introduction to Monte Carlo Tree Search (蒙特卡罗搜索树简介)
Introduction to Monte Carlo Tree Search (蒙特卡罗搜索树简介)
部分翻译自“Monte Carlo Tree Search and Its Applications”。
论文链接:http://digitalcommons.morris.umn.edu/cgi/viewcontent.cgi?article=1028&context=horizons
MCTS 结合了传统 MC 随机采样的方法 和 树搜索的方法。MC 方法利用重复的随机采样来得到结果。在 MCTS 中,随机采样的过程是在随机模拟的形式中,用来拓展游戏树。该游戏树紧接着别用来决定下一个 move。MCTS 随着游戏树迭代的生长。每一次迭代,game tree 就 traversed 和 expanded。一段时间之后,game tree 就会收敛。这意味着在每次迭代中都 traversed 同一个路径。这表明 MCTS 已经找到了一个 move 可以得到从当前游戏状态下的模拟赢的最多次数。因为这个过程是随机的,所以 MCTS 是一种概率的方法。MCTS 并不能永远都找到最优的 move,但是拥有合理的推理过程,能够使得选择的 move 有很大的机会赢!这就比较牛逼了!
1. The Tree Structure

MCTS 编码了游戏的状态 和 其潜在的moves 到这个树当中。树种每一个节点都表示一个潜在的游戏状态,根节点表示当前状态。每一个边表示合法move,使得游戏状态从一个转移到另一个。换句话说,它代表了从父节点到子节点的转移。任何一个节点都有许多孩子节点作为其合法的 move。
例如,游戏 TicTacToe 开始的时候,根节点有9个子节点,每一个表示一个可能的移动。后面的子节点也有比上一个少一个选择的子节点,由于上一次的选择已经无法作为当前的选项了。
图1 表示一个树的顶端, AI 做出首次移动,所以 根节点 是 第一个游戏板,每一个子节点代表从当前游戏状态所可以选择的潜在的移动。该图是一个简化的版本,此处应该有 9个子节点,而这里只是画出了 3 个。一旦 MCTS 决定选择哪个动作,选中的子节点就变成了新的根节点。扔掉其兄弟姐妹节点。
随着游戏状态,每一个节点有一个联系的值,执行那个子树的模拟。每一个节点只执行一次模拟。所以,三个子树 就从3次模拟中得到其值。通过选择带有最大预测值的节点, MCTS 算法选择最优可能赢的路径,这意味着 MCTS 算法最大化其能够选择的赢的move 个数。这就是 MCTS 能够有效的主要原因。
2. The Four Steps of MCTS
蒙特卡罗搜索树可以分为 4 个步骤:selection expansion simulation backpropagation.
迭代的执行这4个步骤,直到 AI 做出决定。下图给出了一个示例:

第一个数字:代表在这个子树上赢的次数;
第二个数字:代表在这个子树上执行模拟的次数。
这个比值 就提供给我们这个节点的 预测值(estimated value)。
Selection:
在这个过程中, MCTS 算法利用 树的策略遍历整个树。一个树策略利用一个 evaluation function 用预测的最大值来优化节点。一旦遍历到一个叶子节点,则需要转成 expansion step。
Expansion:
添加一个 “?”的叶子节点。这是每次迭代中唯一添加的节点。
Simulation:又称 playout 或者 rollout
选择操作,直到达到结束状态,或者满足设定的阈值,就停止该操作。然后基于模拟的结果,建立新添加节点的值。
Backpropagation:
既然已经决定了新添加节点的值,那么剩下的树就要进行更新。从新的节点开始,算法反向遍历回到根节点。在遍历的过程中,存在每一个节点上的模拟的次数都会增加,如果新节点的模拟导致了赢的局面,那么赢的次数也要增加。图2中仅仅 值为 0/1 的节点不给更新,由于他们不是新添加节点的祖先。这些操作步骤确保每个节点的值准确的反应了在子树中执行的模拟情况。
3. Upper Confidence Bound
应用在树上的 upper confidence bound 被用在 MCTS 上(UCT),在遍历树的过程中的选择步骤 作为树策略。 UCT 平衡了 exploration 和 exploitation 的思想。
exploration approach 促使去探索尚未发现的树的其他领域。这会将倾向于探索树的广度,而不是深度。
exploitation approach 倾向于选择拥有最大预测值的路径。这种是属于贪心算法,趋于探索树的深度。
UCT 通过给定相对未探索的节点一个 exploration bonus,来平衡 exploration 和 exploitation:

当遍历树的时候,孩子节点从这个等式返回的最大值将被选中。N 代表在那个节点和其子孙节点上进行模拟的总次数。W 代表多少次这样的模拟才会得到赢的局面。C 代表一个经验得到的 exploration constant。UCT 的第一部分考虑到 该节点的估计值 占所有模拟的比例。这是 exploitation 部分。第二个部分是 exploration bonus,这个和在父节点和子孙节点执行模拟次数的总数相比。这意味着,该节点模拟次数越小,等式中这部分占得比例越大。
另外,可以参考如下博客:
1. https://jeffbradberry.com/posts/2015/09/intro-to-monte-carlo-tree-search/
2. 论文链接:http://digitalcommons.morris.umn.edu/cgi/viewcontent.cgi?article=1028&context=horizons
Introduction to Monte Carlo Tree Search (蒙特卡罗搜索树简介)的更多相关文章
- 蒙特卡罗方法、蒙特卡洛树搜索(Monte Carlo Tree Search,MCTS)初探
1. 蒙特卡罗方法(Monte Carlo method) 0x1:从布丰投针实验说起 - 只要实验次数够多,我就能直到上帝的意图 18世纪,布丰提出以下问题:设我们有一个以平行且等距木纹铺成的地板( ...
- Programming a Hearthstone agent using Monte Carlo Tree Search(chapter one)
Markus Heikki AnderssonHåkon HelgesenHesselberg Master of Science in Computer Science Submission dat ...
- Monte Carlo tree search 学习
https://en.wikipedia.org/wiki/Monte_Carlo_tree_search 蒙特卡洛树搜索(MCTS)基础 http://mcts.ai/about/index.htm ...
- Monte Calro Tree Search (MCTS)
https://blog.csdn.net/natsu1211/article/details/50986810, 感谢分享! Intro最近阿法狗和李师师的人机大战着实火了一把,还顺带捧红了柯杰,古 ...
- Introduction To Monte Carlo Methods
Introduction To Monte Carlo Methods I’m going to keep this tutorial light on math, because the goal ...
- 论文笔记:Mastering the game of Go with deep neural networks and tree search
Mastering the game of Go with deep neural networks and tree search Nature 2015 这是本人论文笔记系列第二篇 Nature ...
- 增强学习(四) ----- 蒙特卡罗方法(Monte Carlo Methods)
1. 蒙特卡罗方法的基本思想 蒙特卡罗方法又叫统计模拟方法,它使用随机数(或伪随机数)来解决计算的问题,是一类重要的数值计算方法.该方法的名字来源于世界著名的赌城蒙特卡罗,而蒙特卡罗方法正是以概率为基 ...
- 蒙特卡罗(Monte Carlo)方法简介
蒙特卡罗(Monte Carlo)方法,也称为计算机随机模拟方法,是一种基于"随机数"的计算方法. 二 解决问题的基本思路 Monte Carlo方法的基本思想很早以前就被人们所发 ...
- Monte Carlo方法简介(转载)
Monte Carlo方法简介(转载) 今天向大家介绍一下我现在主要做的这个东东. Monte Carlo方法又称为随机抽样技巧或统计实验方法,属于计算数学的一个分支,它是在上世纪四十年代 ...
随机推荐
- WEB-INF& 绝对路径vs相对路径
在struts2里面用XXXInput方法和springmvc里面用GET模式进入添加或者登陆输入页面,有时候会在方法里面做一下准备,比如动态读入部门信息放在select中,或者在model中加入一个 ...
- lightoj1085 线段树+dp
//Accepted 7552 KB 844 ms //dp[i]=sum(dp[j])+1 j<i && a[j]<a[i] //可以用线段树求所用小于a[i]的dp[j ...
- Ubuntu 14.10 下设置时间同步
在启动HBase机群的时候,发现了一个错误,因为机群时间不同步导致,所以要同步集群时间. Linux的时间分为System Clock(系统时间)和Real Time Clock (硬件时间,简称RT ...
- hdu 2045
Ps:上课的时候用iPad做的...没有调试..一次AC机.就是简单的递推... 代码: #include "stdio.h"#include "math.h" ...
- C++中的::operator new, ::operator delete
一般在使用new 和 delete的时候,做了两件事情,一是空间的配置( new 是分配,delete是回收),而是调用对象的析构函数 但是也有办法将这两个过程分开 那就是显式的调用::operat ...
- Mifare Classic Tool(MCT)汉化版
2.0.4 到 2.0.6的更改: 注意:本汉化版本可能不稳定,与此发生的一切后果与作者和汉化者无关. Version : * Bugfix: Fixed crash which occurred i ...
- 利用phpmyadmin设置mysql主从同步(或者备份)
一.实现同步的原理: 在主数据库与 从数据库 之间的实现整个复制过程主要由三个线程来完成,其中两个线程(Sql线程和IO线程)在 从数据库 端,另外一个线程(IO线程)在 主数据库 端. 注意: 1. ...
- magento添加多个产品到购物车(Add multiple products to cart )
Step 1app\design\frontend\base\default\template\catalog\product\list.phtml<?php $_productColl ...
- Qt5 添加右键菜单简单测试
1.在.h文件中包含相关头文件 #include <QMenu> #include <QContextMenuEvent> 2.在.h文件中定义动作对象 QAction *ed ...
- css 中input和select混排对齐问题
当INPUT.SELECT及用图片做的button放在一起(并排放一起)时,没法子对齐,一个vertical-align:middle就可搞定.