给节点特定值的最小流量

时间:2013-07-03 03:42:34

标签: graph-theory linear-programming

图论中是否有已知算法解决了使用最小流量离开具有特定值的节点的问题?换句话说,有多个来源和汇,需要留下一定数量的赤字和信贷。谢谢!

2 个答案:

答案 0 :(得分:1)

当然有。它实际上称为最小成本流算法。 我正在提供此算法的永久链接: Minimum Cost Flow 您将需要一个LP解算器来生成解决方案。

答案 1 :(得分:1)

你可以将其表述为“Transportation Problem” - 债务人是(货币)供应商和债权人的需求。目标是将资金从一方“转移”到另一方。

为了处理目标(“流动的金额最少”),我们可以假设债务人希望尽可能少地支付债权人,债权人希望从债务人那里获得资金尽可能。

让' s '节点,每个供应商一个(debitor)和' t '节点,每个债权人一个节点。定向弧将每个供应商连接到每个需求节点。在任何电弧(边缘)上移动资金的成本是1.(所有边缘都具有非常高的容量。)

平衡运输问题中,总需求将等于总供应量,但这是一个理想化的案例。我们可以通过引入虚拟节点和虚拟边缘来处理信用和借方总数的不平衡。

由于我们想尽可能少地使用虚边,我们可以为这些边分配更高的成本。因此,模型将仅使用这些边缘作为最后的手段。

图示地,

enter image description here

制定此运输问题:

X_st是从节点s到节点t的金额(流量)

目标 :Min(sum_over_edges)Cost_st * X_st

<强>约束

 (Sum over all edges incoming to demand node t ) X_st >= Demand_t (for each t)
 (Sum over all edges outbound from supply node s ) X_st >= Supply_s (for each s)
 Xst >= 0

其他几点说明:

  1. 此问题也可以表述为transshipment problem。你有中间分段点(清算所需的钱)。
  2. 当您有多个源和接收器时,您可以创建“超级源”和“超级接收器”节点,并将边缘从这些超级节点连接到常规源和接收节点,并重新创建最小流量问题。
  3. 配方完成后,您可以使用您有权访问的任何MILP求解程序,以获得债权人与债权人的最佳匹配。

    希望有所帮助。