蒙特卡罗(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)致敬。
时间来到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实验室中被用于氢弹的研发,再往后开始在各个领域被大规模地运用,带来了一场新的思想革命。人们发现,除了传统确定性方法以外,原来还有一种有效的计算方法,叫蒙特卡罗方法。
在低维的情况下,用确定性的方法来计算积分效果非常好。但到高维的时候,一方面计算难度呈指数级增加,产生维数灾难(curse of dimensionality),另一方面在多维的情况下,边界的确定非常困难,100维以上基本不可能用确定性方法来计算。蒙特卡罗方法跳出了维数灾难的想法,提供了一个新的思路:在高维空间中产生大量的点,采用类似近似计算圆周率的方法,计算高维积分。使用蒙特卡罗方法,误差将以N-0.5的速度降低,不管维数是多少,只要提升4倍数量的点,误差将降低一半。因此蒙特卡罗方法非常适合运用在高维的积分计算当中。
如何计算小沙堆体积?用蒙特卡罗积分法即可
蒙特卡罗定位(Monte Carlo localization)
在室外定位,自从有了GPS以后,基本上没有问题了。但是由于没有信号的支持,室内定位还是属于一个难点。随着扫地机器人的普及,也让越来越多人了解到人工智能是相当厉害的。但对于一个扫地机器人来说,假设它在已经通过前期的扫描获知屋子室内陆图的情况下,它是怎么做到确定自己所在的位置呢?为什么要问这个问题?也许这个问题是不用考虑的,因为机器人往哪个方向车轮转动了多少圈它都可以记录下来。虽然如此,这种记录实际上是有一定误差的,比如轮子转动了1圈,在光滑的地面只能向前移动0.1米,而在粗糙的地面可以向前0.11米,如果没有及时纠正,随着时间的积累这个误差将越来越大。蒙特卡罗定位法(Monte Carlo localization)又称粒子滤波定位法(particle filter localization),可以有效地解决这类室内定位的问题。我们以一个实例来看一下这个算法的运用。首先我们把一个机器人放到一个一维的空间上,如图所示。