1 / 10

算法设计与分析 第三章 动态规划 - 作业调度

算法设计与分析 第三章 动态规划 - 作业调度. 杨圣洪. 3.9 流水作业问题. 15. 2. M1. 作业 {1,2,…,n} 在由 M1 和 M2 组成的流水线上加工。 作业都是先由 M1 加工,再由 M2 上加工。 M1 和 M2 加工作业 i 所需的时间分别为 a i 和 b i 。 确定加工顺序,使得从首个作业在 M1 上 开始 加工,到 最后作业 在 M2 上加工 完成 ,所需的时间最少。. 11. 18. 耗时 :15+11+18=44. M2. 2. 15. M1. 18. 11. 耗时 :2+18+11=31. M2.

nike
Télécharger la présentation

算法设计与分析 第三章 动态规划 - 作业调度

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 算法设计与分析第三章 动态规划-作业调度 杨圣洪

  2. 3.9 流水作业问题 15 2 M1 • 作业{1,2,…,n}在由M1和M2组成的流水线上加工。 • 作业都是先由M1加工,再由M2上加工。 • M1和M2加工作业i所需的时间分别为ai和bi。 • 确定加工顺序,使得从首个作业在M1上开始加工,到最后作业在M2上加工完成,所需的时间最少。 11 18 耗时:15+11+18=44 M2 2 15 M1 18 11 耗时:2+18+11=31 M2

  3. 确定加工顺序,所需的时间最少。分析: 开始时M2无事可作,(怎样才能少等待?) 运行中间也可能空闲 ,如图2 (怎样才能少等待?) M2有忙不过来即积压情况。如图1 M2少等待少积压,多与M1平行,则整体时间短 3.9 流水作业问题 25 2 M1 11 18 图1 M2 2 图2 25 M1 18 11 M2

  4. 3.9 流水作业问题 a1 a2 a3 M1 • 作业{1,2,…,n}在由M1和M2组成的流水线上加工。 • 作业都是先由M1加工,再由M2上加工。 • M1和M2加工作业i所需的时间分别为ai和bi。 • 确定加工顺序,使得从首个作业在M1上开始加工,到最后作业在M2上加工完成,所需的时间最少。 • 全部作业的集合为N={1,2,…,n}。S是N的作业子集。 • M1开始加工S中作业时,M2还在加工其他作业,要等时间t分钟(即M1开始加工S中作业t分钟后M2才空)后M2才会加工S中作业。 • 完成S的最短时间记为T(S,t)。S待完成作业,t为最初等待M 2时间(板) • 流水作业问题的最优为T(N,0)。N全部作业,0为最初等待M 2时间(板) b1 b2 M2

  5. 最优子结构性质 a1 a2 a3 M1 • 设是最优调度,它所需加工时间T(N,0)= a (1)+ T(S,bπ(1)) 。 • 因M1加工好(1)后, M1可立即加工(2), • 此时M2正加工(1),要等待b(1)才空,根据T(S,t)的定义,完成作业(2),…,(n)即S=N-{(1)}时间为T(S,bπ(1))。 • 可以证明T(S,bπ(1))是完成(2),…,(n)的最短时间。整体最优局部最优 • 假设存在另一调 度',使得'(2),…,'(n)完成的时间< T(S,bπ(1)) • 则(1),'(2),…,'(n)是整体N的调度,完成时间a(1)+{ '(2),…,'(n)的完成时间} <a (1)+ T(S,bπ(1)) =T(N,0)。即比调度π更省时间,这与是N的最优调度矛盾。 • 故假设不对,即不存在更短的调度,全局最优的调度也是局部最优的调度 b1 b2 M2

  6. 递推公式 ai--1 ai ai+1 • 整体最短时间为:每个作业i为首做时的完成时间的最小者(板) M1 t bi M2 • 推广到一般情形即子集S:M1开始加工S时,要等t后M2才空 • 完成S的最短时间为:S中每个作业为首做时的最小者 (板) • M1开始加工S-{i}中作业时要等一定时间后M2才空,等待时间 • =M2加工作业i的时间bi+ • (M1加工作业i时M2的等待时间t- M1加工作业i时已飞逝的时间ai) • t<ai表示ai加工完成前,M2的等待时间就已经结束,可直接加工

  7. ai aj aj ai a3 a3 M1 M1 bi bj bj bi M2 M2 Johnson不等式 • 若作业i和j满足Johnson不等式即 • min{bi,aj}≥min{bj,ai} 则为最优调度(不证明!)。(板) • 若不满足则对换就满足,如下图所示, • 这也是作业总是动态规划解法的基本思想

  8. 算法 min(bi,aj)min(bj,ai) (i<j) • 流水作业调度问题的Johnson算法: • 记N1={i|ai<bi}即M1的时间<M2的时间的作业集合(板) • 记N2={i|ai≥bi}即M1的时间≥M2的时间的作业集合(板) • 将N1中作业依ai的非减序即升序排序; • 将N2中作业依bi的非增序即降序排序; • N1中作业接N2中作业构成满足Johnson法则的最优调度。 • 证明:N1中ai<bi,aj<bj,aiaj(升序),故ai<bj故min(bj,ai)=ai, 又bi>ai,ajai即二者均ai,故min(bi,aj)ai=min(bj,ai) • 故min(bi,aj)min(bj,ai)即满足Johnson规则 • N2中因aibi,ajbj,bibj(降序),因aibj故min(bj,ai)=bj, • 又bibj(降序),ajbj即二者均bj,故min(bi,aj)bj=min(bj,ai) • 故min(bi,aj)min(bj,ai)即满足Johnson规则 • i在N1、j在N2则ai<bi(N1),ajbj(N2)即bjaj,故min(bj,ai)bi,aj 故min(bj,ai)min(bi,aj)故min(bi,aj)min(bj,ai)即满足Joh规则

  9. int[] jobprom(int[] a, int[] b,int n) { //参数a在M1的加工时间,b在M2时间 int[] N1=new int[n];N1a=new int[n]; int[] N2=new int[n]; N2b=new int[n]; int m=0,k=0; //N1={i|ai<bi} N2={i|ai>=bi} for (int i=0;i<n;i++){ if (a[i]<b[i]){ N1[m]=i;N1a[m]=a[i];m++;} else { N2[k]=i;N2b[k]=b[i];k++;} } sorta(N1b,N1,m); //N1b[]即ai升序排队,同步调N1 sortb(N2b,N2,k); //N2b[]即bi降序排队,同步调N2 int[] retV=new int[n]; //安排作业 for (int i=0;i<m;i++){retV[i]=N1[i];} for (int i=m;i<n;i++){retV[i]=N2[i-m];} return retV;} 算法描述

  10. 算法及其复杂性 • 所有作业调整为min(b(i),a(j))min(b(j),a(i))时间变为最少(i<j) • 流水作业调度问题的Johnson算法: • 记N1={i|ai<bi}即M1的时间<M2的时间的作业集合 • 记N2={i|ai≥bi}即M1的时间≥M2的时间的作业集合 • 将N1中作业依ai的非减序即升序排序; • 将N2中作业依bi的非增序即降序排序; • N1中作业接N2中作业构成满足Johnson法则的最优调度。 算法复杂度分析:算法的主要计算时间花在对作业集的排序。因此,在最坏情况下算法所需的计算时间为O(nlogn)。所需的空间为O(n)。

More Related