交通分配之用户均衡分配模型之三(matlab源码)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例
总流量为100,走行函数为:
⎪⎭⎫ ⎝⎛+=40)(6.04)(111t x x c ⎪⎭
⎫ ⎝⎛+=40)(9.06)(222t x x c ⎪⎭
⎫ ⎝⎛+=60)(3.02)(333t x x c ⎪⎭⎫ ⎝⎛+=40)(75.05)(444t x x c ⎪⎭
⎫ ⎝⎛+=40)(45.03)(555t x x c 模型求解的Matlab 源码:
syms lambda ;
numf = 3; %路径总数
numx = 5;%路段总数
Q=100;%总流量
fid=fopen('D:\Program Files\MATLAB\R2011b\bin\我的matlab\traffic\UECOM.txt','w'); %设置运行结果输出文件
T = [4 6 2 5 3 ]; %路段走行时间函数参数
cap = [(0.6/40) (0.9/40) (0.3/60) (0.75/40) (0.45/40) ]; %路段走行时间函数参数 Mxf = [1 0 0 1 0;
0 1 0 0 1 ;
1 0 1 0 1]; % 路段转路径矩阵
% Mfx = Mxf'; % 路径转路段矩阵
%========================================================== %以上为程序需要输入的变量
xx= zeros(1,numx);
t = zeros(1,numx);
t = T + cap .* xx ;%路段走行时间函数
ft = (Mxf * t')'; %三条路径的走行时间初值。 路径1为路段1,4 ,路径2为路段2,5 ,路径3为路段1,3,5
N= 15; %最大迭代次数,也可使用其他收敛条件
[Min,index] = min(ft) ;
xx = Mxf(index,:).*Q ; % 全有全无法为最短路径上的路段分配流量
for i =1 :N
y = zeros(numx); %辅助路段流
t = T + cap .* xx ;%路段时间
ft = (Mxf * t')' ; %路径时间
fprintf(fid,'\n========================================================== =================\n' );
fprintf(fid,'\n\n第%2d 次迭代的路径时间值:\n' , i );
for (ii = 1: numf)
fprintf(fid,'%11.4f :' ,ft(1,ii) );
end
[Min,index] = min(ft) ;
y = Mxf(index,:).*Q ; % 全有全无法为最短路径上的路段分配流量
fprintf(fid,'\n第%d 次迭代的辅助流量值是:\n' , i);
for (ii = 1: numx)
fprintf(fid,'%11.4f: ' ,y(1,ii) );
end
zz = xx + lambda * (y-xx); % 按方向(y-xx)进行一维搜索,步长为lamda
t = T + cap .* zz ;
f = sum( (y -xx).* t ,2);
lambda1 =double( solve(f)) ; %求解方程,确定步长。
k = length(lambda1); % 如步长lambda1的解不唯一,取实数,且大于0 小于1;
for m=1: k
if lambda1(m,1) > 0 && lambda1(m,1) < 1 && isreal(lambda1(m,1))
lambda2 =lambda1(m,1);
end
end
xx = xx + lambda2*(y - xx ); % 得到下一步的流量值,且进行下一次迭代
fprintf(fid,'\n第%2d 次迭代后的路段流量值是:\n' , i);
for (ii = 1: numx)
fprintf(fid,'%11.4f: ' ,xx(1,ii) );
end
end
status = fclose('all')
ft