Algorithm 网络流-模拟水管网络
我正试图设计一种算法来模拟具有多个源和多个特定容量的汇的管道网络 到目前为止,我已经尝试使用经典的Ford Fulkerson算法,但我遇到的问题是,给出以下图表: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。我们希望
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
但由于不满足2台机组总需求的约束,仿真软件无法解决。应将水源更改为压力节点,该节点将提供送出2台机组水所需的压力,或者应降低客户需求以匹配水源能力。在后一种情况下,目的是对从源头到水槽的水力坡度线进行建模。那么您希望到达所有水槽的流量相等(正/负1)?或者您想最大化任何水槽的最小流量?你想在这里优化什么函数?我希望B、C中的值都为0.5,而不是B中的值为1,C中的值为0。为了清晰起见,对问题进行了编辑。谢谢。这个例子很清楚你想要什么。但是,在一般情况下,如果有两个以上的水槽,您想要什么呢?为了实现“相等”分布,在一般情况下,你需要减少总流量,我想问的是,这是否是你想要的,或者你对“均匀分布”的定义是什么,从a向外的n个边,到a的入站流量应该均匀分布到出站边(假设边通向一个容量足够的水槽)。你可以使用凸规划来找到一个具有最小L2范数的合适的流,但是你还没有完全指定问题,所以我不确定这是否合适。这正是我想要的。谢谢你的精彩帖子!