2. 随机仿真基础与误差来源
随机仿真的本质,是用计算机生成的随机数去模拟一个带有不确定性的系统,再通过对大量样本的统计来估计我们关心的量。要判断仿真结果是否可信,必须先弄清楚两件事:随机数是怎么来的,以及误差究竟从哪里来。本节围绕随机变量生成、蒙特卡洛估计、误差分类和常见误区展开,为后续的收敛性分析打基础。
一、随机变量生成:从均匀随机数到任意分布
所有随机仿真的起点都是伪随机数发生器(PRNG)。它本质上是一个确定性递推公式,给定种子后产生一列看似随机的 [0,1) 均匀数。常见实现如线性同余法、梅森旋转(Mersenne Twister)等。伪随机数有两个关键性质:可复现性(同一种子得到同一序列,便于调试与对比)和周期性(序列终会重复,周期需远大于仿真所需样本量)。
有了均匀随机数 U,就可以通过变换得到任意分布的随机变量。最常用的两种方法是:
- 逆变换法:若目标分布累积分布函数为 F,则 X = F⁻¹(U)。例如指数分布 X = −(1/λ)ln(1−U),正态分布可借助 Box–Muller 变换由两个均匀数生成。
- 拒绝采样法:当 F⁻¹ 难以解析求解时,用一个易采样的包络分布生成候选值,再按接受概率筛选,适用于分布形状复杂的情形。
需要强调的是,生成方法本身会引入误差。例如逆变换法在 F⁻¹ 数值求解时的精度、拒绝采样中包络函数选择不当导致的效率低下,都会影响最终估计。因此,随机变量生成不是“黑箱”,其正确性应通过分布拟合检验(如 K-S 检验、卡方检验)来验证。
二、蒙特卡洛估计:用样本均值逼近期望
蒙特卡洛估计的核心思想非常直接:若要求解的量可以写成某个随机变量函数的期望 θ = E[g(X)],则用 n 次独立采样得到估计量:
θ̂ = (1/n) Σᵢ g(Xᵢ)
由大数定律,θ̂ 依概率收敛于 θ;由中心极限定理,当 n 足够大时,θ̂ 近似服从正态分布,其标准误为 σ/√n,其中 σ 为 g(X) 的标准差。这给出两个重要结论:估计误差随样本量以 1/√n 的速度下降,即样本量翻四倍才能把误差减半;误差大小还取决于被估量的方差 σ²,这正是方差缩减技术(如对偶变量、控制变量、重要性采样)的出发点。
举个教学示例(以下数值为合理假设的演示数据,非实测):设某排队系统平均等待时间 θ 的真值未知,用 1000 次独立仿真得到样本均值 12.3 分钟、样本标准差 4.0 分钟,则标准误约为 4.0/√1000 ≈ 0.126 分钟,95% 置信区间约为 12.3 ± 0.25 分钟。若希望把区间半宽压缩到 0.1 分钟,则样本量需扩大到约 (4.0/0.1)² × 1.96² ≈ 6100 次。这个反推过程是仿真实验设计中最常用的计算之一。
三、误差分类:统计误差与系统误差
仿真结果的总误差可以拆成两类性质完全不同的部分:
- 统计误差(随机误差):源于样本有限和随机性,表现为估计值围绕真值的波动。它可以通过增加样本量、降低方差来压缩,且其大小可以用标准误和置信区间定量刻画。
- 系统误差(偏差):源于模型设定、参数取值、随机数生成器缺陷或实现错误,表现为估计值系统性偏离真值。增加样本量不能消除系统误差,反而会让置信区间越来越窄却围绕错误的值,造成“虚假精确”。
下图展示了这两类误差在仿真流程中的来源与作用位置,以及它们对最终估计的不同影响方式:
四、常见误区与规避方法
在实际仿真中,以下几类误区最容易导致结论失真:
- 把置信区间窄当成结果准。样本量很大时标准误很小,但如果模型本身有偏,窄区间只是“精确地错误”。正确做法是同时做模型验证(与解析解、已知特例或实测数据对比),区分精度与准确度。
- 忽视随机数相关性。低质量 PRNG 或不当的种子管理(如多次仿真共用同一子序列)会造成样本间相关,使实际方差大于理论值,标准误被低估。应使用经过检验的发生器,并为每次独立重复分配独立子流。
- 用单次运行下结论。单条仿真轨迹的随机波动可能很大,应做多次独立重复(replication),用重复间的样本方差估计标准误,而不是依赖单次运行内部的时间平均。
- 混淆“仿真次数”与“独立样本数”。若一次运行内部存在自相关(如排队系统的等待时间序列),有效样本量小于名义样本量,直接套用 σ/√n 会低估误差,需用批均值法等方法处理。
- 忽略输入分布的不确定性。输入参数本身是估计出来的(如到达率、服务时间分布),其不确定性会传播到输出。只做输出端的统计误差分析而不做输入不确定性分析,会低估总误差。