【问题标题】:What does the 'lower bound' in circulation problems mean?流通问题的“下限”是什么意思?
【发布时间】:2012-05-13 09:51:50
【问题描述】:

问题:循环问题允许您对通过特定弧的流量同时具有下限和上限。我理解的上限(就像管道一样,只有这么多东西可以通过)。但是,我很难理解下限的想法。这是什么意思?请问有解决问题的算法吗...

  • 尝试确保每条具有下限的弧都至少获得这么多的流量,如果找不到方法则完全失败?
  • 如果不能满足下限,就直接忽略弧吗?这对我来说更有意义,但这意味着结果图中可能存在流量为 0 的弧,即

上下文:我正在尝试找到一种方法来快速安排一组事件,每个事件都有一个长度和一组可以安排的时间。我试图将这个问题简化为一个循环问题,为此存在有效的算法。

我将每个事件作为一个节点放在有向图中,并为其提供应该填充的时隙数量。然后我将所有可能的时间也添加为节点,最后添加所有时隙,如下所示(所有弧都指向右侧):

 

 

前两个事件有一个可能的时间,长度为 1,最后一个事件的长度为 4,有两个可能的时间。

这个图表有意义吗?更具体地说,被“填满”的时间段是 2 个(只有“简单”的时间段)还是 6 个,如图所示?

(如果有任何区别,我正在使用来自 LEMON 库的推送重新标记算法。)

【问题讨论】:

  • 仅供参考:最大流量是一个下限为零的特殊循环问题。它们不一样。
  • 删除了标签。谢谢!
  • 下限可能只是意味着用户需要管道中至少有 X 流才能对他们有用?例如,如果他们试图从流动中获得动力?想想水磨坊或灯泡之类的东西。 (无论如何,这就是它在我脑海中的运作方式。)
  • sce.carleton.ca/faculty/chinneck/po/Chapter10.pdf 可能会有所帮助。无论如何,第 2 页对下限有很好的解释,第 3 页似乎继续讨论如何解决非零最小流量的问题。
  • 感谢您的链接,@Helen!看起来这确实是一个有增益的广义图问题,作者提到但(遗憾的是)没有提供算法。

标签: c++ data-structures graph-theory directed-graph


【解决方案1】:

关于一般流通问题:

我同意@Helen;尽管设想下限的实际使用可能不那么直观,但它是一个必须满足的约束条件。我不相信你能忽视这个约束,即使那个流量为零。

flow = 0 的情况适用于更直观的最大流量问题(@KillianDS 指出)。在这种情况下,如果一对节点之间的流量为零,则它们不会影响“流量和守恒”:

当没有给出下限时(假设流量为非负数)零流量不能影响结果,因为

  1. 它不能违反约束
  2. 它不能影响总和(因为它添加了一个零项)。

由于某些外部约束,可能存在最小流量的实际示例(相关问题需要至少 X 水通过某个管道,正如 @Helen 所指出的那样)。下限约束也可能来自等效对偶问题,该问题最小化流以使某些边缘具有下限(并找到与具有上限的最大化问题等效的最佳等价物)。

针对您的具体问题:

您似乎正试图在一组固定的时间段内完成尽可能多的事件(在一个时间段内没有两个事件可以重叠)。

考虑可以分配给给定事件的时隙集:

E1 -- { 9:10 }
E2 -- { 9:00 }
E3 -- { 9:20, 9:30, 9:40, 9:50 }
E3 -- { 9:00, 9:10, 9:20, 9:30 }

因此,您希望最大化任务分配的数量(即事件发生在“打开”的边缘)s.t.结果集是成对不相交的(即没有一个分配的时隙重叠)。

我相信这是 NP-Hard,因为如果你能解决这个问题,你可以用它来解决 maximal set packing problem (即最大集包装减少到这个)。你的问题可以用整数线性规划来解决,但实际上这些问题也可以用贪婪方法/分支定界很好地解决。

例如,在您的示例问题中。事件 E1 与 E3 发生“冲突”,而 E2 与 E3 发生冲突。如果 E1 被赋值(只有一个选项),那么 E3 只剩下一个可能的赋值(后面的赋值)。如果对 E3 进行此分配,则 E2 只剩下一个分配。此外,不相交的子图(不可能在资源上发生冲突的事件集)可以单独解决。

如果是我,我会从一个非常简单的贪婪解决方案开始(首先分配具有较少可能“槽”的任务),然后将其用作分支定界求解器的种子(如果贪婪解决方案找到 4 个任务分配,然后如果您的分配的递归子树不能超过 3) 则绑定。您甚至可以通过创建集合之间的成对交集图并仅在进行分配时通知相邻集合来挤出一些额外的性能。您还可以在继续分支和绑定时更新您的最佳作业数量(我认为这是正常的),因此如果您运气好早,您很快就会收敛。

我使用同样的想法找到了可以解释一组已识别肽(蛋白质片段)的最小蛋白质组,并发现它足以解决实际问题。这是一个非常相似的问题。

如果您需要一流的性能: 改写后,整数线性规划几乎可以解决您想要的任何此问题的变体。当然,在非常糟糕的情况下,它可能会很慢(在实践中,它可能对你有用,特别是如果你的图不是非常密集的连接)。如果不是,则常规线性规划松弛近似于 ILP 的解决方案,并且通常非常适合此类问题。

希望这会有所帮助。

【讨论】:

  • 感谢您提供完整而清晰的答案!我有一种感觉,这将是 NP 难的......虽然,我并不完全理解解决方案的近似值是什么。不是每个事件都有时间的解决方案?某些事件有多次的解决方案?那些将一文不值。
  • @WanderNauta :) 有两种近似解(它们最终会相似)。一个人进行贪婪搜索,然后进行不完美的分支定界,在一定时间后停止,因此不会尝试 every 子树(真正的分支定界是精确的)。另一种解决方案是将问题写为 ILP,然后对 ILP 使用 LP 近似。最大 E1+E2+E3 标准{0,1} 中的所有 Ei,E1
  • @WanderNauta 但实际上,总体上首先尝试分支和绑定。您可以快速编写一个快速递归的代码,并且对于很多很多图来说,它会做得很好(特别是如果通过良好的贪婪搜索播种)。
【解决方案2】:

弧流的下限是硬约束。如果不能满足约束,则算法失败。在你的情况下,他们肯定无法满足。

即使有下界,您的问题也不能用纯网络流模型建模。您正试图约束流量为 0 或至少为某个下限。这需要整数变量。但是,LEMON 包确实有一个interface,您可以在其中添加整数约束。每个第一层弧的流出必须为 0 或 n,其中 n 是所需时隙的数量,或者您可以说每个“事件”中最多有一个弧具有非零流。

您的“析取”约束, 可以建模为

f >= y * lower
f <= y * upper

y 限制为 0 或 1。如果 y 为 0,则 f 只能为 0。如果 y 为 1,则 f 可以是上下限之间的任何值。混合整数规划算法将比网络流算法慢几个数量级,但它们会为您的问题建模。

【讨论】:

  • 谢谢!我会研究一下LP界面。
猜你喜欢
  • 1970-01-01
  • 2019-02-14
  • 2014-06-11
  • 2017-12-04
  • 1970-01-01
  • 2015-08-21
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
相关资源
最近更新 更多