2010年认证杯SPSSPRO杯数学建模
交通拥堵问题
B题 Braess 悖论
原题再现:
Dietrich Braess 在 1968 年的一篇文章中提出了道路交通体系当中的Braess 悖论。它的含义是:有时在一个交通网络上增加一条路段,或者提高某个路段的局部通行能力,反而使所有出行者的出行时间都增加了,这种为了改善通行能力的投入不但没有减少交通延误,反而降低了整个交通网络的服务水平。人们对这个问题做过许多研究,在城市建设当中也尽量避免这种现象的发生。但在复杂的城市道路当中,Braess 悖论仍然不时出现,造成实际交通效率的显著下降。在此,请你通过合理的模型来研究和解决城市交通中的 Braess 悖论。
第二阶段问题:
Braess 悖论宣称:提高某一路段的通行能力,反倒可能使整体路网的通行能力下降。那么,在发生交通拥堵的时候,如果暂时关闭其中的某条道路,是否可以缓解交通堵塞的现象?请建立合理的模型,研究临时关闭道路以缓解交通堵塞的可行性。如果可行,请给出具体的关闭方案。城区道路网可以使用北京市二环路的地图,也可以使用美国波士顿的部分城区图(见图2中被蓝色环路圈起来的部分)。
整体求解过程概述(摘要)
本文首先通过对非合作网络中 Nash 平衡点与 Pareto 边界理论的分析,通过单起点单终点的简单路网入手, 分析 Braess 悖论的成因,Braess 悖论实质上是非合作网络中 Nash 平衡点不满足 Pareto 最优性时出现的现象。定量的给出出行时间与流量的关系,这里引入了路段延迟参数的概念,量化得到延迟参数与路段流量,出行时间,出行密度之间的关系。进而通过建立北京二环区交通路网模型,拟合出 flow L speed ~ / 关系曲线,得到各路段的延迟参数,进而得到单月内北京二环区 Pareto 最优解的判别条件。
其次,根据 Pareto 边界理论,我们以年月为单位统计北京二环以内交通流量因素,得到城区交通年延迟参数,并计算了 2000~2009 年共 120 个月的延迟参数。接着,我们构建了 Nash 均衡原理模型,引入了路段 Nash 平衡比率的概念,即当某一时间范围内,路段 Nash 平衡比率低于路段延迟参数时,则发生了 Braess 悖论,当同时又满足 Nash平衡波动率超过 30%时,为严重 Braess 悖论,从而完善了 Nash 平衡比率理论方程。再次,根据已建立的 Nash 平衡比率理论方程,在此基础上构建小波神经网络来对北京二环区交通路网路段 Nash 平衡比率进行预测,这里我们将选择 2000~2009 年路段延迟参数为样本,根据路段延迟参数与路段 Nash平衡比率的动态关系式,对 2000~2009年路段 Nash 平衡比率进行计算。
接着,我们建立了 GPS 动态导航的车辆运行模型,量化得到了时耗期望值和时耗方差两个目标函数并作为 ATM 路由选择的约束条件,以降低 Nash 平衡比率为目标,通过ATM 路由选择进行 GPS 导航对路段影响的预测。当我们控制业务源提高 GPS 使用率时,路段 NASH 平衡比率也持续上升,使用率升至 0.34 时,NASH 平衡比率上升幅度最大化。我们通过灰色 Gompertz 模型对 ATM 路由选择算法进行误差分析,检验结果表明此抽检方案为合理方案,误差范围 5.84%。通过遗传算法对路段 Nash 平衡比率进行优化,得到最优化后的结果,证明了 ATM 路由选择算法对 GPS 动态导航研究的可靠性。
最后,针对暂时关闭其中的某些道路以缓解交通堵塞问题,我们建立了基于瓶颈路由博弈的网络路径选择性模型来研究这个问题,首先,我们分析了临时关闭某些路段以缓解交通拥堵的可行性,并且给出了可行性的相应条件;其次,我们采用该模型通过实例进行分析,引入了悖论边概念,并研究了悖论边的选取方法,也就是可通过暂时关闭来缓解交通堵塞的路段选择方法。
问题分析
首先分析单一路段在单一时间范围内的 BRAESS 悖论情况,然后以北京二环以内的综合路段为考虑对象,时间范围 2000~2009 年,并主要提取出 2002 年(6 月天坛路拓宽),2003 年(6 月普方路拓宽),2004 年(7 月永定门桥延修),2008 年(9 月天坛路改道)的 NASH 平衡比率,并通过 MATLAB 工具 CHIP()提取出月波动率超过 30%的比率数进行标定,同时,我们将近十年的北京二环以内主要路段的 BRAESS 悖论情况进行分析,并讨论 GPS 动态导航对路段BRAESS 悖论现象的影响。
模型的假设:
(1)天气因素对 BRAESS 悖论的影响忽略不计
(2)《北京交通发展年报》及《全市综合交通调查》提供了精确无误的数据
(3)北京市区内地铁路线改造的影响忽略不计。
论文缩略图:
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可
部分程序代码:(代码和文档not free)
% IIi 为预测点
% x 为预测序列(一行)
% X0X 为预测值(对有 IIi 而言)
% Q0Q 为预测精度
% pp 为小误差概率
% C 为后验误差比
% pp>0.95 或 C<0.35 为 1 级(好)
% pp>0.80 或 C<0.50 为 2 级(合格)
% pp>0.70 或 C<0.65 为 3 级(勉强合格)
% pp<=0.70 或 C>=0.65 为 4 级(不合格)
%
% AUA=[a;u;ua;xua];
% XEG=[xg;eg];
% PPC=[pp;C];
function [X0X,Q0Q,PPC,pddstr,XIi,AUA,XEG]=GM11(x,IIi);
%%%%%%%%%%%%%%%%%%%%%%%
%例子
%x=[3.711 3.723 3.716 3.721 3.728]
%x=[2.67 3.13 3.25 3.36 3.56 3.72]
% x=[2.97 3.23 3.29 3.46 3.59 3.71]
%x=[43.45 47.05 52.75 57.14 62.64 68.52]
% x=[3.38 4.27 4.55 4.69 5.59]
% x=[4.24 4.33 5.20 6.42 7.32 8.53 8.82 10.72]
%
% x=[3.38 4.27 4.55 4.69 5.59]
% IIi=[ 5 6 7 8 9 10 11]
% IIi=[]
%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% %%
%% 一、数据处理 %%
%% %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%1 建立 X1 生成数列
%format long
a12=size(x);
n=a12(2);
x1=ones(1,n);
x1(1)=x(1);
for i=2:n
x1(i)=x1(i-1)+x(i);
end
x1;
%2 构造数据距阵 B 和数据向量 Yn:
B=ones(n-1,2);
for i=1:n-1
B(i,1)=(-0.5)*(x1(i)+x1(i+1));
end
Yn=ones(n-1,1);
for i=2:n
Yn(i-1,1)=x(i);
end
B;
Yn;
%3 计算 B'B,inv(B'B)和 B'Yn;得到参数 a 和 u
%BTB=B'*B;%
%BTb=inv(BTB);
%BTYn=B'*Yn;
%au=BTb*BTYn;
au=inv(B'*B)*B'*Yn;
a=au(1,1);
u=au(2,1);
% fprintf('参数 a:%f\n',a);
% fprintf('参数 u:%f\n',u);
ua=u/a;
xua=x(1)-ua;
%4 得出预测模型
%预测第 I 的预测值
%有问题
% XI1=xua*exp((-a)*I)+ua;%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% %%
%% 二、模型检验 %%
%% %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%5:残差检验
%51 计算 X1
X1=ones(1,n);
for i=1:n
X1(i)=xua*exp((-a)*(i-1))+ua;
end
X1;
%52 累减生成 X0 序列
X0=ones(1,n);
X0(1)=X1(1);
for i=2:n
X0(i)=X1(i)-X1(i-1);
end
X0;
%53 计算绝对误差及相对误差序列
Dd=abs(X0-x);%计算绝对误差序列
DDd=(Dd./x).*100;%计算相对误差序列 x%
% fprintf('相对误差序列:');
% fprintf('%f%% ',DDd);
% fprintf('\n');
%6 进行关联度检验
%61 计算序列绝对误差 Xx
Xx=ones(1,n);
for i=1:n
Xx(i)=x(i)-X0(i);
end
% fprintf('序列绝对误差:');
% fprintf('%f ',Xx);
% fprintf('\n');
minXx=min(Dd);
% fprintf('最小差:');
% fprintf('%f ',minXx);
% fprintf('\n');
maxXx=max(Dd);
% fprintf('最大差:');
% fprintf('%f ',maxXx);
% fprintf('\n');
%62 计算关联系数 P=0.5 (则 r=0.6)
P=0.5;
nI=ones(1,n);
for i=1:n
nI(i)=(minXx+P*maxXx)/(Dd(i)+P*maxXx);
end
%63 计算关联度,(P=0.5 时,则 r=0.6)
r=(1/n)*sum(nI);
% fprintf('请查找 P=0.5 是的检验准则 r=0.6 是否大于%f\n',r);
%7 后验差检验
%71
xm=mean(x);
%72 求的均方差
s1=(sum((x-xm).^2)/(n-1))^(1/2);
%73 计算残差的均值
Ddm=mean(Dd);
%74 计算残差的均方差
s2=(sum((Dd-Ddm).^2)/(n-1))^(1/2);
%75 计算后验误差比 C:
C=s2/s1;
% fprintf('验误差比 C:%f\n',C);
%76 计算小误差概率
%%%%%%%%%%%%%%
pr=abs(Xx-mean(Xx))<0.6745*s1; %m 满足条件的样本
pa=size(find(pr==1));
ps=pa(1,2); %m 满足条件的样本个数
pb=size(pr);
pS=pb(1,2); %m 总样本个数
pp=ps/pS; %小误差概率
% fprintf('小误差概率 pp:%f\n',pp);
%%%%%%%%%%%%%%%%
%检验 预测精度 ycd
% fprintf(' pp>0.95 或 C<0.35 为 1 级(好)\n pp>0.80 或 C<0.50 为 2 级
(合格)\n pp>0.70 或 C<0.65 为 3 级(勉强合格)\n pp<=0.70 或 C>=0.65 为 4
级(不合格)\n\n',C);
if pp>0.95
pd=1;
% fprintf(' 因 pp>0.95 且 ');
end
if pp<=0.95&pp>0.80
pd=2;
% fprintf(' 因 pp<=0.95&pp>0.80 且 ');
end