2011-04-15 97 views
6

我有一个任务/作业调度问题,我想找到最好的高效算法来解决它。任务/作业调度问题

假设有一些工人。每个工作人员都能够完成一组不同的任务/工作。下面的例子可以说明:

Worker A (can do): T2, T3 
    Worker B   : T1, T3, T4 
    Worker C   : T3, T5 

现在我们有一个必须完成的任务列表。例如,该列表是一样的东西:T1,T3,T5

有一些限制:

  1. 每个任务必须由一名工人采取
  2. 几个任务可以同时采取
  3. 但工作人员只能同时完成一项任务。 (他/她是不是可用,直到完成任务)

对于上面的例子,我们可以有这样的时间表:

T1 --> Worker B 
    T3 --> Worker C T5 --> Worker C 

你可能注意到了,上面的时间表是不是最佳的。因为T5必须等待工人C完成T3。以下解决方案更好:

T1 --> Worker B 
    T3 --> Worker A 
    T5 --> Worker C 

因为没有等待。

现在假设我知道工人任务矩阵(工人可以做什么任务)。 这些任务会一个接一个,但不知道会是什么。我被要求设计一个计划程序,为每一个即将到来的任务自动找到一个空闲的工作人员。最后,当所有任务完成时,至少有一个等待时间。

所以我需要这个调度程序的算法。如果完美的车轮已经存在,我不想重新发明车轮。任何人都可以帮忙吗?

谢谢。

+0

如果你不能展望未来,那么我猜想,将这些任务发送给具有_feese_能力的工作人员将会为将来留下最多的可能性。工作人员是否最终有望获得工作?或者是工人电脑,他们不在乎他们是否工作? – sarnold 2011-04-15 08:41:07

+0

对我来说,这听起来像是“为即将到来的任务自动找到闲置的工作人员”,“不知道会是什么”以及“最少的等待时间”都是彼此不一致的。如果你不能计划,你不能优化。 – 2011-04-15 08:41:09

+0

如果没有空闲的工人,你打算如何处理?把他们排队? – 2011-04-15 08:41:37

回答

3

这听起来像你正在寻找一个“装箱”算法 -

http://en.wikipedia.org/wiki/Bin_packing

一般装箱问题,非常类似于你措辞是什么,是NP难的,所以你可以忘掉左右如果您的输入尺寸不是微不足道的话,这是一个最佳解决方案。

你可以找到的解决方案是保证不会离最佳解决方案太远,通常是我的一些因素。该维基百科文章是一个很好的开始。

+1

其实这不是垃圾包装,这是一个作业车间排班问题:https://en.wikipedia.org/wiki/Job_Shop_Scheduling – 2014-12-10 10:50:09

3

算法对未知的输入进行操作,但在“随时”进入时称为on-line algorithms。自然,它们只是次优的。它们的衡量方式是比最优算法更糟糕的是不超过一个常数因子(例如,如果最佳解决方案(不是联机的,即具有整个输入前沿)需要X个步骤,则您的联机应用程序不应采用多于k * X步骤,k越小当然越好)。

在你的情况下,要求不明确 - “最小等待时间”与什么相比?

一个可能对你有帮助的想法是拿起一个可用的工作人员,用最小的任务列表,为将来的任务节省更“多样”的工作人员。