流水作业调度
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上加工所需时间)。
流水作业调度问题

流水作业调度问题描述: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行,每行两个非负整数,分别表示在第一台机器和第二台机器上加工时间。
输出:每个用例用一行输出采用最优调度所用的总时间,即从第一台机器开始到第二台机器结束的时间。
样例输入:145 612 24 148 7样例输出:33假定直接按顺序进行完成,则机器1 可以不用考虑,因为作业1 完成后就可以完成作业2,直到作业n,需要的时间为所有作业在机器1上的时间总和。
但是,机器2 上完成的时间呢?机器2上完成的时间显示除了作业在机器2上完成的时间总和, 还要加上等待时间, 即要求先在机器1 上完成后,才能在机器2 上开始。
例如5 612 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小时。
最小化总完工时间的流水作业调度混合算法

t n i o sd r d i h spa e .An ag rt m a wo k i e e td i ih a n t ls l to s i sc n ie e n t i p r o l o h f me r sprs ne n wh c n i i a o u i n i i r i g n r td b n e ce th b i e rsi l rt m n mp o e y a tb e rh ag rt e e ae y a f in y rd h u tc ago h a d i r v d b a u s a c lo hm.Ba e i i i i sd o h r ce sis o if rn e rsis,t r e h rd tb e r h a g rtm sHA1,HA2,a n c a a tr t fdfe e th u t i c i c h e yb a u s ac l o h i i nd HA3 r rp e a e p o os d.Talad’ e c mak p og a i e o g n r t a g u e fr n om n t n e . ilr Sb n h r r r m sus d t e e ae al r e n mb ro a d isa c s Ex e me tr s l h p r n e ut s ow h tte q a i o u insi mp ov d usn h e l o t mswih f b g e i s t a h u l y ofs l t t o si r e i g t r e ag r h t i g r i l
上均优 于 目前 最有效 的启发 式算法.与 目前最 有效 的算 法相 比 , 生 最好 解 的平 均 百分 比偏差 产 均下 降至少 3 % ,最优 解所 占比例 皆有显著提 高. 0
问题描述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算法)问题定义:双机流⽔作业调度:总共有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%。
基于自适应遗传算法的流水车间作业调度

[ yw r s efaa t egn t loi m;lwjbso ce uig ag rh i rv me t Ke o d |sl d pi eei ag rh f h pshd l ; loi m o e n - v c t o o n t mp
流水车 间作 业调度问题又 称为流水车间加工排序 题 ,
() 3 () 4
其 中 , i ,, k:23…, 。 =23…,; ,, m
c =cJ , ( m) () 5
1 流水车 间调度问题
流水车 间调度 问题一般可 以描 述为 :n个工件在 m台机 器 上加工 ,每个工件 需要经过 m 道 工序 ,每道工序 要求不
同 的机 器 , n个 工件在 台机器 上 的加工 顺序 相 同 ,并有 如 下
中圈 分类号: P0. T31 度
沈 斌 ,周莹君 ,王家海
( 1 同济大 学中德 学院 ,上海 2 0 9 ; 0 0 2 2 .同济大学机械工程学 院,上海 20 9 ;3 0 0 2 .同济大学经济与管理学院 ,上海 2 0 9 ) 0 0 2
3 S h o f c n mis n n g me tT n j Unv ri , h n h i 0 0 2 . c o l o o c dMa a e n, o g i ies y S a g a 2 0 9 ) oE a t
[ src !Fo h pshd l gpo lm i aN nP ln mil o lt po l T i pp r rsnsan w slaa t eg nt loi m Abta t lw so c e ui rbe s o —oy o a c mpee rbe n m. hs ae eet e e -d pi eei ag rh p f v c t
作业调度问题1

分析:
直观上,一个最优调度应使机器M1没有空闲 时间,且机器M2的空闲时间最少。在一般情 况下,机器M2上会有机器空闲和作业积压2种 情况。
设全部作业的集合为N={1,2,…,n}。SN 是N的作业子集。在一般情况下,机器M1开始 加工S中作业时,机器M2还在加工其他作业, 要等时间t后才可利用。将这种情况下完成S中 作业所需的最短时间记为T(S,t)。流水作业调 度问题的最优值为T(N,0)。
xxxxxx
一、流水作业调度
问题的提出: n个作业{1,2,…,n}要在由2台机器M1和M2组成 的流水线上完成加工。每个作业加工的顺序都是先 在M1上加工,然后在M2上加工。M1和M2加工作业 i所需的时间分别为ai和bi。 流水作业调度问题要求确定这n个作业的最优加工顺 序,使得从第一个作业在机器M1上开始加工,到最 后一个作业在机器M2上加工完成所需的时间最少。
b4
j3
j2
a2
j1
a0
j0
a1 b0
a3
b2
b3
b1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
a5+a1+a3+a2+a4+b2+b4=16+3=19
J1 J2 J3 J4 J5 J6 印刷 3 12 5 2 9 12
装订 8 10 9 6 3 1
}
delete d; return k; }
程序执行结果: 完成作业所需最短时间 19 作业编号自0开始,作业执行顺序为 4 0 2 1 3
计算复杂度分析
算法flowShop的主要计算时间花在对做业集的 排序上。因此,在最坏的情况下算法FlowShop 所需的计算时间为O(nlogn),本算法对空间的要 求,只增加了n个辅助单元,因此,所需的空间 为O(n)。
流水作业调度(贪心)Johnson算法

流⽔作业调度(贪⼼)Johnson算法某⼯⼚收到了 n个产品的订单,这 n个产品分别在 A、B 两个车间加⼯,并且必须先在 A 车间加⼯后才可以到 B 车间加⼯。
某个产品 i在 A,B 两车间加⼯的时间分别为Ai,Bi 。
怎样安排这 n个产品的加⼯顺序,才能使总的加⼯时间最短。
这⾥所说的加⼯时间是指:从开始加⼯第⼀个产品到最后所有的产品都已在 A,B 两车间加⼯完毕的时间。
边上代码边说开始让第⼆台机器等的时间缩⼩最后让第⼀台机器等的时间更⼩#include<bits/stdc++.h>#define re return#define inc(i,l,r) for(int i=l;i<=r;++i)using namespace std;template<typename T>inline void rd(T&x){char c;bool f=0;while((c=getchar())<'0'||c>'9')if(c=='-')f=1;x=c^48;while((c=getchar())>='0'&&c<='9')x=x*10+(c^48);if(f)x=-x;}int n,pos[1005];struct node{int id,atime,btime,mintime;bool operator<(node a)const{re mintime<a.mintime;}}pro[1005];int main(){// freopen("in.txt","r",stdin);rd(n);inc(i,1,n){rd(pro[i].atime);pro[i].id=i; //加编号,第⼆问}inc(i,1,n){rd(pro[i].btime);pro[i].mintime=min(pro[i].atime,pro[i].btime);//取ai和bi中较⼩值mi}sort(pro+1,pro+n+1);//通过mi由⼩到⼤排序int l=1,r=n;inc(i,1,n){if(pro[i].mintime==pro[i].atime)pos[l++]=i;//ai⼩的放在前⾯else pos[r--]=i;//bi⼩的放在后⾯}//模拟int now=0,last=0;inc(i,1,n){now+=pro[pos[i]].atime;last=max(last,now)+pro[pos[i]].btime;}printf("%d\n",last);inc(i,1,n-1)printf("%d ",pro[pos[i]].id);printf("%d",pro[pos[n]].id);re 0;}。
Johnson算法双机调度poj2751

Johnson算法双机调度 poj2751 双机流水作业调度问题的Johnson算法n个作业要在由两台机器M1和M2组成的流水线上完成加工. 每个作业i必须先在M1上然后在M2上加工, 时间分别为ai和bi确定这n个作业的加工顺序, 使得从第一个任务开始在M1上加工到最后一个任务在M2上加工完成的总时间尽量小Johnson算法.设N1为a<b的作业集合, N2为a>=b的作业集合, 将N1的作业按a非减序排序, N2中的作业按照b非增序排序, 则N1作业接N2作业构成最优顺序.(证明略) 2008-12-27 00:53求解流水作业调度问题的Johnson算法具体描述如下:(1) 设a[i]和b[i](0<=i<n)分别为作业i在两台设备上的处理时间。
建立由三元组(作业号,处理时间,设备号)组成的三元组表d。
其中,处理时间是指每个作业所包含的两个任务中时间较少的处理时间。
设n=4,(a0,a1,a2,a3)=(3,4,8,10)和(b0,b1,b2,b3)=(6,2,9,15)的作业0的三元组为(0,3,0),作业1的三元组为(1,2,1)……如图(a)所示。
(2) 对三元组表按处理时间排序,得到排序后的三元组表d。
如图(b)所示。
(3) 对三元组表的每一项d(i)(0<=i<n),从左右两端生成最优作业排列c[j](0<=j<n),c[j]是作业号。
如果d[i]设备号为1,则将作业i置于c的左端末尾,否则置于c的右端末尾。
如图(c)所示,由两端想中间存放。
作业号处理时间设备号0 0 3 01 12 12 2 8 03 3 10 0(a)三元组表作业号处理时间设备号0 1 2 11 0 3 02 2 8 03 3 10 0(b)按处理时间排序(0, 2, 3, 1)(c)最优作业排列P1 3 8 10 4P2 6 9 15 2(d)最优调度方案程序是流水作业调度的Johnson算法。
流水车间成组作业调度的仿真研究的开题报告

流水车间成组作业调度的仿真研究的开题报告1. 研究背景和意义:在现代制造业中,流水车间是一种常见的工厂布局形式,针对流水车间成组作业的调度是提高生产效率和降低制造成本的重要途径之一。
因此,研究流水车间成组作业调度问题的优化方法,具有多方面的实际意义。
例如,可实现生产周期的缩短和工作效率的提高,从而提高企业的生产能力和竞争力,同时还可以降低企业的人工管理成本等。
2. 研究目的:本研究旨在通过仿真实验,研究流水车间成组作业调度问题的优化方法,探索基于优化算法的调度策略,以提高车间生产效率和产品品质。
其具体研究目标如下:(1) 研究流水车间成组作业调度问题的数学模型,明确调度目标和约束条件;(2) 建立基于仿真的流水车间成组作业调度实验平台,包括系统结构、设备布局、指令输入等部分;(3) 采用离散事件仿真技术,对流水车间成组作业调度问题进行仿真实验和数据分析,包括实验设计、参数设置、仿真运行和数据处理等过程;(4) 研究流水车间成组作业调度问题的优化算法及调度策略,探索如何将其应用于实际生产中,在车间生产效率和产品品质方面实现优化效果。
3. 研究内容:本研究主要包括以下内容:(1) 研究流水车间成组作业调度问题的基本概念和应用场景;(2) 探索基于离散事件仿真的流水车间成组作业调度实验平台建设及参数设置;(3) 制定流水车间成组作业调度优化算法和调度策略,并进行实验验证;(4) 分析仿真实验结果,评估调度策略对车间生产效率和产品品质的影响;(5) 提出流水车间成组作业调度问题的未来研究方向及结论。
4. 研究方法:本研究将采用离散事件仿真技术,建立基于仿真的流水车间成组作业调度实验平台,对流水车间成组作业调度问题进行仿真实验和数据分析。
具体步骤如下:(1) 确定实验对象:确定流水线成组作业调度问题的实验对象、实验条件和实验环境;(2) 设计实验方案:依据流水车间成组作业调度问题的调度目标和约束条件,设计实验方案,包括实验变量、设计要点和参数设置;(3) 建立仿真模型:根据实验方案和目标,建立基于离散事件仿真技术的流水车间成组作业调度模型,搭建实验平台;(4) 进行仿真实验:对所建模型进行仿真实验,运行实验并记录实验数据,包括生产能力、生产效率、产出品质等;(5) 分析实验结果:基于实验数据,对调度策略的优化效果进行分析和评估,得出结论。
流水作业调度问题报告

题目二 流水作业调度2.1问题重述n 个作业},,2,1{n 要在由2台机器1M 和2M 组成的流水线上完成加工。
每个作业加工的顺序都是先在1M 上加工,然后在2M 上加工。
1M 和2M 加工作业i 所需的时间分别为i a 和i b ,n i ≤≤1。
流水作业调度问题要求确定这n 个作业的最优加工顺序,使得从第一个作业在机器1M 上开始加工,到最后一个作业在机器2M 上加工完成所需的时间最少。
2.2问题分析设全部作业的集合为},,2,1{n N =。
S 是N 的作业子集。
在一般情况下,机器1M 开始加工S 中作业时,机器2M 还在加工其他作业,要等时间t 后才可利用。
将这种情况下完成S 中作业所需的最短时间记为),(t S T 。
流水作业调度问题的最优值为)0,(N T 。
经过分析,流水作业调度问题具有最优子结构性质。
设π是所给n 个流水作业的一个最优调度,它所需的加工时间为')1(T a +π。
其中'T 是在机器2M 的等待时间为)1(πb 时,安排作业)(,),2(n ππ 所需的时间。
记)}1({π-=N S ,则有),()1('πb S T T =。
由流水作业调度问题的最优子结构性质可知:)}},{({min )0,(1i i n i b i N T a N T -+=≤≤ (1)一般形式:})}0,max{,},{({min ),(i i i Si a t b i S T a t S T --+=∈ (2) 从公式(1)可以看出,该问题类似一个排列问题,求N 个作业的最优调度问题,利用其子结构性质,对集合中的每一个作业进行试调度,在所有的试调度中,取其中加工时间最短的作业做为选择方案。
将问题规模缩小。
公式(2)说明一般情况下,对作业集S 进行调度,在2M 机器上的等待时间,除了需要等该部件在1M 机器上完成时间,还要冲抵一部分原来的等待时间,如果冲抵已成负值,自然仍需等待1M 将作业做完,所以公式取}0,max {i a t -。
算法设计与分析——流水作业调度(动态规划)

算法设计与分析——流⽔作业调度(动态规划)⼀、问题描述N个作业{1,2,………,n}要在由两台机器M1和M2组成的流⽔线上完成加⼯。
每个作业加⼯的顺序都是先在M1上加⼯,然后在M2上加⼯。
M1和M2加⼯作业i所需的时间分别为ai和bi,1≤i≤n。
流⽔作业⾼度问题要求确定这n个作业的最优加⼯顺序,使得从第⼀个作业在机器M1上开始加⼯,到最后⼀个作业在机器M2上加⼯完成所需的时间最少。
⼆、算法思路直观上,⼀个最优调度应使机器M1没有空闲时间,且机器M2的空闲时间最少。
在⼀般情况下,机器M2上会有机器空闲和作业积压2种情况。
最优调度应该是:1. 使M1上的加⼯是⽆间断的。
即M1上的加⼯时间是所有ai之和,但M2上不⼀定是bi之和。
2. 使作业在两台机器上的加⼯次序是完全相同的。
则得结论:仅需考虑在两台机上加⼯次序完全相同的调度。
设全部作业的集合为N={1,2,…,n}。
S是N的作业⼦集。
在⼀般情况下,机器M1开始加⼯S中作业时,机器M2还在加⼯其他作业,要等时间t后才可利⽤。
将这种情况下完成S中作业所需的最短时间记为T(S,t)。
流⽔作业调度问题的最优值为T(N,0)。
这个T(S,t)该如何理解?举个例⼦就好搞了(⽤ipad pencil写的...没贴类纸膜,太滑,凑合看吧)1、最优⼦结构T(N,0)=min{ai + T(N-{i}, bi)}, i∈N。
ai:选⼀个作业i先加⼯,在M1的加⼯时间。
T(N-{i},bi}:剩下的作业要等bi时间后才能在M2上加⼯。
注意这⾥函数的定义,因为⼀开始⼯作i是随机取的,M1加⼯完了ai之后,要开始加⼯bi了,这⾥M1是空闲的可以开始加⼯剩下的N-i个作业了,但此时M2开始加⼯bi,所以要等bi时间之后才能重新利⽤,对应到上⾯函数T(s,t)的定义的话,这⾥就应该表⽰成T(N-{i},bi), 所以最优解可表⽰为T(N,0)=min{ai + T(N-{i}, bi)}, i∈N,即我们要枚举所有的⼯作i,使这个式⼦取到最⼩值。
遗传算法在车间流水作业调度中的应用

App i a i n o o s p s h du i g ba e n g ne i l o ih lc to ff w ho c e ln s d o e tc a g rt m l
H a i g E F - a ,WA G Migh n ,T N i a jn N n —o g A G Y— n f
( o ̄ eo ca i l n i en ,Sa g a n e i o E gnen cne hn h i 0 60 C ia Clg fMehnc gn r g hn h i i m@ f n ier gSi c,Sa g a 12, hn ) aE e i Uv i e 2
Ab t a t h p s h d l g i a mp r n ed i o s o n f cu e n e p s . F r te p o l m o h a all s r c :S o c e u i s n i o t tf l n f w h p ma u a tr s e tr r e o h r b e ft e p rl n a i l i e mu t ma h n lw s o c e u ig a d t ee H n s n r i e so c i e s h d i g ou in meh d w t n mu o l — c ie f h p s h d l n h a i e s a d t dn s f i o n a ma h B c e u n ,as l t t o ih mi i m f l o
有任务安排到设备上 的一 种方案 , 主要探讨在 满足加工 约束
条件 的前提下 , 如何安排各车 间作业 的加工资 源和加工先后 顺序 , 得产 品的制造时间尽量短 , 使 耗用成本尽量低。通常由 于生产运行管理 系统 十分复杂 , 约束数 目很 大, 使得生产调度
作业车间调度问题的几种模型

作业车间调度问题是指如何合理地安排工件在不同工序间的加工顺序,以达到最优的生产效率和成本控制。
针对这一主题,我将从几种常见的模型出发,深入探讨作业车间调度问题,旨在为您提供一篇有价值的文章。
一、传统作业车间调度模型1.1 单机调度模型在单机调度模型中,工件依次经过一个加工机器的加工过程。
我们需要考虑如何安排加工顺序、加工时间等因素,以最大程度地减少工件的等待时间和加工时间,提高生产效率。
1.2 流水车间调度模型流水车间调度模型是指在多台加工机器之间,工件按照特定的加工顺序依次进行加工。
我们需要考虑如何合理安排工件的加工顺序,以减少生产中的瓶颈和待机时间,提高整个流水线的生产效率。
1.3 作业车间调度的经典排序问题这种模型主要关注如何将待加工的工件按照特定的规则进行排序,以便在加工过程中最大程度地降低总加工时间和成本。
以上是传统作业车间调度问题的一些经典模型,它们都是针对不同的生产场景和加工流程所提出的解决方案。
接下来,我将对每种模型进行更深入的探讨,以便更好地理解作业车间调度问题。
二、作业车间调度问题的多种解决方法2.1 基于启发式算法的调度方法启发式算法是一种基于经验和规则的算法,它能够快速、高效地求解作业车间调度问题。
常见的启发式算法包括遗传算法、模拟退火算法等,它们能够在短时间内找到较优的解,并且适用于各种不同规模和复杂度的生产场景。
2.2 基于数学规划的调度方法数学规划方法是指利用数学建模和优化理论,对作业车间调度问题进行严格的数学求解。
通过建立数学模型,我们可以利用线性规划、整数规划等方法,对作业车间调度问题进行最优化求解,得到最优的生产调度方案。
2.3 基于仿真的调度方法仿真方法是指利用计算机模拟生产场景,通过模拟实际的生产过程,找到最优的调度方案。
通过仿真,我们可以更加真实地模拟生产现场的情况,找到最优的生产调度策略,提高生产效率和降低成本。
以上是作业车间调度问题的多种解决方法,它们都能够根据不同的生产场景和需求,找到最优的调度方案。
流水作业调度问题———Johnson算法

流⽔作业调度问题———Johnson算法问题描述:N个作业1,2,…,n要在由2台机器A和B组成的流⽔线上完成加⼯。
每个作业加⼯的顺序都是先在A上加⼯,然后在B上加⼯。
A和B加⼯作业i所需的时间分别为a[i]和b[i]。
你可以安排每个作业的执⾏顺序,使得从第⼀个作业在机器A上开始加⼯,到最后⼀个作业在机器B上加⼯完成所需的时间最少。
求这个最少的时间。
⼤概思路:求⼀个加⼯顺序使得加⼯时间最短,就是让机器空闲时间最短,当A开始⼯作便会⼀直运作,关键是B会等待A,很明显A加⼯第⼀个作业时B得等待,同理B加⼯最后⼀个作业A 得等待Johnson算法此算法是⼀种贪⼼策略:把在A机器上加⼯最快的作业先加⼯,把B机器上加⼯最快的作业放在最后具体实现:设M i=min{a i,b i}将数组M由⼩到⼤排序,然后从第⼀个开始处理,若M i=a i则按顺序排在作业加⼯顺序的前⾯,若M i=b i则按顺序排在后⾯最后排出来的顺序就是最优解算法证明设S={J1,J2,J3····J n}为待加⼯作业排序,T(S,t)为A开始加⼯S中作业,B需t时刻后才能加⼯A加⼯完的作业,这种情况下加⼯完S中作业所需最⼩的时间T(S,t)=min{a i+T(S−{J i},b i+max{t−a i,0})}, J i∈S假设最佳⽅案是先加⼯J i,然后加⼯J j,则有T(S,t)=a i+T(S−{J i},b i+max{t−a i,0})=a i+a j+T(S−{J i,J j},b i+bj+T ij)T ij=b j+max{b i+max{t−a i,0}−a j,0},0}=b i+b j−a i−a j+max{t,a i,a i+a j−b i}若J i和J j调换顺序则:T′(S,t)=a i+a j+T(S−{J i,J j},T ji)T ji=b i+b j−a i−a j+max{t,a j,a i+a j−b j}所以T(S,t)<=T′(S,t),所以有max{t,a i,a i+a j−b i}<=max{t,a j,a i+a j−b j}a i+a j+max{−b i,−a j}<=a i+a j+max{−b j,−a i}(其实2步转化我不太清楚,只是意会了⼀下,如有理解的⿇烦告诉我,感谢)即min{b j,a i}<=min{b i,a j}也就是说J i在J j之前加⼯最优得满⾜上式条件,则a i<=b i,a j或者b j<=b i,a j即在A机器上加⼯时间短的任务优先,⽽在B机器上加⼯时间短的排在后⾯,与具体实现的步骤相符Processing math: 100%。
0018算法笔记__[动态规划]流水作业调度问题及Johnson法则
![0018算法笔记__[动态规划]流水作业调度问题及Johnson法则](https://img.taocdn.com/s3/m/3d7c9d4b1ed9ad51f01df27d.png)
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个作业的最优调度问题,利用其子结构性质,对集合中的每一个作业进行试调度,在所有的试调度中,取其中加工时间最短的作业做为选择方案。
C++程序 流水作业调度

其中, t ji t[ j,2] t[i,2] t[ j,1] t[i,1] max{t , t[i,1] t[ j,1] t[ j,2], t[ j,1]} 当作业 i 和 j 满足 Johnson 不等式 min{t[i,2], t[ j,1]} min{t[ j,2], t[i,1]} 时,我 们有 max{t[i,2],t[ j,1]} max{t[ j,2],t[i,1]} 从而, t[i,1] t[ j,1] max{t[i,2],t[i,1]} t[i,1] t[ j,1] max{t[ j,2],t[i,1]} 由此可得, max{t[i,1] t[ j,1] t[i,2], t[i,1]} max{t[i,1] t[ j,1] t[ j,2], t[i,1]} 因此任意 t 有
4. 算法的描述
从上面的分析可知,流水作业调度问题一定存在满足 Johnson 法则的最 优调度,且容易由下面的算法确定。 流水作业调度问题的 Johnson 算法: (1) 令 N1 {i | t[i,1] t[i,2]}, N2 {i | t[i,1] t[i,2]} ; (2) 将 N1 中作业依 t[i,1] 的非减序排列; 将 N 2 中作业依 t[i,2] 的非增序排列; (3) N1 作业接 N 2 种作业构成满足 Johnson 法则的最优调度。 具体的代码在文件夹《流水作业调度——动态规划法》文件夹中。 三、 时空效率分析 算法 FlowJob 的主要计算时间花在对作业集的排序上。在这里,我们 使用冒泡排序法(BubbleSort),因此,在最坏情况下算法 FlowJob 所需要 的计算时间为 O(n log n) 。所需要的空闲显然是 O(n) 。
流水作业法

流水作业法与其它生产方法的比较
与传统生产方法的比较
与传统生产方法相比,流水作业法具有更 高的生产效率、更低的成本和更好的质量 保障。传统生产方法通常需要人工进行操 作,而流水作业法则可以通过自动化设备 进行操作,从而减少了人工干预。此外, 流水作业法还可以通过优化流程来提高生 产效率和质量。
VS
与精益生产的比较
总结词
大规模定制、个性化生产、高效率
详细描述
该服装制造企业采用流水作业法,通过构建大规模定制的生产线和优化生产流程,实现了个性化生产 和高效的生产。该企业通过流水作业法成功地满足了消费者的多样化需求,提高了生产效率和产品质 量,并实现了低成本大规模定制化生产。
某机械制造企业的流水作业法应用案例
要点一
2023
《流水作业法》
contents
目录
• 流水作业法概述 • 流水作业法的基本原理 • 流水作业法的应用范围与条件 • 流水作业法的组织形式与设计 • 流水作业法的实施与控制 • 流水作业法的案例分析
01
流水作业法概述
定义与特点
01
02
定义:流水作业法是一 种生产组织形式。它将 生产过程划分为若干个 操作阶段。按照一定的 顺序和时间间隔。依次 从一个阶段转移到下一 个阶段。每个阶段都有 专门的人员负责
保生产计划的顺利实施。
03
流水作业法的应用范围与条件
流水作业法的应用范围
制造业
在制造业中,流水作业法被广泛应用于装配、制造、加工等流程中,可以高效地生产出大 量标准化的产品。例如,汽车制造、电子产品组装等。
服务业
在服务业中,流水作业法也可以被应用于业务流程的优化,例如,客户服务中心、银行等 。通过流水作业法,可以有效地提高工作效率,减少工作积压。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
流水作业调度一、 可行性分析与项目开发计划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.由流水作业调度问题具有最优子结构性质可知,)}},{(m in{)0,(i i b i N T a N T =+= 1<=i<=n推广到一般情况下,})}0,max {},{({),(i a t b i S T a t S T i i -+-+= S i ∈式子中,}0,max {i a t -这一项是由于在机器M2上,作业i 必须在},max {i a t 时间之后才能开工,因此,在机器M1上完成作业加工i 之后,在机器还需要}0,m ax {},m ax {i i i i i a t b a a t b -+=-+时间完成对作业i 的加工。
按照上述递归式,可以设计出流水作业调度问题的动态规划算法,但是算法还可以进一步简化。
设π是作业集S 在机器M2的等待时间为t 时的任一最优调度。
若在这个调度中,安排在最前面的两个作业分别是i 和j ,记j i ==)2(,)1(ππ,由动态规划递归式可得:}},,{{})0,m ax {},{(),(ij j i i i i t j i S T a a a t b i S T a t S T -++=-+-+=其中},,max{}0,,max{}},0},0,max{max{}0,}0,max{max{i i j i i j i j i j i j i j i j i j i j j i i j ij a b a a t a a b b b a a t a b b b a a t a b b a a t b b t -++--+=--+-+=--+-+=--++=如果作业i 和作业j 满足},min{},min{i j j i a b a b >=,则称作业i 和作业j 满足Johnson 不等式。
如果作业i 和作业j 不满足Johnson 不等式,则交换作业i 和作业j 的加工顺序后,作业i 和作业j 满足Johnson 不等式,而且不增加加工时间。
因此,任意两个满足Johnson 法则的调度具有相同的加工时间,从而所有满足Johnson 法则的调度均为最优调度,流水作业调度问题转化为求解满足Johnson 法则的调度问题。
流水作业调度的Johnson 算法:(1)令N1={i|i i b a <},N2={i|i i b a >=};(2)将N1中的作业按照i a 的非减序排序,将N2中的作业按照i b 的非增序排序;(3)N1中作业接N2中作业构成满足 Johnson 法则的最优调度。
1、为了实现上述算法,需要采用顺序表的抽象数据类型ADT Sqlist{数据对象D :D 是具有相同特征的数据元素的集合。
各数据元素均含有类型相同、可以唯一标识数据元素的关键字数据关系R :数据元素同属于一个集合。
基本操作:sort(&L, n)初始条件:顺序表L 存在操作结果:对顺序表L 中的内容按关键字大小进行由小到大的排序Flowshop(n, a, b, c)初始条件:数组a.、b 存在并且不为空,大小为n操作结果:执行Johnson 算法,并且返回最优调度的时间长度,在数组c 中存放最优调度安排}ADT Sqlist2、本项目主要有以下几个模块:(1)输入需要调度作业的模块:输入作业的个数,以及在每个作业在机器M1和机器M2上需要加工的时间。
(2)排序模块:对一个顺序表按照关键字由小到大进行排序(3)执行Johnson 算法模块:对N 个作业调用Johnson 算法确定最优调度和最优调度下总的调度时间。
(4)输出最优调度方案的模块:输出最优调度安排方式和最优调度所用的时间。
整体架构如下main{初始化{Johnson算法}显示结果}四、详细设计五、1、数据结构的设计:为了实现Johnson算法,本项目采用以下的数据结构:typedef struct{int key,index;bool job;}Jobtype;typedef struct{Jobtype r[MAXSIZE];int length;}Sjob;ey>[j].key){t=[i];[i]=[j];[j]=t;}}/*执行Johnson算法确定最优调度*/ int Flowshop(int n,int a[],int b[],int c[]) {int i;Sjob d;for(i=0;i<n;i++){[i].key=a[i]>b[i]b[i]:a[i];[i].job=a[i]<=b[i];[i].index=i;}sort(d,n);int j=0,k=n-1;for(i=0;i<n;i++){if[i].job)c[j++]=[i].index;else c[k--]=[i].index;}j=a[c[0]];k=j+b[c[0]];for(i=1;i<n;i++){j+=a[c[i]];k=j<kk+b[c[i]]:j+b[c[i]];}return k;}函数调用关系:六、编码#include ""#define MAXSIZE 1000 typedef struct{int key,index;bool job;}Jobtype;typedef struct{Jobtype r[MAXSIZE];int length;}Sjob;ey>[j].key){t=[i];[i]=[j];[j]=t;}}int Flowshop(int n,int a[],int b[],int c[]) {int i;Sjob d;for(i=0;i<n;i++){[i].key=a[i]>b[i]b[i]:a[i];[i].job=a[i]<=b[i];[i].index=i;}sort(d,n);int j=0,k=n-1;for(i=0;i<n;i++){if[i].job)c[j++]=[i].index;else c[k--]=[i].index;}j=a[c[0]];k=j+b[c[0]];for(i=1;i<n;i++){j+=a[c[i]];k=j<kk+b[c[i]]:j+b[c[i]];}return k;}void main(){int n,i;int a[MAXSIZE],b[MAXSIZE],c[MAXSIZE];printf("流水线中的作业个数是:");scanf("%d",&n);printf("第一个的加工时间是:");for(i=0;i<n;i++)scanf("%d,",&a[i]);printf("第二个的加工时间是:");for(i=0;i<n;i++)scanf("%d,",&b[i]);int m=Flowshop(n,a,b,c);for(i=0;i<n;++i)printf("%d ",c[i]);printf("\n");printf("最短加工完成时间是%d\n",m); }七、测试在运行dos窗口下输入命令,这次测试输入4个作业,得出了如下结果:进行一组测试,得出了如下结果:若按照Johnson算法手工做题,可知知道N1={0,2,3},N2={1};最优调度是0,2,3,1计算的最优调度时间是38再次进行一组测试,这次再次测试4个作业的情况,在N1和N2中各有两个作业的情况。
得到了如下结果:如按照手工计算,可知N1={1,3},N2={0,2},排序后的最优调度是3,1,2,0,和程序结果一致,而且最优调度时间也是45再次进行一次较为合理的测试:若出现两个作业的加工时间一样,这次作业的个数是6个,作业1和作业5在两个机器上的加工时间是一样的得到如下的结果:最终的作业安排是4 0 2 3 5 1,作业5安排在了作业1的前面,这可能是由于排序算法的问题,最短加工处理时间是57测试结果也是正确的。
八、 维护由于在Johnson 算法中调用的排序算法是简单的选择排序,其时间的复杂度是)(2n O ,是一个比较高的数量级了,所以可以考虑采用其他的排序算法以提高其执行效率,如采用快速排序算法其时间复杂度明显减少,在此算法中执行效率是比较高的。