有5个职位(比如J1
,J2
,J3
,J4
和J5
)和4个职位(比如M1
, M2
,M3
和M4
)。每个作业都需要按照下面显示的顺序运行机器:
工作集:
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作为我的算法
答案 0 :(得分:1)
空闲时间的减少相当于最小化计划的总长度(通常称为完工时间)。您希望最小化完工时间。
静态作业车间调度问题已超过50年,因此对此主题进行了大量研究。最小化完工时间也是人们发表关于这一主题的论文的最佳目标,所以你很有可能找到一些灵感。
这个问题很棘手,所以你正在寻找一种能够提供近似值的算法。好的候选者是元启发式算法,例如遗传算法,禁忌搜索(TS),可变邻域搜索等。据我所知,与基准测试结果上的其他算法相比,TS的表现非常好。你应该查看Nowicki和Smutnicki的工作(快速禁忌搜索算法的工作车间问题E Nowicki,C Smutnicki - 管理科学,1996,以及后续工作)。他们对TS的实施能够在当时击败基准测试结果。