跳至正文
杂学书库让好奇心有所归处
简体中文

汇聚偶然找到答案:蒙特卡洛方法(Monte Carlo Method)

抛一千次硬币,计算正面会出现多少次并不难。但像用52张牌玩单人纸牌游戏成功的概率这样情况多得数不清的问题,用公式来解就让人一筹莫展。这时,与其放弃计算,不如亲自多试几次、数一数结果。这就是“蒙特卡洛方法(Monte Carlo Method)”。

简单来说,蒙特卡洛方法是指“随机反复进行大量试验,再把结果汇总取平均来估算答案的计算方法”。即使不知道精确的公式,只要汇聚足够多的偶然结果,就会接近真正的答案,这就是这种方法的基本思想。

本文将依次介绍蒙特卡洛方法诞生的背景、工作原理和代表性例子,以及它在今天的应用领域和需要注意的地方。

在正方形上随机撒100个点,数出落在四分之一圆内的78个,再用4乘以78除以100把圆周率估算为3.12的蒙特卡洛模拟。同时说明增加样本并不能保证每次都提高精度。
用蒙特卡洛方法估算圆周率的例子。在固定随机数种子的100次模拟中,有78个点落在四分之一圆内。来源:牛津大学统计学练习(https://www.stats.ox.ac.uk/~deligian/pdf/sc5/R_Exercises_2018-19/Exercise_1.3.1.html),LANL Monte Carlo & Random Sampling。

汇聚偶然找到答案的计算方法

蒙特卡洛方法是如何诞生的?

在阳光照进窗边的1940年代风格房间里,一个穿开衫的男人在木桌上摆开纸牌玩单人纸牌游戏

1946年,波兰出生的数学家斯坦尼斯瓦夫·乌拉姆(Stanisław Ulam)在病后休养期间玩单人纸牌游戏时,产生了一个疑问:这个游戏成功的概率是多少?他试图逐一推算各种情况,却算得筋疲力尽,于是想到:“干脆亲自玩上一百次左右,数一数成功的次数,不是更现实吗?”

乌拉姆把这个想法告诉了在美国洛斯阿拉莫斯实验室共事的约翰·冯·诺依曼(John von Neumann)。两人决定把这种方法用在当时尚未解决的中子扩散问题上。由于研究是保密的,需要一个代号,同事尼古拉斯·梅特罗波利斯(Nicholas Metropolis)便借用了摩纳哥蒙特卡洛赌场的名字——乌拉姆的叔叔常向亲戚借钱去那里赌博。1948年春,人们首次用早期电子计算机埃尼阿克(ENIAC)进行了自动计算。


蒙特卡洛方法的四步工作原理

从木勺中倾泻而出的五颜六色的小玻璃珠,随机散落在明亮的木桌上

各种方法的细节不同,但蒙特卡洛方法大体遵循同样的流程。

(1)确定可能的范围
首先,为了求出答案,确定输入值可能落在的范围。例如,这是确定销量、原材料价格、天气等影响结果的变量及其范围的步骤。

(2)随机抽取数值
在确定的范围内,按照概率随机抽取输入值。如今使用的是计算机生成的随机数,如果抽取得不均匀,结果可能会大大偏离。

(3)逐次计算
代入抽出的数值,按照既定方式计算结果。这个过程要重复数千次、数百万次。

(4)汇总结果
汇总所有结果,求出平均值或分布。根据大数定律,试验次数越多,平均值就越接近真实值。它不只得到一个平均值,还能同时看到结果是如何分布的,比如“亏损的概率是百分之几”,这是一大优点。


通过简单例子理解蒙特卡洛方法

明亮书桌上的一张正方形白纸上,用蓝线画着一个大大的四分之一圆,数百个彩色小点随机散布在曲线内外

最能直观展示蒙特卡洛方法的例子是求圆周率。

[案例1] 撒点求圆周率

在边长为1的正方形内画一个半径为1的四分之一圆。两者面积之比等于圆周率除以4。现在在正方形上均匀随机地撒点,数一数落在四分之一圆内的点所占的比例。把这个比例乘以4,就能得到接近圆周率的值,撒的点越多,就越接近3.14。点只有100个左右时,很容易得到3.0或3.3这样参差不齐的值,但超过几十万个后,常常能精确到小数点后第二位。可以说,不用复杂的计算,只靠数点就求出了圆周率。

[案例2] 投针实验

类似的想法很早以前就有了。18世纪法国博物学家布丰(Comte de Buffon)计算了把针扔到画有平行线的地面上时,针与线相交的概率。由于这个概率中含有圆周率,只要反复投针无数次并数出相交的次数,就能估算圆周率。这个“布丰投针(Buffon's Needle)”问题被视为蒙特卡洛方法的早期形式。


蒙特卡洛方法的应用领域与局限

明亮的办公室里,一位分析师看着大显示器,屏幕上许多细细的彩色线条从一点向右呈扇形散开

蒙特卡洛方法在变量多、不确定性大的问题上尤其能发挥威力。当变量增加到几十个、几百个时,逐一考察所有情况的计算很快就变得不可能,而随机抽样的方式无论变量有多少,都可以用同样的方法来处理。

  • 金融(Finance):生成股价和利率可能走出的无数条路径,以衡量投资风险和期权价格。
  • 天气预报(Weather Forecasting):它是集合预报的基础,即把初始条件稍作改变,同时运行多个预测。
  • 计算机图形学(Computer Graphics):随机追踪光线经过的路径,绘制出照片般的场景。
  • 围棋人工智能(Game AI):通过蒙特卡洛树搜索下无数盘虚拟对局,从中选出好棋。
  • 海上搜救(Search and Rescue):美国海岸警卫队结合风和洋流,生成数千个失踪船只可能所在的位置,以此划定搜索区域。

不过,它的局限也很明显。误差与试验次数的平方根成反比地减小,所以要把误差减半,就得把试验次数增加到四倍。如果单次计算就很繁重,可能要耗费极长的时间。另外,如果输入值的范围或概率设定错了,无论重复多少次,也只会越来越接近错误的答案。


蒙特卡洛方法告诉我们,在无法一下子求出正确答案时,只要汇聚足够多的偶然,就能接近可信的答案。一个始于纸牌游戏的小小疑问,最终改变了核物理、金融乃至人工智能。

不因为没有完美的公式就止步,而是亲自去检验无数种可能,这正是在不确定的世界里做出更好判断的智慧第一步。