流水作业调度.docVIP

  • 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)

1亿VIP精品文档

相关文档