Algorithm 生成随机流网络
我正在尝试为给定的图创建一个流网络,以便可以使用它来测试一个算法。为了清晰起见,我希望流入每个顶点的流量等于流出的流量。所有的水流都从源头流入水槽。每条边都有一个最大容量和一个方向。我希望通过该网络生成一个流量,该流量等于最大流量(通过最小切割找到),该流量永远不会超过每条边的容量 下面是一个图形示例,说明了我得到了什么以及我试图获得什么。当然,“期望流图”并不是一个独特的例子。我希望这是随机生成的 我在MatLab中用三个数组表示这个图。第一个数组s给出“from”顶点,第二个数组t给出“to”顶点,第三个数组w1给出从s到t的最大容量。我想生成一个表示流的随机数组,比如w2。(注意,图中的字母与代码中相应的数字相等,其中“A”=1Algorithm 生成随机流网络,algorithm,matlab,graph,Algorithm,Matlab,Graph,我正在尝试为给定的图创建一个流网络,以便可以使用它来测试一个算法。为了清晰起见,我希望流入每个顶点的流量等于流出的流量。所有的水流都从源头流入水槽。每条边都有一个最大容量和一个方向。我希望通过该网络生成一个流量,该流量等于最大流量(通过最小切割找到),该流量永远不会超过每条边的容量 下面是一个图形示例,说明了我得到了什么以及我试图获得什么。当然,“期望流图”并不是一个独特的例子。我希望这是随机生成的 我在MatLab中用三个数组表示这个图。第一个数组s给出“from”顶点,第二个数组t给出“
非常感谢您对能够执行此任务的某种算法的任何帮助。我希望有一个指向算法、伪代码、直接代码的链接,甚至只是一个关于如何实现这种算法的描述。提前感谢您的帮助。查看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的大小小一个。你知道有没有办法解决这个问题?