C++ 什么是';下限';流通中的问题意味着什么?

C++ 什么是';下限';流通中的问题意味着什么?,c++,data-structures,graph-theory,directed-graph,C++,Data Structures,Graph Theory,Directed Graph,问题:循环问题允许您对通过特定弧的流量既有下限又有上限。我理解的上限(就像管道一样,只有那么多东西可以通过)。然而,我很难理解下限的概念。这是什么意思?解决这个问题的算法会不会 试着确保每一个有下限的弧都会得到至少那么多的流量,如果找不到方法,就会完全失败 如果无法满足下限,则忽略弧?这对我来说更有意义,但这意味着在生成的图形中可能会有流为0的圆弧,即 上下文:我试图找到一种快速安排一组事件的方法,每个事件都有一个长度和一组可能的时间,可以安排在这些时间。我试图将这个问题简化为一个循环问题,

问题:循环问题允许您对通过特定弧的流量既有下限又有上限。我理解的上限(就像管道一样,只有那么多东西可以通过)。然而,我很难理解下限的概念。这是什么意思?解决这个问题的算法会不会

  • 试着确保每一个有下限的弧都会得到至少那么多的流量,如果找不到方法,就会完全失败
  • 如果无法满足下限,则忽略弧?这对我来说更有意义,但这意味着在生成的图形中可能会有流为0的圆弧,即
上下文:我试图找到一种快速安排一组事件的方法,每个事件都有一个长度和一组可能的时间,可以安排在这些时间。我试图将这个问题简化为一个循环问题,对于这个问题,存在有效的算法

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

前两个事件具有单个可能时间和长度1,最后一个事件具有长度4和两个可能时间

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


(如果有什么不同的话,我正在使用图书馆的推-重新标签算法。)

关于一般流通问题:

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

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

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

  • 它不能对约束引入冲突
  • 它不能影响总和(因为它加了一个零项) 由于某些外部约束,可能存在最小流量的实际示例(相关问题需要至少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}

    因此,您希望最大化任务分配的数量(即,与“打开”的边相关的事件)。结果集是成对不相交的(即,分配的时间段没有重叠)

    我相信这是NP难的,因为如果你能解决这个问题,你可以用它来解决这个问题(也就是说,最大集压缩减少到这个)。你的问题可以用整数线性规划来解决,但实际上,这些问题也可以用贪婪方法/分支和定界来很好地解决

    例如,在你的例子中,问题。事件E1与E3“冲突”,E2与E3冲突。如果E1被分配(只有一个选项),那么E3(后面的赋值)只有一个可能的分配。如果E3接受此分配,则E2只剩下一个分配。此外,不相交子图(不可能因资源冲突的事件集)可以单独求解

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

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

    如果您需要尖端性能: 当重新表述时,整数线性规划几乎可以处理这个问题的任何变体。当然,在非常糟糕的情况下,它可能会很慢(在实践中,它可能会对您起作用,尤其是当您的图形连接不是非常紧密时)。如果不是,则正则线性规划松弛近似于ILP的解,通常非常适合此类问题


    希望这有帮助。

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

    您的问题不能用纯网络流模型建模,即使有下限。您正在尝试获取流为0或至少某个下限的约束。这需要整数变量。然而,柠檬p
    f >= y * lower
    f <= y * upper