网络流量:在解决最大流量时,我可以更改边缘容量吗?

时间:2011-08-04 06:03:29

标签: algorithm

我想知道在解决问题时是否可以更改网络流量问题中的边缘容量。

我对货物A,B和AB有供需问题。 A的需求单位将占A的一个单位,B将占用B,AB将占用AB的一个单位或A的单位和B的单位。给出每种商品的供需清单,我想要找出是否有足够的货物来满足需求。

所以我的网络工作看起来像这样:

让sX供应X.
设dX是X的要求 所有流程都是从左到右。

enter image description here

你可以看到,如果我按下A的x单位,我将从容量中减去x(A + B)。同样地,如果我'撤消'推送,我将容量添加回(A + B)。所以我在算法期间这样做了。这会弄乱算法吗?

1 个答案:

答案 0 :(得分:1)

这不是网络流量问题。假设sA = 10, sB = 10, dA = 10, dB = 10, dAB = 10。从图表中您可以提供10个As,B和A + B,因此可以满足需求。但实际上你需要20个As和20个B来满足这种需求。

我不知道一个简单的流网络的方法来表示你需要一个地方的流量来匹配另一个地方的流量的条件。

你所描述的是一个有趣的问题,我肯定已经研究过,但我不知道你称之为什么。

这可以通过将其转化为线性编程问题来解决。如果您不熟悉线性编程问题,请参阅http://en.wikipedia.org/wiki/Linear_programming。考虑你的简单案例。您可以从6个变量开始:

  1. x是从输入A到输出A的流程。
  2. y是从输入B到输出B的流程。
  3. z是从输入AB到输出AB的流程。
  4. w是从AA + B的流程。
  5. w'是从BA + B的流程。
  6. w''是从A + BAB的流程。
  7. 当然最后3个都是相同的。所以我们有4个变量。 (如果我们没有注意到这一点,我们会有更多的方程式。)现在添加以下不等式:

    1. 0 ≤ x
    2. 0 ≤ y
    3. 0 ≤ z
    4. 0 ≤ w
    5. x + w ≤ sA
    6. y + w ≤ sB
    7. z ≤ sAB
    8. x ≤ dA
    9. y ≤ dB
    10. z + w ≤ dAB
    11. 这是一组不平等,表明我们正在生产东西,我们使用的不仅仅是供应,而且我们创造的不仅仅是对任何特定东西的最终需求。这定义了我们的“可行区域”。

      接下来我们需要一个目标函数,即我们试图最大化的东西。显而易见的选择是我们希望最大化我们生产的数量。所以我们希望最大化x + y + z + w

      然后可以找到原始问题的答案如下。给定一组可用输入和可用输出,解决上述线性编程问题以优化生产。当且仅当最佳生产水平为dA + dB + dAB时,您才能满足生产目标。更好的是,您将获得的解决方案将告诉您如何满足生产。