流水作业调度

流水作业调度

问题描述

nn 个作业 N={1,2,,n}N = \{ 1, 2, \cdots, n \} 要在 22 台机器 M1M_1M2M_2 组成的流水线上完成加工。每个作业须先在 M1M_1 上加工,然后在 M2M_2 上加工。M1M_1M2M_2 加工作业 ii 所需的时间分别为 aia_ibib_i ,每台机器同一时间最多只能执行一个作业。

流水作业调度问题要求确定这 nn 个作业的最优加工顺序,使得所有作业在两台机器上都加工完成所需最少时间。

问题分析

  • 一定存在最优调度使 M1M_1 上的加工是无间断的,即 M1M_1 上的总加工时间是所有 aia_i 之和,M2M_2 上不一定是 bib_i 之和。
  • 一定存在最优调度使作业在两台机器上的加工次序是完全相同的。因为若是 bib_ibjb_j 交换,则 bjb_j 需要 aja_j 结束,等待时间更长。因此仅需考虑在两台机上加工次序完全相同的调度。

SNS \subseteq Nnn 个作业的子集。机器 M1M_1 开始加工 SS 中的作业时,机器 M2M_2 还在加工其他作业,要等时间 tt 后才可利用。

于是我们设完成 SS 中作业所需的最短时间为 T(S,t)T(S, t),则完成所有作业所需的最短时间为 T(N,0)T(N, 0)。基于此定义,容易得出状态转移方程:

T(S,t)=ai+T(S{i},bi+max{tai,0}) \begin{aligned} T(S, t) = a_i + T(S - \{i\}, b_i + \max \{t - a_i, 0\}) \end{aligned}

其中,aia_i 表示选择一个作业 ii 先加工,在 M1M_1 加工的时间。而后面剩下的作业 S{i}S - \{i\} 要等在作业 ii 之前的所有作业加工完(等待 max{tai,0}\max \{t - a_i, 0\} 时间),并且作业 ii 也加工完(等待 bib_i 时间)才能在 M2M_2 加工。

然而,虽然满足最优子结构性质,也在一定程度满足子问题重叠性质,但是 NN 的每个非空子集都计算一次,共 2n12^n-1 次,具有指数级的时间复杂度。

Johnson 不等式

如果作业 iijj 满足 min{bi,aj}min{bj,ai}\min \{ b_i, a_j \} \geqslant \min \{ b_j, a_i \},则称作业 iijj 满足 Johnson 不等式。

Johnson 不等式的意义在于,只要满足 Johnson 不等式,那么任务 ii 应在任务 jj 之前。推广到一般情况:

  • min{a1,a2,,an,b1,b2,,bn}=ai\min \{ a_1, a_2, \cdots, a_n, b_1, b_2, \cdots, b_n \} = a_i 时,对 ki\forall k \ne i 都有 min{bi,ak}min{bk,ai}\min \{ b_i, a_k \} \geqslant \min \{ b_k, a_i \},那么应将任务 ii 安排在最前面。
  • min{a1,a2,,an,b1,b2,,bn}=bj\min \{ a_1, a_2, \cdots, a_n, b_1, b_2, \cdots, b_n \} = b_j 时,对 kj\forall k \ne j 都有 min{bk,aj}min{bj,ak}\min \{ b_k, a_j \} \geqslant \min \{ b_j, a_k \},那么应将任务 jj 安排在最后面。

Johnson 不等式确定了流水作业的处理顺序,不需要指数级的时间即可求解。