抛一千次硬币,计算正面会出现多少次并不难。但像用52张牌玩单人纸牌游戏成功的概率这样情况多得数不清的问题,用公式来解就让人一筹莫展。这时,与其放弃计算,不如亲自多试几次、数一数结果。这就是“蒙特卡洛方法(Monte Carlo Method)”。
简单来说,蒙特卡洛方法是指“随机反复进行大量试验,再把结果汇总取平均来估算答案的计算方法”。即使不知道精确的公式,只要汇聚足够多的偶然结果,就会接近真正的答案,这就是这种方法的基本思想。
本文将依次介绍蒙特卡洛方法诞生的背景、工作原理和代表性例子,以及它在今天的应用领域和需要注意的地方。

汇聚偶然找到答案的计算方法
蒙特卡洛方法是如何诞生的?

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):美国海岸警卫队结合风和洋流,生成数千个失踪船只可能所在的位置,以此划定搜索区域。
不过,它的局限也很明显。误差与试验次数的平方根成反比地减小,所以要把误差减半,就得把试验次数增加到四倍。如果单次计算就很繁重,可能要耗费极长的时间。另外,如果输入值的范围或概率设定错了,无论重复多少次,也只会越来越接近错误的答案。
蒙特卡洛方法告诉我们,在无法一下子求出正确答案时,只要汇聚足够多的偶然,就能接近可信的答案。一个始于纸牌游戏的小小疑问,最终改变了核物理、金融乃至人工智能。
不因为没有完美的公式就止步,而是亲自去检验无数种可能,这正是在不确定的世界里做出更好判断的智慧第一步。