生成随机流网络

时间:2017-04-28 15:32:15

标签: algorithm matlab graph

我正在尝试为给定的图形创建流网络,以便它可以用于测试算法。为了提供清晰度,我希望流入每个顶点的流量等于流出量。所有流量都来自源并进入接收器。每个边缘都有最大容量和方向。我想通过这个网络产生一个流量,它等于最大流量(由最小切割找到),它永远不会超过每个边缘的容量。

下面是我给出的内容以及我想要获得的内容的图形示例。当然" Desired Flow Graph"不是一个独特的例子。我希望这是随机生成的。

Given Weighted Graph

Desired Flow Graph

我在MatLab中用三个数组表示此图。第一个数组 s 给出"来自"顶点,第二个数组 t 给"到"顶点,第三个数组 w1 给出从 s t 的最大容量。我想生成一个代表流程的随机数组,例如 w2 。 (注意图片中的字母等同于代码中的相应数字,其中" A" = 1。

s =  [1  1  1  2  3  3  4  6  5  6];
t =  [2  3  4  5  5  6  6  5  7  7];
w1 = [10 15 10 8  5  7  6  5  18 15];
w2 = [8  12 6  8  5  7  6  0  13 13];

任何可以执行此任务的算法的帮助都将非常感激。我希望链接到算法,伪代码,直接代码,甚至只是描述如何实现这样的算法。在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

在MATLAB中查看maxflow函数: http://www.mathworks.com/help/matlab/ref/graph.maxflow.html

对于您发布的图表,您可以使用以下命令构建有向图:

s =  [1  1  1  2  3  3  4  6  5  6];
t =  [2  3  4  5  5  6  6  5  7  7];
w1 = [10 15 10 8  5  7  6  5  18 15];
g = digraph(s,t,w1);

然后,您可以使用maxflow计算节点1和节点7之间的流量值,并将其返回到新的有向图gf中:

[mf,gf] = maxflow(g,1,7);

您现在引用的w2向量只包含gf图的边权重,因此您可以像这样提取它:

w2 = gf.Edges.Weight