第1章 研究背景与意义
随着全球城市化进程的加速推进,交通拥堵已成为困扰现代城市发展的世界性难题。根据世界银行最新统计数据显示,全球主要城市因交通拥堵导致的经济损失平均达到GDP的1-3%,在特大城市这一比例甚至高达5%。我国作为世界上最大的发展中国家,城镇化率已突破60%,机动车保有量超过4亿辆,城市交通系统面临着前所未有的压力。
交通流理论作为交通工程学的核心基础,其研究始于20世纪30年代。早期的交通流研究主要依靠实地观测和经验模型,随着计算机技术的发展,数学建模与仿真分析逐渐成为交通流研究的主流方法。特别是近年来,智能交通系统(ITS)的快速发展对交通流理论提出了更高要求,亟需建立更加精确、高效的交通流模型来支持交通管理决策。
MATLAB作为一款强大的科学计算软件,在矩阵运算、数值分析、可视化呈现等方面具有独特优势,已成为交通流建模与仿真领域的重要工具。其丰富的工具箱(如Simulink、Optimization Toolbox等)为不同类型的交通流模型实现提供了便利条件。本研究基于MATLAB平台开展多模型交通流仿真,具有重要的理论价值和现实意义。
本文中使用的MATLAB版本是R2024b。
第2章 交通流理论基础
交通流是指汽车在道路上连续行驶形成的车流。广义上还包括其他车辆的车流和人流。在某段时间内,在不受横向交叉影响的路段上,交通流呈连续流状态;在遇到路口信号灯管制时,呈断续流状态。[1]
交通流按交通设施对交通流的影响可以分为:非间断交通流或称连续交通流(uninterruptedflow)和间断交通流(interrupted flow);按交通流中的成分可以分为:机动车流、非机动车流、混合交通流;按交通流的交汇形式可以分为:交叉、合流、分流、交织流;按交通流内部的运行条件及其对驾驶员和乘客产生的感受可以分为:自由流、稳定流、不稳定流、强制流。[2]
交通流理论是运用物理和数学的定律来描述交通特性的一门边缘学科。它的应用能更好地解析交通现象及其本质,使道路发挥最大功效。
作为交通工程学的基础理论,多年来交通流理论广泛应用于交通运输工程的许多研究领域:如交通规划、交通控制道路与交通工程设施设计等方面。
定量描述交通流的3个参数如下:
①交通流量,又称交通量,表示交通流在单位时间内通过道路指定断面的车辆数量,单位是辆/小时或辆/日;
②交通流速度,简称流速,表示交通流流动的快慢,单位是米/秒或公里/小时;
③交通流密度,表示交通流的疏密程度,即道路单位长度上含有车辆的数量,单位是辆/公里。
交通流模型是通过平均交通量($Q$)、平均车速($V$)、平均密度($K$)三个核心物理量,描述道路交通运行状态的数学模型体系。其基础关系式:
$$Q=K\times V$$
构成了三维参数空间的核心框架,通过经典模型(如格林希尔茨线性模型、格林伯格对数模型)揭示速度与密度的动态关系。[3]
模型体系涵盖宏观连续模型、微观跟驰模型和混合模型三大类别,其中宏观模型侧重整体参数演化规律,微观模型聚焦单车行为与车流相互作用。实际应用中通过$Q-K$曲线判别交通运行状态。
第3章 元胞自动机模型(NaSch模型)构建与优化
3.1 元胞自动机模型(NaSch模型)原理[4]
NaSch模型是由最初出版于1992年的Kai Nagel和Michael Schreckenberg的先前工作中提出的,在其论文中汽车被放置成一维阵列,其中每个元胞可以被占用或未被占用,并且汽车在每个占用的元胞中的速度被设定为零和指定的系统最大速度之间随机速度。多辆汽车不可能占用相同的元胞,并且该模型的每次迭代由同时发生的四个基本操作控制。这四个步骤是:
1.广泛性加速
对于所有未达到最大速度$v_{max}$(道路的速度限制)的车辆,加速一个单位,即$v_n\rightarrow min\left{v_n+1,v_{max}\right}$。
2.安全性减速
在进行第a步之后,如果它的速度大于与前车间距的空元胞$d_n$,则它将速度降低到$v_n$,$v_n\rightarrow min\left{d_n,v_n\right}$。其中$d_n=x_{n+1}-x_n-l_n$,$x_n$代表车辆的位置,$l_n$代表车辆的长度。这里为了简化模型,假设$\pmb{l_n=1}$,假设各车最大减速加速度为正无穷大,即可以不耗时地减速至任意速度,避免模型中出现撞车的情形。
3.随机减速
对于速度大于$0$的汽车,速度以概率$p$减少一个单位,即$v_n\xrightarrow{发生的概率为p}max\left{v_n-1,0\right}$。
4.车辆更新
在步骤1-3之后,基于其当前速度$v_n$,为每辆汽车分配新的位置$x_n\rightarrow x_n+v_n$。对于该模型在时刻$t\rightarrow t+1$的演化过程如下图1所示。经过一次1-4步骤称为一次迭代。
3.2 参数定义
车辆数$N$
初始状态最右端车辆位置$R$
最大速度$v_{max}$
随机减速概率$p$
模拟迭代次数$T$
3.3 建模思路
3.3.1 整体思路
建立一个长度$N$为的行向量$xlt$
$$xlt=[x_1,x_2,…,x_N]$$
来表示这辆车的位置。其中,的元素在满足
$$1\le x_i\le R,x_i\in N^*$$
的条件下,初始随机化。
再建立一个长度为$N$的行向量$vlt$
$$vlt=[v_1,v_2,…,v_N]$$
来表示这辆车的速度。其中,$vlt$的元素$v_i$在满足
$$1\le v_i\le v_{max},v_i\in N^*$$
在$xlt$和$vlt$的基础上进行一次迭代,更新$xlt$和$vlt$内各元素的值。
重复迭代$T$次,输出最终的$xlt$和$vlt$。
3.3.2 对于一次迭代
对于一次迭代,可视为一个函数。其输入值是迭代前的(初始的或上一次迭代后的)和,其输出值是迭代后的$xlt$和$vlt$。
对于一次迭代,有四次操作。每次操作,遍历$n$从$1$到$N$:
$$v_n\rightarrow min\left{v_n+1,v_{max}\right}$$
$$v_n\rightarrow min\left{x_{n+1}-x_n-l_n,v_n\right}$$
$$v_n\xrightarrow{发生的概率为p}max\left{v_n-1,0\right}$$
$$x_n\rightarrow x_n+v_n$$
注意到,前三次操作,都只牵扯到$vlt$的修改与更新,并没有修改$xlt$。并且$v_n$的值与$v_{n+1}$无关。故可将前三次操作分别进行三次遍历简化为一次遍历下的三次操作。即简化为:
遍历$n$从$1$到$N$:
$$v_n\rightarrow min\left{v_n+1,v_{max}\right}$$
$$v_n\rightarrow min\left{x_{n+1}-x_n-l_n,v_n\right}$$
$$v_n\xrightarrow{发生的概率为p}max\left{v_n-1,0\right}$$
遍历$n$从$1$到$N$:
$$x_n\rightarrow x_n+v_n$$
此次迭代结束,输出迭代后的$xlt$和$vlt$。
3.3.3 MATLAB源代码
根据3.3 建模思路,可以写出以下的MATLAB源代码。源代码已上传Github,可以点击链接,下载源代码。
1 | clc; |
3.3.4 样例输出
3.3.4.1 样例1
1 | 车辆数N:4 |
3.3.4.2 样例2
1 | 车辆数N:4 |
3.3.4.3 样例3
1 | 车辆数N:100 |
致谢
感谢Matlab老师这一个学期的耐心教导!
感谢父母与朋友在生活中无微的帮助!
在我这么多朋友中,我尤其感谢远在河北某本科上学的异父异母的亲兄弟——Hana,感谢他在编程方面对我的帮助。感谢他凌晨一点半还热心地教我怎样在Github上上传文件,我的博客网站得以建成,他功不可没。