配流03—全有全无配流算法(1)

来源:互联网 发布:2016淘宝双11晚会 编辑:程序博客网 时间:2024/06/05 02:24

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

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

function [C,n]=feiyonghanshu(X)
for i=1:10
    syms X(i);
end

M1(1,1)=8+0.1*X(1);
M1(2,1)=10+0.25*X(2);
M1(3,1)=15+0.15*X(3);
C=vpa(M1,3);
n=length(C);


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

function quanyouquanwu
for i=1:10
    syms X(i);
end
clc
disp('========================================================================');
disp('                           《全有全无算法》');
disp('运行环境:MATLAB 8.3.0.532 ');
disp('制 作 人:兰州交通大学   刘志祥');
disp('Q      Q:531548824');
fprintf('说    明:本程序用于求解全有全无简单配流问题,只需要输入交通需求量并提前编\n制费用函数(feiyonghanshu.m)即可计算出配流结果。其中:\n');
fprintf(' T-交通需求\n C-费用函数\n X-路径流量\nX0-全无流量(0流量)\nC0-初始费用\nX1-配流结果\nC1-配流后费用\n Z-目标函数值(该模型下的最小的总费用)\n');
disp('=========================================================================');
disp('*********************************');
T=input('输入交通需求量T:')
disp('费用函数为:')
[C,n]=feiyonghanshu;
C
C0=C;
disp('*********************************');
disp('解:先初始化费用,令初始流量')
X0=zeros(n,1)
for i=1:n
    C0(i)=subs(C0(i),X(i),X0(i));
end
disp('则初始费用为:')
C0
m=min(C0);
for i=1:n
    if m==C0(i,1)
        k=i;
         fprintf('费用最小的是C0(%d),根据全有全无算法配流有:',k)      
    end
end
X0(k)=T;
X1=X0
for i=1:n
    C(i)=subs(C(i),X(i),X1(i));
end
C1=vpa(C,3)
disp('最小费用值为:')
Z=vpa(C'*X1,3)


step3 运行主程序:





1 0
原创粉丝点击