3.4 连续时间马尔可夫链与生灭过程:泊松钟驱动的跳跃


3.4 连续时间马尔可夫链与生灭过程:泊松钟驱动的跳跃

本节摘要:连续时间马尔可夫链把"每步一拍"换成"随时可跳":状态停留时长服从指数分布,跳跃按转移率表进行,泊松过程是它最简单的特例。本节建立转移率矩阵、推导柯尔莫哥洛夫微分方程,重点拆解生灭过程——只允许相邻状态移动的链——并用详细平衡写出其平稳分布,最后以一个电话客服系统的完整计算收尾。

离散链每走一步都踩在整数拍上:n = 0, 1, 2, …。但现实里的多数系统不数拍子:下一通电话随时可能来,故障随时可能发生,客户随时可能离开。把时间轴连续化,马尔可夫性保留,"转移矩阵"就必须换成一套新的记账方式——转移率。

从指数停留到转移率矩阵

连续时间马尔可夫链的结构由两句话讲完:

停留时长服从指数分布。链进入状态 i 后,在里面停留一段随机时长再跳出,该时长服从参数 λᵢ 的指数分布。用指数分布的唯一理由藏在 2.3 节:无记忆性。停留了多久不影响"马上要跳"的概率——只有无记忆的停留才能让马尔可夫性在连续时间上成立(否则还需跟踪"已停留多久"这个附加状态)。

跳向哪里由转移率决定。跳出 i 时落到 j 的概率记作 pᵢⱼ。把两者合并,定义转移率 qᵢⱼ = λᵢ·pᵢⱼ(i ≠ j),并令对角线 qᵢᵢ = −λᵢ(行和为零)。矩阵 Q 的非对角线元素读作"每单位时间从 i 跳往 j 的发生率",对角线的负值就是跳出率。

直觉图像:状态 i 里挂着若干个独立的"泊松闹钟",每个候选状态 j 挂一个(率为 qᵢⱼ),谁先响就跳向谁。由指数分布的性质(多个独立指数的最小值仍是指数,参数为各率之和),停留时长参数 λᵢ = Σⱼ≠ᵢ qᵢⱼ 自动吻合。这幅"闹钟图"在模拟时直接变成算法:进入状态,为每个邻居抽指数时间,取最小者执行。

泊松过程的位置核对:只有一个状态自身加"自我计数"的系统里,链的跳跃就是泊松到达——泊松过程是连续时间马尔可夫链里"只涨不跌的独苗"。第 2 章的微分方程推导(2.2 节面孔三)在本节框架里获得了统一的名字:柯尔莫哥洛夫前向方程。

柯尔莫哥洛夫方程:连续版的多步计算

离散链用矩阵幂算多步概率;连续链没有"步",改用微分方程。记 Pᵢⱼ(t) 为从 i 出发 t 时刻位于 j 的概率,前向方程为

Pᵢⱼ'(t) = Σₖ Pᵢₖ(t)·qₖⱼ,即矩阵形式 P'(t) = P(t)Q

右侧各项读作"此刻在 k、下一个小时间段跳往 j"的流量。这与 2.2 节的 pₖ'(t) = −λpₖ(t) + λpₖ₋₁(t) 完全同构——泊松情形只有"相邻两态"有流量。多数实际问题里方程解不出闭式,数值路线有两条:小步长离散化(把 Q 乘以步长当转移矩阵,重复做矩阵幂,即 Euler 化)或直接矩阵指数(库函数一步到位)。

平稳分布的方程也相应升级:πQ = 0 联合 Σπᵢ = 1(分布不再变化,导数为零)。与离散版 π = πP 对应,只是方程从代数式变成了微分方程的右端为零。

生灭过程:状态一线牵的实用模型

现实里大量系统的转移只发生在相邻状态之间:队列长度加一减一、库存升一格降一格、种群生一个死一个。只允许 i 与 i+1、i 与 i−1 之间跳的链叫生灭过程:从 i 到 i+1 的率 λᵢ(出生率),从 i 到 i−1 的率 μᵢ(死亡率,i ≥ 1)。

生灭过程的好处是平稳分布有显式解。满足一类特殊的详细平衡(相邻流量对消):πᵢλᵢ = πᵢ₊₁μᵢ₊₁,逐级递推得

πₙ = π₀ · (λ₀λ₁…λₙ₋₁) / (μ₁μ₂…μₙ)

只要比率适中使级数收敛,π₀ 由归一化定出。记住这张乘积形状的票:第 5 章排队论的 M/M/1、M/M/s 全部结论(队长期望、等待时间、系统容量设计)都从它出发,两行代数推完。

判断级数收敛的口径也简单:以常率生灭(λᵢ = λ、μᵢ = μ)为例,ρ = λ/μ < 1 时平稳分布存在——服务能力必须快于到达速度,否则队伍在长期里没有稳态,只会越长越长。这条"ρ 小于一"的判据是整个运筹学的分水岭。

图:生灭过程的状态流

图:生灭过程的状态流

全流程计算:夜间客服排班

背景:某夜间热线呼入为率 λ = 4 通每小时的泊松流,单次通话时长服从均值 12 分钟(率 μ = 5 每小时)的指数分布,坐席一人。问:坐席全忙(来电需等待)的时间占比?队里平均积压几通?

建模:状态 = 正在处理与排队中的来电总数。忙时新来电率仍为 λ(有电话就排队),闲时率同为 λ(来了就接)。这是一个 M/M/1 队列的生灭链:λₙ = λ 恒定,μₙ = μ 恒定。

操作:ρ = λ/μ = 0.8。系统内有 n 通电话的平稳概率 πₙ = (1 − ρ)·ρⁿ,故坐席全忙占比 P(n ≥ 1) = ρ = 0.8;系统平均电话数 L = ρ/(1 − ρ) = 4 通。

解读:占线时间八成、平均积压四通。若规定"积压超过 5 通的时段占比不得超过一成",则 P(n ≥ 6) = ρ⁶ ≈ 0.26——远超标准,需要加坐席或提速。加一名坐席后队列规则改变(M/M/2),利用率降为 0.4,同口径占比骤降一个数量级。

变式:通话时长往往不是指数型(大多短、少数很长,变异系数偏离一)。此时 M/M/1 公式失准,实务上改用 M/G/1 公式或直接仿真(第 5 章排队论一节完整复盘)。生灭模型的定位由此清晰:它能给出结构洞见与量级判断,精细设计要靠更重的工具

import numpy as np rng = np.random.default_rng(678) lam, mu = 4.0, 5.0 T = 2000.0 # 泊松钟模拟 M/M/1:生成到达时刻与逐个服务时长,逐事件推进队列 arr = np.cumsum(rng.exponential(1/lam, size=int(lam*T*1.2))) arr = arr[arr < T] svc = rng.exponential(1/mu, size=len(arr)) busy_until = 0.0 wait_total, queue_area, n_events = 0.0, 0.0, 0 samples = [] for a, s in zip(arr, svc): start = max(a, busy_until) wait_total += start - a queue_area += (start - a) + s # 该客在系统内的总时长 samples.append((start - a) + s) busy_until = start + s print(f"模拟平均系统内电话数 L ≈ {np.mean(samples)*lam:.2f}(公式 4.0)") print(f"模拟忙时占比 ≈ {(busy_until)/T:.3f}(公式 0.800)") # 典型输出:L 约 3.9 至 4.2,忙时占比约 0.80——生灭模型公式与仿真互相咬合

补一个视角:生灭链与第 2 章的接头

生灭过程其实是一群泊松钟的编队:每个状态 i 挂两只钟——"出生钟"以率 λᵢ 走、"死亡钟"以率 μᵢ 走,谁先响走谁。这层图像有两个立刻能兑付的红利。

红利一,模拟代码就是钟的循环:3.4 节的事件驱动仿真里,"生成下一个事件时间"的指数抽样正是这副钟图的直译——先抽"哪只钟先响"(按率加权),再抽"多久后响"(指数分布)。理解了钟图,仿真代码不用背,抄着物理直觉就能写。

红利二,拟稳态与切换直觉:当 λ 与 μ 接近(ρ 趋一),系统在"队短"与"队长"两个区域之间做慢速往返——这是低频的大波动,而钟图里它对应出生钟与死亡钟连响多次同向。运维上这种"偶发长队"最容易误判为容量不足,其实是利用率贴线的固有行为;对症药是把 ρ 压下来(提速或错峰),而不是加缓冲区。结构直觉 + 钟图,比背公式更能指导容量决策——这也是本节反复强调图像的原因。

本节要点回顾

  • 停留指数化 + 转移率表:连续时间马尔可夫链的全部结构,无记忆性是必需品。
  • 柯尔莫哥洛夫前向方程:P'(t) = P(t)Q,泊松推导是它的最小实例。
  • 生灭过程:只走相邻状态,平稳分布逐级乘生率除以死率,乘积形状。
  • ρ < 1 是稳态生死线:服务慢于到达,队伍长期无稳态。
  • 模型定位:生灭链给结构与量级,精细设计交给 M/G/1 或仿真。

到此,链的演化理论齐备。下一节上极限定理:把"长期""稳定"这些词换成严格的收敛陈述。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U