流水作业调度问题
一、 问题描述
给定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 情况下的一个最优调度。则
)('),.....,2('),1(n a a a 是N 的一个调度且该调度所需的时间
']1),1([])2),1([,(]1),1([T a t a t S T a t +<+。这与a 是N 的一个最优调度矛盾,所以
])2),1([,('a t S T T ≤。从而])2),1([,('a t S T T =。这就是证明了流水作业调度问题具有
最优子结构的性质。
2. 建立递归式计算最优解
由流水作业调度问题的最优子结构的性质我们可以得到,
])}2,[},{(]1,[{)0,(min 1i t i N T i t N T n
i -+=≤≤。推广到更一般的情形,我们便有:
})}0],1,[max{]2,[},{(]1,[{min ),(i t t i t i S T i t t S T S
i -+-+=∈。其中,}0],1,[max{i t t -这一项是由于机器2M 上,作业i 需在]}1,[,max{i t t 时间之后才能开工。因此,在机器1
M 上完成作业i 之后,在机器上还需
}0],1,[max{]2,[]1,[]}1,[,max{]2,[i t t i t i t i t t i t -+=-+时间才能完成对作业i 的加工。
按照上面所叙述的递归式,可以设计出解决流水作业调度问题的动态规划算法。
通过对递归式的分析,算法可以得到进一步的改进。
3. 流水调度问题的Johnson 法则
设a 是作业集S 在机器2M 的等待时间为t 时的任意一个最优调度。如果在调度中,
安排在最前面的两个作业分别为i 和j ,即j a i a ==)2(,)1(。则由动态规划的递归式
可以得到:
)},,{(]1,[]1,[})0],1,[max{},{(]1,[),(ij i t j i S T j t i t i t t b i S T i t t S T -++=-+-+=
其中,}0],1,[}0],1,[max{]2,[max{]2,[j t i t t i t j t t ij --++=
]}2,[]1,[,0},0],1,[max{max{
]1,[]2,[]2,[i t j t i t t j t i t j t --+-+=
}0],2,[]1,[],1,[max{
]1,[]2,[]2,[i t j t i t t j t i t j t --+-+= ]}1,[],2,[]1,[]1,[,max{
]1,[]1,[]2,[]2,[i t i t j t i t t i t j t i t j t -++--+= 如果作业i 和j 满足]}1,[],2,[min{]}1,[],2,[min{i t j t j t i t ≥,则称作业i 和j 满足
Johnson 不等式。如果作业i 和j 不满足Johnson 不等式,则交换作业i 和j 的加工
次序后,作业i 和j 满足Johnson 不等式。
在作业集S 当机器2M 的等待时间为t 时的调度a 中,交换作业i 和作业j 的加工次
序,得到的作业集S 的另一个调度a ’,它所需要的加工时间为 )},,{(]1,[]1,[),('ji t j i S T j t i t t S T -++=。
其中,]}1,[],2,[]1,[]1,[,max{]1,[]1,[]2,[]2,[j t j t j t i t t i t j t i t j t t ji -++--+=
当作业i 和j 满足Johnson 不等式]}1,[],2,[min{]}1,[],2,[min{
i t j t j t i t ≥时,我们有]}1,[],2,[max{]}1,[],2,[max{
i t j t j t i t --≤-- 从而,]}1,[],2,[max{]1,[]1,[]}1,[],2,[max{
]1,[]1,[i t j t j t i t i t i t j t i t --++≤--++ 由此可得,]}1,[],2,[]1,[]1,[max{]}1,[],2,[]1,[]1,[max{
i t j t j t i t i t i t j t i t -+≤-+ 因此任意t 有
]}1,[],2,[]1,[]1,[,max{]}1,[],2,[]1,[]1,[,max{i t j t j t i t t i t i t j t i t t -+≤-+
从而,ji ij t t ≤。由此可见),('),(t S T t S T ≤。
换句话说,当作业i 和作业j 不满足Johnson 不等式时,交换它们的加工顺序后,
作业i 和作业j 就满足Johnson 不等式了,且不增加加工时间。由此可得,对于流水
作业调度问题,必存在一个最优的调度a ,使得作业)(i a 和)1(+i a 满足Johnson 不
等式:
11]},1),([],2),1([min{]}1),1([],2),([min{-≤≤+≥+n i i a t i a t i a t i a t ,称这样的调度
a 为满足Johnson 法则的调度。
进一步可以证明,调度a 满足Johnson 法则当且仅当对任意的i 和j 都有i 4. 算法的描述 从上面的分析可知,流水作业调度问题一定存在满足Johnson 法则的最优调度,且容易由下面的算法确定。 流水作业调度问题的Johnson 算法: (1) 令]}2,[]1,[|{]},2,[]1,[|{21i t i t i N i t i t i N ≥=<=; (2) 将1N 中作业依]1,[i t 的非减序排列;将2N 中作业依]2,[i t 的非增序排列; (3) 1N 作业接2N 种作业构成满足Johnson 法则的最优调度。 具体的代码在文件夹《流水作业调度——动态规划法》文件夹中。 三、 时空效率分析 算法FlowJob 的主要计算时间花在对作业集的排序上。在这里,我们使用冒泡排 序法(BubbleSort),因此,在最坏情况下算法FlowJob 所需要的计算时间为)log (n n O 。所需要的空闲显然是)(n O 。 四、运行结果 当输入的作业数目为6时的运行结果 当输入的作业数为8时的运行结果 五、 分析输出结果 当输入的作业数目为6时: 每个作业在M1上执行的时间为]1,[i t ,在M2上执行的时间为]2,[i t ,输入的数据为: 算法按照先执行]2,[]1,[i t i t 的作业,保证M2机器上没有等待,本例中作业1、4、5满足条件,被选择先执行。当选择第一个作业时,算法选择让M2第一次等待 时间最少的那个,本例中作业1的]1,[i t 最小,这样就可以让M2第一次等待最少。所以在]2,[]1,[i t i t <的集合中,]1,[i t 越小越靠前执行。 当执行]2,[]1,[i t i t ≥的作业时,要保证最后一个作业在M2上的执行时间最短,所以作业2,6,3是按照]2,[i t 非增序排列,保证了作业3的]2,[i t 是它们三个当中最小的一个。 算法在计算执行时间的过程如下图所示: M1M2 作业执行次序为:1,4,5,2,6,3. 执行1时:M1上运行2个时间后交给M2,这时M2空闲了2个时间并开始工作。 所以此时要想将1做完需要7(2+5)个时间。 执行4时:M1上运行4个时间后,M2还在继续运行1,并没有结束。M1结 束时间为6,而M2结束1的时间为7,即<6,7>。所以此时要想把1, 4做完,需要14(7+7)个时间。 执行5时:M1上运行6个时间后,M2还在继续运行4,并没有结束。M1的 结束时间为12,而M2结束4的时间为14,即<12,14>.所以此时要 想把1,4,5做完,需要23(14+9)个时间。 执行2时:M1上运行7个时间后,M2还在继续运行5,并没有结束。M1的 结束时间为19,而M2结束5的时间为23,即<19,23>.所以此时要 想把1,4,5,2做完,需要26(23+3)个时间。 执行6时:M1上运行8个时间后,M2已经不在继续运行2。M1的结束时间为27,而M2结束2的时间为26,即此时M2已经空闲了一个时间, 即<27,26>.所以此时要想把1,4,5,2,6完成,需要29(27+2) 个时间。 执行3时:M1上运行6个时间后,M2已经不在继续运行6。M1的结束时间为33,而M2结束6的时间为29,即此时M2已经空闲了3个时间, 即<33,29>.所以此时要想把1,4,5,2,6,3完成,需要35(33+2) 个时间。 所以,根据运行结果,作业执行时间为35. (当输入为7的情形与输入为6的类似,这里就不再叙述) 流水车间调度问题的研究 机械工程学院 2111302120 周杭超 如今,为了满足客户多样化与个性化的需求,多品种、小批量生产己经为一种重要的生产方式。与过去大批量、单一的生产方式相比,多品种、小批量生产可以快速响应市场,满足不同客户的不同需求,因此,受到越来越多的企业管理者的重视。特别是以流水线生产为主要作业方式的企业,企业管理者致力于研究如何使得生产均衡化,以实现生产批次的最小化,这样可以在不同批次生产不同品种的产品。在这种环境下,对于不同批次的产品生产进行合理调度排序就显得十分重要。 在传统的生产方式中,企业生产者总是力求通过增加批量来减小设备的转换次数,因此在生产不同种类的产品时,以产品的顺序逐次生产或用多条生产线同时生产。这样,必然会一次大批量生产同一产品,很容易造成库存的积压。在实际生产中如果需要生产A, B, C, D 四种产品各100件,各种产品的节拍都是1分钟,如果按照传统的做法,先生产出100件A产品,其次是B,然后是C,最后生产产品D。在这种情况下,这四种产品的总循环时间是400分钟。然而,假设客户要求的循环时间为200分钟(四种产品的需求量为50件),那么在200分钟的时间内就只能生产出产品A和产品B,因而不能满足客户需求,同时还会过量生产产品A和B,造成库存积压的浪费。这种生产就是非均衡的,如图1所示。 比较均衡的生产方式(图2 )是:在一条流水线上同时将四种产品 混在一起生产,并且确定每种品种一次生产的批量。当然,如果在混合生产时不需要对设备进行转换,那么单件流的生产方式是最好的。然而,在实际生产A, B, C , D 四种不同产品时,往往需要对流水线上的某些设备进行工装转换。单件流的生产方式在此难以实现,需要根据换装时间来确定每种产品一次生产的批量。同时,由于现实生产中不同产品在流水线上各台机器的加工时间很难相同,因此,流水线的瓶颈会随着产品组合的不同而发生变化。当同一流水线加工多产品,并且每种产品在各道工序(各台机器)的加工时间差异较大时,瓶颈就会在各道工序中发生变化,如何对各种产品的投产顺序进行优化以协调这些变化的瓶颈是生产管理中一个很重要的问题。 图1 图2 因而对流水线调度问题的研究正是迎合这种多品种、小批量生产方式的需要,我们要讨论得是如何对流水线上生产的不同产品的调度顺序进行优要化。 流水车间调度问题一般可以描述为n 个工件要在 m 台机器上加工,每个工件需要经过 m 道工序,每道工序要求不同的机器,n 个工件在 m 台机器上的加工顺序相同。工件在机器上的加工时间是给定的,设为(1,,;1,,)ij t i n j m ==L L 。问题的目标是确定个工件在每台机器上的最优加工顺序,使最大流程时间达到最小。 流水作业调度问题 描述: 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小时, 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)情况下的一个最优调度。流水车间调度问题的研究-周杭超
流水作业调度问题
0018算法笔记——【动态规划】流水作业调度问题与Johnson法则