4. 随机变量与随机过程建模

蒙特卡洛仿真的本质,是把现实世界中的不确定性“翻译”成计算机能够反复抽样的随机数。翻译得准不准,直接决定仿真结论是否可信。本节聚焦四类建模对象:随机变量的类型选择、联合分布与相关性的表达、泊松过程的仿真表示、马尔可夫链的仿真表示。它们分别回答“单个不确定量怎么抽”“多个不确定量怎么一起抽”“事件在时间上怎么来”“状态在序列上怎么变”这四个问题。

一、随机变量类型:先分清离散与连续

建模的第一步是判断随机变量的取值形态。离散型变量取有限或可数个值,如设备每日故障次数、订单中的商品件数、信用评级档位;连续型变量在区间内取值,如零件尺寸偏差、服务时长、材料强度。类型判断错误会直接导致抽样方法错误——把连续量强行离散化会丢失精度,把离散量当连续量处理则会产生无意义的中间值。

在仿真实现中,两类变量都通过“逆变换法”统一处理:先生成 U ~ Uniform(0,1),再令 X = F⁻¹(U),其中 F 为累积分布函数。离散情形下,F⁻¹ 表现为按累积概率划分区间。例如某设备日故障次数服从参数 λ=2 的泊松分布,其概率质量函数为 P(X=k)=e⁻²·2ᵏ/k!,前几项累积概率约为 P(0)=0.135、P(≤1)=0.406、P(≤2)=0.677、P(≤3)=0.857。抽样时若 U=0.52,落入 (0.406, 0.677] 区间,则取 X=2。连续情形则直接调用分布函数反函数,如指数分布 X = -ln(U)/λ,正态分布可用 Box–Muller 变换 Z = √(-2lnU₁)·cos(2πU₂)。

工程上优先使用成熟库的分布抽样函数(如 Python 的 numpy.random、R 的 stats 包),但必须核对参数化约定。例如指数分布的“率参数 λ”与“均值参数 β=1/λ”在不同库中命名不同,混用会造成数量级错误。

二、联合分布与相关性:不能各抽各的

当模型中有多个随机变量时,独立假设往往不成立。例如同一批钢材的屈服强度与抗拉强度正相关,同一项目的工期与成本正相关,同一地区的降雨量与光伏出力负相关。若忽略相关性分别独立抽样,仿真会低估极端组合出现的概率,导致风险评估偏乐观。

相关性建模的常用手段是 Copula 或线性相关变换。工程实践中最易落地的是高斯 Copula 思路:先对每个边缘分布 Fᵢ 抽取均匀变量 Uᵢ,再通过相关系数矩阵 Σ 生成相关的高斯向量 Z ~ N(0, Σ),最后令 Xᵢ = Fᵢ⁻¹(Φ(Zᵢ))。这样既保留了各变量的边缘分布形态,又嵌入了指定的秩相关结构。若只需线性相关,也可用 Cholesky 分解:Σ = LLᵀ,对独立标准正态向量 ε 做 Z = Lε 即得目标相关结构。

需要强调的是,相关系数矩阵必须正定,否则 Cholesky 分解失败。实际建模中常因专家给出的两两相关系数互相矛盾而出现非正定矩阵,此时应检查并修正,常用做法是寻找最近的合法相关矩阵(如特征值截断法)。此外,相关系数只刻画线性关系,对尾部依赖不敏感;若关注极端联合事件,应改用 t-Copula 等具有尾部相依性的结构。

联合分布与相关性建模 边缘分布 F₁, F₂ (各自形态已知) 相关矩阵 Σ (正定校验) Cholesky 分解 Σ = L·Lᵀ Z = L·ε ε ~ N(0, I) Xᵢ = Fᵢ⁻¹(Φ(Zᵢ)) 保留边缘 + 相关 泊松过程:事件到达时间轴 t=0 t Δt₁ Δt₂ Δt₃ 间隔 Δtᵢ ~ Exp(λ),独立同分布 到达时刻 Tₙ = Σ Δtᵢ,计数 N(t) ~ Poisson(λt) 马尔可夫链:状态转移 正常 退化 失效 p₁₂ p₂₁ p₂₃ p₃₂ p₁₃(直接失效) 每步:由当前状态 i 按行向量 P[i,·] 抽样下一状态 无记忆性:下一状态只依赖当前状态

三、泊松过程:把“事件何时来”变成可抽样的时间轴

泊松过程用于描述随机到达事件,如设备故障、客户到达、缺陷出现。其核心性质是:在长度 t 的区间内事件数服从 Poisson(λt),且相邻事件间隔独立服从 Exp(λ)。仿真实现有两种等价路径:间隔抽样法与计数抽样法。

间隔抽样法最直观:令 T₀=0,循环生成 Δtᵢ = -ln(Uᵢ)/λ,累加得 Tᵢ = Tᵢ₋₁ + Δtᵢ,直到 Tᵢ 超过仿真时域 T_end 为止。例如 λ=0.5 次/小时、T_end=24 小时,若某次抽样得到间隔序列 1.2、3.8、0.6、5.1……则到达时刻为 1.2、5.0、5.6、10.7……。计数抽样法则先抽 N ~ Poisson(λT_end),再在 [0, T_end] 上抽 N 个均匀分布时刻并排序。前者天然给出有序到达序列,适合事件驱动仿真;后者实现简单,适合只需总数与时刻分布的场合。

若事件率随时间变化(如设备老化导致故障率上升),应改用非齐次泊松过程,常用“稀疏法”:用上界率 λ_max 生成候选事件,再以概率 λ(t)/λ_max 接受。这一步是很多初学者遗漏的关键,直接用常数率会系统性低估后期事件数。

四、马尔可夫链:把“状态怎么变”变成转移抽样

马尔可夫链适合描述离散状态在离散步或连续时间上的演化,如设备状态(正常→退化→失效)、信用评级迁移、用户行为路径。其仿真表示的核心是一张转移概率矩阵 P,每行元素非负且行和为 1。

离散时间仿真的单步逻辑是:设当前状态为 i,生成 U ~ Uniform(0,1),沿第 i 行累积概率 P[i,1], P[i,1]+P[i,2], … 查找 U 落入的区间,对应列号即为下一状态。例如三状态链中,从“正常”出发的行向量为 [0.7, 0.25, 0.05],若 U=0.82,累积区间为 [0,0.7]、(0.7,0.95]、(0.95,1],则转移到“退化”。重复该步直至达到指定步数或吸收态。

连续时间马尔可夫链则需为每个状态附加驻留时间,通常取 Exp(λᵢ),再按嵌入链的转移概率选择下一状态。仿真时须注意:转移矩阵必须逐行校验行和,浮点误差累积可能导致 U 落在区间之外,实现中应做边界保护(如将最后一个区间上界设为 1)。

常见建模陷阱:把相关变量当独立抽样、用常数率近似时变率、转移矩阵未校验行和、以及忽略吸收态导致仿真无法终止。每次建模后应做一次“分布回检”——用仿真样本反算均值、方差、分位数与相关系数,与设定值比对,偏差超出抽样误差范围即说明实现有误。

四类对象并非孤立:一个完整的系统仿真往往同时包含连续型参数(如退化速率)、离散型事件(如故障次数)、相关结构(如多部件寿命相关)以及状态演化(如维修策略下的状态迁移)。建模时应先画出变量清单与依赖关系,再逐项选择抽样表示,最后用回检确认“抽出来的世界”与设定一致,才能进入后续的仿真实验与统计分析。