作者:孙天齐
链接:https://www.zhihu.com/question/20254139/answer/33572009
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

太数学的东西就不说了,只用通俗唱法回答楼主的问题。

蒙特卡罗算法并不是一种算法的名称,而是对一类随机算法的特性的概括。媒体说“蒙特卡罗算法打败武宫正树”,这个说法就好比说“我被一只脊椎动物咬了”,是比较火星的。实际上是ZEN的算法具有蒙特卡罗特性,或者说它的算法属于一种蒙特卡罗算法。

那么“蒙特卡罗”是一种什么特性呢?我们知道,既然是随机算法,在采样不全时,通常不能保证找到最优解,只能说是尽量找。那么根据怎么个“尽量”法儿,我们我们把随机算法分成两类:

  • 蒙特卡罗算法:采样越多,越近似最优解;
  • 拉斯维加斯算法:采样越多,越有机会找到最优解;

举个例子,假如筐里有100个苹果,让我每次闭眼拿1个,挑出最大的。于是我随机拿1个,再随机拿1个跟它比,留下大的,再随机拿1个……我每拿一次,留下的苹果都至少不比上次的小。拿的次数越多,挑出的苹果就越大,但我除非拿100次,否则无法肯定挑出了最大的。这个挑苹果的算法,就属于蒙特卡罗算法——尽量找好的,但不保证是最好的

而拉斯维加斯算法,则是另一种情况。假如有一把锁,给我100把钥匙,只有1把是对的。于是我每次随机拿1把钥匙去试,打不开就再换1把。我试的次数越多,打开(最优解)的机会就越大,但在打开之前,那些错的钥匙都是没有用的。这个试钥匙的算法,就是拉斯维加斯的——尽量找最好的,但不保证能找到

所以你看,这两个词并不深奥,它只是概括了随机算法的特性,算法本身可能复杂,也可能简单。这两个词本身是两座著名赌城,因为赌博中体现了许多随机算法,所以借过来命名。

这两类随机算法之间的选择,往往受到问题的局限。如果问题要求在有限采样内,必须给出一个解,但不要求是最优解,那就要用蒙特卡罗算法。反之,如果问题要求必须给出最优解,但对采样没有限制,那就要用拉斯维加斯算法。对于机器围棋程序而言,因为每一步棋的运算时间、堆栈空间都是有限的,而且不要求最优解,所以ZEN涉及的随机算法,肯定是蒙特卡罗式的。

机器下棋的算法本质都是搜索树,围棋难在它的树宽可以达到好几百(国际象棋只有几十)。在有限时间内要遍历这么宽的树,就只能牺牲深度(俗称“往后看几步”),但围棋又是依赖远见的游戏,甚至不仅是看“几步”的问题。所以,要想保证搜索深度,就只能放弃遍历,改为随机采样——这就是为什么在没有MCTS(蒙特卡罗搜树)类的方法之前,机器围棋的水平几乎是笑话。而采用了MCTS方法后,搜索深度就大大增加了。比如,在题主说的ZEN与武宫正树九段的对局中,我们可以看这一步棋:

<img src="https://pic4.zhimg.com/70c60eb46363c44d57701ea82b5fb75f_b.jpg" data-rawwidth="550" data-rawheight="549" class="origin_image zh-lightbox-thumb" width="550" data-original="https://pic4.zhimg.com/70c60eb46363c44d57701ea82b5fb75f_r.jpg">
武宫正树九段(执白)第53步大飞,明显企图攻角,而ZEN(执黑)却直接不理,放弃整个右下角,转而把中腹走厚。这个交换究竟是否划算,就不在这里讨论了,但我们至少可以看出,ZEN敢于在此脱先,舍弃这么大的眼前利益,其搜索深度确实达到了人类专业棋手的水平。

蒙特卡罗算法是什么?相关推荐

  1. OpenMP 编程实例(蒙特卡罗算法)

    有关clock()函数 1,clock()函数在头文件#include<time.h>中 2,clock()函数的返回值类型为clock_t.clock_t其实是long,即长整形. cl ...

  2. 双色球python十种算法_python : 蒙特卡罗算法 应用于双色球

    参考书:算法设计与分析 王晓东 编著 :第7章 概率算法 7.5 蒙特卡罗算法 http://www.gdfc.org.cn/datas/history/twocolorball/history_1. ...

  3. 蒙特卡罗算法与拉斯维加斯算法

    http://www.zhihu.com/question/20254139 太数学的东西就不说了,只用通俗唱法回答楼主的问题. 蒙特卡罗算法并不是一种算法的名称,而是对一类随机算法的特性的概括.媒体 ...

  4. 数模算法 — 蒙特卡罗算法及Matlab案例

    本文为博主编写文章,未经博主允许转载,转载请注明出处:https://blog.csdn.net/weixin_42604241/article/details/97382158 蒙特卡罗算法(方法) ...

  5. 蒙特卡罗算法 与 拉斯维加斯算法

    蒙特卡罗算法并不是一种算法的名称,而是对一类随机算法的特性的概括.媒体说"蒙特卡罗算法打败武宫正树",这个说法就好比说"我被一只脊椎动物咬了",是比较火星的.实 ...

  6. C++ 概率算法 利用蒙特卡罗算法计算圆周率

    概率算法大致可分为4种形式: 数值概率算法: 蒙特卡罗算法: 拉斯维加斯算法: 舍伍德算法: 计算蒙特卡罗概率的算法实现: 1 #include "stdio.h" 2 #incl ...

  7. Topas——基于Geant4的放射治疗蒙特卡罗算法模拟工具

    Topas--基于Geant4的放射治疗蒙特卡罗算法模拟工具 关于Topas 学习前提 安装Topas 获取topas.tar.gz 获取方法一 获取方法二 配置unix环境 安装Topas 安装Ge ...

  8. python : 蒙特卡罗算法 应用于双色球

    参考书:算法设计与分析 王晓东 编著 :第7章 概率算法 7.5 蒙特卡罗算法 http://www.gdfc.org.cn/datas/history/twocolorball/history_1. ...

  9. 蒙特卡罗算法在游戏(围棋)AI中的应用

    我是在 aigamedev.com 上的2008年第17周的 RoundUp 里看到这篇文章的推荐的,出于自己对中国象棋及其计算机博弈方面的兴趣,虽然对于围棋和围棋AI一窃不通,但还是挺仔细地阅读了这 ...

最新文章

  1. svn清理失败且乱码 问题解决(转)
  2. centos losf 安装_Linux Centos7部署环境安装-CentOS
  3. 安徽省计算机二级大题教程,安徽省计算机二级例题
  4. c++内存管理优化之ptmalloc,tcmalloc,jemalloc使用实例
  5. jsp前3章试题分析
  6. 时间胶囊——给未来的留言板
  7. linux python pymysql,Python之pymysql的使用
  8. Bitmap文件格式+生成一个BMP文件
  9. Atitit webshell java 实现 命令行输出读取问题总结 1.1. 读取组赛 或者读取了一部分。。使用cmd /c 模式,强制关闭刷新缓冲区 1 1.2. 乱码解决 1 1.3. /h
  10. java 1.7 32_java jdk 1.7 32位
  11. 数字系统——实验一:常用元器件的识别与简单测试
  12. 树莓派通过网络共享USB设备
  13. MySQL数据库增删改查的SQL语句
  14. Rust 智能指针(二)
  15. Markdown Katex 集合相关符号
  16. 把EditPlus添加到右键快捷菜单
  17. hive和presto计算日期时间差
  18. 共享单车安卓客户端app设计
  19. 字符串匹配 - Overview
  20. 【Microsoft Visual Studio 2010完成CLR窗体应用程序】计算器和画图板的设计

热门文章

  1. 日语生可以选计算机专业吗,高考日语生,不建议你大学报日语专业!
  2. php 聚合广告平台,GitHub - mystudytime/easy-amazon-advertising: 基于 amazon advertising v2 接口的 PHP 广告信息组件...
  3. 微信小程序用vant自定义tabbar页面并跳转相应页面
  4. 三相直流无刷电机驱动
  5. HTML吸引人眼球的网页,优秀网页设计:35个吸引眼球的精美作品集网站
  6. 轻便简洁的电脑录音软件,免费收藏!
  7. 跟我读论文系列之XGBoost
  8. 游戏是通过什么检测脏话的?Python带你搞清原理!
  9. webApp开发-等额本息试算
  10. CS144 计算机网络 lab1