Ulam 与 von Neumann,1946 — 当你算不出分布,就把过程跑一万遍
1946 年,数学家 Stanisław Ulam 在病中打单人纸牌,想算某种牌局能顺利走完的概率。组合数学的路子走不通——可能的排列太多了。于是他冒出一个念头:与其算,不如发一百次牌,数一下成功了几次。他把这个想法说给 John von Neumann 听,两人很快把它用到了洛斯阿拉莫斯的中子扩散问题上。代号取自摩纳哥的赌场,因为 Ulam 有位叔叔常去那里。
它要问的问题是:当一个系统的结果分布写不出公式时,怎么知道它长什么样?这在复杂系统里是常态而不是例外——过程里有阈值、有反馈、有路径依赖,输入的一点分布叠加起来就没有解析解了。
还有一个更硬的版本:有些量本来就不是分布的性质,而是路径的性质——"中途破产的概率""在第 30 天之前触及某个下限的概率""连续三次失败的可能"。这类问题即使你知道分布也算不出来,因为它们问的是过程怎么走的,而不是终点在哪儿。模拟能直接回答它们,因为模拟本来就是在走路径。
集合模拟(ensemble simulation)是同一个想法的另一种用法:模型只有一个,但你用略微不同的初始条件和参数各跑一遍,得到一"束"未来。天气预报里的集合预报就是这么做的——不确定性来自初值的敏感依赖,跑一束轨迹比跑一条更诚实。两者的共同点是:用一群样本代替一个答案。
拿一个人人都碰到过的例子:一个项目由五道工序串起来,每道工序"最可能"耗时 5 天,但都有拖长的可能(很少提前,偶尔大拖)。把五个"最可能"加起来是 25 天——这是几乎所有人给出的排期。
把它跑两万遍,看到的是这样:
中位数是 30 天,90 分位是 36 天。25 天不是"平均情况",它是好运气的情况。原因很简单:拖延是右偏的(能拖很久,很难提前很多),五道工序的偏斜不会互相抵消,而是加起来。这件事凭直觉几乎不可能想清楚,但模拟一跑就直接看见了。
还会看到两个稳定的现象。一是收敛慢且有节奏:估计的精度大致按 1/√N 提高,也就是精度翻一倍要四倍的样本量。二是尾部比中间难得多:估中位数几百次就够了,估 99.9% 分位需要的样本量高好几个数量级——尾部本来就是最稀有的那一小撮,而模拟并不会凭空多给你几个。
它算不上"解释"什么,它是一台把假设翻译成后果的机器。真正的价值有三个:
给出分布而不是点估计。项目排期、产能规划、预算,凡是承诺一个数字的地方,都可以改成承诺一个分位数("90% 的把握在 36 天内交付"),而这句话只有跑过才说得出口。
算得出路径属性。破产概率、触及某个下限的概率、一年内至少发生一次的概率——这些是期望值公式给不了的,而它们往往才是真正的决策变量。
让不确定性可以被搬运。天气的集合预报(欧洲中期天气预报中心跑几十个成员)、期权定价、工程可靠性、粒子输运、供应链断点分析,用的都是同一个循环。它们的共同处境是:机制清楚、解析解没有、而尾部要命。