流水作业调度
问题描述
个作业 要在 2 台机器 和 组成的流水线上完成加工。每个作业须先在 上加工,然后在 上加工。 和 加工作业 所需的时间分别为 和 ,每台机器同一时间最多只能执行一个作业。
流水作业调度问题要求确定这 个作业的最优加工顺序,使得所有作业在两台机器上都加工完成所需最少时间。
问题分析
- 一定存在最优调度使 上的加工是无间断的,即 上的总加工时间是所有 之和, 上不一定是 之和。
- 一定存在最优调度使作业在两台机器上的加工次序是完全相同的。因为若是 和 交换,则 需要 结束,等待时间更长。因此仅需考虑在两台机上加工次序完全相同的调度。
设 为 个作业的子集。机器 开始加工 中的作业时,机器 还在加工其他作业,要等时间 后才可利用。
于是我们设完成 中作业所需的最短时间为 ,则完成所有作业所需的最短时间为 。基于此定义,容易得出状态转移方程:
其中, 表示选择一个作业 先加工,在 加工的时间。而后面剩下的作业 要等在作业 之前的所有作业加工完(等待 时间),并且作业 也加工完(等待 时间)才能在 加工。
然而,虽然满足最优子结构性质,也在一定程度满足子问题重叠性质,但是 的每个非空子集都计算一次,共 次,具有指数级的时间复杂度。
Johnson 不等式
如果作业 和 满足 ,则称作业 和 满足 Johnson 不等式。
Johnson 不等式的意义在于,只要满足 Johnson 不等式,那么任务 应在任务 之前。推广到一般情况:
- 当 时,对 都有 ,那么应将任务 安排在最前面。
- 当 时,对 都有 ,那么应将任务 安排在最后面。
Johnson 不等式确定了流水作业的处理顺序,不需要指数级的时间即可求解。