- 85
- 0
- 约1.74千字
- 约 2页
- 2019-08-07 发布于江西
- 举报
例
总流量为100,走行函数为:
模型求解的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
原创力文档

文档评论(0)