【问题标题】:Minimum cost maximum flow algorithm with custom cost function具有自定义成本函数的最小成本最大流量算法
【发布时间】:2012-07-10 10:43:44
【问题描述】:

最小成本最大流量算法可以使用什么样的成本函数?

是否有可能具有类似于以下的成本函数:

  • 如果边上的流量在 [1, X] 之间,则成本 = FixedCost + C1 + 流量 * cost_per_flow[C1]
  • 如果边上的流量在 [X + 1, Y] 之间,则成本 = FixedCost + C2 + 流量 * cost_per_flow[C2]

这会以任何方式改变算法吗?

【问题讨论】:

    标签: algorithm graph flow


    【解决方案1】:

    您可以将固定成本相加,然后将其从等式中删除。然后,您将每条边分成 2 条边,每条边都有适当计算的成本。

    【讨论】:

    • 你能帮我理解一个简单的例子吗:假设我有一条最大容量为 10 的边,如果该边上的流量 5,成本为 amount_of_flow * 20。
    • 将边交换为 2 个平行边,每个边的容量为 5。第一个边的单位成本等于 10,第二个边的单位成本等于 20。这给出了推动 10 个单位的成本流量等于 150。但正如 @redoubtable 所说,这个问题一般来说似乎是 NP-hard。
    【解决方案2】:

    最小成本最大流算法只是特定类型线性程序的求解器。

    使线性规划有效求解的是凸性:在这种情况下,如果您有两个可行的流 F 和 G,那么对于 [0, 1] 中的所有 t,流 tF + (1-t)G 是可行的并且有成本(tF + (1-t)G) ≤ t 成本(F) + (1-t) 成本(G)。对于您的目标,这基本上意味着 [1, X] 中的 FixedCost 为 0,C1 ≤ C2, [X + 1, Y] 中的 FixedCost 为 (C1 - C2)X ≤ 0. 看起来像这样:

    6|        .
    5|       .
    4|      .
    3|     .
    2|   .
    1| .
    0.----------
     0 1   X
    

    [1, X] > 0 中的 FixedCost 可能对您很重要,但这会使问题成为 NP-hard。图中的 Steiner 树的一个缩减是使每条边的容量无限,并花费由 Steiner 树问题为第一个单元指定的权重,然后为 0。将 k - 1 个 Steiner 终端中的一个设为容量为 k - 1 的源,其他容量为 1 的接收器。请求最便宜的 k - 1 单位流量。

    【讨论】:

      猜你喜欢
      • 2020-11-24
      • 1970-01-01
      • 2018-10-22
      • 2023-04-11
      • 1970-01-01
      • 2016-06-15
      • 1970-01-01
      • 2017-08-19
      • 1970-01-01
      相关资源
      最近更新 更多