一个彻底改变世界的思想

全世界只有3.14 % 的人关注了

爆炸吧知识

因随机性的到来

阔然开朗

蒙特卡罗赌场

蒙特卡罗(Monte Carlo)是摩纳哥公国(Principality of Monaco)的一座城市。摩纳哥公国坐落在法国的东南方,总面积为2.02平方公里,是世界上第二小的国家,也是一个从地图上看容易被忽略的国家。

摩纳哥的位置非常小,不仔细看都发现不了

但就在这里,却诞生了一个闻名世界的大赌场——蒙特卡罗大赌场(Monte Carlo Casino)。

蒙特卡罗赌场的开张其实有这么一段历史。19世纪50年代,摩纳哥有2个小镇宣布独立,税收大幅减少,摩纳哥皇室陷入破产边缘。无奈之下,卡罗琳王妃(Florestan一世的妻子)提出了一个设想:仿造巴特洪堡赌场(Bad Homburg Casino),建造一个赌场以创造更大的收入

但是因赌场地理位置偏僻,而且当时的摩纳哥缺乏良好的交通条件,旅游者并不喜欢过来进行度假。这也导致赌场开张后,一直处于亏损状态,几任老板到最后无法支撑,放弃经营。

卡罗琳王妃不忍心看到这个局面,千辛万苦请来了巴特洪堡赌场的实际经营者弗朗索瓦·布朗(François Blanc),并建立了一家专门的公司来运营赌场。作为新公司主要的大股东,布朗利用其强大的人际关系网络,迅速募集资金,大规模扩建赌场。为了吸引游客,布朗还提议把当地名字Spelugues改了。后来当地改名为Monte Carlo,以向当时的执政者查尔斯三世(Charles III, Prince of Monaco)致敬。

傍晚时分,静谧的蒙特卡罗赌场

重新豪装后的蒙特卡罗赌场吸引来了无数赌客,成为当时有名的不夜城。

在蒙特卡罗赌场中,轮盘(Roulette)一直是最受欢迎的项目,因为赌客一直觉得这种赌法有较大的获胜机会。原来轮盘上有37个格子,其中有18红格,18个黑格,1个绿格。赌客随意押注红格或者黑格。理论上说,出现红色的概率和黑格的概率是一样的,一旦出现黑色的次数超过了5次,那都是一个非常小概率的事件,而在这种情况下很多赌徒会赌红色,即执行这类反方向的策略。

轮盘赌具

1913年的8月13日,赌客还是像往常一样赌轮盘,其中有不少人拿着纸和笔不停记录每次轮盘转下来的结果。但就在当天,轮盘上的小球连续26次落在了黑格上。而这样事件发生的概率仅为0.00000149%(比中双色球一等奖的概率还小),这种情况可以说几乎不可能出现,但确确实实是出现了。赌徒因此损失了大量的财富,因为他们错误地认为,先前结果的不平衡性一定导致后面出现相反的结果。

这或许就是人类思维和数据思维差异。实际上,每一次轮盘的转动都是独立事件,前面一次小球停留的位置,和下一次小球停留的位置不会有任何关联。无论小球停在红色或者黑色的位置,都是随机的,并不会受到之前结果的影响。

当然,从更宏观的角度来说,无论赌局规则怎么变化,赌场必定要赚钱的。赌场精心设计各种规则的赌局,让人们乐在其中的同时,赌场收取少许手续费。正是这种少许的手续费,让赌场经营者得以生存和扩大,而赌客之间则进行负和博弈,从长期来看,赌客是亏损的

蒙特卡罗方法诞生

时间来到1946年,也是蒙特卡罗大赌场诞生的90周年。

塔尼斯拉夫·乌拉姆(Stanislaw Ulam)是一位波兰裔美国科学家,他当时在洛斯阿拉莫斯国家实验室(Los Alamos National Laboratory, LANL)进行核武器的研发。此时科学家们在研究辐射防护(radiation shielding),期望计算中子穿越物质的距离。尽管已经通过实验获得大量的数据,LANL实验室的科学家们却无法用传统确定性的方法来解决这个问题。

后来因为身体原因,乌拉姆便休假疗养身体,无聊之际打牌闲度时光。有一天,乌拉姆还是在打牌,突然他想到了一个问题:如果我想从52张牌当中拿到同花顺,这个概率是多少呢?

相信把做数学推导作为无聊消遣的人也不多,此时乌拉姆就放下手牌,拿起纸和笔熟练地利用组合公式进行概率计算。经过很长时间的计算,乌拉姆发现这件事情没那么简单(可能是因为写不下去了)。

他又想意识到另一个问题:理论计算太复杂了,有没有一个更加实际的方法来算?比如我模拟100次,看看出现同花顺的次数有多少次,这样就可以近似得到同花顺出现的概率了。

乌拉姆于是开始联想到中子扩散现象上,同时想到了如何将差分方程等价转换为一系列随机模拟过程。在这短暂的时间内,人类一扇新的知识大门悄然打开。

乌拉姆急冲冲地把这个方法告诉给他的同事,著名数学家冯·诺依曼(John von Neumann),冯诺依曼确定这个方法是一个重大突破,并且很快在ENIAC(ENIAC是世界上最早期的计算机)电脑上完成了编程。

ENIAC,世界上最早期的电脑,可以占据一个超大房间

为了保密起见,需要给这个程序起一个名字。乌拉姆和冯诺依曼的同事,著名物理学家尼古拉斯·梅特罗波利斯(Nicholas Metropolis)提议名字取为Monte Carlo,以纪念蒙特卡罗大赌场,原因是乌拉姆的叔叔不了解概率,经常在那里输钱

但这个蒙特卡罗方法(Monte Carlo Method)需要大量的随机数,而真实的随机数并没有那么多,怎么办呢?当然在数学家们面前这不可能成为一个障碍,冯诺依曼顺手解决了这个问题,进一步发展了随机数生成器技术(Pseudorandom number generator, PRNG)。

随后,蒙特卡罗方法被大量地用于曼哈顿计划(Manhattan Project)中的各项计算和模拟,解决了大量以往确定性方法不能解决的计算问题。20世纪50年代,在LANL实验室中被用于氢弹的研发,再往后开始在各个领域被大规模地运用,带来了一场新的思想革命。人们发现,除了传统确定性方法以外,原来还有一种有效的计算方法,叫蒙特卡罗方法

曼哈顿计划集中了大量优秀的科学家,利用核裂变反应来研制原子弹,最后取得圆满成功

就是这样一个随机性的构想,打破了过去的思考空白区,开启了人类新的思维空间。

蒙特卡罗算法是怎么回事

事实上,蒙特卡罗方法非常简洁。我们用一个例子来说明,如何用蒙特卡罗方法近似得到圆周率

我们先设置一个1×1的空间,在这个空间中以点(0,0)为圆心,画一个半径为1的圆,在1×1空间中留下四分之一圆。

从理论上分析,在1×1的空间的空间中,有这样的关系:

只要得到四分之一圆的面积与正方形的面积之比,所以可以知道圆周率是多少。

从蒙特卡罗方法的角度看,在1×1这个区间上可均匀地投放大量的点。这些点投到四分之一圆内的概率,近似等于投到四分之一圆内点的比例,即:

所以,我们可以通过计算点个数的方式,来近似得到圆周率的数值。

把大量的点投在1×1的空间中,计算落在圆弧内的数量,以估算圆周率π

这种数点的方式虽然简单,但看起来不是那么靠谱,能否证明蒙特卡罗方法的有效性呢?

实际上已经证明,随着模拟次数N的增加,蒙特卡罗所得到的近似值与目标值的误差将以N-0.5的速度降低,结果将越来越精确(可用方差的定义展开进行证明)。

误差随着模拟次数的增加而不断下降,速率为N-0.5

蒙特卡罗算法的案例

随着蒙特卡罗方法的成熟及更广泛的使用,便出现了很多基于蒙特卡罗方法的新算法,用一个时髦的名词就是:蒙特卡罗“硬分叉”了。

  • 蒙特卡罗积分(Monte Carlo intergration)

在低维的情况下,用确定性的方法来计算积分效果非常好。但到高维的时候,一方面计算难度呈指数级增加,产生维数灾难(curse of dimensionality),另一方面在多维的情况下,边界的确定非常困难,100维以上基本不可能用确定性方法来计算。

蒙特卡罗方法跳出了维数灾难的想法,提供了一个新的思路:在高维空间中产生大量的点,采用类似近似计算圆周率的方法,计算高维积分。使用蒙特卡罗方法,误差将以N-0.5的速度降低,不管维数是多少,只要提升4倍数量的点,误差将降低一半。因此蒙特卡罗方法非常适合运用在高维的积分计算当中。

如何计算小沙堆体积?用蒙特卡罗积分法即可

  • 蒙特卡罗定位(Monte Carlo localization)

在室外定位,自从有了GPS以后,基本上没有问题了。但是由于没有信号的支持,室内定位还是属于一个难点。

随着扫地机器人的普及,也让越来越多人了解到人工智能是相当厉害的。但对于一个扫地机器人来说,假设它在已经通过前期的扫描获知屋子室内地图的情况下,它是怎么做到确定自己所在的位置呢

为什么要问这个问题?也许这个问题是不用考虑的,因为机器人往哪个方向车轮转动了多少圈它都可以记录下来。虽然如此,这种记录实际上是有一定误差的,比如轮子转动了1圈,在光滑的地面只能向前移动0.1米,而在粗糙的地面可以向前0.11米,如果没有及时纠正,随着时间的积累这个误差将越来越大

蒙特卡罗定位法(Monte Carlo localization)又称粒子滤波定位法(particle filter localization),可以有效地解决这类室内定位的问题。我们以一个实例来看一下这个算法的运用。首先我们把一个机器人放到一个一维的空间上,如图所示。

一个可爱的机器人,它会识别眼前的环境

在这个一维空间上,机器人通过前期的探索,已经知道这个空间一共有3个外观都是一样的门,并记录了门口的样子。

问题来了,机器人怎么确定自己在哪里呢?

Step 1:机器人在这个一维空间上随机生成大量的粒子,每一个粒子分别代表一种位置的可能性(稍后将阐述实际含义)。

Step 2:机器人通过摄像头发现自己站在一个门口前面。由于机器人已经知道室内地图,知道门口具体在哪几个位置,因此机器人重新分配所有粒子的权重,将室内地图门口所在位置范围的粒子权重相应提升上来。

Step 3机器人根据权重分布,重新生成新的粒子。权重越大的地方获得的粒子越多。

假设机器人继续往前移动一小段距离:

Step 4:机器人到了一个没有门口的地方,同时所有的粒子跟随着机器人移动。

Step 5:机器人发现眼前没有东西。由于机器人已经知道室内地图,知道门口具体在哪几个位置,因此机器人重新分配所有粒子的权重,将室内地图门口所在位置范围的粒子权重相应降低下来。

Step 6机器人根据权重分布,重新生成新的粒子。权重越大的地方获得的粒子越多。

可以发现,经过这两轮操作以后,粒子分布集中程度提升了,可以预见粒子将越来越集中。这个方法精巧地运用了蒙特卡罗的随机特征,不断产生新的粒子来记录位置概率。粒子分布集中的位置,也就是机器人所在的位置

  • 蒙特卡罗搜索树(Monte Carlo tree search, MCTS)

蒙特卡罗方法还发展成了蒙特卡罗搜索树的方法,能够有效帮助在游戏中搜索出最佳策略。MCTS每生成一个新的策略,算法将基于这个新策略进行大量的随机实验来模拟运用新策略以后的影响,比如比赛胜率或者分数。然后按照一定的指标进行树节点的扩展。

MCTS的一个最著名的例子,当属由DeepMind团队研发的、击败人类世界围棋顶尖高手的AlphaGo

AlphaGo当中的MCTS

  • 元启发式算法(Metaheuristic)

自从蒙特卡罗方法诞生后,元启发式算法的发展才正式开始。比如模拟退火算法(Simulated Annealing)、遗传算法(Genetic Algorithm)、蚂蚁算法(Ant Colony Optimization)等等,这些带有随机性的算法都是解决组合优化问题的好方法。

2006年NASA在ST5航天器上搭载了一个特别的天线,其形状由进化算法设计而成

蒙特卡罗方法的发明,是人类思维史上的一个重大突破在过去漫长的岁月当中,人们都认为必须要经过严谨的推理和计算,才能得到最后正确的答案。

直到最近的数十年,随着计算机的诞生,还有乌拉姆、冯诺依曼以及众多理解蒙特卡罗方法的科学家的努力下,随机性的运用才逐渐走进我们的视野。

作者简介:超模君,数学教育与生活自媒体博主,新晋理工科奶爸。出版过《芥子须弥 · 大科学家的小故事》;《数学之旅·闪耀人类的54个数学家》。后续数学文化创意多多,欢迎关注认识!

文系网易新闻·网易号“各有态度”特色内容

部分资料来源于《代数几何白马王子——肖刚》

转载请在公众号中,回复“转载”


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295166.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单元测试 | 如何在Mock时匹配匿名类型参数

前言假设&#xff0c;我们需要单元测试如下方法:public User GetUser(int id) {return Repository.Query<User>(new { ID id }).FirstOrDefault(); }而对于Repository.Query&#xff0c;我们需要进行Mock。怎么实现&#xff1f;不匹配具体参数值如果我们不关心参数的具体…

java中imp结尾,imp java

适配器模式之桥梁模式设计模式目录 http://blog.csdn.net/fenglailea/article/details/52733435风.fox桥梁模式 Bridge Pattern将抽象和实现解耦&#xff0c;使得两者可以独立地变化通用类图组成抽象化角色 Abstraction...文章风来了2016-10-06972浏览量expOracle数据导入导出i…

Cookies

一&#xff0c;前言 Cookies想必所有人都了解&#xff0c; 但是未必所有人都精通。本文讲解了Cookies的各方面知识。 二&#xff0c;基础知识 1.什么是Cookies Cookie 是一小段文本信息&#xff0c;伴随着用户请求和页面在 Web 服务器和浏览器之间传递。Cookie 包含每次用户访问…

用字符串表达式访问JSON数据(java,fastjson)

2019独角兽企业重金招聘Python工程师标准>>> //单元科技-www.ccell.com.cn 技术部,开源 //XML数据有XPATH 如"root/rows[id1]/name" //在JS中JSON数据可以对象方式访问 //java中怎么 用字符串表达式访问JSON数据? 找了很久没有找到,自己写一个,以减小代…

C语言学习

时间&#xff1a;20160302 (1) C语言中&#xff0c;很多标准头文件&#xff0c;这样的头文件好处在于&#xff0c;所有的实现方法都在头文件中进行定义&#xff0c;后期对方法进行修改时&#xff0c;可以只需要改动头文件&#xff0c;就可以了&#xff0c;其他的地方也需要对应…

怎样分辨谁才是朋友圈里的真·贵族?

不是我不明白&#xff0c;这世界变化快但在这个看1分钟视频都要2倍速的世界里有一群人却仍然愿意每天花5分钟阅读2000字以上的文字信息这是多么高贵的一种精神所以高贵的你&#xff0c;值得更好的内容今天我们精选出8个优质公号他们有趣有料、有思想有温度绝对值得你的关注长按…

Android之如何解决Android studio运行出现的HAX kernel modules is not installed

HAX kernel modules is not installed 很久之前,我安装了Android studio,运行时控制台打印出这个,emulator:ERROR:x86 emulation currently requires hardware acceleration! Please ensure Intel HAXM is properly installed and useble, CPU acceleration statis:HAX kern…

Elastic AMP监控.NET程序性能

什么是Elastic AMPElastic APM 是一个应用程序性能监控系统。它可以请求的响应时间、数据库查询、对缓存的调用、外部 HTTP 请求等的详细性能信息&#xff0c;可以实时监控软件服务和应用程序。这可以帮助我们快速查明和修复性能问题。Elastic APM 还会自动收集未处理的错误和异…

java分页的工具类,java分页工具类

PageBean-分页package com.soyea.util;import java.io.Serializable;import java.util.List;/*** 分页工具类*/public class PageBean implements Serializable {private static final long serialVersionUID -8741766802354222579L;private int pageSize5; // 每页显示多少条…

xxx定律-poj-3782

xxx定律 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1639 Accepted Submission(s): 1303 Problem Description 对于一个数n&#xff0c;如果是偶数&#xff0c;就把n砍掉一半&#xff1b;如果是奇数&#x…

asp.net 检测访问者是iphone,android,web(摘录)

aps.net 可以使用WebFormViewEngine来实现。 参考文章&#xff1a;http://www.hanselman.com/blog/MixMobileWebSitesWithASPNETMVCAndTheMobileBrowserDefinitionFile.aspx 源代码 C#代码 public class MobileCapableWebFormViewEngine : WebFormViewEngine { public…

在Android NDK中使用OpenSSL

从 6.0 开始&#xff0c;Google 要求不要使用系统的 OpenSSL&#xff0c;请见&#xff1a;https://developer.android.com...。因此&#xff0c;请不要再使用本文介绍的方法&#xff0c;请自行交叉编译 OpenSSL 或者使用别人编译好的版本。2017年3月注 由于Java较为容易被反编译…

字符串之数字子串求和

题目:给定一个字符串str,求其中全部数字串所代表的数字之和 要求: 1、忽略小数点字符,例如“A1.3”,其中包括2个数字1和3 2、如果是紧贴数字子串的左侧出现字符“-”,当连续出现的数量为奇数时,则数字视为负,连续出现的数量为偶数的则 数字视为正,例如,“A-1…

买的情侣裤衩寄前男友家了,怎么办?

1 那你是要和别人一起去吗&#xff01;▼2 我马上想到我一老师了&#xff01;&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 当代父母对孩子的期望变化&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼4 这个小象打破我的观念&#xff1f;▼5 小个子买…

ctf php sql注入,CTF—攻防练习之HTTP—SQL注入(SSI注入)

主机&#xff1a;192.168.32.152靶机&#xff1a;192.168.32.161ssI是赋予html静态页面的动态效果&#xff0c;通过ssi执行命令&#xff0c;返回对应的结果&#xff0c;若在网站目录中发现了.stm .shtm .shtml等&#xff0c;且对应SSL输入没有过滤该网站可能存在SSI注入漏洞ssi…

OAuth 2.1 带来了哪些变化

OAuth 2.1 是 OAuth 2.0 的下一个版本, OAuth 2.1 根据最佳安全实践(BCP), 目前是第18个版本&#xff0c;对 OAuth 2.0 协议进行整合和精简, 移除不安全的授权流程, 并发布了 OAuth 2.1 规范草案, 下面列出了和 OAuth 2.0 相比的主要区别。⚡ 推荐使用 Authorization Code PKC…

转仁兄:Binary search and its variation

http://fihopzz.blogspot.com/2013/07/enter-post-title-here-binary-search-and.html转载于:https://www.cnblogs.com/kwill/p/3230655.html

生孩子要趁早 3

说到猝死&#xff0c;前两天又有报道说哪个搞IT的年纪轻轻的嗝儿屁了&#xff1b;我想&#xff1a;其实哪个行业都有这么几个倒霉孩子&#xff1b;这也就是搞网络报道的公司的身边的事儿&#xff0c;才被程序员们通过网络转来转去&#xff1b;那些搬砖、运煤的就没有年纪轻轻累…

使用OClint进行iOS项目的静态代码扫描

使用OClint进行iOS项目的静态代码扫描 原文链接&#xff1a;http://blog.yourtion.com/static-code-analysis-ios-using-oclint.html 最近需要一个静态分析代码工具&#xff0c;帮助我们发布运行应用前找到代码潜在的问题。 其实对于iOS开发&#xff0c;我们的日常开发上已经用…

Linux命令常用大全

系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI) hdparm -i /dev/hda 罗列一个磁盘的架构特性 hdparm -tT /dev/sda 在磁盘上执行测试性读取操作 cat /proc/cpuinfo…