前面什么都没有,为什么还是走不动:幽灵堵塞的账

堵了二十分钟,你终于挪到队伍最前面,然后你发现——

前面什么都没有。

没有事故车,没有锥桶,没有施工,没有匝道汇入。路是空的,前面的车正在加速离开。

你刚才堵的那二十分钟,堵的是一个不存在的东西。

堵到天黑的高速:一条由刹车灯连成的线,尽头什么也没有

这不是段子,它有正式的名字:幽灵堵塞(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 秒——紧,但完全可行。

结果:几十秒之后,车流自己裂开了。

一部分车挤成一团走走停停,另一部分车在前面畅通地跑。这个"挤成一团"的区域没有停在原地,它沿着圆圈向后(也就是逆着车的行进方向)持续移动,绕着圈一圈一圈地跑。司机们什么都没做错,只是有人稍微跟近了一点、有人油门松早了半秒。

一圈封闭的环形跑道:没有出口、没有信号灯,车流却自己裂成了两段

这就是幽灵堵塞的完整定义:在没有瓶颈的地方,由车流自身的不稳定性产生的、向上游传播的拥堵波。

它的三个反直觉点:

  1. 没有原因。 不需要事故、不需要施工。密度够了就会自己发生。
  2. 它会动。 你以为堵点固定在某处,其实它在以十几 km/h 的速度朝你走来。你被追上了。
  3. 它不会自己好。 只要密度不降,这团东西能在路上活几个小时,一路传到几十公里外。

下面我用代码把这三件事逐个算一遍。


# 二、模型:四条规则,7.5 米一格

用的是交通流领域最经典的 NaSch 模型(Nagel-Schreckenberg,1992)。它简单到有点冒犯:

把一条路切成一格一格的,每格 7.5 米(一辆车加一点余量),时间一秒一秒地走,每辆车有一个 0~5 的整数速度(5 格/秒 = 37.5 m/s = 135 km/h)。每一秒,所有车同时做四件事:

  1. 加速:v = min(v+1, 5)——能快就快一档。
  2. 跟车:v = min(v, gap)——前面空几格,最多就跑几格,不许追尾。
  3. 随机慢化:以概率 p,v = max(v-1, 0)——每个司机每秒都有 p 的概率莫名其妙慢一档(走神、松油门、看一眼导航)。
  4. 移动: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。跑出来的数字应该和本文逐位一致。