1蒙特卡罗赌场
蒙特卡罗(Monte Carlo)是摩纳哥公国(Principality of Monaco)的一座城市。摩纳哥公国坐落在法国的东南方,总面积为2.02平方公里,是世界上第二小的国家,也是一个从地图上看容易被忽略的国家。
摩纳哥的位置非常小,不仔细看都发现不了
傍晚时分,静谧的蒙特卡罗赌场
重新豪装后的蒙特卡罗赌场吸引来了无数赌客,成为当时有名的不夜城。
在蒙特卡罗赌场中,轮盘(Roulette)一直是最受欢迎的项目,因为赌客一直觉得这种赌法有较大的获胜机会。原来轮盘上有37个格子,其中有18红格,18个黑格,1个绿格。赌客随意押注红格或者黑格。理论上说,出现红色的概率和黑格的概率是一样的,一旦出现黑色的次数超过了5次,那都是一个非常小概率的事件,而在这种情况下很多赌徒会赌红色,即执行这类反方向的策略。
轮盘赌具
1913年的8月13日,赌客还是像往常一样赌轮盘,其中有不少人拿着纸和笔不停记录每次轮盘转下来的结果。但就在当天,轮盘上的小球连续26次落在了黑格上。而这样事件发生的概率仅为0.00000149%(比中双色球一等奖的概率还小),这种情况可以说几乎不可能出现,但确确实实是出现了。赌徒因此损失了大量的财富,因为他们错误地认为,先前结果的不平衡性一定导致后面出现相反的结果。
这或许就是人类思维和数据思维差异。实际上,每一次轮盘的转动都是独立事件,前面一次小球停留的位置,和下一次小球停留的位置不会有任何关联。无论小球停在红色或者黑色的位置,都是随机的,并不会受到之前结果的影响。
当然,从更宏观的角度来说,无论赌局规则怎么变化,赌场必定要赚钱的。赌场精心设计各种规则的赌局,让人们乐在其中的同时,赌场收取少许手续费。正是这种少许的手续费,让赌场经营者得以生存和扩大,而赌客之间则进行负和博弈,从长期来看,赌客是亏损的。
2蒙特卡罗方法诞生
时间来到1946年,也是蒙特卡罗大赌场诞生的90周年。
乌拉姆急冲冲地把这个方法告诉给他的同事,著名数学家冯·诺依曼(John von Neumann),冯诺依曼确定这个方法是一个重大突破,并且很快在ENIAC(ENIAC是世界上最早期的计算机)电脑上完成了编程。
ENIAC,世界上最早期的电脑,可以占据一个超大房间
为了保密起见,需要给这个程序起一个名字。乌拉姆和冯诺依曼的同事,著名物理学家尼古拉斯·梅特罗波利斯(Nicholas Metropolis)提议名字取为Monte Carlo,以纪念蒙特卡罗大赌场,原因是乌拉姆的叔叔不了解概率,经常在那里输钱。
但这个蒙特卡罗方法(Monte Carlo Method)需要大量的随机数,而真实的随机数并没有那么多,怎么办呢?当然在数学家们面前这不可能成为一个障碍,冯诺依曼顺手解决了这个问题,进一步发展了随机数生成器技术(Pseudorandom number generator, PRNG)。
随后,蒙特卡罗方法被大量地用于曼哈顿计划(Manhattan Project)中的各项计算和模拟,解决了大量以往确定性方法不能解决的计算问题。20世纪50年代,在LANL实验室中被用于氢弹的研发,再往后开始在各个领域被大规模地运用,带来了一场新的思想革命。人们发现,除了传统确定性方法以外,原来还有一种有效的计算方法,叫蒙特卡罗方法。
曼哈顿计划集中了大量优秀的科学家,利用核裂变反应来研制原子弹,最后取得圆满成功
3蒙特卡罗算法是怎么回事
事实上,蒙特卡罗方法非常简洁。我们用一个例子来说明,如何用蒙特卡罗方法近似得到圆周率?
我们先设置一个1×1的空间,在这个空间中以点(0,0)为圆心,画一个半径为1的圆,在1×1空间中留下四分之一圆。
从理论上分析,在1×1的空间的空间中,有这样的关系:
只要得到四分之一圆的面积与正方形的面积之比,所以可以知道圆周率是多少。
从蒙特卡罗方法的角度看,在1×1这个区间上可均匀地投放大量的点。这些点投到四分之一圆内的概率,近似等于投到四分之一圆内点的比例,即:
所以,我们可以通过计算点个数的方式,来近似得到圆周率的数值。
把大量的点投在1×1的空间中,计算落在圆弧内的数量,以估算圆周率π
这种数点的方式虽然简单,但看起来不是那么靠谱,能否证明蒙特卡罗方法的有效性呢?
实际上已经证明,随着模拟次数N的增加,蒙特卡罗所得到的近似值与目标值的误差将以N-0.5的速度降低,结果将越来越精确(可用方差的定义展开进行证明)。
误差随着模拟次数的增加而不断下降,速率为N-0.5
4蒙特卡罗算法的案例
随着蒙特卡罗方法的成熟及更广泛的使用,便出现了很多基于蒙特卡罗方法的新算法,用一个时髦的名词就是:蒙特卡罗“硬分叉”了。
蒙特卡罗积分(Monte Carlo intergration)
在低维的情况下,用确定性的方法来计算积分效果非常好。但到高维的时候,一方面计算难度呈指数级增加,产生维数灾难(curse of dimensionality),另一方面在多维的情况下,边界的确定非常困难,100维以上基本不可能用确定性方法来计算。
蒙特卡罗方法跳出了维数灾难的想法,提供了一个新的思路:在高维空间中产生大量的点,采用类似近似计算圆周率的方法,计算高维积分。使用蒙特卡罗方法,误差将以N-0.5的速度降低,不管维数是多少,只要提升4倍数量的点,误差将降低一半。因此蒙特卡罗方法非常适合运用在高维的积分计算当中。
如何计算小沙堆体积?用蒙特卡罗积分法即可
一个可爱的机器人,它会识别眼前的环境
在这个一维空间上,机器人通过前期的探索,已经知道这个空间一共有3个外观都是一样的门,并记录了门口的样子。
问题来了,机器人怎么确定自己在哪里呢?
Step 1:机器人在这个一维空间上随机生成大量的粒子,每一个粒子分别代表一种位置的可能性(稍后将阐述实际含义)。
Step 2:机器人通过摄像头发现自己站在一个门口前面。由于机器人已经知道室内地图,知道门口具体在哪几个位置,因此机器人重新分配所有粒子的权重,将室内地图门口所在位置范围的粒子权重相应提升上来。
Step 3:机器人根据权重分布,重新生成新的粒子。权重越大的地方获得的粒子越多。
假设机器人继续往前移动一小段距离:
Step 4:机器人到了一个没有门口的地方,同时所有的粒子跟随着机器人移动。
Step 5:机器人发现眼前没有东西。由于机器人已经知道室内地图,知道门口具体在哪几个位置,因此机器人重新分配所有粒子的权重,将室内地图门口所在位置范围的粒子权重相应降低下来。
AlphaGo当中的MCTS
元启发式算法(Metaheuristic)
自从蒙特卡罗方法诞生后,元启发式算法的发展才正式开始。比如模拟退火算法(Simulated Annealing)、遗传算法(Genetic Algorithm)、蚂蚁算法(Ant Colony Optimization)等等,这些带有随机性的算法都是解决组合优化问题的好方法。
2006年NASA在ST5航天器上搭载了一个特别的天线,其形状由进化算法设计而成
在过去漫长的岁月当中,人们都认为必须要经过严谨的推理和计算,才能得到最后正确的答案。直到最近的数十年,随着计算机的诞生,还有乌拉姆、冯诺依曼以及众多理解蒙特卡罗方法的科学家的努力下,随机性的运用才逐渐走进我们的视野。人们意想不到地发现随机性是一个如此重要的思维,随机性并非如想象中那样是一个不好的事物,合理地利用随机性,能够帮助我们探索前所未有的世界。
蒙特卡罗方法的发明,是人类思维史上的一个重大突破。一个随机性的构想,打破了过去的思考空白区,开启了人类新的思维空间。
全部0条评论
快来发表一下你的评论吧 !