运筹学实验之最小费用最大流综合实验
- 格式:doc
- 大小:49.00 KB
- 文档页数:4
北京联合大学实验报告项目名称: 运筹学专题实验报告学院: 自动化专业:物流工程班级: 1201B 学号:2012100358081 姓名:管水城成绩:2015 年 5 月 6 日实验三:使用matlab求解最小费用最大流算问题一、实验目的:(1)使学生在程序设计方面得到进一步的训练;,学习Matlab语言进行程序设计求解最大流最小费用问题。
二、实验用仪器设备、器材或软件环境计算机,Matlab R2006a三、算法步骤、计算框图、计算程序等1.最小费用最大流问题的概念。
在网络D(V,A)中,对应每条弧(vi,vj)IA,规定其容量限制为cij(cij\0),单位流量通过弧(vi,vj)的费用为dij(dij\0),求从发点到收点的最大流f,使得流量的总费用d(f)为最小,即mind(f)=E(vi,vj)IA2。
求解原理。
若f是流值为W的所有可行流中费用最小者,而P是关于f的所有可扩充链中费用最小的可扩充链,沿P以E调整f得到可行流fc,则fc是流值为(W+E)的可行流中的最小费用流.根据这个结论,如果已知f是流值为W的最小费用流,则关键是要求出关于f 的最小费用的可扩充链。
为此,需要在原网络D的基础上构造一个新的赋权有向图E(f),使其顶点与D的顶点相同,且将D中每条弧(vi,vj)均变成两个方向相反的弧(vi,vj)和(vj,vi)1新图E(f)中各弧的权值与f中弧的权值有密切关系,图E(f)中各弧的权值定义为:新图E(f)中不考虑原网络D中各个弧的容量cij。
为了使E(f)能比较清楚,一般将长度为]的弧从图E(f)中略去.由可扩充链费用的概念及图E(f)中权的定义可知,在网络D中寻求关于可行流f的最小费用可扩充链,等价于在图E(f)中寻求从发点到收点的最短路.因图E(f)中有负权,所以求E(f)中的最短路需用Floyd算法。
1.最小费用流算法的框图描述。
图一2.计算最小费用最大流MATLAB源代码,文件名为mp_mc.mfunction[Mm,mc,Mmr]=mp_mc(a,c)A=a; %各路径最大承载流量矩阵C=c; %各路径花费矩阵Mm=0; %初始可行流设为零mc=0; %最小花费变量mcr=0;mrd=0;n=0;while mrd~=inf %一直叠代到以花费为权值找不到最短路径for i=1:(size(mcr’,1)—1)if a(mcr(i),mcr(i+1))==infta=A(mcr(i+1),mcr(i))—a(mcr(i+1),mcr(i)); elseta=a(mcr(i),mcr(i+1));endn=min(ta,n);%将最短路径上的最小允许流量提取出来endfor i=1:(size(mcr’,1)-1)if a(mcr(i),mcr(i+1))==infa(mcr(i+1),mcr(i))=a(mcr(i+1),mcr(i))+n;elsea(mcr(i),mcr(i+1))=a(mcr(i),mcr(i+1))—n;endendMm=Mm+n;%将每次叠代后增加的流量累加,叠代完成时就得到最大流量 for i=1:size(a,1)for j=1:size(a’,1)if i~=j&a(i,j)~=infif a(i,j)==A(i,j) %零流弧c(j,i)=inf;c(i,j)=C(i,j);elseif a(i,j)==0 %饱合弧c(i,j)=inf;c(j,i)=C(j,i);elseif a(i,j)~=0 %非饱合弧c(j,i)=C(j,i);c(i,j)=C(i,j);endendendend[mcr,mrd]=floyd_mr(c) %进行叠代,得到以花费为权值的最短路径矩阵(mcr)和数值(mrd)n=inf;end%下面是计算最小花费的数值for i=1:size(A,1)for j=1:siz e(A’,1)if A(i,j)==infA(i,j)=0;endif a(i,j)==infa(i,j)=0;endendendMmr=A—a; %将剩余空闲的流量减掉就得到了路径上的实际流量,行列交点处的非零数值就是两点间路径的实际流量for i=1:size(Mmr,1)for j=1:size(Mmr’,1)if Mmr(i,j)~=0mc=mc+Mmr(i,j)*C(i,j);%最小花费为累加各条路径实际流量与其单位流量花费的乘积endendend利用福得算法计算最短路径MATLAB源代码,文件名为floyd_mr。
综合性、设计性实验报告格式桂林电子科技大学数学与计算科学学院综合性、设计性实验报告 实验室: 实验日期:2014年12月13日院(系) 数学与计算科学 年级、专业、班 姓名 成绩课程名称运筹学实验 实验项目 名 称 最小费用最大流(综合实验) 指导 教师 南江霞教师评语教师签名: 年 月 日一 ,实验目的1. 掌握最大流及最小费用最大流问题的数学建模;2. 掌握最大流问题的WinQSB 软件求解和Lingo 软件求解;3. 掌握最小费用最大流问题问题的的WinQSB 软件求解和Lingo 软件求解。
二,实验原理1、熟悉建立最大流问题的数学模型;2、熟悉建立最小费用最大流问题的数学模型;3、熟悉WinQSB 软件的基本操作。
4、熟悉Lingo 软件建模。
三,使用仪器,材料WinQSB 软件 Lingo 软件四,实验内容与步骤求最大流:五,实验过程原始记录(数据,图表,计算等)用WinQSB 软件进行求解S AB C DT(7,2) (10,10) (5,3) (7,7)(5,1)(8,4)(10,9) (5,3)用Lingo 软件进行求解建立数学模型()()()(),max max ,,min,..0,0,,ij iji j A ij ji j V j V i j A j i A ij ij e f f i S s t f f f i T i S T f c i j A∈∈∈∈∈=⎧⎪-=-=⎨⎪≠⎩≤≤∈∑∑∑model :sets :nodes/S,A,B,C,D,T/;arcs(nodes,nodes)/S,A S,B A,B,A,C B,C,B,D C,D,C,T D,T/:C,f;endsetsdata:C=7 10 5 7 5 8 7 10 5;enddatamax=flow;@for(nodes(i)|i#ne#1#and#i#ne#@size(nodes):@sum(arcs(i,j):f(i,j))-@sum(arcs(j,i):f(j,i))=0);@sum(arcs(i,j)|i#eq#1:f(i,j))=flow;@sum(arcs(i,j)|j#eq#@size(nodes):f(i,j))=flow;@for(arcs:@bnd(0,f,C));endGlobal optimal solution found.Objective value: 15.00000Infeasibilities: 0.000000Total solver iterations: 4Variable Value Reduced Cost FLOW 15.00000 0.000000 C( S, A) 7.000000 0.000000 C( S, B) 10.00000 0.000000 C( A, B) 5.000000 0.000000 C( A, C) 7.000000 0.000000 C( B, C) 5.000000 0.000000 C( B, D) 8.000000 0.000000 C( C, D) 7.000000 0.000000 C( C, T) 10.00000 0.000000 C( D, T) 5.000000 0.000000 F( S, A) 7.000000 0.000000 F( S, B) 8.000000 0.000000 F( A, B) 0.000000 0.000000 F( A, C) 7.000000 0.000000 F( B, C) 3.000000 0.000000 F( B, D) 5.000000 0.000000 F( C, D) 0.000000 0.000000 F( C, T) 10.00000 -1.000000 F( D, T) 5.000000 -1.000000 S到T的最大流=15六,实验结果分析或总结。
综合性、设计性实验报告格式
桂林电子科技大学
数学与计算科学学院综合性、设计性实验报告 实验室: 实验日期:2014年12月13日
院(系) 数学与计算科学 年级、专业、班 姓名 成绩
课程
名称
运筹学实验 实验项目 名 称 最小费用最大流(综合实验) 指导 教师 南江霞
教师
评语
教师签名: 年 月 日
一 ,实验目的
1. 掌握最大流及最小费用最大流问题的数学建模;
2. 掌握最大流问题的WinQSB 软件求解和Lingo 软件求解;
3. 掌握最小费用最大流问题问题的的WinQSB 软件求解和Lingo 软件求解。
二,实验原理
1、熟悉建立最大流问题的数学模型;
2、熟悉建立最小费用最大流问题的数学模型;
3、熟悉WinQSB 软件的基本操作。
4、熟悉Lingo 软件建模。
三,使用仪器,材料
WinQSB 软件 Lingo 软件
四,实验内容与步骤
求最大流:
五,实验过程原始记录(数据,图表,计算等)
用WinQSB 软件进行求解
S A
B C D
T
(7,2) (10,10) (5,3) (7,7)
(5,1)
(8,4)
(10,9) (5,3)
用Lingo 软件进行求解
建立数学模型
()()()(),max max ,,min
,..0,0,,ij ij
i j A ij ji j V j V i j A j i A ij ij e f f i S s t f f f i T i S T f c i j A
∈∈∈∈∈=⎧⎪-=-=⎨⎪≠⎩≤≤∈∑∑∑
model :
sets :
nodes/S,A,B,C,D,T/;
arcs(nodes,nodes)/
S,A S,B A,B,A,C B,C,B,D C,D,C,T D,T/:C,f;
endsets
data:
C=7 10 5 7 5 8 7 10 5;
enddata
max=flow;
@for(nodes(i)|i#ne#1#and#i#ne#@size(nodes):
@sum(arcs(i,j):f(i,j))-@sum(arcs(j,i):f(j,i))=0);
@sum(arcs(i,j)|i#eq#1:f(i,j))=flow;
@sum(arcs(i,j)|j#eq#@size(nodes):f(i,j))=flow;
@for(arcs:@bnd(0,f,C));
end
Global optimal solution found.
Objective value: 15.00000
Infeasibilities: 0.000000
Total solver iterations: 4
Variable Value Reduced Cost FLOW 15.00000 0.000000 C( S, A) 7.000000 0.000000 C( S, B) 10.00000 0.000000 C( A, B) 5.000000 0.000000 C( A, C) 7.000000 0.000000 C( B, C) 5.000000 0.000000 C( B, D) 8.000000 0.000000 C( C, D) 7.000000 0.000000 C( C, T) 10.00000 0.000000 C( D, T) 5.000000 0.000000 F( S, A) 7.000000 0.000000 F( S, B) 8.000000 0.000000 F( A, B) 0.000000 0.000000 F( A, C) 7.000000 0.000000 F( B, C) 3.000000 0.000000 F( B, D) 5.000000 0.000000 F( C, D) 0.000000 0.000000 F( C, T) 10.00000 -1.000000 F( D, T) 5.000000 -1.000000 S到T的最大流=15
六,实验结果分析或总结。