【问题标题】:Water Storage Scheduling [closed]储水调度[关闭]
【发布时间】:2013-04-21 03:34:14
【问题描述】:

MIB 的总部有 N 个水箱。水箱 i 最多可储存 ci 个单位的水。每个水箱都有自己的进出管。水箱 i 的进水管以 ui 的速率漏水,这意味着如果我们想将 100 个单位的水放入水箱 i , 100/(1 - ui) 水将被消耗。出水管都是完美的。它们的容量分别是iniouti,表示坦克i' s进水管在一个单位时间内最多可以带ini个单位的水(包括漏水),出水管最多可以带out i 个单位时间内的水。

整数序列wt (1 ci, ui, iniouti),以及序列wt,天气满足所有插座要求是否可行?在时间 0 时所有水箱都是空的。

N

谢谢

【问题讨论】:

  • 听起来像是功课。你试过什么?
  • @thursdaysgeek 这真的不是功课。我尝试将其建模为线性规划问题。但是,它会占用 O((NT)^2) 内存,这是不可行的。

标签: algorithm optimization workflow scheduling


【解决方案1】:

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

这里的棘手问题似乎是何时使用哪个坦克。看起来 Ui 值较低的坦克更好。如果您采用任何序列填充具有高 Ui 值的水箱而有一个具有较低 Ui 值的水箱有空间,那么您可以通过先填充更好的水箱来获得更好的序列,然后使用额外的水您将使用本来会放入更糟糕的水箱中的水。同样,如果您在好水箱中有水的情况下从坏水箱中取水,则可以通过从好水箱中提取水来获得更好的顺序,这样您就有机会在本来要加水的情况下加水坦克。

所以看起来,当您装满水箱时,您想装满可用的最佳水箱,而当您清空水箱时,您想清空可用的最佳水箱。考虑到这一点——假设没有你没有提到的任何限制,例如转移中的整数水量——看起来在任何给定情况下很容易找到最佳时间表。所以试试这个最好的时间表,如果它不起作用,什么都不会。

以上不起作用,因为我忽略了约束。我当然忽略了流入和流出率,并且我还假设您可以在每个步骤中使用多个罐,我怀疑情况可能并非如此。

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

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

1) 如果一个简单的贪婪解找到一个好的调度,那么这个序列显然是可解的。

2) 尝试解决更简单的问题。如果其中任何一个无法解决,则此序列没有解决方案。

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

【讨论】:

  • 嗨@mcdowella,感谢您的回复。问题是除了ui,我们还需要考虑ci。假设我们有两个坦克,u1 = 0, u2 = 0.5, in1 = 10, in2 = 10, c1 = 10,c2 = 20。W = (10, 20)。如果我们先装满水箱 1,那么水箱 1 将在时间段 1 后装满,最后我们将有 15 个单位的水(水箱 1 中的 10 单位和水箱 2 中的 5 单位)。在这种情况下,最好先填充 2 号油箱。
  • 好的 - 我过度简化了它并错过了细节(像往常一样!)。但是,我注意到,如果您发现问题的过度简化版本无法解决,那么主要问题也不是。所以我认为你可以尝试对此进行分支和绑定,并编辑我的答案来描述这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-03
  • 1970-01-01
  • 2021-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多