摘要
针对有信号灯的路口, 车辆通行能力的问题。 我们首先根据题意将一小时这一周期, 分为 36 个长度为 10s 的时段。对于每个时段的到达车辆数,假设其服从泊松分布,且 取值在给定范围内,可以通过编程模拟每个时段的到达车辆数。另外,引入每时刻开始 时的滞留车辆数这一概念。而在每个周内,当滞留车辆数与到达车辆数之和在通行能力 范围之内时,它们可以全部通过,当超过通行能力时,则按通行能力通过,不能通过的 车辆将滞留到下一周期。由此便可以建立模型,模拟出一个周期内,每一时段的滞留车 辆数,到达车辆数,以及通过车辆数,问题便可以得到解决。
对于问题一,只需将每个时段的通过车辆数累积,即可得到方向 1 一个周期内的通 过车辆数,为 3364。问题二要求等待时间,则在原有模型的基础上,引入每时段内到达 车辆所需的等待时间这一概念,得到红灯时方向 1车辆平均等待时间为43s,最大等待 时间为70s。在问题三中,我们假设,车辆等长且间距相等,由此将求平均排队长度和 最大排队长度,转化为求平均滞留车辆数和最大滞留车辆数。得到平均排队长度为 198m,最大排队长度为480m。对于第四问,绿灯时平均通过车辆数为总通过车辆数除 以绿灯个数,即为 93 辆。
问题五要求考虑方向 2,方向 2的处理与方向 1 基本相同。不同之处是方向 1 的 30s 绿灯和70s红灯对应方向2的30s红灯和70s绿灯。编程求得在一小时内有 5040辆来自 方向 2的车通过交叉路口。 当方向 2的信号灯是红灯时, 平均一辆车的等待时间为 93s, 最大等待时间为110s等待方向2红灯时车队的平均排队长度是 282m,最大排队长度 为834m。绿灯时,方向1平均140辆车通过交叉路口,最多140辆通过交叉路口。
最后的拓展问题,让方向 1 的绿灯时间在一定的范围内,以一定步长变化,得到不 同红灯长度的情况下车辆总的等待时间,求出使得总等待时间最短的绿灯时间。当考虑 到方向 2 时,思路不变,只是总等待时间为两个方向的等待时间之和,求出使得总等待 时间之和最短的方向 1 的绿灯时间为 28s。
关键词 :红绿灯周期、车辆、等待时间
一、问题重述 假设两个单行车道的交叉路口由一个红绿
灯控制。 假定每十秒有 5~15辆道路 1 的车 到达交叉路口,每十秒大概 6~24 辆道路 2 的车到达交叉路口。如果是绿灯,每十秒道 路 1 的车可通过交叉路口有 36 辆,每十秒有 20 辆道路 2 的车通过这个交叉路口。不允 许转弯。已知,红绿灯在方向 1 绿灯 30秒,红灯是 70 秒写一个仿真算法回答 60 分钟 时段内的问题
1、在一小时内有多少辆来自道路 1 的车通过交叉路口
2、当道路 1 的信号灯是红灯时,平均一辆车的等待时间?最大等待时间 3、等待道路 1 红灯时车队的平均排队长度是多少?最大排队长度 4、绿灯时,道路 1 平均多少辆车通过交叉路口?最多多少辆?
5、若是来自道路 2 的车,请回答以上问题 如何运用你的算法决定转换时间使得总的等待时间最短?当考虑到道路 2 的时候,你应 该修正你的算法。
二、 问题分析 现代社会交通堵塞是很严重的出行问
题,如何设计红绿灯的转换周期,使得汽车等 待时间以及排队长度最短是很重要的问题。根据现有的交通流理论,我们认为任意时段 内车辆到达数符合泊松分布。
第一个问根据题意,我们把 10s 作为一个最小的计算周期,假设一小时内的每一个 10s 内,到达交叉路口的车的数量均服从泊松分布,且在给定范围之间,由此一共生成 360 个服从泊松分布的随机数,作为车辆到达数。并给出滞留车辆数这一概念,即某时 刻前到达且尚未通过的车辆数,在绿灯时,将每 10s 的滞留车辆数与每 10 秒最大通过 车辆数 36 比较,其较小值即为该 10s 的通过量。累加即可得出一小时到达并通过交叉 路口的车辆数。
第二个问求解每辆车的平均等待时间,需求出是所有车辆的总等待时间,我们求出 每个时段内滞留车辆的等待时间,然后累加得到总的等待时间,后得到每辆车的平均等 待时间。然后,比较每个时段内滞留车辆的等待时间,得到最大等待时间。
第三个问题,我们假设所有车车长相同,车辆排队时保持相同的间距。同样,我们 求出每个时段内的滞留车辆数,乘以车长和间距可以得到排队长队,累加后除以总时段 数得出车队平均排队长度。然后,通过比较每个时段内的车辆排队长队,可以得到最大 排队长度。
第四个问题,因为车辆只能在绿灯时通过交叉路口,所以,每个绿灯周期时平均通 过交叉路口的车辆数, 就等于一小时内通过交叉路口的车辆数除以一小时内的绿灯周期 个数。
第五个问题,方向2的思路基本与方向1的相同,所不同的是方向1是30s绿灯, 70s红灯,对应方向2为70s绿灯,30s红灯。另外,方向2来车辆较大,而绿灯时通过 能力较小,所以考虑到可能会出现一个绿灯周期过完后,路口仍有车辆滞留的情况,要 对每辆车的等待时间的计算做重新考虑和分析。
至于最后的拓展问题,可以让方向 1的红灯时间在一定的范围内,以 1s为步长变 化,分别得到车辆总的等待时间,求出使得总等待时间最短的红灯时间。当考虑到方向 2 时,思路不变,只是总等待时间为两个方向的等待时间之和,求出使得总等待时间之 和最短的红灯时间。
三、模型假设
1、 1小时内每10秒到达车辆数均在5到15辆之间,且服从泊松分布。 2、 车辆长度相等,且均为 4.5m,停车等待红灯时所有车辆间间距都相同,且均为 1.5m。 3、 在方向1红灯时对应方向2为绿灯,在方向1绿灯时对应方向2为红灯。
四、符号系统
t时段内道路1的车到达交叉路口的辆数;
t时段开始时在道路1的交叉路口滞留的车辆数; t时段内道路1的车通过交叉路口的辆数;
t时段内到达的车辆要通过路口所需的等待时间;
一周期内总通过车辆数; 车辆总等待时间;
Q(t): I(t): q(t): D(t): Q: T:
五、模型建立
5.1随机模拟模型
假设车辆到达交叉路口服从泊松分布,首先运用matlab生成一组符合泊松分布并且 区间在
10秒到达交叉路口的车辆数 Q(t),因为以
10s为一个时段计算,所以在一小时为周期的情况下,有 360个时段,即t的取值从0 到 359。
在初始时段,即t=0的时候,假设道路没有车辆滞留,该时段通过路口的车辆数q(0) 可以用该时段到达叉路口的车辆数 Q(0)表示如下:
题目给定的范围内的随机数,模拟每
q(0)= ‘
QO); 36;
Q(0)<=36 Q(0)A36
则之后的每一时段t+1开始时的交叉路口的滞留车辆都可以用前一时间段 t的滞留 车辆数,到达车辆数以及通过车辆数表示。即某时段开始时的滞留车辆数,即上一时段 结束时的滞留车辆数,为上一时段开始时的滞留车辆数,加上上一时段到达的车辆数, 扣除上一时段通过车辆数。用图表形式表示如图 1.
Q(t)
I(t) q(t)
图1. t+1时段开始时的滞留车辆
用公式的形式表示即:
I (t I (t) Q(t) —q(t)
t =0,1「360
式中,虽然仅有360个时段,但t的取值从0到360。因为第361个时段的开始时 的滞留车辆数,虽然不在考虑周期内,但它也是最后一个时段结束时的滞留车辆数,也 能根据周期内的数据求得,所以t的取值从0到360。
接下来求每个时段内的通过的车辆数,当红灯时,没有车辆能通过路口,即q(t) = 0, 当绿灯时,时段内的需要通过路口的车辆数为滞留车辆数和时段内到达的车辆数之和, 当他们的数量小于绿灯时的通行能力时, 可以全部通过,当他们的数量大于通行能力时, 按最大通行能力通过。无法通过的车辆将滞留到以后通过。用公式表示如下:
I(t) Q(t) <= 36 l(t) Q(t) ■ 36
绿灯情况 红灯情况
由此模拟随机模型基本建立完成, 表对于一个周期一小时内的车辆进出情况可以用图 的形式表示如图2:
Q(0) 1 F 1 %(0) Q(1) f q(1) Q(359) A 1 1(359
)
! 1(0) 1(1) 1(2)
1(360)
图2.—小时内车辆进出情况
5.1.1问题一的求解
根据建立的模型,编写程序,多次模拟,求出每次模拟,每一时段的滞留车辆数, 到达车辆数,以及通过车辆数,其中一次模拟的数据见附录 1。观察数据发现对于方向
1,基本上每一次绿灯结束后,滞留车辆数都会为0,即每一个红绿灯周期内到达的车辆, 都可以在该周期的绿灯周期内通过路口,不会有车辆堆积到下一个周期。说明对于方向 1,现在的红绿灯安
排是合理的,绿灯时间是充裕的。
通过累加每一时段的通过车辆数可以得到总的通过车辆数,即:
359
q 八 q(t)
t=0
多次运行程序发现q的值在3364附近波动,用matlab的normplot函数处理,发现 图形显示为直线,即多次模拟得到的 q值近似服从正态分布,如图3。用normpfit函数 处理得到参数亠=3364,二=43.64,其95%的置信区间为[3332,3396]。
5.1.2问题2的求解
问题2要求当方向1的信号灯是红灯时,平均一辆车的等待时间和最大等待时间。 求解思路是对于任意红灯时段,该时段到达的车辆所需的平均等待时间,为该时段开始 时的滞留车辆全部通过路口所需的时间,因为只有在前面的滞留车辆先通过,后到达的 车辆才能通过路口。若一个周期 30s绿灯时间能使得滞留车辆通过,那么该时段到达的 车辆能在这个红绿灯周期内通过,若不能,则要到下一个周期甚至下下个周期才能通过 了。
定义数组D(t),记录每个时段到来的车所需的等待时间,可以将时段 t表示为第n 个红绿灯周期的第m个10s时段,即
t = 10 n m n =1,2, 35 m = 0,1, 9
对于方向1,因为通过之前运行程序可以发现, 每一个红绿灯周期100s内到达的车 均能在30s绿灯时间通过,所以认为绿灯时段到达的车的等待时间为 0。红灯时的等待 时间为,该时段到下一次绿灯开始的时间,加上绿灯开始后该时段滞留的车通过路口所 需的时间,用公式表示为:
m =0,1,2
D(t)二
100 -10m I (tp= 36
“ 110 —10m 36 ::: l(t)心 72 J20 —10m
72 ::: I (t^= 108
通过编程可以得到每个时段到达车辆的等待时间,对每个时段的到达车辆数和等待 时间相乘再求和,即可得到所有到达车辆总等待时间,即 :
359
T 八 I (t) D(t)
tm
再用总等待时间除以红灯时到达车辆总数,即可得到红灯时车辆的拼接等待时间。 最大等待时间同样可以通过编程,得到每个时段到达车辆的等待时间,求出其最大值。 程序运行的结果,平均等待时间在 43s附近波动,最大等待时间为70s。
5.1.3问题三的求解
对于问题三求平均排队长度和最大长度,根据模型假设,我们认为车辆是等长的, 车辆也是等间距的。所以要求排队长度可以转换为求滞留车辆数。 根据之前建立的模型, 我们已经可以求出每一时段开始时的滞留车辆数,对其求平均即可得到平均滞留车辆 数,进行比较即可得到最大滞留车辆数。
程序运行的结果,平均滞留车辆数在33附近波动,最大滞留车辆数在80附近波动。 即平均排队长度为198m,最大排队长度为480m。
5.1.4问题四的求解
因为车辆只能在绿灯时通过交叉路口,所以,每个绿灯周期时平均通过交叉路口的
车辆数,就等于一小时内通过交叉路口的车辆数除以一小时内的绿灯周期个数, 约为93 辆。
5.1.5问题五的求解
方向2的思路基本与方向1的相同,所不同的是方向1是30s绿灯,70s红灯,对 应方向2为70s绿灯,30s红灯。另外,方向2来车辆数较大,而绿灯时通过能力较小, 所以考虑到可能会出现一个绿灯周期过完后,路口仍有车辆滞留的情况,要对每辆车的 等待时间的计算做重新考虑和分析。
对于方向2,通过之前运行程序可以发现,由于生成数的随机性,且方向 2来车辆 较大,而绿灯时通过能力较小,所以在每一个 100s的红绿灯周期中,不一定能保证在 绿灯时,该周期到达的车辆都能通过。一旦无法全部通过,那么滞留的车就会到下一个 绿灯周期再通过,这样下一个周期需要通过的车辆数就会增加,基本上是不可能在一个 周期内通过了,这样就会造成积压,使得滞留车辆数呈整体随时间上升的趋势。这样绿 灯时到达的车辆也需要等待,所以等待时间需要重新计算。
通过编程可以得到每个时段到达车辆的等待时间,对每个时段的到达车辆数和等待 时间相乘再求和,即可得到所有到达车辆总等待时间,即 :
359
T 二為 I (t) D(t)
t z0
再用总等待时间除以红灯时到达车辆总数,即可得到红灯时车辆的拼接等待时间。 最大等待时间同样可以通过编程,得到每个时段到达车辆的等待时间,求出其最大值。
编程求得在一小时内有5040辆来自方向2的车通过交叉路口。当方向2的信号灯 是红灯时,平均一辆车的等待时间为 93s,最大等待时间为110s。等待方向2红灯时车 队的平均排队长度是282m,最大排队长度为834m。绿灯时,方向1平均140辆车通过 交叉路口,最多140辆通过交叉路口。
5.2优化模型
至于最后的拓展问题,可以让方向1的红灯时间在一定的范围内,以一定步长变化, 得到不同红灯长度的情况下车辆总的等待时间,求出使得总等待时间最短的红灯时间。 当考虑到方向2时,思路不变,只是总等待时间为两个方向的等待时间之和,求出使得 总等待时间之和最短的红灯时间。
假定红绿灯周期为100s固定不变,那么方向1红灯时间需以1s为步长变化,所以 建立模型时不再以10s作为计算时段,而是改用1s作为计算时段,那么一小时内就有 3600个时段。假设道路1和2的到来车辆满足泊松分布,生成 3600组满足泊松分布且 在给定范围内的泊松数。
分析题意得出方向1能使车辆在绿灯结束后不发生滞留的绿灯时间约为
方向2能使车辆在绿灯结束后不发生滞留的绿灯时间约为
由此分析得到方向 留。
然后分别求出方向1的绿灯时间为25, 26, 27, 28s时,到达方向1车辆的总等待 时间和到达方向2车辆的总等待时间。
方向1车辆的总等待时间为每一秒到达车辆所需等待时间之和, 即为该秒开始时滞 留车辆通过所需的时间之和。
方向1的绿灯时间为25, 26, 27, 28s时,对应方向2的绿灯时间为75,74,73,72& 方向2车辆所需的等待时间计算方法同方向1o
编程求出当方向1绿灯时间为25s时,所需总等待时间为72491s,方向1绿灯时间 为26, 27, 28时所需总等待时间分别为 55987s,43795s和37245s,如表1。
表1.不同绿灯时间下的总等待时间 方向1绿灯时间(S) 总等待时间(s) 20
1的绿灯时间在25到28s时两条道路的车辆均不会有过多的滞
T2 一150 =75s
25 72491
26 27 28 55987 43795 37245 1 表明当t=2s8时,即方向1绿灯时间为28时,两条道路所有的等待时间最少。
六、 模型分析
(1) 数据结果经过多次分析比较稳定,且做过稳定性分析。因为假设满足泊松分布, 而泊松分布的条件是无干扰条件下,而在有红绿灯的情况下近似服从。 (2) 最后一问精确到1s,所得结果更加的精确。
(3) 在求解前4个问时假设在一个10s内车在同一时间到达,和实际有误差。
七、 模型推广
该种排队模型对于流水式的工作环境都比较实用,某段时间暂停时,所有没有工作完成 的机器都将停止工作。实际运行当中应该使不同的流水线上暂停时间最少。
八、结论
对于道路1:( 1)60min内通过岔路口的车辆3354辆
(2) 红灯时,车辆平均等待时间43s,而车辆最大等待时间70s。 (3) 平均排队长度为198m,而最大排队长度为480m。 (4) 绿灯时平均通过交叉路口的车辆数为 93辆。
对于道路2:( 1) 60min内通过岔路口的车辆5039辆
(2) 红灯时,车辆平均等待时间93s,而车辆最大等待时间110s (3) 平均排队长度为282m,而最大排队长度为834m。 (4) 绿灯时平均通过交叉路口的车辆数为 140辆。
(5):当道路1的红灯时间为72s,绿灯时间为28s时,两条道路的车辆总的等待时间 最少。
九、参考文献
[1]
张德丰 概率与数理统计分析 清华大学
出版社 2005年
[2] 许详 matlab基础教程 清华大学出版社168-172页 2005年5月。 [3] 刘敏,单行道信号交叉口红绿灯配时优化的休假排队模型,
http://wap.cnki.net/qikan-DLJA200608002.html,访问时间(2014年 1 月 26 日)。 [4] 张显 泊松过程在排队论中的应用
http://wapwe nku.baidu.com/view/06e549136edb6f1aff001fdd.html?ssid=0&from=879a&uid =0&pu=usm%400%2Csz%401321_1001%2Cta%40utouch_2_4.2_3_534&bd_page_type=1 & baiduid=513FC14F88BE3ED1176DF56F81F2DA0E&tj=wenku_2_0_10_titlJ - 访问时间(2014年1月26日)
附录
问题一至四的 c 语言程序
#include \"stdio.h\" #include \"math.h\" #include \"time.h\"
void main()
{
int l[360],z[360],q[360],t[360],d[360],i,max,max2,max3,he1,he2,he3,he4; //来车数 滞留数 通过数 滞留时间 需等待时间 double pj,pj2,pj3;
srand( time(NULL) ); //生成 360个5到 15随机数 for(i=0;i<360;i++)
{
l[i]=rand()%10+5;
}
z[0]=0; //第 0 个时段的情况 if(l[0]<=36)
q[0]=l[0]; else
q[0]=36; z[0]=l[0]-q[0]; t[0]=10*z[0];
//第 1到 359个时段的情况 for(i=1;i<360;i++)
{
z[i]=z[i-1]+l[i-1]-q[i-1]; //第t个时段最开始时刻的滞留数 t[i]=10*z[i]; q[i]=0;
if((((i+1)%10)<=3)&&(((i+1)%10)>=1)&&i<360)// 通过量计算
{
if((l[i]+z[i])<=36) {q[i]=l[i]+z[i];} else
{ q[i]=36;}
} }
//模拟完成
//第一问
he1=0;
for(i=0;i<360;i++)
{
he仁he1+q[i];〃总通过量
}
//第二问
he3=0;〃红灯时到达的车的总的等待时间 max3=0;〃红灯时到达的车的最大时间红灯时到达的车的总数 pj2; //红灯时到达的车的平均等待时间 for(i=0;i<360;i++)
{
if(i%10>=3&&i%10<=9)
{
he4=he4+l[i]; if(z[i]<=36)
d[i]=(10-i%10)*10; else if(z[i]<=2*36)
d[i]=(11-i%10)*10; else
d[i]=(12-i%10)*10;
he4=0;〃 }
else
d[i]=0;
he3=he3+d[i]*l[i]; if(max3 pj2=he3/(1.0*he4); //第三问 max=0;he2=0; for(i=0;i<360;i++) { if(max<=z[i]) max=z[i];// 计算最大滞留车的数量 if(i%10==3||i%10==0) he2=he2+z[i]; if(i%10>=4&&i%10<=9) he2=he2+2*z[i]; } pj=(1.0*he2)/(36*(1+1+6*2));// 算红灯时平均滞留的车辆数 //第四问 if(l[0]<=36) q[0]=l[0]; else q[0]=36; max2=0;〃绿灯时最大通过量 max2=q[0]+q[1]+q[2]; for(i=1;i<36;i++) { if(max2<(q[10*i]+q[10*i+1]+q[10*i+2])) {max2=q[10*i]+q[10*i+1]+q[10*i+2]; printf(\"%d\\n\ } } pj3=he1/36.; printf(\"%s\\n\时段开始滞留的车数 t 时段来的车的数量 时段t 时段通过的车的数量 t 车辆等待时间 t 时段车辆所需等待时间 \"); for(i=0;i<360;i++) { printf(\"%d %d %d %d %d i],d[i]); printf(\" 总通过量 %d\\n\); printf(\" 平均等待时间 %f 最大等待时间 %d\\n\)大排队车数 %d\\n\); printf(\" 绿灯平均通过量 %f 最大通过量 %d\\n\)%d\\n\ (\" 平均排队车数 %f 最} ; printf; 因篇幅问题不能全部显示,请点此查看更多更全内容