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 次。这个反推过程是仿真实验设计中最常用的计算之一。

三、误差分类:统计误差与系统误差

仿真结果的总误差可以拆成两类性质完全不同的部分:

  • 统计误差(随机误差):源于样本有限和随机性,表现为估计值围绕真值的波动。它可以通过增加样本量、降低方差来压缩,且其大小可以用标准误和置信区间定量刻画。
  • 系统误差(偏差):源于模型设定、参数取值、随机数生成器缺陷或实现错误,表现为估计值系统性偏离真值。增加样本量不能消除系统误差,反而会让置信区间越来越窄却围绕错误的值,造成“虚假精确”。

下图展示了这两类误差在仿真流程中的来源与作用位置,以及它们对最终估计的不同影响方式:

随机仿真误差来源与传播路径 随机数发生器 种子 / 周期 / 均匀性 随机变量生成 逆变换 / 拒绝采样 模型与参数设定 结构假设 / 参数取值 蒙特卡洛估计 θ̂ = (1/n) Σ g(Xᵢ) 样本量 n 决定波动幅度 方差 σ² 决定收敛速度 统计误差(随机) 标准误 σ/√n 增大 n 可压缩 系统误差(偏差) 模型/参数/实现错误 增大 n 无法消除 总误差 = 统计误差 + 系统误差 只压统计误差 → 区间变窄却可能偏离真值

四、常见误区与规避方法

在实际仿真中,以下几类误区最容易导致结论失真:

  1. 把置信区间窄当成结果准。样本量很大时标准误很小,但如果模型本身有偏,窄区间只是“精确地错误”。正确做法是同时做模型验证(与解析解、已知特例或实测数据对比),区分精度与准确度。
  2. 忽视随机数相关性。低质量 PRNG 或不当的种子管理(如多次仿真共用同一子序列)会造成样本间相关,使实际方差大于理论值,标准误被低估。应使用经过检验的发生器,并为每次独立重复分配独立子流。
  3. 用单次运行下结论。单条仿真轨迹的随机波动可能很大,应做多次独立重复(replication),用重复间的样本方差估计标准误,而不是依赖单次运行内部的时间平均。
  4. 混淆“仿真次数”与“独立样本数”。若一次运行内部存在自相关(如排队系统的等待时间序列),有效样本量小于名义样本量,直接套用 σ/√n 会低估误差,需用批均值法等方法处理。
  5. 忽略输入分布的不确定性。输入参数本身是估计出来的(如到达率、服务时间分布),其不确定性会传播到输出。只做输出端的统计误差分析而不做输入不确定性分析,会低估总误差。
判断误差性质的实用口诀:增大样本量后区间收窄但中心不动,说明主要是统计误差;若中心始终偏离参照值,则存在系统误差,应回到模型、参数和随机数生成环节排查。