- 3
- 0
- 约3.81千字
- 约 6页
- 2018-03-06 发布于湖北
- 举报
流水作业调度
流水作业调度
1.问题描述:
定义:设有n个作业,每一个作业Ti均被分解为m项任务:Ti1, Ti2, …, Tim(1≤i≤n),要把这些任务安排到m台机器上进行加工。如果任务的安排满足下列3个条件,则称该安排为流水作业调度:
1.每个作业i的第j项任务Tij (1≤i≤n, 1≤j≤m) 只能安排在机器Mj上进行加工
2.作业i的第j项任务Tij(1≤i≤n, 2≤j≤m)的开始加工时间均安排在第j-1项任务Ti,j-1加工完毕之后,即任何一个作业的任务必须依次完成,前一项任务完成之后才能开始着手下一项任务;
3.任何一台机器在任何一个时刻最多只能承担一项任务。
设任务Tij在机器Mj上进行加工需要的时间为tij。如果所有的tij (1≤i≤n, 1≤j≤m)均已给出,要找出一种安排作业的方法,使得完成这n个作业的加工时间为最少。
?完成n个作业的加工时间为从安排的第一个作业开始加工, 到最后一个作业加工完毕,其间所需要的时间。
2.分析:
?一个最优调度应使机器M1没有空闲时间,且机器M2的空闲时间最少。
在一般情况下,机器M2上会有机器空闲和作业积压2种情况。
?设全部作业的集合为N={1, 2, …, n}。S?N是N的作业子集。 在一般情况下,机器M1开始加工S中作业时,机器M2还在加工其它作业,要等时间t后才可利用。将这种情况下完成S中作业所需的最短时间记为 T(S, t)。
流水作业调度问题的最优值为: T(N,0)。
?设M1和M2加工作业i所需的时间分别为ai和bi。
?设?是所给n个流水作业的一个最优调度,它所需的加工时间为 a?(1)+T’。
?T’: 是在机器M2的等待时间为b?(1)时,安排作业?(2), …, ?(n)所需的时间。
?记S=N - {?(1)},则有T’=T(S, b?(1))
流水作业调度的Johnson法则
?设?是作业集S在机器M2的等待时间为t时的任一最优调度。
?若π(1)=i, π(2)=j,则由动态规划递归式可得:
T(s,t)=ai+T(S-{is],bi+max{t-ai,0})=ai+aj+T(s-{i,j},tij)
若作业i和j满足 ,则称作业i和j满足Johnson不等式。
?如果作业i和j不满足Johnson不等式,则交换作业i和j的加工顺序后,作业i和j满足Johnson不等式。
证明:算法满足Johnson不等式
?N1中作业满足Johnson不等式
i,j∈N1,i在前,j在后
所以aibi,ajbi,且有aiaj
因为aiaj,aibi,
所以有min{ai,bj}=min{aj,bi}
?N2中作业满足Johnson不等式
i,j∈N2,i在前,j在后
所以ai=bi,aj=bj,且有bibj
因为bjbi,bj=aj
所以有min{ai,bj}=min{aj,bi}
?N1中作业接N2中作业满足Johnson不等式
i∈N1,j∈N2,
所以aibi,aj=bj,
所以有min{ai,bj}=min{aj,bi}。
3.算法描述:
FLOW-SHOP(n, a, b)
let flow[1..n] be a new structured array
//.job为True, N1集合,.key为a[i]
// .job为False, N2集合,.key为b[i]
// .index为作业编号
for i=1 to n
flow[i].key = a[i]=b[i] ? b[i] : a[i]
flow[i].job = a[i]b[i]
flow[i].index = i
SORT(flow, n); // 以.key值,从小到大进行排序
left = 1, right = n
// N1集合,a[i]从小到大排序,小值放在order前面
// N2集合,b[i]从小到大排序,小值放在order后面
let order[1..n] be a new array
for i=1 to n
if flow[i].job
order[left++] = flow[i].index
else
order[right--] = flow[i].index
temp = a[order[1]]
// t:依最优调度顺序得到的总的加工时间
t = temp+b[order[1]]
for i=2 to n
temp = temp+a[order[i]]
t = tempt ? t+b[order[i]] : temp+b[o
原创力文档

文档评论(0)