主页 模型库 竞赛 学习中心 工具箱 论文库 前沿 建模空间 AI建模
学习中心 探索专题 随机过程与马尔可夫链 排队论

本页实验台

  1. 泊松到达
  2. M/M/1 队列
  3. 多窗口还是多队
  4. Little 定律
LAB 01

泊松到达

到达间隔是指数分布:看"平均每分钟一个"其实有多不均匀

问题
"平均每分钟来一个客人"听上去很均匀,但排队的人都知道并不是。问题是:随机到达到底有多不均匀,以及这种不均匀本身会带来多少等待。这一台先把"到达"这件事的分布拿出来看清楚。
模型
泊松过程:单位时间到达数服从泊松分布,相邻两次到达的间隔服从指数分布。
P(N(t)=k) = e−λt(λt)k ⁄ k!,  间隔 T ~ Exp(λ),  E[T] = 1/λ
λ 是到达率。指数分布"无记忆":已经等了 10 分钟,再等的时间分布和刚开始等时一模一样。
一共来了多少人—
平均间隔 / 理论值 1/λ—
间隔的变异系数(指数分布应为 1)—
每分钟人数的均值 / 方差—
先看最上面那条时间轴:竖线明显是一丛一丛的,中间又有大片空白。可参数明明是"平均每分钟 1.2 个人"——完全均匀的到达。这就是泊松过程最容易被误解的地方:"随机且均匀"产生的图案看起来一点也不均匀。人眼很不擅长这件事,总把随机的成团当成"有规律"。(同一个误判在天灾、疾病和事故的"聚集"报道里反复出现。)中间那排柱子是每分钟实际来了几个人:有的分钟 0 个,有的分钟 4 个,这才是泊松分布的样子。注意第四行读数:每分钟人数的均值和方差几乎相等——这是泊松分布的招牌特征,也是实践中判断"到达是不是泊松"的第一个检验。下面的直方图是相邻到达的间隔,和指数曲线贴得很紧,变异系数接近 1。指数分布的无记忆性在这里有一个很实在的推论:不管你已经等了多久,再等下一个人的期望时间都是 1/λ。已经空等了三分钟,并不意味着"下一个马上就到"。
LAB 02

M/M/1 队列

拖动利用率 ρ,看队长在 0.8 之后怎么起飞

问题
一个窗口、一条队,服务能力明明还没用满,为什么利用率一过 0.8,队就突然长得吓人?这不是运气不好,是一条能写下来的公式。医院、机场、服务器、工厂都撞在同一条曲线上。
模型
M/M/1:到达是泊松、服务时间是指数、一个窗口。令 ρ = λ/μ < 1。
L = ρ ⁄ (1 − ρ),  W = 1 ⁄ (μ − λ),  Lq = ρ² ⁄ (1 − ρ)
λ 到达率,μ 服务率,ρ 是利用率。分母上的 1 − ρ 就是"起飞"的来源:ρ 从 0.8 到 0.9,队长从 4 变成 9。
理论 L—
模拟 L—
理论排队时间 Wq—
模拟排队时间 Wq—
这条曲线是排队论里最该记住的一张图:Lq = ρ²/(1−ρ)。把利用率从 50% 提到 80%,队长从 0.5 变成 3.2;再从 80% 提到 90%,队长从 3.2 变成 8.1;从 90% 提到 95%,队长跳到 18。最后这 5 个百分点的"效率提升",让平均排队人数翻了一倍多。这就是为什么医院急诊、机场安检、服务器集群的设计利用率一般都压在 70%–85%——不是不想榨干产能,而是 1/(1−ρ) 这条曲线在后面等着。下面那张队长随时间变化的图同样重要。即使平均队长只有 3.2 人,某些时刻也会堆到十几个。排队系统的痛点从来不是均值,是那些尖峰:客户记住的是最长的那次等待,不是平均的那次。把利用率拖到 0.95 再看,尖峰会高得离谱,而且系统要花很久才回落——高利用率不只让平均变差,还让"从拥堵中恢复"变慢。(模拟值在 ρ 很高时会略低于理论值,因为有限的模拟时长还没来得及采到那些极长的拥堵段。)
LAB 03

多窗口还是多队

同样的总服务能力,一队多窗为什么比多队多窗好

问题
银行排一条大队叫号,超市每个收银台各排一队。总服务能力一样,为什么一队多窗明显更快?这一台把两种排法放在同一组参数下比,差多少是可以算出来的。
模型
M/M/c(一队 c 窗)的排队概率由 Erlang C 给出;c 条独立的 M/M/1 则各自按上一台的公式算。
C(c,a) = [ ac/c! · c/(c−a) ] ⁄ [ Σk=0..c−1 ak/k! + ac/c! · c/(c−a) ],  Wq = C(c,a) ⁄ (cμ − λ)
a = λ/μ 是到达强度,c 是窗口数。一队多窗能把空闲的窗口借给别人,多队多窗不能——差别全在这里。
一条队 c 个窗口的 Wq—
c 条独立队列的 Wq—
慢多少倍—
一条队时"需要等"的概率—
两种排法的总服务能力完全一样,利用率也一样,结果差了好几倍。c=3 时,一条队三个窗口的平均等待是 1.62,三条独立的队各一个窗口是 5.67——慢了 3.5 倍。c=4 时差 4.9 倍,c=6 时差 8.2 倍。窗口越多,合并排队的优势越大。原因很简单:分开排队时,完全可能出现"一个窗口前排了五个人,隔壁窗口空着"的浪费;合并成一条队,只要还有人在等,就不可能有窗口闲着。这个现象叫资源池化,在银行、机场、超市已经全面普及,在服务器负载均衡、共享单车调度、医院床位统筹里是同一件事。注意最后一行读数:即使窗口很多,"需要等一下"的概率仍然不低(c=3、ρ=0.85 时是 0.73)。合并排队降的是等待时长,不是等待概率——你还是要排,只是排得快多了。(这也解释了为什么大家对"一条蛇形队"的体验更好:队看起来更长,但动得更快,而且绝对公平。)
LAB 04

Little 定律

L=λW:一条几乎不需要假设的恒等式,怎么用来估等待时间

问题
你站在店门口,数出店里有 20 个人、每分钟进来 4 个,不问任何分布,能不能直接说出平均每人待多久?能。这条恒等式几乎不需要假设,是运营分析里用得最多的一把尺子。
模型
Little 定律:只要系统长期稳定(进出平衡),三者恒等。
L = λ W,  Lq = λ Wq
L 是系统里的平均人数,λ 是到达率,W 是每人的平均停留时间。对到达过程和服务分布都没有要求,排队规则也不限——这是它最强的地方。
系统里的平均人数 L—
实际到达率 λ—
平均逗留时间 W—
λ × W—
把服务时间分布换来换去,盯住最后两行读数:它们永远相等。ρ=0.8、c=2 时:指数分布下 L=4.47、λW=4.47;固定时长下 L=3.02、λW=3.02;重尾分布下 L=11.26、λW=11.26。L 本身变了将近四倍,L=λW 却一位小数都不差。这就是 Little 定律。它不要求到达是泊松的、不要求服务时间是指数的、不要求先来先服务,甚至不要求系统内部是什么结构——只要系统是稳定的,这条恒等式就成立。在建模里它有一个特别实用的用法:三个量里测两个,第三个就免费得到了。想知道平均逗留时间但没法跟踪每个人?数一数系统里平均有多少人、每分钟进来多少人,一除就是。("在制品数 = 吞吐率 × 生产周期"、"平均库存 = 出货速度 × 库存周转天数"说的都是这一句。)另一件同样重要的事:换个服务时间分布,L 从 3.02 变到 11.26。平均服务时间一点没变,只是方差变了。排队系统对方差的敏感程度,远超过对均值的敏感程度——想缩短队伍,让服务时间更稳定,往往比让它更快更有效。

这一页想说的

排队论给了三个可以直接用的结论。第一,等待时间按 1/(1−ρ) 增长,高利用率的代价是非线性的;第二,把资源池化(一条队多个窗口)在同样成本下能把等待时间降到几分之一;第三,L=λW 几乎不需要假设,是估算里最省事的一把尺子。再加一条常被忽略的:系统对服务时间的方差比对均值更敏感。

接着看

← 返回模块 ← 返回探索专题