流水作业调度问题

合集下载

4-流水作业调度

4-流水作业调度

流水作业调度问题(不能直接使用动态规划法的例子)流水作业调度的定义:设有n个作业,每一个作业i均被分解为m项任务: T i1, T i2, ┅, T im(1≤i≤n,故共有n m个任务),要把这些任务安排到m台机器上进行加工。

如果任务的安排满足下列3个条件,则称该安排为流水作业调度:1. 每个作业i的第j项任务T ij (1≤i≤n, 1≤j≤m)只能安排在机器P j上进行加工;2. 作业i的第j项任务T ij(1≤i≤n, 2≤j≤m)的开始加工时间均安排在第j-1项任务T i,j-1加工完毕之后;(任何一个作业的任务必须依次完成,前一项任务完成之后才能开始着手下一项任务)3. 任何一台机器在任何一个时刻最多只能承担一项任务。

最优流水作业调度:设任务T ij在机器P j上进行加工需要的时间为t ij。

如果所有的t ij (1≤i≤n, 1≤j≤m)均已给出,要找出一种安排任务的方法,使得完成这n个作业的加工时间为最少。

这个安排称之为最优流水作业调度。

完成n个作业的加工时间:从安排的第一个任务开始加工,到最后一个任务加工完毕,其间所需要的时间。

优先调度:允许优先级较低的任务在执行过程中被中断,转而去执行优先级较高的任务。

非优先调度:任何任务一旦开始加工,就不允许被中断,直到该任务被完成。

流水作业调度一般均指的是非优先调度。

非优先调度可看成是特殊的优先调度:所有任务的优先级均相同。

7 5 8e.g. (t ij)= 2 2 60 7 4注意:t ij为0表示作业i无须在机器P j上进行加工、即该道工序可以省略。

已经证明,当机器数(或称工序数)m≥3时,流水作业调度问题是一个NP-hard问题(e.g分布式任务调度)。

(粗糙地说,即该问题至少在目前基本上没有可能找到多项式时间的精确最优算法。

)∴目前仅当m=2时,该问题可有多项式时间的算法。

为方便起见,记t i1为a i(作业i在P1上加工所需时间),t i2为b i(作业i在P2上加工所需时间)。

0018算法笔记——【动态规划】流水作业调度问题与Johnson法则

0018算法笔记——【动态规划】流水作业调度问题与Johnson法则

1、问题描述:n个作业{1,2,…,n}要在由2台机器M1和M2组成的流水线上完成加工。

每个作业加工的顺序都是先在M1上加工,然后在M2上加工。

M1和M2加工作业i所需的时间分别为ai和bi。

流水作业调度问题要求确定这n个作业的最优加工顺序,使得从第一个作业在机器M1上开始加工,到最后一个作业在机器M2上加工完成所需的时间最少。

2、问题分析直观上,一个最优调度应使机器M1没有空闲时间,且机器M2的空闲时间最少。

在一般情况下,机器M2上会有机器空闲和作业积压2种情况。

设全部作业的集合为N={1,2,…,n}。

S是N的作业子集。

在一般情况下,机器M1开始加工S中作业时,机器M2还在加工其他作业,要等时间t后才可利用。

将这种情况下完成S中作业所需的最短时间记为T(S,t)。

流水作业调度问题的最优值为T(N,0)。

设π是所给n个流水作业的一个最优调度,它所需的加工时间为aπ(1)+T’。

其中T’是在机器M2的等待时间为bπ(1)时,安排作业π(2),…,π(n)所需的时间。

记S=N-{π(1)},则有T’=T(S,bπ(1))。

证明:事实上,由T的定义知T’>=T(S,bπ(1))。

若T’>T(S,bπ(1)),设π’是作业集S在机器M2的等待时间为bπ(1)情况下的一个最优调度。

则π(1),π'(2),…,π'(n)是N的一个调度,且该调度所需的时间为aπ(1)+T(S,bπ(1))<aπ(1)+T’。

这与π是N的最优调度矛盾。

故T’<=T(S,bπ(1))。

从而T’=T(S,bπ(1))。

这就证明了流水作业调度问题具有最优子结构的性质。

由流水作业调度问题的最优子结构性质可知:从公式(1)可以看出,该问题类似一个排列问题,求N个作业的最优调度问题,利用其子结构性质,对集合中的每一个作业进行试调度,在所有的试调度中,取其中加工时间最短的作业做为选择方案。

将问题规模缩小。

问题描述n个作业{1,2,…,n}要在由2台机器M1和M2组成的流

问题描述n个作业{1,2,…,n}要在由2台机器M1和M2组成的流

业集S在机器M2的等待时间为b(1)情况下的一个最优调度。则
(1),’(2),…,’(n)是N的一个调度,这个调度所需的时间 为a(1)+T(S,b(1))<a(1)+T’。这与是N的最优调度矛盾。故
T’T(S,b(1))。从而T’=T(S,b(1))。即流水作业调度问题具有
最优子结构的性质。
3
流水作业调度
2. 递归结构

由流水作业调度问题的最优子结构性质可知:
T ( N ,0) min{a i T ( N {i}, bi )}
1 i n
T ( S , t ) min{ai T ( S {i}, bi max{ t ai ,0})}
iS

T(S,t)中的bi+max{t-ai,0}:
的最优值为m(i,j),即m(i,j)是背包容量为j,可选 择物品为i,i+1,…,n时0-1背包问题的最优值。由01背包问题的最优子结构性质,可以建立计算m(i,j)的 递归式如下:
j wn vn m(n, j ) 0 0 j wn
j wi max{m(i 1, j ),m(i 1, j wi ) vi } m(i, j ) 0 j wi m(i 1, j )
2
流水作业调度
1. 最优子结构性质



设是n个流水作业的一个最优调度,所需的加工时间为 a(1)+T’。其中T’是在机器M2的等待时间为b(1)时,安 排作业(2),…,(n)所需的时间。 记S=N-{(1)},则有T’=T(S,b(1))。
由T的最优性可知,T’T(S,b(1))。若T’>T(S,b(1)),设’是作

流水作业调度问题

流水作业调度问题

一、 问题描述给定n 个作业,每个作业有两道工序,分别在两台机器上处理。

一台机器一次只能处理一道工序,并且一道工序一旦开始就必须进行下去直到完成。

一个作业只有在机器1上的处理完成以后才能由机器2处理。

假设已知作业i 在机器j 上需要的处理时间为t[i,j]。

流水作业调度问题就是要求确定一个作业的处理顺序使得尽快完成这n 个作业。

二、 算法分析n 个作业{1,2,…,n}要在由2台机器1M 和2M 组成的流水线上完成加工。

每个作业加工的顺序都是先在1M 上加工,然后在2M 上加工。

1M 和2M 加工作业i 所需要的时间分别为t[i,1]和t[i,2], n i ≤≤1.流水作业调度问题要求确定这n 个作业的最优加工顺序,使得从第一个作业在机器1M 上开始加工,到最后一个作业在机器2M 上加工完成所需的时间最少。

从直观上我们可以看到,一个最优调度应使机器1M 没有空闲时间,且机器2M 的空闲时间是最少。

在一般情况下,机器2M 上会有机器空闲和作业积压两种情况。

设全部作业的集合为},....,2,1{n N =。

N S ⊆是N 的作业子集。

在一般情况下,机器1M 开始加工S 中作业时,机器2M 还在加工其他作业,要等时间t 后才能利用。

将这种情况下完成S 中作业所需的最短时间计为),(t S T 。

流水作业调度问题的最优解为)0,(N T 。

1. 证明流水作业调度问题具有最优子结构设a 是所给n 个流水作业的一个最优调度,它所需要的加工时间为']1),1([T a t +。

其中,'T 是在机器2M 的等待时间为]2),1([a t 时,安排作业)(),......,3(),2(n a a a 所需的时间。

记)}1({a N S -=,则我们可以得到])2),1([,('a t S T T =。

事实上,有T 的定义可知])2),1([,('a t S T T ≥.若])2),1([,('a t S T T >,设'a 是作业集S 在机器2M 的等待时间为]2),1([a t 情况下的一个最优调度。

双机流水作业调度问题(Johnson算法)

双机流水作业调度问题(Johnson算法)

双机流⽔作业调度问题(Johnson算法)问题定义:双机流⽔作业调度:总共有n个作业,作业i分为两个内容,需要按顺序先后在机器A和机器B上完成,分别需要时间a i,b i来完成,⼀台机器只能同时进⾏⼀项作业,问完成所有作业所需的最⼩时间。

多机流⽔作业调度:⼀个作业需要在⼤于两台机器上先后完成,是NP-hard问题。

解法:问题就是求最佳作业序列。

设前i项作业所需的时间为C i,可以得出以下式⼦c i=a1+b1,i=1 max c i−1,∑i j=1a j+b i,2≤i≤n可以证明,对于相邻两项i和j,如果min(a i,b j)<min(a j,b i)则i项放前⾯更优。

将a i和b i的关系分为<,=,>三类,可以得到如下排列顺序:1.当a i<b i,a j<b j时,a i≤a j,应该按a升序排序2.当a i=b i,a j=b j时,随意排列。

3.当a i>b i,a j>b j时,b i≥b j,应该按b降序排序。

同样可以证明,a i<b i的项应该排在最前,然后是a i=b i的项,最后是a i>b i的项。

代码:{{}//P1248,给定n,ai,bi,求最⼩⽤时和对应序列#include <bits/stdc++.h>using namespace std;const int maxn=1e5+5;typedef long long ll;struct node{int a,b,d,id;bool operator<(const node &v)const {if(d!=v.d)return d<v.d;else if(d==-1){return a<v.a;}else{return b>v.b;}}}p[maxn];int main () {int n;scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&p[i].a);for(int i=1;i<=n;i++){scanf("%d",&p[i].b);p[i].id=i;int cha=p[i].a-p[i].b;if(cha==0)p[i].d=0;else p[i].d=cha<0?-1:1;}sort(p+1,p+1+n);ll ans=0,dt=0;for(int i=1;i<=n;i++){ans+=p[i].a;dt=max(0ll,dt-p[i].a);dt+=p[i].b;}ans+=dt;printf("%lld\n",ans);for(int i=1;i<=n;i++){if(i>1)printf(" ");printf("%d",p[i].id);}puts("");}Processing math: 100%。

作业调度问题

作业调度问题
公式(2)说明一般情况下,对作业集S进行调度,在M2机器上的等待时 间,除了需要等该部件在M1机器上完成时间,还要冲抵一部分原来的等 待时间,如果冲抵已成负值,自然仍需等待M1将作业做完,所以公式取 max{t-ai,0}。
流水作业调度实例:
假设有一组作业需要在M1和M2 两台机器上进行流水作业, 他们在M1和M2上的作业时间如下表:
设是所给n个流水作业的一个最优调度,它所需的加工 时间为 a(1)+T’。其中T’是在机器M2的等待时间为b(1) 时,安排作业(2),…,(n)所需的时间。 记S=N-{(1)},则有T’=T(S,b(1))。
证明:事实上,由T的定义知T’T(S,b(1))。若 T’>T(S,b(1)),设’是作业集S在机器M2的等待时间为 b(1)情况下的一个最优调度。则(1), ’(2),…, ’(n)是N的一个调度,且该调度所需的时间为 a(1)+T(S,b(1))<a(1)+T’。这与是N的最优调度矛盾。 故T’T(S,b(1))。从而T’=T(S,b(1))。这就证明了流水作 业调度问题具有最优子结构的性质。
T 'S,t ai aj T S {i, j},t ji
t ji bj bi a j ai max{ t, ai a j bj , a j}
当作业i和j 满足Johnson 不等式 min{bi,aj} ≥min{bj,ai}时,有
从而
max{ bi ,a j} max{ bj ,ai} 等价形式
min{ b (i) , a } (i1) min{ b (i1) , a (i)}, 1 i n 1
这样的调度π称为满足Johnson 法则的调度。 进一步还可以证明,调度满足Johnson 法则当且仅当对任意i<j 有

关于流水车间调度问题的综述

关于流水车间调度问题的综述

关于流水车间调度问题的综述关于流水车间调度问题的综述.曲媛-杨晓伟z摘要:流水车间调度问题,也被称为同序作业调度问题,是许多实际流水线生产调度问题的简化模型.它无论是在离散制造工业还是在流程工业中都具有广泛的应用.因此,对其进行研究具有重要的理论意义和工程价值.本文介绍了流水车间调度问题的研究现状和几种解决方法.关键词:流水车间;遗传算法;启发式算法引言自从Johnson1954年发表第一篇关于流水车间调度问题的文章以来.流水车间调度问题引起了许多学者的关注.流水车间调度问题一般可以描述为n个工件要在m台机器上加工.每个工件需要经过m道工序,每道工序要求不同的机器.n个工件在m台机器上的加工顺序相同.工件i在机器j上的加工时间是给定的,设为t(I.j).问题的目标是求n个工件在每台机器上最优的加工顺序,使最大流程时间达到最小.对该问题常常作如下假设.(1)每个工件在机器上的加工顺序是1,2.…,m;(2)每台机器同时只能加工一个工件;(3)一个工件不能同时在不同的机器上加工;(4)工序不能预定:(5)工序的准备时间与顺序无关,且包含在加工时间中;(6)工件在每台机器上的加工顺序相同,且是确定的.基本算法1.一种基于扩展采样空间的混合式遗传算法将邻域搜索与遗传算法相结合求解流水车间调度问题,提出了一种邻域结构.使之更适合求解流水车间问题;设计了一种基于扩展采样空间的混合式遗传并通过计算机模拟验证其有效性.其中,邻域搜索使用定义(由给定的染色体通过随机移动一个基因到一个随机的位置.得到的是染色体的集合)所描述的邻域.采样空间为父代P(t),改进的父代s(t),交叉的后代C(t),变异的后代M(t).交叉和变异的父代是种群的父代P(t),而不是改进的父代S(to具体的混合式算法框架BEGINt=0初始化P(t)WHILE不满足终止条件Do①下降搜索.应用多点最速下降法改进P(t),得到改进的父代S(t);24中小企业科技2007.07②用P(t)进行单点交叉生成C(t);③用P(t)进行移动变异生成M(t);④采样从P(t),S(t),C(t),M(t)中选出最好的不重复的下一代染色体:t=t+1END2.改进的DNA进化算法改进的DNA进化算法中引入了交换操作(交换操作就是在DNA单链中随意产生一个位置.然后将位置前的DNA链与位置后的DNA链相交换.组成一条新的链)以更好地搜索解空间,并采用黄金分割率控制变异个体的数目.同时为了进一步提高搜索性能.采用一种新颖的启发式规则.具体算法如下:对于每个工件都有3个时间指数:t为工件j在所有机器上的加工时间之和;t1i为工件j在第一台机器上的加工时间; t为工件j在最后一台机器上的加工时间;tj为工件j的加权加工时间.B,C是[0,1]之间的数.当随机生成一个A,再在[0,1一A]之间随机产生一个B便能确定tj的大小.然后每个工件按照Tj的降序排列.这样就会产生一个可行解.生成不同的A,就会得到不同的可行解.将启发式算法得到的可行解作为DNA进化算法的初始群体.具体算法如下:①计算每个工件tmi的及tlI;@)For(I=1,2.7.n)(n表示要产生的可行解的个数);A=random(0,1);B=random(0,1一A):tⅡ=At~j+Btlj+(1一A—B)tmj;End③根据每个工件计算出的t.进行降序排列.得到对应的工件排序,即可行解.通过仿真可以验证.加入启发式算法能够快速地接近最优解.提高算法的收敛速度.产生初始种群.3.一种基于遗传算法的求解方法一种基于遗传算法的求解方法.在由染色体转换成可行调度的过程中引入工件插入方法.同时设计了一种新的交叉算子(这里设计了一种新的交叉算子.从种群中按交叉概率随机选取两个个体作为父体.对于每个个体随机寻找两个不同的基因位置.选择这两个位置及其之间的基因作为交叉部分.两个交叉部分的长度可以不同.首先将两个交叉部分进行交换.然后按照父体中原来基因排列的顺序补齐交叉部分没有包含的基因.经过交叉之后产生的子代个体一部分基因保留了在一个父辈个体中的绝对位置,另部分基因则保留了在另一个父辈中的相对位置.该操作具有较好的遗传特性,同时也能够产生足够的搜索空间.计算表明该算子优于PMX交叉算子.)通过大量的数值计算表明.该算法优化质量大大优于传统的遗传算法和NEH启发式算法.4.一个无等待流水车间调度启发式算法采用一个经典的全局任务插入算法构造初始解,应用局部搜索方法对其进行改进.通过4000个不同规模实例将提出算法与目前求解该问题最好的几个算法从性能和计算时间方面进行全面比较.实验结果表明:提出算法的性能是目前最好的,多项式复杂度的计算时间适合实际生产需求.此启发式算法包括两个阶段:初始序列的产生阶段和改进阶段.(1】在初始序列的产生阶段.采用任务插入的方法,它类似于NEH[3]算法.(2)在初始序列的改进阶段,定义V=(X,Y)为序列s中的一对位置,其中:,Y∈{l,2….刀),≠Y.V的移动将S中第X个任务插入到第y个位置,位置对集合:Z={(J,)J,Y∈{l,2,…),Y壁{,—l}},其中包括(n一1)(n一1)个位置对.算法描述如下:①令k=1,计算所有任务ji(I=1,2…,n)的F2值.选择最小值对应的任务放入S中,将其余n一1个任务放入R 中;(K=K+1;③从R中任意取出一个任务j,将其插入到S的K个不同位置.产生K个不同的序列.计算这K个序列的F1值,选择最小值对应的序列作为一个候选序列,将任务j从R中移除;④如果R≠,返回第3步,否则转到第5步;⑤在产生的(n—K+I)个候选序列中,计算各自的F值.选择最小值对应的序列替换S.将序列S以外的所有任务存放到集合R中;⑥如果K=n,结束,S即为最终初始序列;否则回到第2步继续;⑦生成序列S的位置对集合并进行插入操作,产生(n一1)个新的任务序列,计算所有新产生序列的F1值,将最小值对应序列记为S;⑧如果F,(S)=F,(S),则S=S.返回第7步重新开始;否则转入第9步;⑨序列S即为最终任务序列.5.混合禁忌搜索算法(HTS)(1)混合禁忌搜索HTs算法的主要思路为:通过一个有效的启发式算法为TS算法提供一个较好初始解,并可加快TS 算法的收敛速度;采用禁忌搜索算法改进初始解以搜索到更好的近优解.初始解生成算法:①任意产生一个初始序列Q.;②利用双插入启发式算法[5](DIH)对序列Q进行改进获取一个序列S.DIH基于全局插入操作和局部插入操作的思想来产生局部种子序列并对当前调度进行改进.该算法具有较高效率的搜索能力.得到一个较好的近优解;③将序列S进行一次全局成对交换,得到初始序列P.(2)HTS算法描述:基于已得到的序列P作为初始解T0和以上禁忌搜索算法,关键参数的设置,下面给出HTS算法:①调用初始解生产算法产生初始解P并赋予To;②将初始解T作为当前解利用成对交换(Swap)产生的邻域结构得到多个邻域解;③将所有邻域解对应的目标函数值从小到大排序,然后选取前e个邻域解作为候选解;④从第1个候选解开始,如果满足藐视准则,则将此邻域解作为当前的序列T,;否则在候选解中选非禁忌的最佳状态序列作为当前序列T,;⑤保存每个当前序列T,及其目标函数值,并找出其中最优的目标函数值及对应的序列W,;⑥若满足终止条件,则比较最后得到的当前序列T,与序列w,所对应的目标函数值大小,选取目标函数值小的序列作为算法最终所得到的近优解,算法停止;若不满足终止条件则To=T,,则转向2.6.混合规划针对不确定条件下流水车间调度问题(Flowshopschedul—ing),研究了含有随机参数和灰色参数的混合机会约束规划模型的建立及求解方法.提出了灰色模拟的概念和方法,为含有灰色参数的机会约束规划提供了求解途径.通过理论推导及仿真实例,结合遗传算法,验证了基于随机模拟和灰色模拟的混合机会约束规划的调度模型及求解方法的有效性.结束语从目前来看,还没有一个求解流水车间问题最优解的简明算法.整数规划和分枝定界技术是寻求最优解的常用方法.然而对于一些大规模甚至中规模的问题,这两种方法仍然不是很有效.以遗传算法,模拟退火,禁忌搜索以及人工神经网络为代表的智能化优化技术迅速发展来解决流水车间调度问题,受到人们的普遍关注.其中,遗传算法以其优良的计算性能和显着的应用效果而特别引人注目,所以很多启发式混合方法都是在此基础上发展起来的.刁参考文献1梁黎明,汪国强.求解流水车间调度问题的一种混合式遗传算法[I].华南理工大学,2001;(t1):85~882俊林.薛云灿,邵惠鹤.求解混合流水车间调度问题的一种遗传算法[I].计算机工程与应用.2003;(35):186~1873牛群,顾幸生.基于启发式规则的新型进化算法在流水车间调度中的应用[I].华东理工大学,2006;(12):1472~1477(作者简介:1.华南理工大学数学科学学院硕士研究生.2.华南理工大学数学科学学院副教授,博士.)2007.07中小企业科技25。

流水线调度问题

流水线调度问题

流⽔线调度问题1.调换流⽔线⽆需时间:  加⼯⼀件物品,有n条流⽔线,每条流⽔线都有m个⼯序,不同流⽔线的相同⼯序处理功能相同,但处理时间可能不同,为t[i][j]。

若⼯序的进出站时间不计,流⽔线的调换时间也不计。

求加⼯⼀件物品最少需要多少时间。

状态:F[j]表⽰加⼯到第j个⼯序所需的最少时间 状态转换:F[j]=F[j-1]+min{t[1][j],t[2][j]...t[n][j]};2.调换流⽔线需时间: 加⼯⼀件物品,有n条流⽔线,每条流⽔线都有m个⼯序,第i条流⽔线的j到⼯序处理时间为t[i][j],第i条流⽔线调换到第j条流⽔线所需时间为p[i][j]。

求加⼯⼀件物品所需的最少时间:分析: 如果我们按上题⼀样,⽤F[j]来表⽰加⼯到第j到⼯序所需时间,那么在状态转移时我们发现,F[j]与F[j-1]并没有直接的关系。

假设F[j-1]出现在第i条流⽔线,它可能由于调换流⽔线的时间太长,导致F[j]选择了从时间稍微长⼀点的的K条流⽔线的第j-1出发。

所以我们发现,此时的最值与第⼏条流⽔线也相关,由此想到⽤⼀个⼆维数组来记录最值。

状态:F[i][j]表⽰加⼯到第i条流⽔线的第j道⼯序所需的最少时间 状态转移:F[i][j]=min{F[1][j-1]+p[1][i],F[2][j-1]+p[2][i],...,F[n][j-1]+p[n][i]} 最后处理:F[1][m],F[2][m],...,F[n][m]记录着到最后⼀步⼯序不同流⽔线所需时间。

在⽐较⼀轮选出最短时间的则为最终结果。

3.每⼀道⼯序调换流⽔线需不同时间: 加⼯⼀件物品,有n条流⽔线,每条流⽔线都有m个⼯序,第i条流⽔线的j到⼯序处理时间为t[i][j],第k(k<=m-1)道⼯序中第i条流⽔线调换到第j条流⽔线所需时间为p[k][i][j]。

求加⼯⼀件物品所需的最少时间:分析: 与上⼀种情况类似,不过是⽤3维数组来记录 状态:F[i][j]表⽰加⼯到第i条流⽔线的第j道⼯序所需的最少时间 状态转移:F[i][j]=min{F[1][j-1]+p[j-1][1][i],F[2][j-1]+p[j-1][2][i],...,F[n][j-1]+p[j-1][n][i]}4.有的题意很明显是流⽔线调度问题,有些需要稍稍转换⼀下,只是包装不⼀样⽽已,其实换汤不换药。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

流水作业调度问题
描述:
N个作业{1,2, ..... ,n}要在由两台机器M1和M2组成的流水线上完成加工。

每个作业
加工的顺序都是先在M1上加工,然后在M2上加工。

M1和M2加工作业i所需的时间分别为ai和bi , 1 < i < n。

流水作业高度问题要求确定这n个作业的最优加工顺序,使得从第一个作业在机器M1上开始加工,到最后一个作业在机器M2上加工完成所需的时间最少。

可以假定任何任务一旦开始加工,就不允许被中断,直到该任务被完成,即非优先调度。

输入:
输入包含若干个用例, 第一行为一个正整数K(1<=K<=1000), 表示用例个数, 接下来K 个用例,每个用例第一个为作业数N(1<=N<=1000),接下来N行,每行两个非负整数,分别表
示在第一台机器和第二台机器上加工时间。

输出:
每个用例用一行输出采用最优调度所用的总时间,即从第一台机器开始到第二台机器结束的时间。

样例输入:
1
4
5 6
12 2
4 14
8 7
样例输出:
33
假定直接按顺序进行完成,则机器1 可以不用考虑,因为作业1 完成后就可以完成作业
2,直到作业n,需要的时间为所有作业在机器1上的时间总和。

但是,机器2 上完成的时间呢?
机器2上完成的时间显示除了作业在机器2上完成的时间总和, 还要加上等待时间, 即要求先在机器1 上完成后,才能在机器2 上开始。

例如
5 6
12 2
两个作业,顺序如下:
按顺序,则在机器1 上进行作业1 需要5小时,后进行作业2, 需要12小时,和为17 小时;
机器2 上,作业1 只能从第5 小时开始,第11 小时完成,等待了5 小时,等到作业2 在机器1 上完成后(已经是第17时),再完成2小时,共19小时。

机器2的等待时间总计为11 小时。

逆序,在机器1上进行作业2需要12小时,后进行作业1 需要5小时,和为17小时,
和前面一样;
机器2上,作业2完成后开始,等待了12小时,然后再等3小时开始作业1的6小时, 共计21小时,共等待了15小时。

图如下:
5 12
12 5
从刚才的分析可知,主要考虑机器2的等待时间,越少越好!
如何做到呢???
仔细分析可知,在机器1上需要的时间越少的,应该越早开始进行,这样才能保证机器2尽早开始。

但真是这样吗?
如:
5 6
4 2
按顺序需要共13小时,等待5小时; 逆序需要共15小时,等待7小时。

那怎么办呢???
根据相关解题思路及教材上Johnson法则,在此采用的方法简述如下:
在机器1上需要时间比在机器2是需要时间少的先开始,且按时间从小到大开始进行; 在机器1上需要时间比在机器2上需要时间多的后开始,按按时间从大到小开始进行;
解题思路(简略版)
,index为作业号
对d依时间排序
得到顺序为2 03 1顺序,即先安排第3个工作,再安排第1个,再安排第4个,最后安排第2个。

相关文档
最新文档