数学建模--图与网络(2)

这里先介绍网络最大流问题以及网络最大流问题拓展的相关其他问题如最小费用流等问题函数代码的使用


原文:http://blog.csdn.net/qq_34861102/article/details/77849582


最大流:

这里写图片描述

注意Matlab 中的最大流问题是必须是单源和单汇问题,因此这里需要构建虚拟的源点S和汇点G

一共会存在九个节点:

这里写图片描述

clc,clear
a = zeros(9,9);
a(1,[2:4]) = [20,20,100];
a(2,[5 6 8]) = [30,10,40];
a(3,[7 8]) = [10,50];
a(4,[5:8]) = [20,10,40,5];
a([5:8],9) = [20,20,60,20];
a = sparse(a);
[b,c] = graphmaxflow(a,1,9)

最大流拓展:最小费用最大流

仅仅是在求得最大流之后进行对最小费用的求解:

这里写图片描述

clc,clear
a = zeros(5);
a(1,[2 3]) = [10 8];
a(2,[4,5]) = [2 7];
a(3,[2 4]) = [5 10];
a(4,5) = 4;
a = sparse(a);
[b c] = graphmaxflow(a,1,5)

最大流量为11

自定义Matlab代码:


最小费用求解

Lingo:

model:
sets:
nodes/s,1,2,3,t/:d;
arcs(nodes,nodes)/s 1,s 2,1 3,1 t,2 1,2 3,3 t/:b,c,f;
endsets
data:
b = 4 1 6 1 2 3 2;
c = 10 8 2 7 5 10 4;
d = 11 0 0 0 -11;
enddata
n = @size(nodes);
min = @sum(arcs:b*f);
@for(nodes(i):@sum(arcs(i,j):f(i,j))-@sum(arcs(j,i):f(j,i)) = d(i));
@for(arcs:@bnd(0,f,c));
end

Matlab实现:


n = 5;
%弧容量
a = zeros(5);
a(1,[2 3]) = [10 8];
a(2,[4,5]) = [2 7];
a(3,[2 4]) = [5 10];
a(4,5) = 4;
C = a;
%C = [0 15 16 0 0;0 0 0 13 14;0 11 0 17 0;0 0 0 0 8;0 0 0 0 0];
%弧上单元的费用
a(1,[2 3]) = [4 1];
a(2,[4,5]) = [6 1];
a(3,[2 4]) = [2 3];
a(4,5) = <
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值