Skip to content

流水作业调度

问题描述

n 个作业 N={1,2,,n} 要在 2 台机器 M1M2 组成的流水线上完成加工。每个作业须先在 M1 上加工,然后在 M2 上加工。M1M2 加工作业 i 所需的时间分别为 aibi ,每台机器同一时间最多只能执行一个作业。

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

问题分析

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

SNn 个作业的子集。机器 M1 开始加工 S 中的作业时,机器 M2 还在加工其他作业,要等时间 t 后才可利用。

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

T(S,t)=ai+T(S{i},bi+max{tai,0})

其中,ai 表示选择一个作业 i 先加工,在 M1 加工的时间。而后面剩下的作业 S{i} 要等在作业 i 之前的所有作业加工完(等待 max{tai,0} 时间),并且作业 i 也加工完(等待 bi 时间)才能在 M2 加工。

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

Johnson 不等式

如果作业 ij 满足 min{bi,aj}min{bj,ai},则称作业 ij 满足 Johnson 不等式。

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

  • min{a1,a2,,an,b1,b2,,bn}=ai 时,对 ki 都有 min{bi,ak}min{bk,ai},那么应将任务 i 安排在最前面。
  • min{a1,a2,,an,b1,b2,,bn}=bj 时,对 kj 都有 min{bk,aj}min{bj,ak},那么应将任务 j 安排在最后面。

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

最近更新