6.3 研究车辆排队长度与事故影响程度关系的多元回归分析的科学性分析 在这里我们根据视频1中提供的信息,找到车辆排队长度与事故横断面实际通行能力、事故持续时间、路段上游车流量的关系。我们初步考虑利用视频1中提取的数据,考虑四项指标之间的关系,利用该关系自主构建排队长度其他三个指标的关系式,利用实测数据求解关系式中的未知系数,然后通过检验相关系数以及利用其他数据验证来确定模型的正确性
由于是利用了视频中的统计数据分析了各个指标间的联系,基础关系式具有很好的科学性和合理性,多元回归分析法对于各项系数的确定更进一步确定了该模型的精确性。
6.4模拟事故发生路段的元胞自动机模型的科学性分析
元胞自动机模型将车流的运动看成离散的现象。虽然稳定的车流可以较好地被已知的公式来描述,但是在车道被占用的情况下,交通状况并不能被简单地计算出来。车距、车速、转向、四轮及以上机动车的类型和司机的反应时间等都应该应用到模型中,才能使模型对真实情况有较好的还原度。而我们将每辆车看成是独立的元胞来模拟便可以较好地解决事故现场的随机性,具有较强的科学性和合理性。
同时,我们充分利用了matlab软件对于矩阵的处理能力,将整个路段模拟成一个由元胞构成的大矩阵,通过每个元胞中的不同数值表示该位置在路段中的状态。通过对于矩阵的可视化显示,我们可以直观地事故路段的交通状态、队列长度等信息,为研究带来了很大的便利性。
7.模型的评价与改进
7.1 模型的优点
(1) 模型是在充分统计了视频中的各项数据信息后建立的,通过不断地分析、检验和完善使得模型具有较高的精确性,同时也确保了思维的科学性,和整体的模型结构的严谨性。
(2) 对于模型得到的结果,并能联系全文不同模型所得结果,合理地分析,反复推测,最后验证模型的可行性。
(3) 模型可以做到对事故地段的逼真还原,再现当时的情景,从而可以帮助进一步交通研究。同时,也可以对于未发生的事故做出科学且合理的预测,这样可以预估出占用车道对于交通状况的影响,从而采取完备的预防措施。
(4) 数据处理及模型求解时充分运用了MATLAB等数学软件,较好地解
30
决了问题,得到了较理想的结果。充分用了题目中的各种信息,并且较好地结合了对模型的检验。
7.2 模型的缺点
(1) 在运用排队论时,只是对数据进行了初步的分析,但其结果还不能做到深度的分析,而需要之后的元胞自动机模型对其进行定量的补充和扩展。
(2) 元胞自动机模型结果具有一定的随机性,且对预测出现的汽车较为局限地依赖于视频1中的信息,使得预测区间不够精确,还应通过对更多该路段发生事故的信息统计对其参数进行优化,使预测结果能够更加精确。
7.3模型的可推广性分析
(1) 本文提出的车道被占用对城市道路通行能力的影响模型具有较高的使用推广价值,而且算法时间、空间复杂度都不高,很容易开发成事故路段路况预测的软件,较高效率地解决交通问题。
(2) 本文提出的元胞自动机算法可以推广到更为复杂的路段,只需改变元胞矩阵的参数设置就可以模拟出不同路段的交通情况,汽车的加速、减速、换道等步骤也具有较强的普适性,使得模型有很强的灵活性和鲁棒性。
(3) 问题一中对于实际通行能力的定义能够反映道路的真实通行能力,可以推广到复杂路段通行能力的判断。
参考文献
[1] 赵寿根. 事故地点对交通波的影响研究. 物理学报,2009,58(11):7497-05. [2] 卓金武. MATLAB在数学建模中的应用. 北京:北京航空航天大学出版社,2011. [3] 田乃硕等. 离散时间排队论. 北京:科学出版社,2008. [4] 雷功炎. 数学模型讲义. 北京:北京大学出版社,2004.
[5] 姜启源,谢金星,叶俊. 数学模型. 第三版. 北京:高等教育出版社,2003. [6] 苏金明,阮沈勇. MATLAB实用教程. 北京:电子工业出版社,2008.
[7] 李雪,胡丁晟,徐铎. 眼科病床安排模型的评价及改进. 全国数学建模竞赛一等奖,2009.
31
附录:Matlab源代码 main主程序 % main.m %
of
% vehicles passing through a toll plaza, , as governed by the parameters % defined below %
% iterations = the maximal iterations of simulation % B = number booths
% L = number lanes in highway before and after plaza % Arrival = the mean total number of cars that arrives % plazalength = length of the plaza % Service = Service rate of booth % plaza = plaza matrix
% 1 = car, 0 = empty, -1 = forbid, -3 = empty&booth % v = velocity matrix % vmax = max speed of car
% time = time matrix, to trace the time that the car cost to
% pass the plaza. % dt = time step % t_h = time factor
% departurescount = number of cars that departure the plaza in the step
% departurestime = time cost of the departure cars % influx = influx vector % outflux = outflux vector
% timecost = time cost of all car % h = handle of the graphics %
clear;clc
iterations = 1200; % the maximal iterations of simulation B = 3; % number booths
L = 3; % number lanes in highway before and after plaza Arrival=3; % the mean total number of cars that arrives plazalength = 81; % length of the plaza
[plaza, v, time,buspla] = create_plaza(B, L, plazalength); h = show_plaza(plaza,buspla, NaN, 0.01); timeblock=5;
dt = 0.2; % time step t_h = 1; % time factor vmax = 2; % max speed vinit=1;%initial speed
busstop=6*ones(plazalength,B+2); carstop=3*ones(plazalength,B+2); timecost = []; sf=0;%switchflag for i = 1:iterations if i==14 ss=0; end
if i==370
32
% This is a main script to simulate the approach, service, and departure
ss=0; end
if i==490 ss=0; end
if i==550 ss=0; end
if i==602 ss=0; end
if i==711 ss=0; end
% introduce new cars
[plaza, v, arrivalscount] = new_cars(Arrival, dt, plaza, v, vinit,i);
[plaza, v, buspla] = new_bus(plaza, v, vinit, i,buspla);
h = show_plaza(plaza,buspla, h, 0.02);
[timeblock,plaza] = carblock(timeblock,plaza,sf);%×a?òμ?????3μ % update rules for lanes r=rand(); if(r<0.3) [plaza, v, time,buspla,busstop,carstop,sf] = switch_lanes(plaza, v, time,buspla,busstop,carstop,sf); % lane changes
[plaza, v, time,buspla] = move_forward(plaza, v, time, vmax,buspla); % move cars forward
else
[plaza, v, time,buspla] = move_forward(plaza, v, time, vmax,buspla); % move cars forward
[plaza, v, time,buspla,busstop,carstop,sf] =
switch_lanes(plaza, v, time,buspla,busstop,carstop,sf); % lane changes
end
[plaza,buspla, v, time, departurescount, departurestime] = clear_boundary(plaza,buspla, v, time);
% flux calculations
influx(i) = arrivalscount; outflux(i) = departurescount;
timecost = [timecost, departurestime]; end
h = show_plaza(plaza, h, 0.01);
xlabel({strcat('B = ',num2str(B)), ...
strcat('mean cost time = ', num2str(round(mean(timecost))))})
子程序Carblock
function [time,plaza] = carblock(time,plaza,sf) if plaza(122)~=1 if sf==1
plaza(122)=-1; time=5; elseif time<3 plaza(122)=0; else
time=time-1;
33
end end
子程序carpass
function [flag,plaza] = carpass(plaza,index,L,flag) if(flag(index)==1) plaza(index-L)=0; flag(index)=0; end
子程序clear_boundary
function [plaza,buspla, v, time, departurescount, departurestime] = clear_boundary(plaza, buspla,v, time)
%
% clear_boundary remove the cars of the exit cell %
% USAGE: [plaza, v, time, departurescount, departurestime] = clear_boundary(plaza, v, time)
% plaza = plaza matrix
% 1 = car, 0 = empty, -1 = forbid, -3 = empty&booth % v = velocity matrix % time = time matrix, to trace the time that the car cost to pass the plaza.
%
departurescount = 0; departurestime = []; [a,b] = size(plaza); for i = 2:b-1 if plaza(a,i) > 0
departurescount = departurescount + 1;
departurestime(departurescount) = time(a,i); buspla(a-1,i)=0; buspla(a,i)=0; plaza(a,i) = 0; v(a,i) = 0; v(a-1,i)=0; time(a,i) = 0; end end
子程序creat_plaza
function [plaza, v, time,buspla] = create_plaza(B, L, plazalength) %
% create_plaza create the empty plaza matrix( no car ).
% 1 = car, 0 = empty, -1 = forbid, -3 = empty&booth %
% USAGE: [plaza, v, time] = create_plaza(B, L, plazalength) % B = number booths
% L = number lanes in highway before and after plaza % plazalength = length of the plaza %
plaza = zeros(plazalength,B+2); % 1 = car, 0 = empty, -1 = forbid, -3 = empty&booth
v = zeros(plazalength,B+2); % velocity of automata (i,j), if it exists time = zeros(plazalength,B+2); % cost time of automata (i,j) if it exists
plaza(1:plazalength,[1,2+B]) = -1;
34