2016年国赛高教杯数学建模
B题 小区开放对道路通行的影响
2016年2月21日,国务院发布《关于进一步加强城市规划建设管理工作的若干意见》,其中第十六条关于推广街区制,原则上不再建设封闭住宅小区,已建成的住宅小区和单位大院要逐步开放等意见,引起了广泛的关注和讨论。
除了开放小区可能引发的安保等问题外,议论的焦点之一是:开放小区能否达到优化路网结构,提高道路通行能力,改善交通状况的目的,以及改善效果如何。一种观点认为封闭式小区破坏了城市路网结构,堵塞了城市“毛细血管”,容易造成交通阻塞。小区开放后,路网密度提高,道路面积增加,通行能力自然会有提升。也有人认为这与小区面积、位置、外部及内部道路状况等诸多因素有关,不能一概而论。还有人认为小区开放后,虽然可通行道路增多了,相应地,小区周边主路上进出小区的交叉路口的车辆也会增多,也可能会影响主路的通行速度。
城市规划和交通管理部门希望你们建立数学模型,就小区开放对周边道路通行的影响进行研究,为科学决策提供定量依据,为此请你们尝试解决以下问题:
1. 请选取合适的评价指标体系,用以评价小区开放对周边道路通行的影响。
2. 请建立关于车辆通行的数学模型,用以研究小区开放对周边道路通行的影响。
3. 小区开放产生的效果,可能会与小区结构及周边道路结构、车流量有关。请选取或构建不同类型的小区,应用你们建立的模型,定量比较各类型小区开放前后对道路通行的影响。
4. 根据你们的研究结果,从交通通行的角度,向城市规划和交通管理部门提出你们关于小区开放的合理化建议。
整体求解过程概述(摘要)
交通是城市的命脉,开放小区会对周边道路车辆通行产生多方面的影响。为了帮助交通管理部门和城市规划部门做出科学决策,需要针对不同类型的小区分情况权衡小区开放带来的正、负效应。本文针对小区开放对周边道路通行的影响问题,以元胞自动机、相关性分析、优化理论和控制变量法为理论基础建立了完整的数学模型。
针对问题一,由分析可知小区开放从两个方面对周边道路的车辆通行产生影响:一方面小区开放后内部道路分担了周边道路的部分车流量,减少了有信号灯的交叉路口的平均延误时间;另一方面,由于进出小区的车辆增多导致小区进出口车辆分、合流效应增加,延长了后方车辆的排队时间。因此,周边道路的交叉口所产生的平均延误时间的总和可以有效衡量车辆通行情况。本文选取小区开放前后周边道路上平均延误时间之差(下称前后延时差)来衡量小区开放对周边道路车辆通行的影响。
针对问题二,将车看作元胞,根据车辆所在位置制定元胞运动规则,构造基于元胞自动机的车辆通行模型。根据车辆所在位置可分为四个子模型:车辆进入研究区域模型、一般道路模型、有信号灯的交叉路口模型以及无信号灯的交叉路口模型。在两个交叉路口模型中,根据路况信息的完全程度,制定了两种元胞路径选择规则:当路况信息不完全时,车辆等概率随机选择道路;若路况信息较为完全时,车辆利用优化路径选择函数来选择最优道路。用计算机模拟车辆通行模型以获得小区开放前后周边道路的实时车流量,从而可得前后延时差。
针对问题三,用道路节点数目来量化小区内部道路类型、用小区内部道路的可替代道路长度来量化周边道路类型、用车辆进入道路的概率来量化周边道路的车流量,采用控制变量法,结合相关性分析,得出了不同情况下小区开放对周边道路车辆通行的影响。先考虑简化后的模型,即不考虑出入口的分、合流效应,前后延时差只受有信号灯的交叉路后延时缩短的影响,因此前后延时差始终为正。进行三组控制变量实验,得到结论:控制其他因素不变,前后延时差与小区内部道路长度呈负相关关系;与小区内部道路节点数目呈负相关关系;与周边道路车流量呈现先正后负的相关关系,可以求得使前后延时差最大的最优车流量。再者考虑完整的模型,即考虑小区出入口的分、合流效应,前后延时差受到有信号灯的交叉路口延时缩短和小区出入口排队时间增长的共同作用,着重考虑前后延时差为负值的情况:控制其他因素不变,前后延时差为负值的比率与小区内部道路长度无显著相关关系;与周边道路车流量在0.01的显著性水平下呈现正相关关系。在信息较为完全的条件下,应用问题二中的优化路径选择函数,出入口存在分、合流效应的小区也可以实现前后延时差非负的情况。
针对问题四,城市规划部门在开放已建成小区的时候,应重点考虑开放内部交通复杂度低、内部道路长度短、周边道路车流量大的小区;在新建小区时也应考虑这些因素。交通管理部门应重点加大实时路况信息的传播,缓解由于信息不完全而带来的资源浪费和效用损失,使得车辆驾驶员可以根据路况信息选择最优路径,从而使得小区开放对周边道路通行的正效应最大。
模型假设:
(1)小区周边道路均为双车道,即同方向只有一条机动车道。
(2)小区周边道路在机动车道和非机动车道之间设有分隔带。
(3)研究的车辆只包含四轮以上的机动车,且均考虑为标准车辆。
(4)小区周边道路坡度为0。
(5)受小区开放影响的道路只包括与小区出入口处车流存在分、合流现象的道路及小区内部道路的替代道路。(更详细的图示见5.1.1)
(6)若在小区出入口处设有交通信号灯,则允许车辆左转进出小区。否则,小区出入口处不允许机动车左转。
(7)不考虑路面公交车及停车位的影响。
(8)不考虑交通事故的影响及大范围违法穿行的情况。
(9)车辆进入小区周边道路的概率分布满足平稳性。
(10)假设小区开放前进出小区的车辆很少,因此不考虑小区开放前出入口处的因车辆分、合流现象产生的延误时间。
假设可行性
(1)在四车道或六车道的条件下,当道路上存在无信号灯交叉口的时候,车辆更倾向于靠内侧道路行驶,且内侧车道受交叉口分、合流的影响比较小。因此,为简便计算,可以将模型简化为只考虑双车道的情况。
(2)在交通较为拥堵的路段,才值得讨论是否有必要开放小区来疏散交通。若该区域交通通畅,则在短时间内没有必要耗费财力物力、承担安全风险来开放小区。因此本文将研究的对象定位于已经或有明显趋势出现交通拥堵的路段。在这种路段中,如果在小区出入口处不设信号灯且允许车辆左转进入小区,则会造成来向和对向两条道路的延误,对道路通行影响较大,极易造成拥堵。因此,假设只有在小区出入口处设有交通信号灯的前提下才允许车辆左转进入小区,是合理的。
问题分析:
问题一
问题一要求选取恰当的评价指标体系,来评价小区开放对周边道路车辆通行的影响。这里应该首先明确小区开放从哪些方面影响了周边道路车辆通行?再者,这些影响因素所缓解或加重的共同的交通现象是什么?其次,如何选取指标量化这一现象?从而可得到恰当的评价指标体系。
问题二
问题二要求建立关于车辆通行的数学模型,来研究小区开放对周边道路通行的影响。通过问题一的分析,我们知道研究小区开放对周边道路通行的影响,就是研究通行能力的增大和通行速度的降低对道路通行的影响哪一个更大。因此需要构建小区周边道路上的车辆通行模型,来模拟车辆在道路上的路径选择。根据道路类型的不同将模型分解为多个子模型。利用路径选择函数得到整个研究范围内的车辆通行情况,从而得到评价指标体系中的参数,进而得到小区开放前后评价指标的变化,可以直观的表现出小区开放对周边道路通行的影响。
问题三
问题三提出了不同条件下小区开放对周边道路的影响可能不同,因此需要考虑小区的结构以及周边道路的结构和车流量等因素。首先应该明确哪些变量可以用来量化这些因素,并且会对评价指标体系产生影响。再者,进行控制变量实验,保证其他因素一定的条件下,改变某一个因素,观察小区开放前后评价指标变化情况。其次,利用控制变量实验中收集到的数据,进行相关性分析,在统计学的视角下,给出更加科学、合理、有说服力的结论。
问题四
问题四要求根据研究结果,从交通通行的视角,对城市规划和交通管理部门提出合理的建议。这一问包含两部分的建议:一部分是对城市规划部门的建议,包括在建设新的开放型小区时应着重考虑哪些有利的小区结构和道路类型以及应该开放什么类型的已建成小区等;另一部分是对交通管理部门的建议,包括如何在开放小区或不开放某些已建成小区的基础上合理的管理交通来实现交通通行的最优化。
模型的建立与求解整体论文缩略图
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可
部分程序代码(未放全):
clc;
%clear;
Tmax = 1000;
carnum = 0;
%考虑的时间的上限
%carnum 是当前通过的车的总数目
fieldCarNum = 0; %fieldCarNum 进入小区的车辆数
%beta = 8;
%1-alpha / 10,为出现车的概率,体现车流量
fieldCapure = 800; %小区内道路的承载量
fieldDistance = 80; %小区内道路的逻辑长度
fRpb = 0.8;
%行人自行车修正系数
R = 0.5;
L1 = 0.005;
h = 0.0025;
alpha = pi / 4;
mu = 0.18;
v = 50;
%主路进入小区的比例
%车身长度,km
%标准饱和车头时距
%转弯角度
%横向力系数
%车辆速度
t_avg = L1 / v ; %畅通情况下车辆直行通过计算截面的平均耗时
ER = (L1 + alpha * R)/(h * sqrt(127 * R * mu));
%右转车转换系数
fR = 100/(100 + R * (ER- 1));
%右转修正系数
theta = 0;
%车辆入口延时的影响因子
delay = zeros(Tmax, 1); %记录入口延时
T = 20; %路灯周期
Tg = 5; %绿灯时间
Car = cell(carnum,1); %Car 是所有的车的集合
Car0 = cell(carnum,1); %Car 是所有的车的集合
car = struct('road',0,'distance',0,'state',0); %road 是当前车所在的道路,
distance 表示在这条路上的位置,state表示是否在区域里,1在里面,0在外面
t = 0; %当前时间
Dt = cell(t,1); %每个时刻的平均延误
Dt0 = cell(t,1); %每个时刻的平均延误
Light = 0; % Light 表示当前灯是红灯0,还是绿灯1
roadnum = 4;
%roadnum 是所有的道路数目
Outroad = []; % 与出口相连的路
Outroad(1) = 4;
Inroad = [2,3]; %与入口相连的路
FieldRoad = []; %小区内的路
FieldRoad(1) = 3;
Troad = zeros(roadnum,1);%每条路上的路灯周期
Tgroad = zeros(roadnum,1);%每条路上绿灯时间
RoadMap = zeros(roadnum,roadnum); %路的可达性矩阵
RoadMap0 = zeros(roadnum,roadnum); %路的可达性矩阵
Roadcapture = zeros(roadnum,1); %Roadcapture 路的设计承载量
Roadcarnum = zeros(roadnum,1); %Roadcarnum 路当前有的车数量
Roadcarnum0 = zeros(roadnum,1); %Roadcarnum 路当前有的车数量
Roaddistance = zeros(roadnum,1);%Roaddistance 路的距离
Roaddt = zeros(roadnum,1); %Roaddt 每条路上的平均延迟时间
Roadcapture = [1000,1000,1000,1];
Roadcapture(3) = fieldCapure;
Roadcapture = Roadcapture';
Roaddistance = [100,100,100,1];
Roaddistance(3) = fieldDistance;
Troad(:) = 20;
Tgroad(:) = 5;
RoadMap = [0,0,0,0;1,0,0,0;1,0,0,0;0,1,1,0];
RoadMap0 = [0,0,0,0;1,0,0,0;0,0,0,0;0,1,0,0];
myres = zeros(500,4);
Flag = [0,1,0,0]';
mainflow = 3600 * (1- beta / 10);
for t = 1:Tmax
%%%%%%判断当前是否有车到来0没有,1有
Dt{t} = 0;
Dt0{t} = 0;
ra = rand();
if ra >= beta / 10
ra = 1;
else
ra = 0;
end
%%%%%%增加车的数量,更新车的情况
if ra == 1
carnum = carnum+1;
car.road = 1;
car.distance = Roaddistance(1);
car.state = 1;
Car{carnum} = car;
Car0{carnum} = car;
Roadcarnum(1) = Roadcarnum(1)+1;
Roadcarnum0(1) = Roadcarnum0(1)+1;
end
%%%%%%判断当前红绿灯情况
Light = mod(t,T);
if Light <= Tg
Light = 1;
else
Light = 0;
end
for cari = 1:carnum
if(Car{cari}.state == 0)
continue;
end
%%不考虑小区开放时
if Light == 1 %%%绿灯时
[nextroad,nextdistance,nextstate] =
nextdir(cari,RoadMap0,Car0,Roaddistance,Outroad,Roadcarnum0); %%%函数
nextdir 返回cari这辆车下一次所在的路的在路上的距离
else %%%%红灯时
[nextroad,nextdistance,nextstate] =
nextdir_red(cari,RoadMap0,Car0,Roaddistance,Outroad,Roadcarnum0);
end
Roadcarnum0(Car0{cari}.road) = Roadcarnum0(Car0{cari}.road)-1;
Car0{cari}.road = nextroad;
Car0{cari}.distance = nextdistance;
Car0{cari}.state = nextstate;
if nextstate == 1
Roadcarnum0(nextroad) = Roadcarnum0(nextroad)+1; %%%%%%当前
这条路上的车的数量
end
%%考虑小区开放时
% disp(strcat('car', num2str(cari)));
if Light == 1 %%%绿灯时
[nextroad,nextdistance,nextstate] =
nextdir(cari,RoadMap,Car,Roaddistance,Outroad,Roadcarnum); %%%函数
nextdir 返回cari这辆车下一次所在的路的在路上的距离
else %%%%红灯时
[nextroad,nextdistance,nextstate] =
nextdir_red(cari,RoadMap,Car,Roaddistance,Outroad,Roadcarnum);
end
myres(t, 1) = nextroad;
myres(t, 2) = nextdistance;
myres(t, 3) = nextstate;
myres(t, 4) = cari;
Roadcarnum(Car{cari}.road) = Roadcarnum(Car{cari}.road)-1;
Car{cari}.road = nextroad;
Car{cari}.distance = nextdistance;
Car{cari}.state = nextstate;
if nextstate == 1
Roadcarnum(nextroad) = Roadcarnum(nextroad)+1; %%%%%%当前这
条路上的车的数量
end
end
if( ra == 1 && ismember(nextroad, FieldRoad) )
fieldCarNum = fieldCarNum + 1;
theta = theta + 1;
else
if(theta >= 0.3)
theta = theta- 0.3;
else
theta = 0;
end
end
if(carnum > 0)
R = R * 0.5 + 0.5 * fieldCarNum / carnum;
ER = (L1 + alpha * R)/(h * sqrt(127 * R * mu));%右转车转换系数
fR = 100/(100 + R * (ER- 1));%右转修正系数
x = ( mainflow) / Roadcapture(1); %道路饱和度
C1 = x * (fRpb + fR);
%主流向通行能力
NDT = (1/C1- t_avg) * (1/t_avg + 1) * t_avg / 2; %信号交叉路口平
均延误
end
Dt{t} = theta * NDT;
delay(t) = Dt{t};
%%%%%%计算每条路的平均延误时间
dt =
((0.5*Troad).*(1-Tgroad./Troad))./(1-min(1,Roadcarnum.*(720./Roaddist
ance')./Roadcapture).*(Tgroad./Troad)).*Flag;
Dt{t} = Dt{t} + sum(dt);
dt0 =
((0.5*Troad).*(1-Tgroad./Troad))./(1-min(1,Roadcarnum0.*(720./Roaddis
tance')./Roadcapture).*(Tgroad./Troad)).*Flag;
Dt0{t} = Dt0{t} + sum(dt0);
end
dtDelta = cell2mat(Dt0)- cell2mat(Dt);
save(strcat(num2str(beta), 'dtDelta_6.mat'), 'dtDelta');
save(strcat(num2str(beta), 'Dt_6.mat'), 'Dt');
save(strcat(num2str(beta), 'Dt0_6.mat'), 'Dt0');