总结自知乎大佬:https://zhuanlan.zhihu.com/p/53948964

在学习蒙特卡罗树之前先了解一下蒙特卡洛方法(两者不是同一算法)

蒙特卡洛法方法是什么呢?

它是评判棋盘局面的一种方法,因为围棋很难写出好的估值函数(棋局的评判一般使用估值函数来评估,国际象棋的棋局局面特征比较明显,最容易想到的是可以给每个棋子和位置设置不同的分值,如果棋子之间的保护关系等特征,对局面的评价就已经很靠谱了。而对于围棋上述方法基本不起任何作用),于是上世纪有人提出了一种神奇的方法:双方在某个局面下「随机」走子,注意是「随机」走,走到终局或者残局为止,随机很多次(比如一万盘),计算胜率,胜率越高的局面就越好。

蒙特卡洛树搜索(简称 MCTS)是 Rémi Coulom 在 2006 年在它的围棋人机对战引擎 「Crazy Stone」中首次发明并使用的的 ,并且取得了很好的效果。
       我们先讲讲它用的 原始 MCTS 算法

蒙特卡洛树搜索,首先它肯定是棵搜索树

我们回想一下我们下棋时的思维——并没有在脑海里面把所有可能列出来,而是根据「棋感」在脑海里大致筛选出了几种「最可能」的走法,然后再想走了这几种走法之后对手「最可能」的走法,然后再想自己接下来「最可能」的走法。这其实就是 MCTS 算法的设计思路。

每次分为四步:

选择(Selection)
扩展 (expansion)
模拟(Simulation)
回溯(Backpropagation)

1.模拟(Simulation)

模拟借鉴了我们上面说的蒙特卡洛方法,快速走子,只走一盘,分出个胜负。
       我们每个节点(每个节点代表每个不同的局面)都有两个值,代表这个节点以及它的子节点模拟的次数和赢的次数,比如模拟了 10 次,赢了 4 盘,记为 4/10。
我们再看多一次这幅图,如图,每个节点都会标上这两个值。


2.选择(Selection)

未访问:还没有评估过当前局面
未完全展开:被评估过至少一次,但是子节点(下一步的局面)没有被全部访问过,可以进一步扩展
完全展开:子节点被全部访问过

我们找到目前认为「最有可能会走到的」一个未被评估的局面(双方都很聪明的情况下),并且选择它。

什么节点最有可能走到呢?
       最直观的想法是直接看节点的胜率(赢的次数/访问次数),哪个节点最大选择哪个,但是这样是不行的!因为如果一开始在某个节点进行模拟的时候,尽管这个节点不怎么好,但是一开始随机走子的时候赢了一盘,就会一直走这个节点了。

因此人们造了一个函数

Q(v) 是该节点赢的次数,N(v) 是该节点模拟的次数,C 是一个常数。

因此我们每次选择的过程如下——从根节点出发,遵循最大最小原则,每次选择己方 UCT 值最优的一个节点,向下搜索,直到找到一个

「未完全展开的节点」,根据我们上面的定义,未完全展开的节点一定有未访问的子节点,随便选一个进行扩展。

这个公式虽然我们造不出来,但是我们可以观赏它的巧妙之处,首先加号的前面部分就是我们刚刚说的胜率,然后加号的后面部分函数长这样:

        随着访问次数N(vi)的增加,加号后面的值越来越小,因此我们的选择会更加倾向于选择那些还没怎么被统计过的节点,避免了我们刚刚说的蒙特卡洛树搜索会碰到的陷阱——一开始走了歪路。

3.扩展 (expansion)

将刚刚选择的节点加上一个统计信息为「0/0」的节点,然后进入下一步模拟(Simluation)

4.回溯(Backpropagation)

Backpropagation 很多资料翻译成反向传播,不过我觉得其实极其类似于递归里的回溯,就是从子节点开始,沿着刚刚向下的路径往回走,沿途更新各个父节点的统计信息。

        再放一次这个图,可以观察一下在模拟过后,新的 0/0 节点,比如这里模拟输了,变成了 0/1,然后它的到根节点上的节点的统计信息的访问次数全部加 1,赢的次数不变。

一般来说最佳走法就是具有最高访问次数的节点,这点可能稍微有点反直觉。这样评估的原因是因为蒙特卡洛树搜索算法的核心就是,越优秀的节点,越有可能走,反过来就是,走得越多的节点,越优秀。

第二次学习计划 之 蒙特卡罗树(MCTS)相关推荐

  1. 计算机系大二学期计划范文,大一第二学期学习计划范文

    大一第二学期学习计划范文 大一第二学期学习计划范文1 (一)很快的一个学期过了另一个学期又来了,很不幸的上学期挂了一科,所以从这个学期开始我学习目标要明确,实现目标也有保证.我要短时间内达到一个小目标 ...

  2. 第二次学习计划 之 SVM算法

    SVM最早是由Vladimir N. Vapnik和Alexey Ya. Chervonenkis在1963年提出,目前的版本(soft margin)是由Corinna Cortes和Vapnik在 ...

  3. 系统学习深度学习(四十)--基于模拟的搜索与蒙特卡罗树搜索(MCTS)

    转自:https://www.cnblogs.com/pinard/p/10470571.html 1. 基于模拟的搜索概述 什么是基于模拟的搜索呢?当然主要是两个点:一个是模拟,一个是搜索.模拟我们 ...

  4. 强化学习基础 | (18) 基于模拟的搜索与蒙特卡罗树搜索(MCTS)

    原文地址 在基于模型的强化学习与Dyna算法框架中,我们讨论基于模型的强化学习方法的基本思路,以及集合基于模型与不基于模型的强化学习框架Dyna.本文我们讨论另一种非常流行的集合基于模型与不基于模型的 ...

  5. 蒙特卡罗树搜索(MCTS)

    蒙特卡罗树搜索(MCTS) 一种基于树结构的,在搜索空间巨大时仍有效的方法(区别于极大极小搜索和Alpha-Beta搜索) 1.思想: 将搜索树集中在更值得搜索的分枝上,如果某个着法不错,蒙特卡罗树会 ...

  6. 2021 程序媛跳槽记:学习计划篇(已收获字节等offer)

    今天推荐的这篇文章是一位互联网程序媛写的跳槽日记.她本硕毕业于985计算机专业,先后就职于央企和BAT.这一篇就是她跳槽到互联网的学习笔记,希望能对大家有所帮助,感兴趣的读者也可以关注公众号,听听更多 ...

  7. 一个工作了两三年程序员的学习计划

    本人已经工作两年多了,尴尬的是待过的两家公司都是外包,大部分外包公司技术性都很一般,这也是很多人看不起外包公司的一点.可是已经在外包 公司了怎么办,我也很绝望啊.....而且我做过的项目都是很老的项目 ...

  8. Python学多久才能独立接单赚钱?一个月足够了,本人私藏的学习计划分享给大家

    毫无疑问,Python 是当下最火的编程语言之一.对于许多未曾涉足计算机编程的领域「小白」来说,深入地掌握 Python 看似是一件十分困难的事.其实,只要掌握了科学的学习方法并制定了合理的学习计划, ...

  9. 20169220 网络攻防实践 第二周学习总结

    20169220 赵京鸣 2016/2017-2 第二周学习总结 进度:1.教材第1-2章/12章 2.Kali教学视频1-5/36 3.查找2个安全工具/5 4.国内外黑客.电影书籍了解 5.lin ...

最新文章

  1. Promise 的使用
  2. wchar.h not found
  3. ubuntu 16.04 更换国内源(下载源)(阿里源)(换源)
  4. 数据传输服务 DTS > 数据迁移 > 同一阿里云账号实例间迁移 > RDS实例间的数据迁移
  5. json 在后天怎么接_前台向后台传一个json数据,后台怎么接?
  6. JavaScriptCore.framework基本用法(一)
  7. Linux emacs考场配置及对拍脚本
  8. iOS读取通讯录获取好友通讯录信息[名字(姓+名字),手机号码(多个号码)等]...
  9. 网络协议:TCP/IP协议,你看懂了吗?
  10. python之类之多继承
  11. mysql 翻译函数_Mysql翻译拼音
  12. 记录从微信商户获取微信支付账单过程
  13. Docker阿里加速器
  14. Vue组件嵌套时生命周期函数触发顺序是什么?
  15. 一位老学长的真实互联网校招求职心路历程~
  16. 双软企业认定的好处有哪些
  17. CentOS7.x 安装 openssh8.4、openssl1.1.1
  18. 标题党:如何写出SEO与新媒体平台都吸喜欢的标题!
  19. 当我闲困的时候,我在想些什么
  20. 苹果浏览器实战(三)

热门文章

  1. 快递员的PDA都有什么功能
  2. 北森云计算2023校招提前批面经
  3. 温岭创新计算机网络技术有限公司,创新永无止境,服务从心开始
  4. 两篇2023 ICLR多模态论文分享(模态互补性对多模态鲁棒性影响 与 对多模表示学习有效的单模学习)
  5. 「GoCN酷Go推荐」漏桶限流库 — uber-go/ratelimit
  6. 服务器网页图片显示不了怎么办啊,网页看不到图片怎么办?图片打不开的解决办法...
  7. linux 系统自动关机--排查方法
  8. 封神台(尤里的复仇Ⅱ 回归)绕过防护getshell
  9. 如何从单体数据湖迁移到分布式数据网格
  10. 2022 年值得关注的 9 大用户体验趋势