Algorithm 生成随机流网络

Algorithm 生成随机流网络,algorithm,matlab,graph,Algorithm,Matlab,Graph,我正在尝试为给定的图创建一个流网络,以便可以使用它来测试一个算法。为了清晰起见,我希望流入每个顶点的流量等于流出的流量。所有的水流都从源头流入水槽。每条边都有一个最大容量和一个方向。我希望通过该网络生成一个流量,该流量等于最大流量(通过最小切割找到),该流量永远不会超过每条边的容量 下面是一个图形示例,说明了我得到了什么以及我试图获得什么。当然,“期望流图”并不是一个独特的例子。我希望这是随机生成的 我在MatLab中用三个数组表示这个图。第一个数组s给出“from”顶点,第二个数组t给出“

我正在尝试为给定的图创建一个流网络,以便可以使用它来测试一个算法。为了清晰起见,我希望流入每个顶点的流量等于流出的流量。所有的水流都从源头流入水槽。每条边都有一个最大容量和一个方向。我希望通过该网络生成一个流量,该流量等于最大流量(通过最小切割找到),该流量永远不会超过每条边的容量

下面是一个图形示例,说明了我得到了什么以及我试图获得什么。当然,“期望流图”并不是一个独特的例子。我希望这是随机生成的

我在MatLab中用三个数组表示这个图。第一个数组s给出“from”顶点,第二个数组t给出“to”顶点,第三个数组w1给出从s到t的最大容量。我想生成一个表示流的随机数组,比如w2。(注意,图中的字母与代码中相应的数字相等,其中“A”=1


非常感谢您对能够执行此任务的某种算法的任何帮助。我希望有一个指向算法、伪代码、直接代码的链接,甚至只是一个关于如何实现这种算法的描述。提前感谢您的帮助。

查看MATLAB中的
maxflow
函数:

对于发布的图形,可以使用以下命令构造有向图:

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

查看MATLAB中的
maxflow
函数:

对于发布的图形,可以使用以下命令构造有向图:

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

这正是我想要的,但我注意到它没有显示零的值。例如,从6到5的边(w1=5)被分配了一个零的边权重。这在w2中根本没有显示。这使得w2的大小比w1的大小小一个。你知道有没有办法解决这个问题吗?这正是我想要的正在查找,但我注意到它没有显示零的值。例如,从6到5的边(w1=5)被分配了一个零的边权重。这在w2中根本没有显示。这使得w2的大小比w1的大小小一个。你知道有没有办法解决这个问题?