转载再转载,原作者我是找不着了、
流水作业调度的定义:
设有n个作业,每一个作业i均被分解为m项任务:
Ti1, Ti2, ┅ , Tim(1≤i≤n,故共有n×m个任务),
要把这些任务安排到m台机器上进行加工。
如果任务的安排满足下列3个条件,
则称该安排为流水作业调度:
1. 每个作业i的第j项任务Tij (1≤i≤n, 1≤j≤m)
只能安排在机器Pj上进行加工;
2. 作业i的第j项任务Tij(1≤i≤n, 2≤j≤m)的开始加工时间
均安排在第j-1项任务Ti,j-1加工完毕之后;
(任何一个作业的任务必须依次完成,前一项任务完成之后才能开始着手下一项任务)
3. 任何一台机器在任何一个时刻最多只能承担一项任务。
最优流水作业调度:
设任务Tij在机器Pj上进行加工需要的时间为tij。
如果所有的tij (1≤i≤n, 1≤j≤m)均已给出,
要找出一种安排任务的方法,
使得完成这n个作业的加工时间为最少。
这个安排称之为最优流水作业调度。
完成n个作业的加工时间:
从安排的第一个任务开始加工, 到最后一个任务加工完毕,
其间所需要的时间。
优先调度:
允许优先级较低的任务在执行过程中被中断,
转而去执行优先级较高的任务。
非优先调度:
任何任务一旦开始加工,就不允许被中断,
直到该任务被完成。
流水作业调度一般均指的是非优先调度。
非优先调度可看成是特殊的优先调度:
所有任务的优先级均相同。
注意:tij为0表示作业i无须在机器Pj上进行加工、
即该道工序可以省略。
已经证明,当机器数(或称工序数)m≥3时,
流水作业调度问题是一个NP-hard问题(e.g分布式任务调度)。
(粗糙地说,即该问题至少在目前,基本上没有可能找到多项式时间的算法。)
∴ 只有当m=2时,该问题可有多项式时间的算法。
为方便起见,记ti1为ai(作业i在P1上加工所需时间),
ti2为bi(作业i在P2上加工所需时间)。
当机器P1为空闲即未安排任何加工任务时,
则任何一个作业的第一个任务(第一道工序)
都可以立即在P1上执行,无须任何先决条件。
因此容易知道,