我有一个任务/作业调度问题,我想找到最有效的算法来解决它。
假设有一些工人。每个工人都能够完成不同的任务/工作。以下示例可以说清楚:
Worker A (can do): T2, T3
Worker B : T1, T3, T4
Worker C : T3, T5
现在我们有一个必须完成的任务列表。例如,列表类似于:T1,T3,T5
有一些限制:
对于上面的例子,我们可能会有这样的时间表:
T1 --> Worker B
T3 --> Worker C T5 --> Worker C
您可能已经注意到,上述时间表并非最佳。因为T5必须等待工人C完成T3。以下解决方案更好:
T1 --> Worker B
T3 --> Worker A
T5 --> Worker C
因为没有等待。
现在假设我知道了worker-tasks矩阵(什么工人可以做什么任务)。 任务将逐一进行,但不知道它会是什么。我被要求设计一个调度程序,为每个即将到来的任务自动找到一个空闲工作程序。最后所有任务完成后,等待时间最短。
所以我需要一个这个调度程序的算法。如果完美的车轮已经存在,我不想重新发明轮子。任何人都可以帮忙吗?
感谢。
答案 0 :(得分:3)
听起来你正在寻找一种“Bin Packing”算法 -
http://en.wikipedia.org/wiki/Bin_packing
一般的装箱问题,与你所说的非常类似,是NP-Hard,所以如果你的输入尺寸超过微不足道,你就会忘记一个最佳的解决方案。
您可以找到的解决方案保证与最佳解决方案相差不远,通常是我的一些因素。那篇维基百科文章是一个很好的起点。
答案 1 :(得分:3)
对输入进行操作的算法称为on-line algorithms,这些算法不是预先知道的,而是“随你而去”。它们自然只是次优的。它们通过比最优算法更差而不是通过常数因子来衡量(例如,如果最佳解决方案(不是在线,即预先有整个输入)采取X步骤,那么您的在线应该不采用超过k * X步,k越小当然越好。
在您的情况下,要求不明确 - “最短等待时间”与什么相比?
可以帮助您的一个想法是选择具有最小任务列表的可用工作人员,为将来的任务保存更多“多样化”的工作人员。