4. 宏观交通流模型:LWR模型与CTM模型

各位同学,今天我们来聊聊宏观交通流模型。说实话,微观模型虽然精细,但跑起来太慢了。你想想看,模拟一座城市几万辆车,每辆车都要算跟驰、换道,那计算量简直吓人。所以做大规模路网仿真时,我个人的习惯是先用宏观模型打个底。

宏观模型不关心每一辆车怎么开,它把车流当成一种「流体」来处理。就像水管里的水,我们只关心流量、密度、速度这三个宏观量。今天重点讲两个经典模型:LWR模型和CTM模型。

核心思想:宏观交通流模型将车辆流视为连续介质,用偏微分方程描述流量、密度、速度之间的关系。说白了,就是把车流当成水流来算。

4.1 LWR模型:宏观模型的鼻祖

LWR模型是1950年代由Lighthill、Whitham和Richards三位大佬提出的。我记得第一次看这个模型时,觉得它太简洁了——就一个方程。但后来在项目中才发现,越简单的模型,用起来越考验功力。

4.1.1 基本方程

LWR模型的核心是一个守恒方程:

∂ρ/∂t + ∂q/∂x = 0

其中:

  • ρ(x,t) 表示位置x、时刻t的交通密度(veh/km)
  • q(x,t) 表示流量(veh/h)
  • 方程含义:某段路上的车辆数变化 = 流入量 - 流出量

这个方程本身不完整,因为有两个未知数ρ和q。所以还需要一个「本构关系」——也就是流量-密度关系。最常用的是Greenshields模型:

q = ρ * vf * (1 - ρ/ρmax)

其中vf是自由流速度,ρmax是阻塞密度。这个关系画出来是个抛物线,峰值就是道路的通行能力。

我的经验:Greenshields模型虽然简单,但在城市道路中误差较大。我曾经在快速路项目里试过,发现拥堵段的拟合效果很差。后来改用三角形基本图(triangular fundamental diagram),效果好了不少。建议你们做项目时,先拿实测数据标定一下基本图参数。

4.1.2 激波与交通波

LWR模型最精彩的地方,是它能描述「交通波」的传播。为什么会这样?因为守恒方程的解会出现间断——也就是激波。

举个例子:前方发生事故,车辆突然减速。这个减速信息会像波浪一样向后传播。传播速度可以用下式计算:

vw = (q2 - q1) / (ρ2 - ρ1)

如果vw是负的,说明拥堵波在向上游传播——这就是我们常说的「幽灵堵车」的数学本质。

避坑指南:我曾经在仿真一个隧道入口时,直接用LWR模型算激波速度,结果发现波速比实际观测快了30%。后来排查发现,是基本图的自由流速度参数没标定好。隧道里司机会主动减速,vf不能直接用路段限速值。切记,参数标定一定要结合实测数据。

4.2 CTM模型:把LWR搬到计算机里

LWR模型虽然漂亮,但它是连续方程,计算机没法直接算。CTM(Cell Transmission Model)就是LWR的离散化版本。1994年由Daganzo提出,我愿称之为「交通仿真界的瑞士军刀」。

4.2.1 元胞划分

CTM把道路分成若干等长的元胞(cell)。每个元胞的长度通常取为自由流速度在一个时间步内的行驶距离:

Δx = vf * Δt

这样做的好处是,车辆在一个时间步内最多只能从一个元胞进入下一个元胞,不会跳格。

参数 含义 典型值
Δx 元胞长度 100~500 m
Δt 时间步长 5~15 s
ρmax 阻塞密度 180 veh/km/车道
Qmax 通行能力 2000 veh/h/车道

4.2.2 流量更新规则

CTM的核心是每个时间步的流量计算。说白了,就是看「上游能送多少」和「下游能收多少」,取最小值:

y_i(t) = min( S_i(t), R_{i+1}(t) )

其中:

  • S_i(t) 是元胞i的发送能力:S_i = min( Qmax, vf * ρ_i )
  • R_{i+1}(t) 是元胞i+1的接收能力:R_{i+1} = min( Qmax, w * (ρmax - ρ_{i+1}) )
  • w 是拥堵波的传播速度

更新完流量后,密度更新就很简单了:

ρ_i(t+1) = ρ_i(t) + (y_{i-1}(t) - y_i(t)) * Δt / Δx

关键点:CTM的流量计算本质上是「供需平衡」。上游能发多少货(供给),下游能收多少货(需求),取小值。这个思想在交通控制中非常实用。

4.2.3 代码实现示例

下面是一个简单的CTM仿真核心代码。嗯,这里只展示最核心的更新逻辑:

def ctm_step(rho, Qmax, vf, w, rho_max, dt, dx):
    # 计算发送能力
    S = np.minimum(Qmax, vf * rho)
    
    # 计算接收能力
    R = np.minimum(Qmax, w * (rho_max - rho))
    
    # 计算实际流量(边界处特殊处理)
    y = np.zeros_like(rho)
    y[:-1] = np.minimum(S[:-1], R[1:])
    
    # 更新密度
    rho_new = rho + (np.roll(y, 1) - y) * dt / dx
    
    return rho_new

我的建议:实际项目中,CTM的边界条件处理很关键。入口边界通常用实测流量或OD数据驱动,出口边界要小心反射波。我曾经在高速路网仿真中,因为出口边界没处理好,导致拥堵波在路网里来回反弹,仿真结果完全失真。后来加了「吸收边界条件」才解决。

4.3 LWR与CTM的对比

这两个模型的关系,说白了就是「连续版」和「离散版」的区别。我整理了一个对比表:

特性 LWR模型 CTM模型
数学形式 偏微分方程 差分方程
计算方式 解析解/数值解 迭代更新
精度 理论精确 离散近似
计算效率 较低 极高
适用场景 理论分析 工程仿真

我个人在项目中几乎只用CTM。LWR更适合做理论推导,比如分析交通波的传播特性。但真要跑仿真、做控制,CTM的效率和灵活性无可替代。

4.4 本章知识体系

下面这张图展示了LWR模型和CTM模型的核心逻辑关系:

宏观交通流模型知识体系 LWR模型(连续) CTM模型(离散) 离散化 守恒方程:∂ρ/∂t + ∂q/∂x = 0 基本图:q = f(ρ) 激波:vw = Δq/Δρ 元胞划分:Δx = vf·Δt 流量更新:y = min(S, R) 密度更新:ρ(t+1) = ρ(t) + Δy·Δt/Δx 核心:将交通流视为连续介质,用守恒律描述宏观行为

从这张图可以看得很清楚:LWR是理论基础,CTM是工程实现。两者一脉相承,但各有侧重。

重要提醒:CTM虽然好用,但它假设所有元胞长度相等、时间步长固定。如果路网中有匝道、交叉口,需要做特殊处理。我曾在城市路网中用CTM,结果在信号灯路口处流量计算总出错。后来加了「节点模型」来处理分流合流,才算搞定。

好了,宏观模型就讲到这里。LWR和CTM是交通仿真的基石,理解透了,后面学动态交通分配、网络流控制都会轻松很多。记住,模型是工具,关键是要知道它的适用边界。

可可精品资料库