作业调度:M作业和N台机器

时间:2014-04-04 09:53:20

标签: java algorithm job-scheduling

有5个职位(比如J1J2J3J4J5)和4个职位(比如M1M2M3M4)。每个作业都需要按照下面显示的顺序运行机器:

工作集:

J1: M1(8); M2(16); M4(12)  
J2: M1(20); M3(10); M2(18)  
J3: M3(12); M4(8); M1(15)  
J4: M4(14); M2(18)  
J5: M3(10); M1(15)

例如:J1 M1需要8个单位时间; M2上的16个单位时间和M4上的12个单位时间。

所有作业都可以并行运行,但必须遵循机器上的执行顺序。

例如:J1只有在M2完成8个单位M1之后才能在J1上运行(请参阅上述作业集中的{{1}})等等工作。

  

目标:减少每台机器的空闲时间(以及总空闲时间),即最大机器利用率

我们怎样才能解决这个问题?我想知道是否有任何算法可以让我开始解决这个问题。感谢您提供解决此问题的任何帮助。如果有可能,我更喜欢使用java作为我的算法

1 个答案:

答案 0 :(得分:1)

空闲时间的减少相当于最小化计划的总长度(通常称为完工时间)。您希望最小化完工时间。

静态作业车间调度问题已超过50年,因此对此主题进行了大量研究。最小化完工时间也是人们发表关于这一主题的论文的最佳目标,所以你很有可能找到一些灵感。

这个问题很棘手,所以你正在寻找一种能够提供近似值的算法。好的候选者是元启发式算法,例如遗传算法,禁忌搜索(TS),可变邻域搜索等。据我所知,与基准测试结果上的其他算法相比,TS的表现非常好。你应该查看Nowicki和Smutnicki的工作(快速禁忌搜索算法的工作车间问题E Nowicki,C Smutnicki - 管理科学,1996,以及后续工作)。他们对TS的实施能够在当时击败基准测试结果。