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 (蒙特卡罗搜索树简介)的更多相关文章

  1. 蒙特卡罗方法、蒙特卡洛树搜索(Monte Carlo Tree Search,MCTS)初探

    1. 蒙特卡罗方法(Monte Carlo method) 0x1:从布丰投针实验说起 - 只要实验次数够多,我就能直到上帝的意图 18世纪,布丰提出以下问题:设我们有一个以平行且等距木纹铺成的地板( ...

  2. Programming a Hearthstone agent using Monte Carlo Tree Search(chapter one)

    Markus Heikki AnderssonHåkon HelgesenHesselberg Master of Science in Computer Science Submission dat ...

  3. Monte Carlo tree search 学习

    https://en.wikipedia.org/wiki/Monte_Carlo_tree_search 蒙特卡洛树搜索(MCTS)基础 http://mcts.ai/about/index.htm ...

  4. Monte Calro Tree Search (MCTS)

    https://blog.csdn.net/natsu1211/article/details/50986810, 感谢分享! Intro最近阿法狗和李师师的人机大战着实火了一把,还顺带捧红了柯杰,古 ...

  5. Introduction To Monte Carlo Methods

    Introduction To Monte Carlo Methods I’m going to keep this tutorial light on math, because the goal ...

  6. 论文笔记: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 ...

  7. 增强学习(四) ----- 蒙特卡罗方法(Monte Carlo Methods)

    1. 蒙特卡罗方法的基本思想 蒙特卡罗方法又叫统计模拟方法,它使用随机数(或伪随机数)来解决计算的问题,是一类重要的数值计算方法.该方法的名字来源于世界著名的赌城蒙特卡罗,而蒙特卡罗方法正是以概率为基 ...

  8. 蒙特卡罗(Monte Carlo)方法简介

    蒙特卡罗(Monte Carlo)方法,也称为计算机随机模拟方法,是一种基于"随机数"的计算方法. 二 解决问题的基本思路 Monte Carlo方法的基本思想很早以前就被人们所发 ...

  9. Monte Carlo方法简介(转载)

    Monte Carlo方法简介(转载)       今天向大家介绍一下我现在主要做的这个东东. Monte Carlo方法又称为随机抽样技巧或统计实验方法,属于计算数学的一个分支,它是在上世纪四十年代 ...

随机推荐

  1. Linux内核-模块编译和安装

    我安装Ubuntu的时候是没有安装源码的,在没有安装源码前 /usr/src/ 目录下是只有两个包含内核的头文件的文件夹的: 我的内核版本是: 所以接下来就是先安装内核源码: 执行后,/usr/src ...

  2. MySQL语句45道练习题及答案

    一.            设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表(一)~表( ...

  3. 转:Java面试题集(51-70) http://blog.csdn.net/jackfrued/article/details/17403101

    Java面试题集(51-70) Java程序员面试题集(51-70) http://blog.csdn.net/jackfrued/article/details/17403101 摘要:这一部分主要 ...

  4. SDIO接口

    SDIO卡是在SD内存卡接口的基础上发展起来的接口,SDIO接口兼容以前的SD内存卡,并且可以连接SDIO接口的设备,目前根据SDIO协议的SPEC,SDIO接口支持的设备总类有蓝牙,网卡,电视卡等. ...

  5. ABBYY

    ABBYY FineReader Engine泰比OCR文字识别控件移动版 产品功能:OMR识别控件 平台: 开发商:ABBYY泰比科技 版本:产品介绍:手机识别的高品质和精度 泰比( ...

  6. javascript笔记4-函数表达式

    一般形式的创建函数,在执行代码之前会先读取函数声明,所以可以把函数声明写在函数调用的下面: sayHi(); function sayHi(){ alert("Hi!"); } 使 ...

  7. Interview---一道有趣的推理题

    题目描述: 一个岛上有100个人,他们的眼睛只有两种颜色,蓝色和红色.95个人是黑色,其余5人是红色. 他们有个宗教信仰,从不照镜子,所以他们自己不知道自己的眼睛的颜色.但是能看到其他人的眼睛. 他们 ...

  8. Java测试工具

    1.   开源测试工具: http://www.open-open.com/43.htm 2.   10款常用的JAVA测试工具 :http://developer.51cto.com/art/200 ...

  9. Pike学习笔记

    Pike的安装(Ubuntu环境) pike的语法非常像C++,但是它也是脚本语言,所以具有一般脚本语言的特性.一个简单的pike程序,hello world: int main() { write( ...

  10. csdn第三名

    编号:1026时间:22016年7月18日11:10:35功能:csdn第三名URL :http://blog.csdn.net/phphot