3. 经典排队模型(M/M/1、M/M/c、M/M/c/K)解析与容量直觉

在随机仿真中,解析模型的价值不在于替代仿真,而在于提供一个“可信的锚点”。当我们用 M/M/1、M/M/c、M/M/c/K 推导出稳态指标后,仿真结果若与之偏差过大,往往说明模型假设、随机数流或统计区间出了问题。本节围绕三个经典模型的稳态分布与性能公式展开,重点建立“服务强度 ρ 如何非线性地放大等待”的容量直觉。

一、统一记号与建模假设

三个模型共享同一套假设:到达为泊松过程(到达率 λ),服务时间为独立同分布的指数分布(单服务台服务率 μ),顾客按先到先服务排队,队列容量与顾客源视为无限(M/M/c/K 除外)。定义服务强度 ρ = λ/(cμ),其中 c 为服务台数量。对 M/M/1 与 M/M/c,稳定条件为 ρ < 1;对 M/M/c/K,即使 ρ ≥ 1 系统也不会发散,因为容量 K 强制截断了状态空间。

需要特别强调参照约定:本节所有“系统内人数”均指正在服务和正在排队的人数之和,记作 n;排队人数为 n − c(当 n > c 时)。这一约定在后续公式与图示中保持一致。

二、M/M/1:几何分布的稳态与 1/(1−ρ) 放大效应

M/M/1 的稳态分布是几何分布:P(n) = (1−ρ)ρⁿ,n = 0,1,2,…。由此可直接得到平均系统人数 L = ρ/(1−ρ),平均排队人数 Lq = ρ²/(1−ρ)。用 Little 公式 L = λW 与 Lq = λWq,得到平均逗留时间 W = 1/(μ−λ),平均等待时间 Wq = ρ/(μ−λ)。

这组公式最值得记住的不是形式,而是 ρ 趋近 1 时的爆炸性。以 μ = 10 单/小时为例:当 λ = 5(ρ = 0.5)时,Wq = 0.5/(10−5) = 0.1 小时 = 6 分钟;当 λ = 8(ρ = 0.8)时,Wq = 0.8/2 = 0.4 小时 = 24 分钟;当 λ = 9(ρ = 0.9)时,Wq = 0.9/1 = 0.9 小时 = 54 分钟。负载从 80% 提到 90%,等待时间放大了 2.25 倍。这就是容量规划中“留余量”的数学根源。

三、M/M/c:多服务台带来的池化收益

M/M/c 的稳态分布需要先算 P₀:

P0 = [ Σ(k=0..c-1) (cρ)^k / k!  +  (cρ)^c / (c!(1−ρ)) ]^(−1)
P(n) = P0 · (cρ)^n / n!          , n ≤ c
P(n) = P0 · c^c ρ^n / c!         , n > c

排队概率由 Erlang C 公式给出:C(c, ρ) = P(排队) = [ (cρ)^c / (c!(1−ρ)) ] · P₀。于是 Lq = C(c,ρ)·ρ/(1−ρ),Wq = Lq/λ。与 M/M/1 对比可见:在相同 ρ 下,c 越大,Erlang C 越小,等待越短。这就是“服务台池化”效应——把 c 个独立的 M/M/1 合并为一个 M/M/c,总容量不变,但等待显著下降,因为空闲服务台可以被任意队列共享。

示例:λ = 8,μ = 5,若用 2 个独立 M/M/1(各 λ=4,ρ=0.8),每个 Wq = 0.8/(5−4) = 0.8 小时;若合并为 M/M/2(ρ = 8/10 = 0.8),Erlang C 计算得 C ≈ 0.711,Lq ≈ 0.711×0.8/0.2 ≈ 2.84,Wq ≈ 2.84/8 ≈ 0.356 小时。池化把等待从 48 分钟降到约 21 分钟。注意这是按公式计算的示例值,实际仿真会因随机波动略有差异。

四、M/M/c/K:有限容量下的阻塞与截断

当系统最多容纳 K 人(K ≥ c),到达时若已有 K 人则被拒绝(阻塞)。稳态分布为截断形式:P(n) = P₀·(cρ)^n/n!(n ≤ c),P(n) = P₀·c^c ρ^n/c!(c < n ≤ K),P₀ 由归一化求得。关键指标是阻塞概率 P_K = P(K),它直接决定有效到达率 λ_eff = λ(1−P_K)。此时实际吞吐为 λ_eff,平均人数与等待需用 λ_eff 代入 Little 公式,否则会系统性高估。

M/M/c/K 的容量直觉与无限容量模型不同:当 ρ ≥ 1 时系统不会发散,而是稳定在“高阻塞”状态,P_K 随 K 增大而趋近 1。因此对有限容量系统,调参目标往往不是压低等待,而是在阻塞率与资源占用之间取平衡。

服务强度 ρ 对等待与阻塞的非线性影响(μ=10 示例) 平均等待 Wq(小时) ρ Wq 0 0.3 0.6 0.9 1.0 ρ=0.9 → 0.9h ρ=0.9 → 0.36h M/M/1 M/M/2(池化) M/M/c/K 阻塞概率 P_K K P_K c c+2 c+4 c+6 c+8 ρ=0.8 ρ=1.2 容量 K 增大:ρ<1 时阻塞下降,ρ>1 时阻塞趋近 1

五、把解析基准用于仿真验证

建立解析基准后,验证流程应围绕“同参数、同统计口径”展开。以 M/M/1(λ=8,μ=10)为例,解析值 Wq = 0.4 小时。仿真时需注意三点:其一,预热期要足够长,建议丢弃前 10% 的观测以消除初始空系统偏差;其二,统计量应使用样本均值并给出置信区间,例如重复 30 次独立运行,取 Wq 均值的 95% 置信区间,若解析值落在区间内则可接受;其三,随机数流要独立,避免到达与服务共用同一流导致相关性。

对 M/M/c,验证重点应放在 Erlang C 与池化效应上:分别仿真 c 个独立队列与 1 个共享队列,比较 Wq,确认共享队列显著更优。对 M/M/c/K,则必须同时核对阻塞概率 P_K 与有效吞吐 λ_eff,因为只比对等待时间会掩盖阻塞造成的吞吐损失。下表给出一个可直接套用的验证记录结构(示例参数,非实测结果):

模型参数解析指标仿真观测判断
M/M/1λ=8, μ=10Wq=0.4h, L=4Wq 均值与 95%CI解析值落入 CI 即通过
M/M/2λ=8, μ=5Wq≈0.356h共享队列 Wq显著低于两独立队列
M/M/2/4λ=8, μ=5, K=4P_K, λ_eff阻塞率与吞吐两者同时吻合
容量直觉一句话:ρ 是“放大器”,不是“线性刻度”。在 ρ 从 0.5 到 0.9 的区间,等待时间可能放大数倍;而多服务台池化与有限容量截断,是两种方向相反但都极其有效的调节手段。

最后提醒一个常见误区:M/M/c 的 ρ 定义分母是 cμ,而不是 μ。若误用单台服务率计算,会把 ρ 高估 c 倍,导致稳定条件判断错误。仿真前先用解析公式手算一遍 ρ、L、Wq,再与仿真对照,是成本最低、收益最高的校验习惯。