配流04—全有全无配流算法(2)

来源:互联网 发布:淘宝差评店主报复 编辑:程序博客网 时间:2024/05/16 01:46

说明:指定两点间的客流需求总量,建立费用函数(阻抗函数),一般情况下费用是流量的函数,就可以运用全有全无算法进行配流。

step1:建立费用函数m文件:feiyong.m

function [C,n]=feiyong
syms x1 x2 x3 real;
c1=8+0.1*x1;
c2=10+0.25*x2;
c3=15+0.15*x3;
C=vpa([c1;c2;c3],3);
n=length(C);


step2:主程序m文件:qyqw_feiyong.m

function qyqw_feiyong
syms x1 x2 x3 real
x=[x1;x2;x3];%为了方便使用矩阵进行符号变量替换
clc
disp('========================================================================');
disp('                           《全有全无算法》');
disp('运行环境:MATLAB 8.3.0.532 ');
disp('制 作 人:兰州交通大学   刘志祥');
disp('Q      Q:531548824');
fprintf('说    明:本程序用于求解全有全无简单配流问题,只需要输入交通需求量并提前编\n制费用函数(feiyong.m)即可计算出配流结果。其中:\n');
fprintf(' T-交通需求\n C-费用函数\n x-路径流量\nX0-全无流量(0流量)\nC0-初始费用\nX1-配流结果\nC1-配流后费用\n Z-目标函数值(Z1,Z2)\n');
disp('=========================================================================');
disp('*********************************');
T=input('输入交通需求量T:')
disp('费用函数为:')
[C,n]=feiyong;
C
C0=C;
disp('*********************************');
disp('解:先初始化费用,令初始流量')
X0=zeros(n,1)
disp('则初始费用为:')
C0=subs(C0,x,X0)
m=min(C0);
for i=1:n
    if m==C0(i,1)
        k=i;
        fprintf('费用最小的是C0(%d),即路径%d,根据全有全无算法配流有:',k,k)
    end
end
X0(k)=T;
X1=X0
C1=subs(C,x,X1);
disp('则路径的费用更新为:')
C1=vpa(C1,3)
Xx=[0;0;0];        %积分下界
Xs=X1;             %积分上界
for i=1:n
    JC(i)=int(C(i),Xx(i),Xs(i));  %对每一个路径积分
end
disp('最小费用值为:')
disp('积分算法:')
Z1=vpa(sum(JC),3)   %路径费用求和
disp('乘积算法:')
Z2=vpa(C1'*X1,3)

step3 运行主程序:


0 0