【问题标题】:how to use network flow to solve linear programming?如何使用网络流解决线性规划?
【发布时间】:2014-12-20 10:18:26
【问题描述】:

假设我们有 m 个考试 E={E1,E2,...,Em} 和一组 I={I1,I2,...,In} 的工具,并且每个考试 Ej 都需要 Rj 的一个子集I. 每次检查都有 Pj $ 利润,每个仪器成本 Cj $。我们想选择一些检查来最大化(利润总和 - 成本总和)。

我认为我们可以使用 LP,这样我们每次检查都有 m 个变量 Xi 并且 Xi = 0 或 1,我们的目标函数是:对于所有 i 和 j Xi(Pi) - (A)Cj 其中 A 是 xor all需要Ij的xi

但我无法通过网络流来模拟这个问题。我的问题是如何表达这样一个事实,即当我们选择考试并为其仪器付费时,我们可以将这些仪器用于其他考试。

【问题讨论】:

  • 试着从最小削减的角度来考虑它

标签: algorithm linear-programming network-flow


【解决方案1】:

将问题建模为二部图:将检查作为顶点放在左侧,将仪器放在右侧。通过无限容量的边缘将检查连接到他们的仪器。现在引入源 S 和汇 T。通过代表利润的边将 S 连接到检查。通过代表其成本的边将仪器连接到 T。

最大利润是所有Pi - min cut的总和

为什么?考虑在图中切割边以将 T 与 S 分开。对于每次检查,我们需要切割检查本身,“支付”我们错过的利润,或切割所有工具。

最佳检查集由残差流网络中可从 S 到达的检查顶点集表示。

【讨论】:

  • 我不明白为什么最大利润是所有 Pi - min cut 的总和。如果最优检查集是剩余流网络中 S 可达的,为什么我们将所有检查的利润添加到最终利润中?
  • @amir 由于最小切割仅适用于非负权重,我们对问题进行建模,使得进行检查 i 的成本为 0,而不进行检查的成本为 Pi。但实际上,我们进行检查的成本为 -Pi,不做检查的成本为 0,因此我们需要从最小切割结果中减去 Pi。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-27
  • 1970-01-01
  • 2023-04-05
  • 2020-02-27
  • 2015-05-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多