MATLAB 网络流

网络流

网络流是一种数学模型,用于描述在网络中流动的物质或信息。网络流模型可以用于描述物流、交通、通信、生物学等领域的问题。


最大流问题

最大流问题是网络流模型中的一个重要问题,它的目标求出网络中一点到另一点的最大流量。


如何使用 MATLAB 解决最大流问题

MATLAB 中的 maxflow 函数可以用于求解最大流问题。

maxflow 函数的语法格式如下:

1
[mf,GF] = maxflow(G,s,t)

其中,G 为网络图,s 为源点,t 为汇点,mf 为最大流量,GF 为最大流量对应的网络图。

例1

创建并绘制一个加权图。加权边表示流量。

1
2
3
4
5
s = [1 1 2 2 3 4 4 4 5 5];
t = [2 3 3 4 5 3 5 6 4 6];
weights = [0.77 0.44 0.67 0.75 0.89 0.90 2 0.76 1 1];
G = digraph(s,t,weights);
plot(G,'EdgeLabel',G.Edges.Weight,'Layout','layered');

图1

求节点 1 到节点 6 的最大流:

1
[mf,GF] = maxflow(G,1,6);

结果:

1
2
3
4
5
>> mf
mf =
1.2100

>> plot(GF,'EdgeLabel',GF.Edges.Weight,'Layout','layered');

图2

例2

创建并绘制一个图。加权边表示流量。

1
2
3
4
5
s = [1 1 2 2 3 3 4];
t = [2 3 3 4 4 5 5];
weights = [10 6 15 5 10 3 8];
G = digraph(s,t,weights);
H = plot(G,'EdgeLabel',G.Edges.Weight);

图3

计算节点 1 和节点 5 之间的最大流值。

1
[mf,GF] = maxflow(G,1,5)

结果:

1
2
3
>> mf
mf =
11

突出显示非零流的图并对其添加标签:

1
2
3
4
H.EdgeLabel = {};
highlight(H,GF,'EdgeColor','yellow','LineWidth',3);
st = GF.Edges.EndNodes;
labeledge(H,st(:,1),st(:,2),GF.Edges.Weight);

图4