备战2024数学建模国赛(模型三十):遗传算法 优秀案例(一)城市相邻两交叉口信号配时优化

 专栏内容(赛前预售价99,比赛期间299): 2024数学建模国赛期间会发布思路、代码和优秀论文。(本专栏达不到国一的水平,适用于有一点点基础冲击省奖的同学,近两年有二十几个国二,但是达不到国一,普遍获得省奖,请勿盲目订阅)

python全套教程(一百篇博客):从新手到掌握使用python,可以对数学建模问题进行建模分析。

35套模型算法(优秀论文示例):马尔科夫模型、遗传算法、逻辑回归、逐步回归、蚁群算法、蒙特卡洛模拟、聚类模型、线性规划、粒子群算法、神经网络、相关系数、灰色预测、灰色关联分析、模糊综合评价、模拟退火、时间序列ARMA、方差分析支持向量机、插值、排队论、拟合模型、微分方程、层次分析法、小波分析、多元回归、图论floyd算法、图论Dijkstra模型、因子分析、动态规划、博弈论、决策树、典型相关分析、元胞自动机、主成分分析、TOPSIS法。

目录

摘要

一、问题的提出

二、 问题的分析

三、 模型假设

四、 符号说明

五、 模型的建立与求解

六、 模型的评价

七、 模型的改进

八、模型的推广

九、参考文献

十、附录


摘要


        随着我国城市化速度的加快以及城市规模的不断扩大,交通供需矛盾日益突出,在城市交通网络中产生的交通拥堵现象日趋严重,合理的设计智能交通系统,优化相邻交叉口的信号配时问题将在很大程度上提高平面交叉口的通行能力和服务水平,减少城市交通网的交通延误,改善城市交通现状。
        针对优化城市相邻两家插口信号配时问题,我们首先从单点平面交叉口着手,建立了基于多目标优化的交叉口交通灯动态配时模型,用通行能力、延误、停车次数这三个指标通过加权作为多目标联合优化的参数指标,把排队长度作为模糊控制指标,并且追加有效绿灯时间,进而得到信号配时的联合优化函数,最终我们确定了在单点交叉口下的最佳周期C 和各相位的绿灯有效时间。
        其次,我们在单点的交叉口的基础上进一步分析了相邻两交叉口的情况,本文以简单绿波系统为例,建立一个基于基本交通流模型以及交叉路口的排队分析理论,以两个交叉路口的车辆总延误最小为目标,以主干道的绿波效应以及中间路段的车辆排队长始终小于其最大车辆排队长度为约束条件的非线性函数模型,并针对不同的交叉口饱和率进行信号配时优化,通过对路段和干线机动车流进行协调控制设计,在对路段和干线机动车流进行协调控制设计后,有效地减少了相交道路车流对干线车流的干扰,实现了邻近交叉路口信号灯的实时控制,保证了相交道路车流行车需求的同时,使干线车流获得最大的通行权。
        再次,期望两相邻的交叉路口能更好的使协调配合工作,我们又相继建立了车辆延误模型来考察车均延误时间,采用了数解法以最大绿波带为优化目标通过寻找使得系统中各实际信号距理想信号的最大挪移量最小来对相位差进行优化设计,最终借助题中表一数据进行了仿真检验,实现了在保证交通流量的情况下改善了车均延误时间,最后我们推广到了多个相关交叉口并借助一例进行了应用,使模型更具普遍性。
        之后,我们做了从时间复杂度、空间复杂度、收敛性三个方面总结性的对比分析工作,集中展示了在应用本文模型改善后的交通信号配时方案,并进行了简单的仿真检验,可以做为指导提高实际平面交叉口的通行能力和服务水平,减少城市交通网的交通延误,改善城市交通现状的理论依据。
        最后,指出了我们所做工作的创新之处,介绍了模型的优缺点和改进方案。


        关键词: 信号配时 平面交叉口 多目标优化 数解法 模糊控制

一、问题的提出


1.1 背景介绍
        随着我国城市化速度的加快以及城市规模的不断扩大,交通供需矛盾日益突出,在城市交通网络中产生的交通拥堵现象日趋严重,严重影响了社会经济的发展和人民生活水平的提高。
        为了提高城市道路交通管理水平,改善城市交通秩序,保障公路交通的畅通与安全,当今世界各国普遍使用智能交通系统。在该系统中,核心的问题是交通信号智能控制。平面交叉口是道路交通的主要冲突点,不仅机动车数量多,而且行人和非机动车也在同一平面通过。 目前在我国的大、中型城市交通管理中,普遍采用的是单点定时交通信号灯控制。定时控制这种传统信号灯控制方法会造成某些方向绿时浪费,而在有些方向上车辆通行又延误严重。因此,优化交叉口信号配时是提高交叉口运行效率最有效的方法之一。
        然而传统的城市交通信号灯配时控制研究的对象常常是单个交叉路口,而且往往都是利用定时控制的思想来设计交通信号灯的配时方案,有时候也考虑全天车流的显著不同把一天分割为几个时间段,然后采用分时间段的方法设计定时配时方案,或者全天侯定时配时方案不变[1]。不管哪种方案都没有考虑交通流的随机性的特点。这样的红绿灯时间及间隔都固定不变的配时方案,难以适应车流量波动明显的情况,在实际交叉路口这种配时方案常常造成交通堵塞。随着研究的一步步深入,一些大城市开始协调优化多个交叉口的交通信号灯,使相关性较大的交叉口之间形成理想的绿波带,在一定程度上使车辆通行更顺畅,减少了车辆的时滞,但这种控制方案固定不变,无法从根本上解决问题,仍然容易造成交通堵塞频发。

        随着我国城市化速度的加快以及城市规模的不断扩大,交通供需矛盾日益突出,在城市交通网络中产生的交通拥堵现象日趋严重,严重影响了社会经济的发展和人民生活水平的提高。
1.2 问题的重述
        为了提高城市道路交通管理水平,改善城市交通秩序,保障公路交通的畅通与安全,题目要求我们将采取一定的算法,从时间复杂度、空间复杂度、收敛性等三个方面,对交通信号进行配时优化研究,进而求解出改善后的交通信号配时方案,然后进行仿真检验,最后以期达到提高实际平面交叉口的通行能力和服务水平,减少城市交通网的交通延误,改善城市交通现状的目标。


二、 问题的分析


        这是一个多目标优化设计问题,需要根据车均延误时间和停车次数等主要优化指标对交叉路口信号进行合理配时,使车均延误时间和停车次数等性能评价指标达到最优情况,从而提高平面交叉路口的通行能力和服务水平、改善城市交通秩序、保障公路交通的畅通与安全。问题的特点在于需求实验搜集数据量大,数据动态变化快,可挖掘和考虑的性能评价指标多(如延误时间、停车次数、通行能力、环境参数、燃油消耗和汽车尾气等);难点在于,问题的解决需要大量的交通调查数据,并且交叉路口处车辆、行人等元素动态变化过于频繁和复杂,很难准确的通过模型来判别和预测车辆、行人的数量及其行为。所以我们需要在考虑多目标优化的同时动态优化配时方案,来匹配交的实时变化。

三、 模型假设


 车辆在道路行驶中严格遵守交通规则,且忽略交通事故对交通流和信号灯控制的影响;
 车辆严格遵守排队过程中的先到先服务,不存在插队;
 忽略黄灯对交叉路口交通流的影响;
 忽略绿灯亮起时车辆启动的加速过程,车辆以空间平均速度驶出停止线;
 车流量在非交通高峰期内服从泊松分布,在交通高峰期内服从均匀分布;
 行人以最小通过时间穿越道路,忽略行人对直流车流的影响。

四、 符号说明

五、 模型的建立与求解


5.1 多目标动态优化配时模型
经过相关文献得到结论,交通状态的随机不确定性特征决定了交叉路口的交通信号灯配时优化的显著差异。在交通流趋近饱和的状态下,交通通行能力面临着最大的压力,所以应该优先减少排队长度,保证交叉路口最大限度使车流通过;而在交通流低饱和的状况下,在保证车流在交叉路口通行流畅的同时,尽可能减小时间浪费变得更具实际意义。减小车辆延误,降低停车次数都是为了提高人们出行的时间效率。交通灯配时控制策略将逐渐成为有效治堵的方法之一,我们首先建立基于多目标优化的交通灯动态配时模型,研究讨论邻近交叉口多目标的动态优化信号配时算法。

5.2 两相邻交叉口信号灯实时控制模型
在城市道路网中,大量的存在相距很近的两交叉口组,若将各交叉口分别设
置为单点信号控制,则极易出现车辆经常遇到红灯,时停时开的情况,从而造成
行车不畅,加重环境污染。为使车辆减少在各个交叉口上的停车时间,特别是使
干道上的车辆能够畅通行使,我们考虑更具实际意义的优化方案:即将一条干道
上一批相邻的交通信号连接起来,加以协调控制,也就是进行对干线交叉口交通
信号的协调控制系统的研究,此系统也称为线控制或绿波系统[10]。我们以两个单
点信号控制交叉口组成的简单绿波系统为例,建立一个基于基本交通流模型以及
交叉路口的排队分析理论,以两个交叉路口的车辆总延误最小为目标,以主干道
的绿波效应以及中间路段的车辆排队长始终小于其最大车辆排队长度为约束条
件的非线性函数模型[11],在对绿波系统的交叉口信号配时优化进行深入研究后发
现,通过对路段和干线机动车流进行协调控制设计,可以有效地减少相交道路车
流对干线车流的干扰,实现邻近交叉路口信号灯的实时控制,进一步实现在保证
相交道路车流行车需求的同时,使干线车流获得最大的通行权的目标。
5.2.1 邻近交叉路口概述
邻近交叉路口是平面交叉路口的一种,由距离较近的或者交通高峰期时下游
路口进车道的饱和率 k≥1 且中间路段发生拥堵的概率较大的两个相邻交叉路口
组成。而经查阅资料和相关性检验分析,我们发现,在一般情况下,当干道上相
邻两个交叉口相距超过 800 米时,两个交叉口的交通灯配时相关性大大减小[12],
我们将此种情况考虑为两个交叉路口不相关,即视为两个单点交叉路口的简单叠
加,继续采用上面内容中提到的单点交叉口多目标动态优化配时模型来分析和处
理此优化问题,也就是说,在多点交叉路口的信号协调优化系统中,相距 800

有了车辆到达率图式,便不难计算每周期车辆通过交叉口时的受阻延时时间。
我们假定在一定的时间段内,车辆的到达率图式不发生变化,以此为基础计算车
辆的延误时间,即“正常阻滞延误时间”。累计流量到达图中“锯齿”线代表车
辆的累计到达量,斜直线代表最大放行率(饱和流率)。他们之间的水平坐标差
即为某一瞬时到达的车辆的受阻延误时间,而纵坐标差即为瞬时的排队长度。显
然这两条线与横坐标周围成的面积即为全部车辆延误时间,这一数值除以到达车
辆总数,即为一周内每辆车的平均延误时间。若将结果再除以周期长度,便得到单位时间每辆车的平均延误时间。

我们所建立的模型控制下的车辆总延误在非交通高峰期时优化效果一般,与传统
的定时信号控制下的车辆总延误接近,主要是因为交通流小,车辆排队较少,信
号灯的控制作用不是很明显;但是随着交通高峰期的临近,交通流逐渐增大,而
交叉路口的最大通行能力是固定的[26],传统的定时信号控制已经不能满足当前的
交通能力,因此,车辆排队开始增加,造成了很大的车辆总延误,而本模型采用
实时信号控制,动态的调整各个交叉路口的信号灯周期,实时优化信号灯的各个相位,以实现最小的车辆总延误,因此,与定时控制相比,其优化效果逐渐增大,
且在交通高峰期时,优化效果达到最大.
邻近交叉路口的周期长度对比,如图 5.18 所示:

与传统的定时信号控制相比,我们的模型控制下的信号灯周期随着交通流变
化而变化。在前 4 个交通状态中,上下游路口的信号周期都随着交通流的增加
而变大,随着交通高峰期的临近,信号灯周期开始逐渐变大,以满足最大的车辆
通过,实现最小的车辆总延误[27];当处在交通高峰期时,信号灯周期随着交通流
的稳定而逐渐稳定;最后信号灯周期随着交通流的消褪而逐渐降低,只需要满足
实际的车辆通行率,实现最小的车辆总延误。
相位差 s 的变化,如图 5.19 所示:

的大小主要受车速和信号周期的影响。在前四个交通状态,随着车流的逐渐增大,
车速逐渐降低,信号周期逐渐变大,相位差逐渐增加。当处于交通高峰期时,车
速稳定,信号周期稳定,则相位差也相对稳定。随着交通高峰期的消褪,相位差
逐渐回落。
通过实验仿真,邻近交叉路口的信号灯实时控制较传统的信号灯控制方案有
着很好的改进,实现了非交通高峰期时的绿波效应,大幅度的降低了交通高峰期
时的车辆总延误,有利于交通高峰期时的畅通。两个交叉路口的信号周期随着交
通流的变化而变化,实现了最佳的绿信比配置[28],提高了单位信号周期的最佳服

性能;相位差的变化主要受车速和信号周期的影响,表现为随着交通高峰期的邻
近而逐渐变大,处于高峰期时处于相对稳定状态,随着交通高峰期的消褪而逐渐
变小。


六、 模型的评价


6.1 优点
 建立的交叉路口多目标动态优化配时模型具有通用型,然后建立相邻交叉路
口信号灯的实时控制模型,加强信号相位控制时。采用数解法对相位差优化,
加大了模型的健壮性。
 创新性的给出了环形交叉路口的设计和分析。
 模型做了较一般性的推广,更具普遍性和实际意义。
6.2 缺点
所建立的模型知识针对一定客流量的情况之下,在客流量达到相当大的值的
时候,所建立的模型会不精确;另外,在多项交叉路口的情况下,产生一系列相
位差的情况,也会造成很大的影响。


七、 模型的改进


7.1 一种环形交叉路口的创新设计
车辆按照顺时针方向单进口放行,进道口位相序按照顺时针,这样设计,车
辆将会按照一个相位行驶,不会存在绿时浪费的问题,而且极大的提高了自动调
控车辆的效果,但是,我们也考虑到了车流量较大的情况,针对数据分析显示,
此创新的设计,适用于车流量较少的郊区地带。其它设计思路采用上面模型的设
计方案,采用无交通灯控制的方案。
表 6.1 环形交叉路口相位差结果

八、模型的推广



我们建立的模型根据数据分析和仿真实验数据检验具有很强的健壮性和可
靠性,不仅对于单交叉路口的设计具有通用性,最重要的是适用于邻近交叉路口,
经过优化相位差,节减少了延误时间,设计的这种定时传统控制信号的方式,解
决了绿时浪费问题。
针对优化城市相邻两家插口信号配时问题,我们首先从单点平面交叉口着手,
建立了基于多目标优化的单点交叉口交通灯动态配时模型,用通行能力、延误、
停车次数这三个指标通过加权作为多目标联合优化的参数指标,把排队长度作为
模糊控制指标,并且追加有效绿灯时间,进而得到信号配时的联合优化函数,最
终我们确定了在单点交叉口下的最佳周期 和各相位的绿灯有效时间。
然后,我们在单点的交叉口的基础上进一步分析了相邻两交叉口的情况,本
文以简单绿波系统为例,建立一个基于基本交通流模型以及交叉路口的排队分析
理论,以两个交叉路口的车辆总延误最小为目标,以主干道的绿波效应以及中间路段的车辆排队长始终小于其最大车辆排队长度为约束条件的非线性函数模型,并针对不同的交叉口饱和率进行信号配时优化,通过对路段和干线机动车流进行
协调控制设计,在对路段和干线机动车流进行协调控制设计后,有效地减少了相
交道路车流对干线车流的干扰,实现了邻近交叉路口信号灯的实时控制,保证了
相交道路车流行车需求的同时,使干线车流获得最大的通行权。
再次,期望两相邻的交叉路口能更好的使协调配合工作,我们采用数解法以
最大绿波带为优化目标通过寻找使得系统中各实际信号距理想信号的最大挪移
量最小来对相位差进行了优化设计,最终借助题中表一数据进行了仿真检验,实
现了在保证交通流量的情况下改善了车均延误时间,最后我们推广到了多个相关
交叉口并借助一例进行了应用,使模型更具普遍性。
最后,我们做了从时间复杂度、空间复杂度、收敛性三个方面总结性的对比
分析工作,集中展示了在应用本文模型改善后的交通信号配时方案,并进行了简
单的仿真检验,可以做为指导提高实际平面交叉口的通行能力和服务水平,减少
城市交通网的交通延误,改善城市交通现状的理论依据。
我们指出了所做工作的创新之处,介绍了模型的优缺点和改进方案。所以模
型有很大的推广价值和应用前景。


九、参考文献


[1]李致伟,城市单交叉路口信号控制优化方法的研究[D].北京:北京交通大学交
通信息工程及控制,2008.5。
[2]栗红强,城市交通控制信号配时参数优化方法研究[D].长春:吉林大学,2004。
[3]冯玉英,常玉林,环形交叉口通行能力研究[j],江苏理工大学学报(自然科学
版),2000.5,Vol.21(3):91—94。
[4]项乔君,王炜,陈兵等,环形交叉路口通行能力理论模型研究[J].中国公路学
报,1999.10,Vol.12(4):69—72。
[5]全永焱,城市交通控制[M],北京:人民交通出版社,2003。
[6]刘静、魏瑞轩、张善文,城市交叉路口交通优化模型[J],陕西师范大学学报,
2003.4:10—13。
[7]杨开春、段胜军,交通流的红绿灯模型[J],西安联合大学学报,2004.10:41—
45。
[8]王伟平,城市平面交叉口交通信号控制优化方法研究[D],青岛,山东华科技大
学运筹学与控制理论,2004.5。
[9]王玉鹏,多路口感应信号控制优化设计及其仿真[D],南京,河海大学交通运
输规划与管理,2006.3。
[10]荆晓辉,单交叉路口交通信号自适应控制系统研究与实现[D],重庆,重庆大学
计算机软件与理论,2010.4。
[11]张文峰,平面交叉口信号控制优化算法研究[D],昆明,昆明理工大学载运工
具运用工程,2006.5。
[12]董友才,双交叉路口流实时优化控制方案的研究[D],上海,上海交通大学电
工理论与新技术,2006.12。

13]刘畅,智能交通信号灯实时优化控制[D],沈阳,沈阳工业大学控制理论与控
制工程,2008.1。
[14]高雨、叶炜、沈国江,多相位智能交通控制器的设计[J],江南大学学报,
2006.6,556—560。
[15]王小平,遗传算法——理论、应用与软件实现[M],北京,工业技术出版社,
1998。
[16]李敏强、寇纪淞、林丹等,遗传算法的基本理论与应用[M],北京,科学出版
社,2002。
[17]张讲设、徐宗本、梁怡,整体退火遗传算法及其收敛充要条件[J],中国科学
(E 辑),1997.27(2):154—164。
[18]廖柏其,概率论教程[M],合肥,中国科学技术大学出版社,1998。
[19]严士健、刘秀等,概率论基础[M],2 版,北京,科学出版社,2009。
[20]杨佩昆、张树升,交通管理与控制[M],北京,人民交通出版社,2003。
[21]方珍珍,单向交通的基本概念和实施原则[J],才智,2008.10:266。
[22]张榕,平面信号交叉口交通控制方案的优化研究[D],北京,北京工业大学交
通运输规划与管理,2003.5.
[23]一峰,单向交通的基本概念和实施原则[J],交通运输,2005.3:32—33.
[24]基于微波检测器交通灯智能控制系统的研究与设计[J],西南民族大学学报,
自然科学版,2007-33(4):284—288。
[25]查振亚, 叶向阳.智能交通灯控制系统[J].华中理工大学学报.2005,
25(3):255-260。
[26]崔宝侠, 杨继平. 城市交通灯信号配时控制器优化的一种新策略[J].沈阳工业
大学学报, 2007, 10: 554-559。
[27]刘建峰,城市干线交通控制方法研究[D],兰州,西北工业大学,2001。
[28]王殿海、曲大义,一种实时动态交通量预测方法与研究[J],中国公路学报,
1998.8,Vol.11:102—107。

十、附录

% This the main script implements the Nagel Schreckenberg cellular
automata
% based traffic model. Flow vs density curves are displayed.
%
% liu jiguo: 2993901967@qq.com
%
density = 0:0.02:1;
roadlength = 100;
vmax = 5;
tmax = 200;
pbrak = 0;
flux = [];
vmean = [];
for rho = density
[R, J, V] = ns(rho, pbrak, roadlength, tmax, 0, 0);
flux = [flux; J];
vmean = [vmean; V];
end
% ------------------------- density vs. volecity
--------------------------
figure
plot(density, vmean,'k.','markersize',15);
hold on
plot(density,min(vmax, 1./density-1),'-r','linewidth',2)
ylim([0,5.55])
legend({'Cellular automata aproach', ...
'$v(\rho) = \min\{v_{\max}, 1/\rho-1\}$'}, ...
'interpreter','latex')
xlabel('density in vehicles/cell')
ylabel('velocity in cell/time')
% --------------------------- density vs. flux
----------------------------
figure
plot(density, flux,'k.','markersize',15);hold on;
plot(density,min(density*vmax, 1-density),'-r','linewidth',2)
legend({'Cellular automata aproach', ...
'$J(\rho) = \min\{\rho\cdot v_{\max}, 1-\rho\}$'}, ...
'interpreter','latex')
xlabel('density in vehicles/cell')
ylabel('flux in vehicles/time')
rfunction [rho, flux, vmean]=ns(rho, p, L, tmax, animation, spacetime)
%
% NS: This script implements the Nagel Schreckenberg cellular automata
based
% traffic model. Car move forward governed by NS algorithm:
%
% 1. Acceleration. If the vehicle can speed up without hitting the speed
% limit vmax it will add one to its velocity, vn -> vn + 1. Otherwise,
% the vehicle has constant speed, vn -> vn.
%
% 2. Collision prevention. If the distance between the vehicle and the
car
% ahead of it, dn, is less than or equal to vn , i.e. the nth vehicle
% will collide if it doesn't slow down, then vn -> dn 鈭?1.
%
% 3. Random slowing. Vehicles often slow for non-traffic reasons (cell
% phones, coffee mugs, even laptops) and drivers occasionally make
% irrational choices. With some probability pbrake, vn -> vn 鈭?1,
% presuming vn > 0.
%
% 4. Vehicle movement. The vehicles are deterministically moved by
their
% velocities, xn -> xn + vn .
%
% USAGE: flux = ns(rho, p, L, tmax, isdraw)
% rho = density of the traffic
% p = probability of random braking
% L = length of the load
% tmax = number of the iterations
% animation = if show the animation of the traffic
% spacetime = if plot the space-time after the simuation ended.
% flux = flux of the traffic
%
% zhou lvwen: zhou.lv.wen@gmail.com
%if nargin == 0;
rho = 0.15; p = 0.25; L = 100; tmax = 5000; pchange = 0.5;
animation = 'circle';
end
%rand('seed',1)
vmax = 5; % maximun speed
% place a distribution with density
ncar = round(L*2*rho);
rho = ncar/2/L;
xy = randperm(2*L,ncar);
[y,x] = ind2sub([2, L], xy); % y: 2 for right, 1 for left
v = vmax * ones(1,ncar); % start everyone initially at vmax
switch animation
case'circle'; h = plotcirc(L,x,y,2);
case'line'; h = plotline(L,x,y,2);
end
flux = [0 0]; % number of cars that pass through the end
vmean = [0 0];
voffset = 1;
vback = 1;
XY = [x y];
for t = 1:tmax
% determine the space vehicles have to move
[gaps, gapfront, gapback] = gaplength(x,y,L);
% left to right & right to left
l2r = find(y==1 & gaps>vmax+voffset & gapfront>vmax+voffset &
gapback>=vback);
r2l = find(y==2 & gaps<vmax & gapfront>gaps &
gapback>=vback & rand(size(y))<pchange);
y(l2r) = 2;
y(r2l) = 1;
% acceleration
v = min(v+1, vmax);
gaps = gaplength(x,y,L);
%collision prevention
v = min(v, gaps-1);
% random speed drops
vdrops = ( rand(1,ncar)<p );
v = max(v-vdrops,0);
% update the position
x = x + v;
passed = x>L; % cars passed at time r
x(passed) = x(passed) - L;% periodic boundary conditions
if t>tmax/2
flux(1) = flux(1) + sum(v(y==1)/L); %flux = flux + sum(passed);
flux(2) = flux(2) + sum(v(y==2)/L); %flux = flux + sum(passed);
vmean(1) = vmean(1) + mean(v(y==1));
vmean(2) = vmean(2) + mean(v(y==2));
end
switch animation
case'circle'; plotcirc(L,x,y,0.1,h);
case'line'; plotline(L,x,y,0.1,h);
end
end
flux = flux/(tmax/2);
vmean = vmean/(tmax/2);
%
---------------------------------------------------------------------
----
function [gap, gapfront, gapback] = gaplength(x,y,L)
%
% GAPLENGTH: determine the gaps between vehicles
%
ncar = length(x);
gap = inf*ones(1, ncar);
gapfront = inf*ones(1, ncar);
gapback = inf*ones(1, ncar);
index = 1:ncar;
for i = index
j1 = index(index~=i & y==y(i));
if ~isempty(j1)
d1 = x(j1) - x(i);
d1(d1<-L/2) = d1(d1<-L/2) + L;
if any(d1>0)
gap(i) = min(d1(d1>0));
end
end
j2 = index(index~=i & y~=y(i));
if ~isempty(j2)
d2 = x(j2) - x(i);
d2(d2<-L/2) = d2(d2<-L/2) + L;
if any(d2>=0)
gapfront(i) = min(d2(d2>=0));
end
d3 = x(i) - x(j2);
d3(d3<-L/2) = d3(d3<-L/2) + L;
if any(d3>=0)
gapback(i) = min(d3(d3>=0));
end
end
end
%
---------------------------------------------------------------------
----
function h = plotcirc(L,x,y,dt,h)
W = 0.05;
ncar = length(x);
theta = [(0-pi/L) : 2*pi/L : (2*pi+pi/L)];
R = ones(size(theta));
theta = [ theta; theta];
R = [R; R+W];
xc = cos(theta); yc = sin(theta);
xinner = (R-W/2).*xc; yinner = (R-W/2).*yc;
xouter = (R+W/2).*xc; youter = (R+W/2).*yc;
i = sub2ind(size(R),y,x);
if nargin == 4
color = randperm(ncar);
xi = [xinner(i); xinner(i+2); xouter(i+2); xouter(i)];
yi = [yinner(i); yinner(i+2); youter(i+2); youter(i)];
h = fill(xi,yi, color); hold on
plot(xinner(1,:),yinner(1,:), 'k', ...
xouter(1,:),youter(1,:), 'k', ...xouter(2,:),youter(2,:), 'k','linewidth',1.5);
plot([xinner; xouter], [yinner; youter],'k','linewidth',1.5);
axis image;
else
xi = [xinner(i); xinner(i+2); xouter(i+2); xouter(i)];
yi = [yinner(i); yinner(i+2); youter(i+2); youter(i)];
for i=1:ncar; set(h(i),'xdata',xi(:,i),'ydata',yi(:,i)); end
end
pause(dt)
%
---------------------------------------------------------------------
----
function h = plotline(L,x,y,dt,h)
W = 2;
rmin = 1;
dw = 0.05;
rmax = rmin + dw*(W-1);
ncar = length(x);
ti = 0 : 2*pi/L : 2*pi;
ri = rmin:dw:rmax;
[theta, R] = meshgrid(ti, ri);
xmin = (R-dw/2).*cos(theta);
ymin = (R-dw/2).*sin(theta);
xmax = (R+dw/2).*cos(theta);
ymax = (R+dw/2).*sin(theta);
i = sub2ind(size(R),y,x);
xi = [xmin(i); xmin(i+W); xmax(i+W); xmax(i)];
yi = [ymin(i); ymin(i+W); ymax(i+W); ymax(i)];
if nargin == 6
color = randperm(ncar);
h = fill(xi,yi, color); hold on
plot([xmin; xmax]', [ymin; ymax]', 'k', 'linewidth', 1.5);
plot([xmin; xmax] , [ymin; ymax] , 'k', 'linewidth', 1.5);
axis image;
else
for i=1:ncar; set(h(i),'xdata',xi(:,i),'ydata',yi(:,i)); end
endpause(dt)

  • 20
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2024年华数杯数学建模

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值