具有依赖关系和工作线约束的任务调度优化

时间:2016-08-25 04:20:13

标签: algorithm optimization scheduling

我们遇到了任务安排问题

功能

  • 我们有N个工作人员,还有一系列要完成的任务。
  • 每项任务 - > Ti需要Di(即工人*天)才能完成( 需求 ),并且只能保留只有Ci工作人员同时处理它( 容量 )。
  • 有些任务只能在其他任务完成后开始( 依赖 )。
  • 目标是通过将工作人员分配到这些序列来实现总最小持续时间。

实施例

  • 工人人数:10
  • Taks List [A, B, C]
  • 需求[100 50 10] - unit:worker day(任务A需要100个工作日天完成,B需要50个工作日天,以及C需要10个工人天)
  • 容量[10 10 2] - unit:worker(任务A只能同时处理10个工作人员,B只能容纳10个,C只能容纳2个)
  • 依赖{A: null, B: null, C: B} - A和B可以随时启动,C只能在B完成后启动

示例问题的可能方法:

  • 首先分配B 10名工作人员,完成时需要50/10 = 5 天。然后在第5天,我们将2名工人分配给C,将8名工人分配给A,最多(10/2 = 5,100 / 8 = 12.5)= 12.5 天完成。然后总持续时间为5 + 12.5 = 17.5 天。

  • 首先分配A 10名工作人员,完成时需要100/10 = 10 天。然后在第10天,我们将10名工人分配到B,这需要50/10 = 5 天完成。然后在第15天,我们将2名工人分配到C,这需要10/2 = 5 天完成。总持续时间为10 + 5 + 5 = 20 天。

所以第一种做法更好,因为17.5< 20。 但是对于示例问题仍然有更多可能的分配实践,我们甚至不确定什么是获得最小总持续时间的最佳实践。

我们想要的算法

  • 输入 Nworker 需求容量依赖

  • 输出最短总持续时间的工作人员分配练习。

我们在分配没有依赖关系的任务时考虑的可能的分配策略:

  • 首先完成其他人依赖的任务(例如,在示例中尽快完成B
  • 将工作人员分配给具有maximam需求的任务(例如,首先在示例中将所有工作人员分配到A

但这两者都不是最佳策略。

任何想法或建议都将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

这听起来像 Job Shop Scheduling 具有依赖关系,这是NP-complete(或NP-hard)。因此,在合理的时间内扩展并提供最佳解决方案可能是不可能的。

通过首先构建一个构造启发式(这是你在那里获得的那两个分配策略中的一个)然后做了一个类似的情况(Task assigningDependend Job Scheduling),我得到了很好的结果本地搜索(通常是延迟接受或禁忌搜索)以获得接近最佳的结果。