任务/作业调度问题

yan*_*ian 9 algorithm scheduling scheduler scheduled-tasks

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

假设有一些工人.每个工人都能够完成不同的任务/工作.以下示例可以说清楚:

  Worker A (can do): T2, T3
  Worker B         : T1, T3, T4
  Worker C         : T3, T5
Run Code Online (Sandbox Code Playgroud)

现在我们有一个必须完成的任务列表.例如,列表类似于:T1,T3,T5

有一些限制:

  1. 每项任务必须由一名工人完成
  2. 可以同时执行几项任务
  3. 但是一个工人只能同时完成一项任务.(他/她在完成任务之前不可用)

对于上面的示例,我们可能会有这样的计划:

  T1 --> Worker B
  T3 --> Worker C   T5 --> Worker C
Run Code Online (Sandbox Code Playgroud)

您可能已经注意到,上述时间表并非最佳.因为T5必须等待工人C完成T3.以下解决方案更好:

  T1 --> Worker B
  T3 --> Worker A
  T5 --> Worker C
Run Code Online (Sandbox Code Playgroud)

因为没有等待.

现在假设我知道worker-tasks矩阵(什么工人可以做什么任务).任务将逐一进行,但不知道它将是什么.我被要求设计一个调度程序,为每个即将到来的任务自动找到一个空闲工作程序.最后所有任务完成后,等待时间最短.

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

谢谢.

sho*_*osh 3

听起来您正在寻找“Bin Packing”算法 -

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

一般的装箱问题与您所说的非常相似,是 NP 困难的,因此如果您的输入大小非常小,您可能会忘记最佳解决方案。

你能找到的是一个保证不会与最佳解决方案相差太远的解决方案,通常是我的一些因素。维基百科的这篇文章是一个很好的起点。