1. 交通流基础:交通流三参数的定义与关系

大家好,我是你们这堂课的老朋友。今天咱们聊聊交通流最核心的东西——三参数。说白了,就是流量、密度、速度这三个家伙。我做了十几年交通仿真,跟它们打了无数交道,今天就把我的经验掰开揉碎了讲给你听。

1.1 流量:单位时间能过多少车?

流量,英文叫 Flow,符号是 q。它的定义很简单:单位时间内通过某个断面的车辆数。单位通常是 veh/h(辆/小时)。

举个例子:你在高速收费站数车,1小时内过了 1200 辆车,那流量就是 1200 veh/h。

注意:流量不是速度,也不是密度。它只关心「过了多少」,不关心「车跑多快」或「车挨得多近」。

我个人的习惯:做仿真时,流量是最容易从检测器拿到的数据。但别高兴太早——流量高不一定代表路况好。我曾经遇到一个项目,流量显示 2000 veh/h,结果一看视频,车都堵成停车场了。为什么?因为流量在拥堵时反而会下降。这个坑我后面会细说。

1.2 密度:路上车挤不挤?

密度,符号 k,单位是 veh/km(辆/公里)。它描述的是某段路上单位长度内有多少辆车。

你想想看:一条 1 公里长的路,如果上面有 50 辆车,那密度就是 50 veh/km。密度越大,说明车越挤,越容易堵车。

关键点:密度是空间上的概念,流量是时间上的概念。两者不能混为一谈。

避坑指南:我曾经在仿真里把密度设得过高,结果模型直接崩溃。后来发现,密度超过某个阈值(比如 150 veh/km),车辆根本动不了。这个阈值叫「阻塞密度」,后面会讲。

1.3 速度:车跑得快不快?

速度,符号 v,单位 km/h。这里要区分两种速度:

  • 时间平均速度:固定点测速,取所有车的平均。比如雷达测速。
  • 空间平均速度:某段路上所有车的平均速度。这个更接近「路况感觉」。

我个人做仿真时,几乎只用空间平均速度。为什么?因为时间平均速度会被快车带偏。举个例子:路上 9 辆车跑 60 km/h,1 辆车跑 120 km/h,时间平均是 66 km/h,但实际路况就是堵的。空间平均能更真实反映拥堵程度。

1.4 三参数的关系:基本图理论

好了,三个参数讲完了。它们之间有个铁打的关系:

流量 = 密度 × 速度

即:q = k × v

这个公式简单到令人发指,但背后藏着整个交通流理论的精髓。你想想看:如果密度很大但速度很慢,流量不一定高;如果速度很快但密度很小,流量也不一定高。只有两者搭配得当,流量才能达到最大值。

这就是「基本图」的核心思想。基本图是啥?就是流量-密度关系曲线。我画个图给你看:

密度 k (veh/km) 流量 q (veh/h) 最大流量 q_max k=0, q=0 阻塞密度 k_jam 自由流区域 (速度高,密度低) 拥堵区域 (速度低,密度高) k_c

这张图我手绘过无数次。横轴是密度,纵轴是流量。曲线先上升后下降,像个倒扣的碗。为什么?

  • 左半段(自由流):密度小,车少,速度高。流量随密度增加而增加。
  • 顶点(临界点):密度达到某个值 k_c,流量达到最大值 q_max。这是路能承受的最大通行能力。
  • 右半段(拥堵流):密度继续增加,车挤车,速度下降,流量反而降低。

嗯,这里要注意:基本图不是一条固定的曲线。它受道路条件、驾驶员行为、天气等因素影响。我在项目中遇到过,同样的路,晴天和雨天的基本图完全不一样。所以做仿真时,千万别拿一条曲线套所有场景。

1.5 速度-密度关系:另一个视角

除了流量-密度图,速度-密度关系也很常用。公式是:

v = v_free × (1 - k / k_jam)

其中 v_free 是自由流速度(路上没车时的速度),k_jam 是阻塞密度(车完全动不了时的密度)。

这个公式是线性关系,简单好用。但实际数据往往不是直线,而是曲线。我建议初学者先用这个线性模型,等熟悉了再上更复杂的模型(比如 Greenshields 模型、Underwood 模型等)。

参数 符号 单位 典型范围
流量 q veh/h 0 ~ 2400(单车道)
密度 k veh/km 0 ~ 150(单车道)
速度 v km/h 0 ~ 120
自由流速度 v_free km/h 60 ~ 120
阻塞密度 k_jam veh/km 100 ~ 200

警告:基本图是宏观模型,不能直接用于微观仿真中的跟车行为。我曾经犯过这个错——把基本图公式直接塞进跟车模型里,结果仿真出来的车流像鬼畜一样抖动。微观仿真要用跟车模型(比如 IDM、Gipps 模型),基本图只用于宏观层面的验证和校准。

1.6 实战:用 Python 画基本图

光说不练假把式。我写段代码,让你亲手画出基本图:

import numpy as np
import matplotlib.pyplot as plt

# 参数设置
v_free = 100  # 自由流速度 km/h
k_jam = 150   # 阻塞密度 veh/km

# 生成密度数据
k = np.linspace(0, k_jam, 100)

# 速度-密度关系(线性模型)
v = v_free * (1 - k / k_jam)

# 流量 = 密度 × 速度
q = k * v

# 绘图
plt.figure(figsize=(10, 6))
plt.plot(k, q, 'b-', linewidth=2, label='基本图')
plt.axvline(x=k_jam/2, color='r', linestyle='--', label='临界密度 k_c')
plt.axhline(y=np.max(q), color='g', linestyle='--', label='最大流量 q_max')

plt.xlabel('密度 k (veh/km)')
plt.ylabel('流量 q (veh/h)')
plt.title('交通流基本图(Greenshields 模型)')
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()

print(f"最大流量: {np.max(q):.0f} veh/h")
print(f"临界密度: {k_jam/2:.0f} veh/km")
print(f"临界速度: {v_free/2:.0f} km/h")

运行这段代码,你会看到一条漂亮的抛物线。最大流量出现在密度为 k_jam/2 的位置,此时速度是 v_free/2。这个结论在很多教材里都有,但亲手画出来感觉完全不一样。

我的小技巧:做仿真时,先用这个线性模型跑一遍,看看流量峰值是否合理。如果峰值超过 2400 veh/h(单车道),说明参数设得太激进了。我曾经调参数调到凌晨三点,最后发现是 k_jam 设小了。记住:k_jam 一般在 150-200 之间,别乱改。

1.7 总结:三参数是交通仿真的基石

流量、密度、速度,这三个参数贯穿整个交通流理论。基本图则是它们关系的可视化表达。我个人觉得,理解基本图比背公式更重要。因为公式可以查,但直觉需要练。

最后说一句:别把基本图当真理。它是理想化的模型,实际数据往往有噪声、有滞后、有各种异常。做仿真时,多用真实数据校准,别偷懒。

好了,这一章就到这儿。记住三参数的关系,下一章咱们聊怎么用它们生成交通流。


可可精品资料库