前面什么都没有,为什么还是走不动:幽灵堵塞的账
- 作者:Bougie
- 创建于:2026-10-22
堵了二十分钟,你终于挪到队伍最前面,然后你发现——
前面什么都没有。
没有事故车,没有锥桶,没有施工,没有匝道汇入。路是空的,前面的车正在加速离开。
你刚才堵的那二十分钟,堵的是一个不存在的东西。

这不是段子,它有正式的名字:幽灵堵塞(phantom traffic jam / stop-and-go wave)。而且它是可以被复现、被算、被预测的——我花了两个晚上把它跑了一遍,下面是账。
# 一、22 辆车,230 米,什么都没有
先说一个真实实验,因为它是这件事最干净的证据。
2008 年,日本名古屋大学的 Sugiyama 等人做了一件看起来很无聊的事:找一块空地,画一个周长 230 米的圆圈,放 22 辆车上去,让所有司机做一件事——保持 30 km/h 匀速,别超也别慢。
没有出口,没有入口,没有信号灯,没有弯道,没有坡度,没有行人。22 个成年人,一圈 230 米。
按直觉,这应该是全世界最不可能堵的路。车距 10.45 米,速度 30 km/h,车头时距 1.25 秒——紧,但完全可行。
结果:几十秒之后,车流自己裂开了。
一部分车挤成一团走走停停,另一部分车在前面畅通地跑。这个"挤成一团"的区域没有停在原地,它沿着圆圈向后(也就是逆着车的行进方向)持续移动,绕着圈一圈一圈地跑。司机们什么都没做错,只是有人稍微跟近了一点、有人油门松早了半秒。

这就是幽灵堵塞的完整定义:在没有瓶颈的地方,由车流自身的不稳定性产生的、向上游传播的拥堵波。
它的三个反直觉点:
- 没有原因。 不需要事故、不需要施工。密度够了就会自己发生。
- 它会动。 你以为堵点固定在某处,其实它在以十几 km/h 的速度朝你走来。你被追上了。
- 它不会自己好。 只要密度不降,这团东西能在路上活几个小时,一路传到几十公里外。
下面我用代码把这三件事逐个算一遍。
# 二、模型:四条规则,7.5 米一格
用的是交通流领域最经典的 NaSch 模型(Nagel-Schreckenberg,1992)。它简单到有点冒犯:
把一条路切成一格一格的,每格 7.5 米(一辆车加一点余量),时间一秒一秒地走,每辆车有一个 0~5 的整数速度(5 格/秒 = 37.5 m/s = 135 km/h)。每一秒,所有车同时做四件事:
- 加速:
v = min(v+1, 5)——能快就快一档。 - 跟车:
v = min(v, gap)——前面空几格,最多就跑几格,不许追尾。 - 随机慢化:以概率
p,v = max(v-1, 0)——每个司机每秒都有p的概率莫名其妙慢一档(走神、松油门、看一眼导航)。 - 移动:
x += v。
第 3 条是全部的关键。前三条是"理性司机",第 3 条是"人"。
我把它跑在一个环形道路上——没有进出口,车辆数守恒,这正好对应 Sugiyama 的那个圆圈,也排除了所有外部借口。
# 三、什么都没发生的时候,什么都不会发生
第一次实验我故意做得极端干净:
- 环路 500 格 = 3.75 km,75 辆车 = 20 辆/km
- 初始队形是完美均匀的:每辆车间隔一模一样,速度也都是该有的最大值
- 先把
p设为 0——所有人都是完美司机,从不失误
跑了 300 秒:
t=300s (p=0 无随机慢化): v=135.0 km/h, 停车数=0
300 秒,一个人都没停。而且这是必然的——完美均匀 + 完美司机 = 永远匀速,数学上就是个不动点。
然后我只改一个数:把 p 从 0 改成 0.3。
>> 打开 p=0.3 后第 19 秒出现第一辆停住的车
t=360s: v=84.2 km/h, 停车=13/75, 最长堵塞簇=7 辆
t=480s: v=91.8 km/h, 停车=6/75, 最长堵塞簇=10 辆
t=720s: v=93.2 km/h, 停车=9/75, 最长堵塞簇=5 辆
t=1200s: v=72.4 km/h, 停车=13/75, 最长堵塞簇=11 辆
t=2100s: v=83.5 km/h, 停车=14/75, 最长堵塞簇=13 辆
19 秒。
一条 3.75 公里长、没有任何障碍的环路上,75 辆车从完美队形出发,只因为"每个司机每秒有 30% 概率慢一档",19 秒后就出现了第一辆完全停死的车,之后整条路稳定在 72~93 km/h 之间来回摆,任意时刻都有 6~14 辆车是静止的,而且它们会自发聚成 5~13 辆的团。
没有任何东西阻挡它们。是它们自己堵住了自己。

# 四、崩溃阈值:密度到多少就完了
上一个实验是 20 辆/km。那到底多稀才会安全?
我把环路拉长到 1000 格(7.5 km),每一档都从完美均匀出发,跑 6000 秒,记录"第一次出现停死的车"是第几秒:
| 密度(辆/km) | 首次出现停死 | 6000 秒后均速 | 最长堵塞簇 |
|---|---|---|---|
| 5.3 | 从未 | 128.3 km/h | 0 |
| 8.0 | 从未 | 124.6 km/h | 0 |
| 10.7 | 2741 s | 127.9 km/h | 0 |
| 13.3 | 301 s | 126.1 km/h | 0 |
| 16.0 | 71 s | 113.4 km/h | 4 |
| 18.7 | 14 s | 87.4 km/h | 11 |
| 21.3 | 7 s | 75.4 km/h | 9 |
| 24.0 | 6 s | 61.2 km/h | 17 |
| 26.7 | 3 s | 60.2 km/h | 17 |
| 29.3 | 2 s | 51.9 km/h | 20 |
| 34.7 | 1 s | 43.3 km/h | 29 |
| 40.0 | 1 s | 36.8 km/h | 30 |
这条表最刺眼的是中间那几行:从"能撑 45 分钟"到"7 秒就崩",只差了 8 辆/km。
13.3 辆/km 时能撑 301 秒,16.0 辆/km 时只剩 71 秒,18.7 辆/km 时 14 秒。密度只涨了 1.4 倍,稳定时间掉了 21 倍。
这就是为什么高速公路的拥堵看起来总是"突然"发生的:你不是在越过一条线,你是在翻一座悬崖。前面 20 分钟一切正常,然后某个瞬间开始,整条路的性质就变了。
顺便说一句,这个悬崖的位置和现实对得上——真实高速公路的通行能力拐点也差不多在 20~30 辆/km。模型用的是 1992 年的四条规则,连加速度都没有,却撞到了同一个数量级。
# 五、通行能力:这条路的极限是 1687 辆/小时
把每个密度下的稳态流量画出来,就是交通工程里那张著名的基本图:
| 密度(辆/km) | 均速(km/h) | 流量(辆/h) |
|---|---|---|
| 2.7 | 126.8 | 338 |
| 5.3 | 126.5 | 675 |
| 8.0 | 126.4 | 1011 |
| 10.7 | 125.9 | 1343 |
| 13.3 | 124.5 | 1659 |
| 16.0 | 105.4 | 1687 ← 峰值 |
| 18.7 | 88.2 | 1646 |
| 21.3 | 76.7 | 1636 |
| 26.7 | 58.6 | 1564 |
| 40.0 | 35.4 | 1414 |
| 66.7 | 16.0 | 1067 |
| 80.0 | 11.0 | 878 |
峰值 1687 辆/小时,出现在 16 辆/km、105 km/h 处。
真实世界里,一条高速公路单车道的通行能力设计值是 1800~2200 辆/小时。四条规则、整数速度、没有加速度概念的模型,给出的峰值是 1687。差 10~20%,而且形状完全对:低密度时流量随密度线性上升(速度几乎不变),越过峰值后流量缓慢下降而不是断崖——这就是那个著名的"倒 λ"形。
注意最后一列:密度从 16 涨到 80(5 倍),流量只从 1687 掉到 878(掉 48%)。堵车的真正代价不是"走不了",是"通行能力永久性地掉了一半"。 一条堵死的路每小时还能放走小一千辆车,只是每一辆都走得很慢。
# 六、那个堵点,正在朝你走过来
这是整件事里最违反直觉、也最有用的一条。
我用一个速度剖面的互相关去测它:把 7.5 km 的环路切成 250 段,每 20 秒算一次"这一段路上的平均车速",然后问——20 秒后的速度剖面,是 20 秒前的剖面往哪个方向平移了多少?
五个密度,各测 200 次,中位数全部是同一个数:
| 密度(辆/km) | 波速中位数 | 波速均值 |
|---|---|---|
| 16.0 | −10.8 km/h | −17.4 km/h |
| 20.0 | −10.8 km/h | −11.7 km/h |
| 26.7 | −10.8 km/h | −12.2 km/h |
| 33.3 | −10.8 km/h | −12.4 km/h |
| 40.0 | −10.8 km/h | −13.0 km/h |
负号 = 逆着车流方向。堵塞以大约 11~17 km/h 的速度,朝上游走。

真实观测值是多少?−15 ~ −20 km/h。对上了。
但这里有个更漂亮的东西。交通流里有个守恒律,激波速度可以直接从基本图上读出来,不需要跑模拟:
v_shock = (q_堵 − q_畅) / (ρ_堵 − ρ_畅)
代入我实测的数字:畅行侧 ρ=20 辆/km、q=1649 辆/h,堵塞侧 q≈0,于是只剩一个未知数——堵塞到底有多密。
| 堵塞里的车头间距 | 堵塞密度 | 算出的波速 |
|---|---|---|
| 13.5 m(模型自己的值) | 74 辆/km | −30.5 km/h |
| 8.0 m | 125 辆/km | −15.7 km/h |
| 7.0 m | 143 辆/km | −13.4 km/h |
第一行是我模型自己的产物:实测停死的车前方净空 6.0 m,加一格车长,车头间距 13.5 m,密度只有 74 辆/km——比现实堵死时的 130 辆/km 稀了将近一倍,算出来的波速 −30.5 km/h 也确实偏快。这是 NaSch 格子太粗的代价:一格 7.5 米,堵死了也只能挤到 7.5 米一辆。
但只要把堵塞密度换成现实值,同一个公式立刻吐出 −13.4 ~ −15.7 km/h,正好落在观测区间里。
也就是说:堵塞波传播得多快,几乎不由你用什么模型决定,它主要由"堵死的时候车挨得多紧"决定。 这是车辆数守恒的直接推论,跟司机怎么开车关系不大。这也是为什么全世界的幽灵堵塞,不管在北京、东京还是洛杉矶,波速都在十几 km/h 这个窄区间里。
顺手测了堵塞内部长什么样(20 辆/km,稳定后统计 3000 秒):
- 停死的车,前方净空平均 6.0 m(加一格车长,车头间距 13.5 m)
- 还在跑的车(v≥108 km/h),前方净空平均 62.8 m
- 任意时刻,30.8% 的车陷在拥堵里(≤27 km/h),18.6% 完全停死
- 全程均速 82.4 km/h,流量 1649 辆/h
也就是说:一条均速还有 82 km/h 的"还行"的路上,有将近五分之一的车是一动不动的。这个画面你一定见过——你在慢慢挪,旁边车道唰唰地过,你们在同一条路上,但你们不在同一个世界里。
# 七、走走停停:你被那道波碾了几次

对单辆车来说,被一道堵塞波碾过去是什么体验?
在 20 辆/km 的环路上稳定之后,我盯住其中一辆车,记了 400 秒的速度。它大部分时间跑在 135 km/h,偶尔掉到 108,某几次直接归零:
108 135 135 135 108 135 … 108 27 27 27 135 … 81 135 27 135 81 108 0 135 0 27 108 54 135 81 …
400 秒里它停了 2 次,累计静止 2 秒,最高 135,最低 0。
(这里必须坦白一件事:NaSch 的速度是整数档,一档 27 km/h,所以从它的时间序列算"加速度"会得到 −37.5 m/s² 这种荒谬数字——那是离散化的假象,不是物理。真实车辆的舒适减速在 2~3 m/s²,紧急刹车 6~8 m/s²。我试过用更细的网格和连续的 IDM 模型去补这个数,但细网格下 NaSch 失去了"期望车头时距"这个机制,根本不会自发限速;IDM 在我这组经典参数下又收敛得太干净,扰动衰减掉了。所以这个数我选择不编,直接说明测不出来。)
但"被碾几次"这个结构是对的:走走停停不是一种驾驶风格,是你反复穿过同一道波。 每次你以为"终于要通了",其实只是你走出了波尾;前面还有一道,或者同一道绕回来了。
# 八、人的失误到底有多重要
回到第 3 条规则的概率 p——"每秒有多大概率莫名其妙慢一档"。我扫了一遍:
| p | 首次出现停死 | 稳态均速 | 拥堵车占比 | 平均最长堵塞簇 |
|---|---|---|---|---|
| 0.00 | 从未 | 135.0 km/h | 0.0% | 0.0 |
| 0.02 | 从未 | 133.8 km/h | 0.0% | 0.0 |
| 0.05 | 948 s | 131.4 km/h | 0.0% | 0.0 |
| 0.10 | 34 s | 121.1 km/h | 4.4% | 2.8 |
| 0.15 | 24 s | 107.8 km/h | 12.1% | 5.4 |
| 0.20 | 19 s | 98.8 km/h | 19.1% | 8.9 |
| 0.30 | 14 s | 81.5 km/h | 30.1% | 10.5 |
| 0.50 | 7 s | 54.4 km/h | 52.7% | 15.5 |
(同样 3.75 km 环路、20 辆/km、从完美均匀出发,预热 200 秒后打开 p。)
p=0 和 p=0.02,永远不堵。p=0.05,能撑 948 秒。p=0.10,34 秒。
门槛在 0.05 到 0.10 之间,很陡。
这条表是整篇文章里我最想留下的一个:堵塞的成因不是"车太多",是"车够多 + 人不够完美"。密度是柴,随机慢化是火。柴少了点不着(第四节里 5.3 辆/km 那一行,6000 秒一个人都没停),火小了也点不着(p=0.02 时 20 辆/km 照样稳在 133.8 km/h)。
这也解释了为什么自适应巡航(ACC)这件事的杠杆比想象中大:它不修路、不加道,它只是把 p 从 0.3 往 0.05 那边推。而表上那一格,就是"34 秒崩溃"和"能撑 16 分钟"的区别。
# 九、一个人踩两秒刹车,能造成什么
最后一个实验,也是我最想做的一个。

设置:7.5 km 环路,从完美均匀出发,先跑 200 秒让它稳定,然后——
- 对照组:什么都不做
- 干预组:让其中一辆车停死 2 秒(一次犹豫、一次看手机、一次点刹)
之后各观察 2000 秒。每个密度做 150 组成对对照(两组用完全相同的随机序列,唯一的差别就是那 2 秒):
| 密度 | 对照组出现停死 | 干预组出现停死 | 平均停死车数 |
|---|---|---|---|
| 8.0 辆/km | 2% | 55% | 0.0 → 0.7 |
| 9.3 辆/km | 11% | 53% | 0.2 → 0.8 |
| 10.7 辆/km | 30% | 73% | 0.7 → 1.8 |
| 12.0 辆/km | 77% | 93% | 3.5 → 6.3 |
在 8 辆/km——一条相当空的路——上,什么都不做的话,150 次里只有 3 次会出现有人停死。
加一次两秒的急刹,这个数字变成 55%。27 倍。
而造成的直接总行程损失,平均只有 7 车·米——60 辆车加起来,一共少走了 7 米。
这两个数字放在一起才是完整的故事:一个人的小失误,几乎不造成任何直接损失,但它能把整条路从"稳定态"踢进"堵塞态"。 损失不是那 7 米,损失是后面那个再也回不去的状态。
(顺便报告一个负结果:我原本想测"通行能力下降 / 迟滞"——就是那种"堵过一次之后,同样的密度再也回不到原来的通行率"的现象。在 p=0.3 下没测出来,上下行两条曲线几乎重合,下降只有 1.5%。原因大概是 30% 的随机慢化太强,系统在所有密度下都已经是堵塞态,没有留下双稳的空间。这个效应在真实数据里是存在的,常见的量级是 5~20%。我的模型抓不到它,这是模型的局限,不是现象不存在。)
# 十、所以能怎么办
账算完了,回到地面上。
1. 你等的那个堵点会动,而且它在朝你来。 波速 11~17 km/h 向后。你排队等的那一段,可能是三十公里外某个人在两分钟前点了一脚刹车。
2. "拓宽道路"的收益有上限,而且上限很低。 通行能力的峰值在 16 辆/km、1687 辆/h。超过这个点,加的车越多,流量反而越低——表里 80 辆/km 只剩 878 辆/h。拓宽能抬高天花板的绝对高度,但抬不抬得动那个密度,取决于入口放行了多少车。
3. 最有杠杆的不是路,是 p。 第八节那张表把这件事说得比任何口号都清楚:从 0.30 降到 0.10,崩溃时间从 14 秒变成 34 秒,稳态速度从 81.5 涨到 121.1。ACC、车路协同、匝道控制,本质上都是在压这个数。
4. 你个人能做的一件事:别当那个扰动源。 第九节那张表是 27 倍。在临界密度附近,一次不必要的急刹不是"我慢了两秒",是"我把这条路的性质改了"。保持匀速、提前松油门、别急刹——这些老生常谈不是道德劝导,是在 p 已经很高的系统里,你唯一能往下压的那一档。
# 最后
写完这篇,我记住的是三个数字:
- 19 秒——一条空路,从完美队形出发,只因为人会失误,19 秒后自发起堵。
- −11 ~ −16 km/h——堵塞波向后传播的速度。它是守恒律的推论,不是什么模型参数,所以它在全世界的路上都差不多。
- 27 倍——一个人踩两秒刹车,把"会不会有人停死"的概率从 2% 拉到 55%。
这三个数字讲的其实是同一件事:堵车不是一个"事件",是一个"相变"。 它是车流这种流体在某个密度下失去稳定性的必然结果,事故、施工、并道都只是触发器,不是原因。
所以我们才有那种荒诞的体验——堵了二十分钟,挪到最前面,发现什么都没有。
当然什么都没有。原因在二十分钟前,在你身后三十公里,在某一个和你一样赶时间的人松开的那一脚油门里。
附注:文中所有数字都由两个脚本跑出,除了 IDM 那一节(扰动衰减、测不出波)之外的结论都可以复现。模型是标准 NaSch:格子 7.5 m、步长 1 s、vmax=5(135 km/h)、随机慢化概率 p。环形边界、车辆守恒、并行更新。想自己搭的话,核心就是四行:
v=min(v+1,5)→v=min(v,gap)→if(rnd()<p) v--→x+=v。跑出来的数字应该和本文逐位一致。