在有向图上有下界而没有上界的情况下,我应该使用什么算法来求最小流?例如这个简单的例子:

在文献中,这是一个最小成本流问题。然而,在我的情况下,成本与每个边上所需的流的非零下界相同,所以我用上面的方法来解释这个问题。在文献中,问题是:寻找单源/单汇有向无圈图的最小成本流的最佳算法是什么,其中每个边都有无限的容量,流上的非零下界,以及与流的下界相等的成本。
从我的研究来看,人们处理任何一种网络的最小成本的主要方法是将问题设置为LP型问题并以这种方式解决。然而,我的直觉是,没有流的上界,即具有无限电容的边,使问题更容易解决,所以我想知道是否有一种专门针对这种情况的算法,使用比单纯形方法et更多的“图”技术。阿尔。
我的意思是,如果所有的成本和下限都是1,如上面所示.然后,我们正在寻找一种流,它覆盖所有边界,遵守流规则,并且不会在从s到t的任何路径中推动过多的流。这感觉就好像不需要对我使用LP求解器,而且维基百科关于最小成本流的文章确实指出,“如果能力约束被删除,问题就会减少到最短路径问题”,但我认为他们在谈论的是下界为零的情况。
还有任何地方都有开源C/C++代码来实现最小成本流吗?通过搜索可用的内容,我发现我可以自己将问题设置为LP问题并使用开源LP解决程序解决,也可以使用LEMON,它为最小成本流提供了几种算法。据我所知,boost图形库不包括实现。
还有别的事吗?
发布于 2013-11-13 20:16:10
在没有上界的情况下,最简单的方法--最简单的实现、理解和合理有效的方法--求图的最小流如下:
在图也具有流上界的情况下,还可以执行上述版本的操作。在这种情况下,步骤1更复杂,但可以通过在特殊构造的图上执行初始最大流计算来求解。
发布于 2013-10-28 20:48:05
写一个解决者是不平凡的。
看柠檬库(硬币的一部分-或)。对于最小成本流问题,它有许多优化算法。您可以选择哪种算法对您的数据最有效。
有关柠檬的信息,请参见http://lemon.cs.elte.hu/trac/lemon。
有关最小成本网络流的详细信息,请参阅http://lemon.cs.elte.hu/pub/doc/1.3/a00607.html。
发布于 2013-09-06 09:07:13
在每条边界上添加所有流的“下界”:无论如何,任何可行的解决方案都需要这样做。
对于每个节点从接收器n的拓扑顺序(即沿边),如果边沿的和S-大于输出的和S+,则在s和t之间最短路径的所有边缘上添加流S+ - S- (构造最短路径列表,同时提高效率)。
然后,您有一个“最小”的辅助(在每个可行的解决方案中都需要它),例如S+ - S-在每个节点上都是非负的,并且在每个边上都满足最小容量。
然后,将该问题归结为同一图结构上的多流问题:
S+ - S-严格为正的节点都会成为具有所需的流S+ - S-的接收器。F)将成为流F - S-的接收器。编辑:对于您的问题,图表如下所示
x1 -- x2
/ \ \
s \ t
\ \ /
x3 -- x4对于每个边都有最小的容量1,并且我认为在接收器t上不需要最小的流。
首先给每个边分配一个。
每个节点(当然,s和t除外)的差异是:
x1: 1
x2: 0
x3: 0
x4: -1唯一的负面因素是x4;我们将1添加到从x4到t的最短路径上的每个边,在这种情况下添加到边缘(x4, t)。
现在,S+ - S-对于每个节点都是非负的,并且只对x1是正的;这个问题归结为一个多流问题(在这种情况下,它是一个简单的流问题),其中请求的流在x1是1,而源仍然是s。
https://stackoverflow.com/questions/18598399
复制相似问题