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. Javascript计数器

    <!DOCTYPE HTML><html><head><meta http-equiv="Content-Type" content=&q ...

  2. C#移动无标题栏窗体的四种代码

    第一种采用,需注意窗体上的控件是否把窗体覆盖了...MouseDown.MouseMove.MouseUp事件应该是鼠标所处位置最顶层的控件的事件在窗体的类中声明两个变量private Point m ...

  3. UIImageView异步加载网络图片

    在iOS开发过程中,经常会遇到使用UIImageView展现来自网络的图片的情况,最简单的做法如下: 去下载https://github.com/rs/SDWebImage放进你的工程里,加入头文件# ...

  4. iOS 高级框架的介绍

    Core Data.Core Graphics.Core Animation 和 OpenGL ES 框架,是对于应用程序开发很重要的高级技术,因此需要花时间来学习和掌握. Core Data 框架管 ...

  5. 调用未绑定的父类方法和使用supper 函数 之间的选择.

    class New_int(int): # 定义一个新的类 继承 int 类 def __add__(self,other): # 重写 + 运算符 # __add__ 就是 int 中 + 的行为 ...

  6. Kylin上chromium不能用flash的解决命令

    sudo apt-get update sudo apt-get install pepperflashplugin-nonfree sudo update-pepperflashplugin-non ...

  7. python基础之模块之os模块

    os模块 os模块的作用: os,语义为操作系统,所以肯定就是操作系统相关的功能了,可以处理文件和目录这些我们日常手动需要做的操作,就比如说:显示当前目录下所有文件/删除某个文件/获取文件大小…… 另 ...

  8. IOS 封装类的时候注释格式,使用的时候可以想官方库一样快捷显示

    /** @brief 详情 @param 参数 @note 注意 @return 返回值类型 @code 这里写例题代码 @endcode @see 相似的方法参考 */

  9. 【转】DOM事件简介

    原文转自:http://blog.jobbole.com/52430/ Click.touch.load.drag.change.input.error.risize — 这些都是冗长的DOM(文档对 ...

  10. Smart210学习记录-----中断

    1. OVERVIEW OF VECTORED INTERRUPT CONTROLLER(概述向量中断控制器) 主要有4个VIC,4个TZIC还有一个很特殊的ARM PrimeCell PL192.主 ...