水储存调度

时间:2013-04-26 21:09:13

标签: algorithm optimization workflow scheduling

MIB的总部有 N 水箱。坦克 i 最多可存储 c i 水单位。每个水箱都有自己的输入和输出管道。罐 i 的进水管以 u i 的速率泄漏水,这意味着如果我们想将100单位的水放入水箱 i ,100 /(1 - u i )水将被消耗。输出管道都很完美。他们的能力是 i out i ,这意味着坦克 i '输入管道可以在一个单位时间内(包括泄漏)最多携带 i 水单位,输出管道最多可以携带 out 我在一个单位时间内 水单位。

整数序列 w t (1 c i u i in < sub> i out i ),序列 w t ,天气是否可以满足所有出口要求?所有坦克在时间0都是空的。

N&lt; 10,000,T&lt;万

由于

1 个答案:

答案 0 :(得分:2)

首先,这是一个不能单独工作的方案,因为它忽略了对最大流入和流出率的限制,因此它解决了一个更容易的问题。

这里棘手的一点似乎是哪个坦克使用的时候。看起来Ui值较低的坦克更好。如果您采用任何填充具有高Ui值的油箱的顺序,而有一个具有较低Ui值且具有空间的油箱,则可以通过先填充更好的油箱并使用额外的水来获得更好的顺序。你会用你原本会加入更糟糕水箱的水。同样地,如果你在一个好的水箱中有水的情况下从一个坏水箱中取水,你可以通过从好的水箱中取出水来获得更好的顺序,这样你就有机会填充它,否则你会填满它罐中。

所以看起来当你填充坦克时你想要填充最好的坦克,当你清空坦克时,你想要清空最好的坦克。鉴于此 - 并假设没有任何限制你没有提到,例如转移中的整数水 - 看起来在任何特定情况下很容易找到最佳时间表。所以尝试这个最好的时间表,如果它不起作用,什么都不会。

以上不起作用,因为我忽略了约束。我当然忽略了流入和流出率,我也假设你可以在每一步使用多个油箱,我怀疑可能不是这样。

还有其他方案可以解决更简单的问题 - 您可以忽略除流出率之外的所有限制条件,并在每个阶段以最高流出率填充油箱,并从油箱中提供能够满足最低流出速率的水需求。

这些变体无法解决您的问题,但如果忽略某些约束时没有解决方案,则原始问题无法解决。这导致了分支和绑定的变体。

1)如果一个简单的贪婪解决方案找到了一个好的时间表,那么这个序列显然是可以解决的。

2)尝试解决更容易的问题。如果它们中的任何一个都无法解析,则没有解决方案。

3)考虑第一个步骤的所有可能选择,递归地调用自己来解决所产生的较短序列,从坦克中的水开始。一旦他们找到解决方案,您就可以随时返回。如果你检查所有这些并且他们都说“没有解决方案”那么就没有解决方案。