Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 网络流-模拟水管网络_Algorithm_Graph_Max Flow_Ford Fulkerson - Fatal编程技术网

Algorithm 网络流-模拟水管网络

Algorithm 网络流-模拟水管网络,algorithm,graph,max-flow,ford-fulkerson,Algorithm,Graph,Max Flow,Ford Fulkerson,我正试图设计一种算法来模拟具有多个源和多个特定容量的汇的管道网络 到目前为止,我已经尝试使用经典的Ford Fulkerson算法,但我遇到的问题是,给出以下图表: S | a / \ B C 给定源容量为1的S,以及汇容量为1的B和C,则流将产生S-a-B,使B饱和为1,使C的流为0 我试图在整个网络中均匀地分配流量,以便B和C都得到0.5。有什么想法吗 谢谢 假设您有n个源s1,…,sn,源容量ci和m个汇t1,…,tm。设f=sumi-ci。我们希望

我正试图设计一种算法来模拟具有多个源和多个特定容量的汇的管道网络

到目前为止,我已经尝试使用经典的Ford Fulkerson算法,但我遇到的问题是,给出以下图表:

    S
    |
    a
   / \
  B   C
给定源容量为1的S,以及汇容量为1的B和C,则流将产生S-a-B,使B饱和为1,使C的流为0

我试图在整个网络中均匀地分配流量,以便B和C都得到0.5。有什么想法吗

谢谢

假设您有n个源s1,…,sn,源容量ci和m个汇t1,…,tm。设f=sumi-ci。我们希望在网络中找到一个可行的流,其中每个源i的净流为-ci,每个汇的净流为f/m

我们可以通过引入超级源S和超级汇T并通过容量ci的边缘(si,S)将每个源i连接到S来解决这个问题。我们通过容量f/m的边缘将每个ti连接到T。然后我们用源S和汇T运行最大流

如果不可能将精确的f/m流量单位推送到每个水槽,则不清楚要优化什么,但您可能会发现以下两种方法很有用:

  • 选择e,并使用f/m+e的容量通过边缘将水槽连接到T。使用二进制搜索查找最小值e,这样总流量将为f。这将最大流入量(ti)降至最低
  • 选择e并使用下限e通过边将水槽添加到T。使用二进制搜索查找仍然允许可行流的最大e。这使得最小流入量(ti)最大化。具有下界的可行流问题可以简化为最大流:在这种情况下,构造非常简单:只需添加额外的超级源S’,并通过容量m*e的边缘将S’连接到S。通过容量e的边缘将所有水槽连接到T。检查S'和T之间的最大流量是否为m*e

我是一名水网工程师。当我对供水网络建模时,我通常将水源作为压力节点,将汇作为需求节点,因为水模拟软件可以求解节点处的水头或流量。我知道泵在源头的能力和客户的消耗量。管道中的流动通过Hazen Williams或Darcy Weisbach等无头流动方程进行求解

在您的示例中,汇的需求超过了源所能提供的,所有这些都是在流方面。B和C的客户都会尽量打开水龙头,以满足其1个单位的需求;但假设从a到B的管道路径与从a到C的管道路径相同,则在B和C尽最大努力使流向各自端部的流量最大化后,1个单位的流量将均匀分配


但由于不满足2台机组总需求的约束,仿真软件无法解决。应将水源更改为压力节点,该节点将提供送出2台机组水所需的压力,或者应降低客户需求以匹配水源能力。在后一种情况下,目的是对从源头到水槽的水力坡度线进行建模。

那么您希望到达所有水槽的流量相等(正/负1)?或者您想最大化任何水槽的最小流量?你想在这里优化什么函数?我希望B、C中的值都为0.5,而不是B中的值为1,C中的值为0。为了清晰起见,对问题进行了编辑。谢谢。这个例子很清楚你想要什么。但是,在一般情况下,如果有两个以上的水槽,您想要什么呢?为了实现“相等”分布,在一般情况下,你需要减少总流量,我想问的是,这是否是你想要的,或者你对“均匀分布”的定义是什么,从a向外的n个边,到a的入站流量应该均匀分布到出站边(假设边通向一个容量足够的水槽)。你可以使用凸规划来找到一个具有最小L2范数的合适的流,但是你还没有完全指定问题,所以我不确定这是否合适。这正是我想要的。谢谢你的精彩帖子!