流水作业调度问题

流水作业调度问题
流水作业调度问题

一、 问题描述

给定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小时,

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

施工组织流水作业练习 2

第一部分流水施工 一、习题精析 (一)、单项选择题 1.流水施工的施工过程和流水强度属于() A、技术参数 B、时间参数 C、工艺参数 D、空间参数 2.由于某工程项目在第i施工段上的第2施工过程采用新技术施工,无标准定额可循,所以只能根据相关专家经验估算其流水节拍。已知对该施工过程进行估算得到的最短估算时间、最长估算时间、最可能估算时间分别为12d、22d、14d,则该施工过程的期望时间应为( ) A.15d B.16d C.18d D.14d 3.在流水施工中,造成专业队窝工是由于出现( ) A. M0=N B. M0>N C、M0 <N D、M0≤N 4.某项目组成甲、乙、丙、丁共4个专业队在5个段上进行无节奏流水施工,各队的流水节拍分别是:甲队为3、5、3、2、2周,乙队为2、3、1、4、5周,丙队为4、1、3、2、5周,丁队为 5、3、4、2、1周,该项目总工期为( )周。 A.91 B.30 C.26 D.24 5.浇筑混凝土后需要保证一定的养护时间,这就可能产生流水施工的( )。 A.流水步距 B.流水节拍 C.技术间歇 D.组织间歇 6.由5个熟练木工组成的木工队,在异型混凝土浇注段上制作安装100m2的特殊曲面木模。根据企业的统计资料,已知一般曲面木模的制作安装每工日完成5 m2,特殊曲面木模的难度系数为2.,每天两班工作制,则木工队在该施工的流水节拍为() A、4天 B、6天 C.8天 D.10天 7.某项目组成了甲、乙、丙、丁共4个专业队进行等节奏流水施工,流水节拍为6周,最后一个专业队(丁队)从进场到完成各施工段的施工共需30周。根据分析,乙与甲、丙与乙之间各需2周技术间歇,而经过合理组织,丁对丙可插入3周进厂,该项总工期为()周。 A.49 B.52 C.55 D.56 8.某工程有2个施工过程,技术上不准搭接,划分4个流水段,组织2个专业队进行等节奏流水施工,流水节拍为4天,则该工程的工期为( )天。 A.18 B.20 c.22 D.24 9.全长l0km的一级公路,按照异节奏流水组织施工,计划分10段施工,每段长lKm,分路槽开挖、路基、路面和配套设施4个施工过程,预计各施工过程单段施工时间分别为20天、40天、40天和20天,则公路工程计算总工期为( )。 A.120天 B.300天 C.320天D,1200天 10.某工程有3个施工过程进行施工,其流水节拍分别为4天、2天、6天,这三个施工过程组成成倍节拍流水,计算总工期为( )。 A.14天 B.16天 C.18天 D.20天

置换流水车间调度问题的MATLAB求解

物流运筹实务课程设计 题目:置换流水车间调度问题的MATLAB求解置换流水车间调度问题的MATLAB求解

目录 一、前言 (5) 二、问题描述 (6) 三、算法设计 (7) 四、实验结果 (15)

摘要 自从Johnson 1954年发表第一篇关于流水车间调度问题的文章以来.流水车间调度问题引起了许多学者的关注。安排合理有效的生产调度是生产活动能井然有序开展,生产资源得到最佳配置,运作过程简明流畅的有力保证。流水车间调度问题是许多实际流水线生产调度问题的简化模型。它无论是在离散制造工业还是在流程工业中都具有广泛的应用。因此,对进行研究具有重要的理论意义和工程价值。流水线调度问题中一个非常典型的问题,而置换流水线调度问题作为FSP问题的子问题,是一个著名的组合优化问题。该问题是一个典型的NP难问题,也是生产管理的核心内容。随着生产规模的扩大,流水线调度问题的优化对提高资源利用率的作用越来越大,因此对其研究具有重要的

理论和现实意义。 关键字:流水车间,单件小批量生产,jsp模型,Matlab 前言 企业资源的合理配置和优化利用很大程度上体现在车间一层的生产活动中,所以加强车间层的生产计划与控制一直在企业生产经营活动中占有十分重要的地位。车间生产计划与控制的核心理论是调度理论。车间调度问题是一类重要的组合优化问题。为适应订货式、多品种、小批量生产的需要,引进了置换流水车间调度概念。在置换流水车间调度优化后,可以避免或大大减少流程工作时间、提高生产效率。因此,研究成组技术下车间调度问题是很有必要的。生产调度,即对生产过程进行作业计划,是整个个先进生产制造系统实现管理技术、优化技术、白动化与计算机技术发展的核心。置换流水车间调度问题是许多实际生产调度问题的简化模型。生产计划与调度直接关系着企业的产出效率和生产成本,有效的计划与调度算法能最大限度地提高企业的效益。调度问题是组合优化问题,属于NP问题,难以用常规力一法求解。随着制造业的快速发展,大规模定制生产、全球化制造等思想的提出,使车间调度问题呈现出以下的新特点:约束条件多,时间复杂度高,空问复杂度高。这将导致在许多情况下,求解所建立的数学模型的快速性无法满

流水作业调度完整代码

//流水作业调度.cpp :定义控制台应用程序的入口点。 #i nclude"stdafx.h" #in elude #in clude using n amespace std; static int NUM; struct JOB { int a;// 1st int b;// 2nd bool type;//mark a>b or b>a int index;//save initial subscript }; void Sort( JOB* ); void In put( JOB* ); void Output(JOB*); void Order(JOB*); int _tmain(int argc, _TCHAR* argv[]) { cout << "请输入要加工的工件数量:"; cin >> NUM; JOB* work=new JOB[NUM]; cout << "请输入数据:\n"; In put(work); Sort(work); Order(work); Output(work); delete work; return 0; } void Sort( JOB* temp ) { int b =0, c = 0; for (int a = 0; a < NUM; a++) { if (temp[a].type == 0)//co unt b++;〃num of type 0 else c++;// num of type 1 } JOB* wo = new JOB[b];

JOB* rk = new JOB[c]; b = c = 0; for (int a = 0; a < NUM; a++)//divide { if (temp[a].type == 0) wo[b++] = temp[a]; else rk[c++] = temp[a]; } //sort wo for (int m = 0; m < b; m++) for (i nt n = m + 1; n < b; n++) if (wo[n].a < wo[m].a) { JOB job=wo[m]; wo[m] = wo[ n]; wo[n] = job; } //sort rk for (int m = 0; m < c; m++) for (int n = m + 1; n < c; n++) if (rk[n].b > rk[m].b) { JOB job = rk[m]; rk[m] = rk[ n]; rk[n] = job; } for (int m = 0; m < b; m++) temp[m] = wo[m]; for (int m = b ,n=0; m < NUM; m++,n++) temp[m] = rk[ n]; } void In put( JOB* temp ) { for (int a = 0; a < NUM; a++) { cout << a + 1 << ":\n A:"; cin >> temp[a].a; cout << " B:"; cin >> temp[a].b; or 0 temp[a].type = temp[a].a > temp[a].b ? 1 : 0;//a>b 1 temp[a].i ndex = a + 1;

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

流水作业调度完整代码

// 流水作业调度.cpp : 定义控制台应用程序的入口点。#include"stdafx.h" #include #include using namespace std; static int NUM; struct JOB { int a;// 1st int b;// 2nd bool type;//mark a>b or b>a int index;//save initial subscript }; void Sort( JOB* ); void Input( JOB* ); void Output(JOB*); void Order(JOB*); int _tmain(int argc, _TCHAR* argv[]) { cout << "请输入要加工的工件数量:"; cin >> NUM; JOB* work=new JOB[NUM]; cout << "请输入数据:\n"; Input(work); Sort(work); Order(work); Output(work); delete work; return 0; } void Sort( JOB* temp ) { int b =0, c = 0; for (int a = 0; a < NUM; a++) { if (temp[a].type == 0)//count b++;// num of type 0 else c++;// num of type 1 } JOB* wo = new JOB[b];

JOB* rk = new JOB[c]; b = c = 0; for (int a = 0; a < NUM; a++)//divide { if (temp[a].type == 0) wo[b++] = temp[a]; else rk[c++] = temp[a]; } //sort wo for (int m = 0; m < b; m++) for (int n = m + 1; n < b; n++) if (wo[n].a < wo[m].a) { JOB job=wo[m]; wo[m] = wo[n]; wo[n] = job; } //sort rk for (int m = 0; m < c; m++) for (int n = m + 1; n < c; n++) if (rk[n].b > rk[m].b) { JOB job = rk[m]; rk[m] = rk[n]; rk[n] = job; } for (int m = 0; m < b; m++) temp[m] = wo[m]; for (int m = b ,n=0; m < NUM; m++,n++) temp[m] = rk[n]; } void Input( JOB* temp ) { for (int a = 0; a < NUM; a++) { cout << a + 1 << ":\n A:"; cin >> temp[a].a; cout << " B:"; cin >> temp[a].b; temp[a].type = temp[a].a > temp[a].b ? 1 : 0;//a>b 1 or 0 temp[a].index = a + 1; }

动态规划-流水作业调度报告

动态规划-流水作业调度报告 C1 问题描述和分析 N个作业{1,2,………,n}要在由两台机器M1和M2组成的流水线上完成加工。每个作业加工的顺序都是先在M1上加工,然后在M2上加工。M1和M2加工作业i所需的时间分别为ai和bi,1≤i≤n。流水作业高度问题要求确定这n个作业的最优加工顺序,使得从第一个作业在机器M1上开始加工,到最后一个作业在机器M2上加工完成所需的时间最少。 设全部作业的集合为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)时,安排作业π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). 即当机器M1为空闲即未安排任何加工任务时,则任何一个作业的第一个任务(第一道工序)都可以立即在M1上执行,无须任何先决条件。因此容易知道,必有一个最优调度使得在M1上的加工是无间断的。实际上,如某个最优调度π在M1上安排的加工是有间断的,则我们可以把所有在M1上出现间断处的任务的开始加工时间提前,使得在M1上的加工是无间断的;而在M2上仍按π原先的安排。把这样调整之后的调度记作为π’。由于在调度π’下,任何一个任务在M1上加工的结束时间不晚于在调度π下的结束时间,故调度π’不会影响在M2上进行加工的任何一个任务的开始时间。由于调度π’在M1上的结束时间早于调度π,在M2上的结束时间与调度π相同,而π又是最优调度,所以π’也是最优调度。由此我们得到:一定有一个最优调度使得在M1上的加工是无间断的。另外,也一定有一个最优调度使得在M2上的加工空闲时间(从O时刻起算)为最小,同时还满足在M1上的加工是无间断的。(证明留作作业)因此,如果我们的目标是只需找出一个最优调度,我们可以考虑找:在M1上的加工是无间断的、同时使M2的空闲时间为最小的最优调度。(根据上述理由,这样的最优调度一定存在。)可以证明,若在M2上的加工次序与在M1上的加工次序不同,则只可能增加加工时间(在最好情况下,增加的时间为O)。也就是说,在M1上的加

流水作业参数

二、流水施工的基本参数 在组织流水施工时,用以表达流水施工在工艺流程、空间布置和时间排列等方面的特征和各种数量关系的参数,称为流水施工参数,它主要包括工艺参数、空间参数和时间参数三类。 1. 工艺参数 工艺参数是指在组织流水施工时,用以表达流水施工在施工工艺上开展的顺序及其特征的参数,包括施工过程数和流水强度两个参数。 1)施工过程数(n:n=1,…,i,…,n)) 组织流水施工时,通常把施工对象划分为若干个施工过程,对每一个施工过程组织一个或几个专业化的施工队进行施工,这样可以提高工人的操作熟练程度,进而提高劳动效率。 (1)施工过程划分方法。按照工艺性质的不同,工程项目的施工过程可分为制备类、运输类和建造类施工过程三类。制备类和运输类施工过程是为建造类施工过程提供构件、半成品、原材料等,可以在施工现场之外的场地组织生产,只要按照计划实施,就不会影响建造类施工。因此,在这里主要按照建造类施工过程进行划分。如果对一个单位工程组织流水施工,可以按照将单位工程划分为若干个分部工程组织流水施工,如基础、墩台、桥面等几个施工过程;然后再将分部工程化分为若干个分项工程组织流水施工,如模板、钢筋、混凝土等几个施工过程。 (2)划分施工过程应考虑的因素。 ①确定施工过程数应考虑工程项目的复杂程度、结构类型及施工方法等。对复杂的施工内容应划分得细一些,对简单的施工内容应划分得粗一些。 ②确定施工过程的数量要适当。当编制控制性施工进度计划时,施工过程可以划分得粗一

些,施工过程可以是单位工程,也可以是分部工程;当编制实施性施工进度计划时,施工过程可以划分得细一些,施工过程可以是分项工程。 ③ 确定施工过程应与制备类和运输类施工过程相配合。 2)流水强度(V ) 流水强度是指某一个施工过程在单位时间内能够完成的工程量,也称为流水能力或生产能力。流水强度又分为机械施工过程流水强度和人工操作过程流水强度。 (1)机械施工过程流水强度。机械施工过程流水强度可用下式计算: i i i V R S = ∑ 式中 i V —— 第i 种机械的施工过程流水强度(i =1,2,…,n ); i R —— 投入i 种机械的台数; i S —— i 机械在本施工过程的台班定额。 【例5.1】 有500升混凝土搅拌机3台,其台班定额为45 m 3/台班;400升混凝土搅拌机1台,其台班定额为35 m 3/台班,求该施工过程的机械流水强度。 13R =,3 145 m /S =台班 21R =,3235 m /S =台班 i i i V R S =∑ (i =1,2,…,x ) 3 345135170 m V = ?+?=∑ 该施工过程的机械流水强度为170 m 3。 (2)人工操作施工过程流水强度。人工操作过程流水强度可用下式计算: i i i V R S = ∑ 式中 i V —— i 施工过程的流水强度; i R —— 投入i 施工过程的工人数;

流水施工方式

中文词条名:流水施工基本方式 1.全等节拍流水 在组织流水施工时,如果每个施工过程在各个施工段上的流水节拍都彼此相等,其流水步距也等于流水节拍;这种流水施工方式,称为全等节拍流水。其建立步骤如下: (1)确定施工起点流向,划分施工段; (2)分解施工过程,确定施工顺序; (3)确定流水节拍,此时T JI=T; (4)确定流水步距,此时K J,J+1=K=T; (5)按公式(34-3)确定计算总工期; T=(M+N-1)K+ΣZ J,J+1+ΣG J,J+1-ΣC J,J+1(34-3) 式中 T——流水施工方案的计算总工期; ΣZ J,J+1——所有技术间歇时间总和; ΣG J,J+1——所有组织间歇时间总和; ΣC J,J+1——所有平行搭接时间总和;其他符号同前。 (6)绘制流水施工指示图表。 [例] 某工程由A、B、C、D四个分项工程组成;它在平面上划分为四个施工段;各分项工程在各个施工段上的流水节拍均为3D。试编制流水施工方案。 [解] 根据题设条件和要求,该题只能组织全等节拍流水。 (1)确定流水步距 K=T=3(D) (2)确定计算总工期 T=(4+4-1)×3=21(D) (3)绘制流水施工指示图表 分别如图34-1和图34-2所示。 2.成倍节拍流水 在组织流水施工时,如果同一施工过程在各个施工段上的流水节拍彼此相等,而不同施工过程在同一施工段上的流水节拍之间存在一个最大公约数,为加快流水施工速度,可按最大公约数的倍数确定每个施工过程的专业工作队,这样便构成了一个工期最短的成倍节拍流水施工方案。成倍节拍流水的建立步骤如下: (1)确定施工起点流向,划分施工段; (2)分解施工过程,确定施工顺序; (3)按以上要求确定每个施工过程的流水节拍; (4)按公式(34-4)确定流水步距; K B=最大公约数{各过程流水节拍}(34-4) 式中 K B——成倍节拍流水的流水步距。 (5)按公式(34-5)确定专业工作队数目; 式中 B J——施工过程(J)的专业工作队数目,N≥J≥1; N1——成倍节拍流水的专业工作队总和;

流水车间调度问题的研究-周杭超

流水车间调度问题的研究-周杭超

流水车间调度问题的研究 机械工程学院 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 ==。问题的目标是确定个工件在每台机器上的最优加工顺序,使最大流程时间达到最小。

流水作业调度

流水作业调度 一、 可行性分析与项目开发计划 n个作业}{ n ,...2,1要在由2台机器M1和M2组成的流水线上完成加工。每个作业的顺序都是现在M1上加工,然后再M2上加工。M1和M2加工作业i 所需的时间分别是i a 和i b ,1<=i<=n.流水作业调度问题要求确定这n 个作业的最优加工顺序,使得从第一个作业在机器M1上开始加工,到最后一个作业在机器M2上加工完成所需要的时间最少。 直观上,一个最优调度应该使得机器M1没有空闲时间,而且机器M2的空闲时间最少,在一般情况下,机器M2上会出现机器空闲和作业积压两种情况。设全部作业的集合为N={1,2,…n}。N S ?是N 的作业子集,在一般情况下,机器M1开始加工作业S 中作业时,机器M2还在加工其他作业,要等时间t 后才可以利用。将这种情况下完成S 中作业所需要的最短时间记做T(S,t),则流水作业调度问题的最优值就是T(N,0). 我们通过分析可以知道流水作业调度问题具有最优子结构的性质,因此考虑用动态规划算法自后向前来解决其最优问题。这就需要通过建模来得出最优子结构的递归式子,从而设计算法求解最优值。 二、 需求分析 1、 用户可以根据自己的需要输入想要进入流水线的作业数。 2、 用户可以输入这几个作业在机器M1和M2上的加工时间。 3、 由主函数调用流水作业调度的Johnson 算法来实现对流水作业的安排。 4、 输出经过Johnson 算法安排后的作业序列,这就是最终的一个最优调度。 三、 概要设计 总体设计: 假定这n 个作业在机器M1上加工时间为i a ,在机器M2上加工时间为i b ,1<=i<=n.

解决批量流水线调度问题的离散微粒群算法

解决批量流水线调度问题的离散微粒群算法 3 潘玉霞 潘全科 桑红燕 武 磊 (聊城大学计算机学院,山东聊城252059) 摘 要 提出了解决以makespan 为目标的批量流水线调度问题的离散微粒群优化算法.该算 法采用了基于工序的编码方式,设计了新的粒子生成公式,通过局部搜索来提高算法的开发能力,从而使微粒群算法可以直接应用于调度问题.仿真实验表明了上述算法的有效性.关键词 批量流水线调度,离散微粒群算法,局部搜索中图分类号 TP181 文献标识码 A 文章编号 167226634(2009)0320090204 0 前言 复杂生产过程的智能优化调度理论与方法是目前国际学术和工业界一个跨学科的前沿研究方向.有效调度算法和优化技术的研究与应用,是提高生产效益与市场竞争力的基础和关键.批量流水线调度问题(Lot -st reaming Flowshop Scheduling Problem ,L FSP )是许多实际问题的简化模型,具有广泛的工程应用背景.目前,解决L FSP 的算法可大致区分为构造式启发算法[1,2]和智能优化算法[1].优先分配规则等构造式方法虽然能快速求解,但是解的质量往往不高.因此,能在合理时间内求得满意解的智能优化算法就成为求解调度问题的主要方法.微粒群优化(Particle Swarm Optimization ,PSO )算法源于对鸟群或鱼群行动时,透过个体间特有的信息传递方式,使整个群体朝同一目标聚集现象的模仿.由于其实现简单,并有较好的优化性能,根据PSO 的优化原理,提出了一种离散微粒群算法(Discrete PSO ,DPSO )来解决批量流水线调度问题.同时,结合基于Pairwise 局部搜索来平衡算法的全局开发和局部搜索能力.仿真试验表明了所得算法的优越性和高效性. 图1 L FSP 调度模型 1 批量流水线调度模型 L FSP 除了符合传统流水线调度的条件 外,还要把每个工件分成若干个小批量.批量的分配原则对调度的性能有重要影响,常见的批量分配原则有:等量分配、一致分配和可变分配.调查表明[3]等量分配原则在应用中取得了较好效果,故采用小批量的等量分配原则.各个工件的小批量加工完成后就能被 传送到下一台机床上加工,所有小批量的加工顺序都相同.每个工件在每台机床上加工完成后,在不影响 各工件最后一个小批量开始加工时间的条件下,推迟加工各个小批量,使得同一机床上同一工件相邻两个小批量之间没有等待时间.调度模型如图1所示. 第22卷 第3期2009年9月 聊城大学学报(自然科学版) Journal of Liaocheng University (Nat.Sci.)Vol.22No.3 Sep.2009 3 收稿日期:2009204206 基金项目:国家自然科学基金项目(60874075,70871065);山东省教育厅科研发展计划(J 09L F29)通信作者:潘玉霞,E 2mail :panyuxia2008@https://www.360docs.net/doc/c65770269.html,.

流水作业调度 Johnson

1.题目: 流水作业调度的Johnson法则 2.程序清单: #include using namespace std; #define MAXSIZE 1000 typedef struct{ int key,index; bool job; }Jobtype; typedef struct{ Jobtype r[MAXSIZE]; int length; }Sjob;//顺序表类型 void sort(Sjob &L,int n) { L.length=n; int i,j; Jobtype t; for(i=0;iL.r[j].key) { t=L.r[i]; L.r[i]=L.r[j]; L.r[j]=t; } } int Flowshop(int n,int a[],int b[],int c[]) { int i; Sjob d; for(i=0;ib[i]?b[i]:a[i]; d.r[i].job=a[i]<=b[i]; d.r[i].index=i; } sort(d,n); int j=0,k=n-1; for(i=0;i

else c[k--]=d.r[i].index; } j=a[c[0]]; k=j+b[c[0]]; for(i=1;i>n; cout<<"在M1上的加工时间分别为:"; for(i=0;i>a[i]; cout<<"在M2上的加工时间分别为:"; for(i=0;i>b[i]; int m=Flowshop(n,a,b,c); for(i=0;i

流水车间调度问题的研究周杭超

流水车间调度问题的研究 机械工程学院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 ==。问题的目标是确定个工件在每台机器上的最优加工顺序,使最大流程时间达到最小。

流水作业

流水作业调度 一、可行性分析与项目开发计划 n个作业{n,...2,1}要在由2台机器M1和M2组成的流水线上完成加工。每个作业的顺序都是现在M1上加工,然后再M2上加工。M1和M2加工作业i所需的时间分别是ai和bi,1<=i<=n.流水作业调度问题要求确定这n个作业的最优加工顺序,使得从第一个作业在机器M1上开始加工,到最后一个作业在机器M2上加工完成所需要的时间最少。 直观上,一个最优调度应该使得机器M1没有空闲时间,而且机器M2的空闲时间最少,在一般情况下,机器M2上会出现机器空闲和作业积压两种情况。设全部作业的集合为N={1,2,…n}。NS是N的作业子集,在一般情况下,机器M1开始加工作业S中作业时,机器M2还在加工其他作业,要等时间t后才可以利用。将这种情况下完成S中作业所需要的最短时间记做T(S,t),则流水作业调度问题的最优值就是T(N,0). 我们通过分析可以知道流水作业调度问题具有最优子结构的性质,因此考虑用动态规划算法自后向前来解决其最优问题。这就需要通过建模来得出最优子结构的递归式子,从而设计算法求解最优值。 二、需求分析 1、用户可以根据自己的需要输入想要进入流水线的作业数。 2、用户可以输入这几个作业在机器M1和M2上的加工时间。 3、由主函数调用流水作业调度的Johnson算法来实现对流水作业的安排。 4、输出经过Johnson算法安排后的作业序列,这就是最终的一个最优调度。 三、概要设计 1、总体设计: 假定这n个作业在机器M1上加工时间为ai,在机器M2上加工时间为bi,1<=i<=n. 由流水作业调度问题具有最优子结构性质可知, T(N,0)=min{ai+T(N={i},bi)}1<=i<=n 推广到一般情况下, T(S,t)={ai+T(S-{i},bi+max{t-ai,0})} i∈S 式子中,max{t-ai,0}这一项是由于在机器这一项是由于在机器M2上,作业i必须在max{t,ai}时间之后才能开工,因此,在机器M1上完成作业加工i之后,在机器还需要bi+max{t,ai}=bi+max{t-ai,0}时间完成对作业i的加工。 按照上述递归式,可以设计出流水作业调度问题的动态规划算法,但是算法还可以进一步简化。 设π是作业集S在机器M2的等待时间为t时的任一最优调度。若在这个调度中,安排在最前面的两个作业分别是i和j,记π(1)=i,π(2)=j由动态规划递归式可得: 如果作业i和作业j满足min{bi,ai}>=min{bj,aj},则称作业i和作业j满足Johnson不等式。 如果作业i和作业j不满足Johnson不等式,则交换作业i和作业j的加工顺序后,作业

相关文档
最新文档