生产调度问题及其优化算法.docx
《生产调度问题及其优化算法.docx》由会员分享,可在线阅读,更多相关《生产调度问题及其优化算法.docx(23页珍藏版)》请在冰豆网上搜索。
生产调度问题及其优化算法
生产调度问题及其优化算法
<采用遗传算法与MATLAB编程)
信息014孙卓明
二零零三年八月十四日
生产调度问题及其优化算法
背景及摘要
这是一个典型的Job-
Shop动态排序问题。
目前调度问题的理论研究成果主要集中在以Job
Shop冋题为代表的基于最小化完工时间的调度冋题上。
一个复杂的制造系统不仅可能涉及到成千上万道车间调度工序,而且工序的变更又可能导致相当大的调度规模。
解空间容量巨大,N个工件、M台机器的问题包含凹种排列。
因为问题的连环嵌套性,使得用图解方法也变得不切实际。
传统的运筹学方法,即便在单目标优化的静态调度问题中也难以有效应用。
本文给出三个模型。
首先通过贪婪法手工求得本问题最优解,既而通过编解码程序随机模拟优化方案得出最优解。
最后采用现代进化算法中有代表性发展优势的遗传算法。
文章有针对性地选取遗传算法关键环节的适宜方法,采用MATLAB^件实现算法模拟,得出优化方案,并与计算机随机模拟结果加以比较显示出遗传算法之优化效果。
对车间调度系列冋题的有效解决具有一定参考和借鉴价值。
一•问题重述
某重型机械厂产品都是单件性的,其中有一车间共有A,B,C,D四种不同设备,现接受6件产品的加工任务,每件产品接受的程序在指定的设备上加工,其工序与加工周期如下表:
<S-设备号、T-周期)
工序
产品
1
2
3
4
5
6
7
8
S
T
S
T
S
T
S
T
S
T
S
T
S
T
S
T
1
C
8
A
2
B
4
C1
24
rd1
6
2
A
4
D
5
B
3
C
4
3
C
3
D
7
A
15
B1
20
:
A:
8
4
B
7
C
6
D
21
A
1
D
16
C
3
5
D
10
B
4
C
8
D
4
:
A:
12
C:
6
D
1
6
A
1
B
4
A
7
C
3
D
5
A
2
C
5
A
8
(表一>
条件:
1、每件产品必须按规定的工序加工,不得颠倒;
2每台设备在同一时间只能担任一项任务。
<每件产品的每个工序为一个任务)
问题:
做出生产安排,希望在尽可能短的时间里,完成所接受的全部任务。
要求:
给出每台设备承担任务的时间表。
注:
在上面,机器AB,C,D即为机器1,2,3,4,程序中以数字1,2,3,4表示,说明时则用A,B,C,D
二•模型假设
1•每一时刻,每台机器只能加工一个工件,且每个工件只能被一台机器所加工,同时加工过程为不间断;
2•所有机器均同时开工,且工件从机器I到机器J的转移过程时间损耗不计;
3•各工件必须按工艺路线以指定的次序在机器上加工多次;
4•操作允许等待,即前一操作未完成,则后面的操作需要等待,可用资源有限。
三•符号说明及初始数据表达分析
凶-
-
S-IrJ-匡-
第i个工件<i=1…6)
机器顺序阵二一表示i工件的第j个操作的机器号
第j台机器<j=1…4)
工件排列阵上|[表示i机器上第j次加工的工件号
加工时间阵—I为i工件的第j个操作的时间周期
-整个任务完成时间
整理数据后得到:
工=[CABCD000]~[ADBC0000]
[CDABA000]
[BCDADC00]
[DBCDACD0]
[ABACDACA]
t=[824246000][45340000]
[3715208000]
[7621116300]
[1048412610]
[14735258]
上述二阵直接从题目得岀,而丨则是我们要求的
关于工件的加工时间表:
(表二>
产品/工件<i):
1
2
3
4
5
6
总计
-总净加工时间<周期)
44
16
53
54
45
35
247
凶加工工序总数<个)
5
4
5
6
7
8
35
关于机器的加工时间表:
(表三>
机器/设备(j>:
A
B
C
D
总计
因总净加工时间
60
42
70
75
247
M加工操作次数
10
6
10
9
35
分析:
因为各产品总净加工时间和各机器总净加工时间之中最大值为75,而总计为247,
那么总时间C介于[75,247]。
同时各工件加工繁杂程度不一,各机器的任务量也有轻重之别。
合理的调度排序是对于节省时间和资源是必要的。
希望最优化答案是75,这样达到最小值,如果答案是75,那么意味着机器D不间断
工作,直至全部加工任务完成。
四•贪婪法快速求解
如果按照一定规则排序,当多个工件出现“抢占”同一机器的局面的时候我们可以制定如下的工序安排规则:
1.优先选择总剩余时间或总剩余操作较多的工件。
<如果出现总剩余加工时间
多者总剩余操作数反而较少的情况时,按照程度具体情况具体分析)。
2.机器方面来说,尽量避免等待空闲时间,优先考虑剩余净加工时间或者剩余
加工总次数较多的机器,尤其是机器D,即倘若能够使机器□不间断工作且其他机器完工时间均不多余75时,那么就可以得到最优解。
首先按照最优化时间为75的设想避免D出现等待,排序后得到升以下具体排列顺序。
各机器承担任务表为(其中粗体字为对应工件产品号,括号内为对应时间周期段>:
操作1
操作2
操作3
操作4
操作5
操作6
操作7
操作8
操作9
操作10
A
6
2
1
6
3
4
5
6
3
6丁
(1>
(2-5>
(12-13>
(14-20>
(21-35>
(36>
(43-54>
(55-56>
(57-64>
(66-73>
B
4
6
5
1
3
2「
(1-7>
(8-11>
(12-15>
(16-19>
(36-55>
(56-58>J
C
3
1
4
5
6
1:
5
6:
2:
4:
(1-3>
(4-11>
(12-17>
(18-25>
(26-28>
(29-52>
(55-60>
(61-65>
(66-69>
(70-72>
D
5
3
4
5
6
2
4
1
5
(1-10>
(11-17>
(18-38>
(39-42>
(43-47>
(48-52>
(53-68>
(69-74>
(75>
(表四>
(图一>
上图为加工周期图<甘特图),标注数字为相应操作的周期,完工时间为第75周期
五•计算机随机模拟<编程)
1.编码:
随机产生生产的工序操作优先顺序,进行编码,如:
K=[4356623
14
1635453664155132622441566
5]<注:
同时作为下文的染色体之用)意思为:
工件4优先被考虑进行第一次操作,然后3进行其第一步操作,然后5操作,6操作,再6操作其第二步工序,依次进行。
如果前后互相不冲突,则可同时在不同机器上操作。
通过排列组合得出,总共有类似K的排列序列2厂I多种!
当然,这其中只对应解[75,247],意味着有大量排列序列对应同一加工方案,而大量加工方案又对应同一时间解。
2.解码:
即对编码进行翻译,产生具体可操作工序安排方案,这里采用活动化解码
算法。
例如工件2第i步操作<记为而<2,i),且在机器A上进行)被安排在工件3第j步操作<记为JM<3,j))后面进行,那么如果安排好回<3,j)后,只要回<2,i)在工件2已经排序好的操作之后进行,那么操作因<2,i)可插入到机器A处最前可安置的时间段进行。
在这里,一个编码序列对应一个加工方案,而一个加工方案可对应一个或多个编码序列,这就是二者之关系。
3.编程:
通过一组随机编码产生一生产加工优先序列,通过解码过程产生相应加工方案及其总耗费时间C.
N次模拟后即可得出解C的概率密度分布情况以及相对最优解<N个C的最小值,如80,77等,甚至出现75)。
4.计算机模拟所得数据分析
a.进行100次模拟得出最优解情况:
(共运行10次>
82,83,82,84,78,80,81,83,87,82平均值82.2,每回耗时约3秒
b.进行1000次模拟得出最优解情况:
(共运行10次>
80,79,78,78,79,79,76,80,77,78平均值78.4,每回耗时25秒
c.进行10000次模拟得出最优解情况:
(共运行10次>
76,77,77,75,76,76,77,76,76,77平均值76.3,每回耗时4分钟
d.模拟1000000次得到的解C的概率密度分布情况为:
<如图二所示)
(图二>
<注:
75处为17次<概率为17/1000000=1/58823),76处为40次,77处167次)
结论:
如果想将24中排序序列以平均出现一次的可能性进行模拟,
即运行2匕I次,计算机需运行将近150万亿年!
当然,我们没有这个必要,因为我们只需要运行数万次,就很可能得到最优解75,<在随机
模拟1000000次后出现仃次75,那么意味着概率大约17/1000000=1/58823,另外76处为40次,77处167次)。
六•遗传算法模型建立和步骤解法
遗传算法<Genetic
Algorithm)作为一种优化算法特别适合于对象模型难于建立、搜索空间非常庞大的复杂问题的优化求解。
它和模糊控制技术一样,虽然在理论上还没有完善,但是在实践中已经得到了广泛的应用。
遗传算法的基本思想是:
模仿生物系统适者生成"的原理,通过选择、复制、交叉、变异等简单操作的多次重复来达到去劣存优的目的,从而获得问题的优化结果。
遗传算法的实现由两个部分组成,一是编码与解码,二是遗传操作。
其中遗传操作又包括选择、复制、交叉、变异等步骤。
本文根据实际情况采取了1-6整数编码。
数字1,2,3,4,5,6分别代表6件待加工产品。
本文遗传算法基本流程:
通过编码,解码程序随机产生N个<有一定数量,如50或100)个体构成初始种群
a)从初始中群中选取2个具有最优染色体<最有排序方案)的个体作为临时个体<父
代);
b)如果此2个体中有一个个体通过解码操作能够实现最优排序<即使总时间为75周
期),那么结束此算法,得到最优解;
c)对2个临时个体以一定方式(循环交叉>执行染色体交叉变换和变异选择<小概率,互换
操作),产生2个新的个体;
d)对父代和子代共4个个体进行选择,从中选出最佳的2个个体,做为下一代的父代;
e)重复执行第二步(b>操作;
f)如果执行完M步后仍然未得出答案75,那么将目前的最优解作为本算法的最优解答案。
1.编码和解码<同上)
2.交叉变换(crossover〉
对2个父代临时个体进行染色体交叉变换,采用循环交叉方法vCyclecrossover
CX,如父代染色体为:
X:
[926473581]和Y:
[345816729],如果
随机选到第二位开始交叉,那么X的2对应Y的4,X的4对应Y的8,X的8对应Y
的2,这样就确定了以上为不变的染色体,其余位置的染色体互换位置,最后得到
-J:
[325416789],:
[946873521],实现交叉变换。
3.变异选择vmutation)
采用互换操作<SWAp,,即随机交换染色体中两不同基因的位置。
如上面的染色体为:
II:
[325416789]。
随机产生变换位置号,如产生随机数3和5,那么交换
数字后得到染色体:
[321456789],变异概率取0.1。
4.选择操作<selection:
对父代2个体f1,f2和子代2个体f3,f4进行选择,通过编码操作确定具有最优解的2个
个体,成为新一代f1和f2。
如此,通过多次编码和解码随机产生一定数量的个体,选取2个最佳个体进行交叉变
换操作,产生2个新个体,然后对4个个体进行选择,产生下一代,如果某时刻通过解码操作得出最优解<所有解的下限,这里是75周期),那么算法结束,否则循环进行,直至
预先给定的循环次数达到为止,以最后得到的最优解作为最终最优解。
七.遗传算法模拟<采用MATLA工具编程)
主程序如下:
<子程序见略)
%本程序为主程序,调用以下各分支程序
task='Welcome!
Waitamoment
please!
---
Writer:
f1=zeros(1,35>。
f2=zeros(1,3
5>。
whilef1==f2。
%
[minminmax1,s1]=chushijie
(N>。
%
f1=s1。
minminmax1,
%
[minminmax2,s2]=chushijie
(N>。
%
f2=s2。
minminmax2,
%
end。
fore=1:
M
%e=1:
M
[D]=jiaocha(f1,f2>。
%
f1。
f2。
“染色体”无需变动部分
基因
[f3,f4]=jiaocha_bianyi(f1,f2,D>
=%
f3。
f4。
[f1,f2]=xuanze(f1,f2,f3,f4>
。
%
f1。
f2。
孙卓明,信息014',
此步避免初始染色体f1,f2相同,导致以下死循环
种群初始化;基于操作的编码策略;活动化解码算法。
chushijie(N>参数N为初始种群数
选取的第一个初始个体
再次种群初始化
选取的第二个初始个体
进行M次遗传操作<交叉-变异-选择>
交叉变化<循环交叉操作,cyclecrossoverCX),选取
生成交叉后的“染色体”,并进行变异选择
选择:
对父代f1,f2和子代f3,f4进行解码,得出2个较优个体,成为下一代的父代
[minmaxf1,a1,b1]=tongbujinzhan(f1>。
%求该时刻个体f1的最优时间(因为f1优于f2>
ifminmaxf1==75。
f1,a1,b1,minminmax1,minminmax2,minminmax_last=minmaxf1,
task='Finish!
Successful!
Bestanswer!
Congratulation!
',return。
end。
end。
f1,a1,b1,minminmax1,minminmax2,minminmax_last=minmaxf1,
ifminminmax_last>=90。
task='Finish!
Actionagainplease!
',end。
ifminminmax_last>=80&&minminmax_last<90。
task='Finish!
',end。
ifminminmax_last<80。
task='Finish!
Successful!
',end。
八•遗传算法模拟结果
首先给出最优方案:
在进行某次n=100,m=200的操作后得到模拟最优结果75周期时间:
minminmax1=83minminmax2=78*二个初始较优个体解)
f1=[45663136456132545315264564664322511]
a1=535:
39
64
0
0
0
0
0为四台机器空闲周期段)
15240
0
0
0
0
0
0
175365
0
0
0
0
0
0
0000
0
0
0
0
0
b1=1138
42
65
0
0
0
0
0
20350
0
0
0
0
0
0
185468
0
0
0
0
0
0
0000
0
0
0
0
0
minminmax
=75
<
最终最优解)
其中机器A空闲时间段为:
5-11,35-38,39-42,64-65。
机器B则为:
15-20,24-
35。
机器C为:
17-18,53-54,65-68。
机器D无空闲。
以下为:
取不同N和M值情况下数据优化过程以及时间上的比较:
(表五>
N
N
M
第次运仃
第二次运行
第三次运行
第四次运行
第五次运行
平均运行时间
1
1:
1
104-114-98
P98-105-93
92-93-92:
100-132-95
86-86-84
/
1
1
10
106-97-86
108-100-89
102-87-87
99-90-90
88-104-84
/
1
1
100
94-81-81
81-102-78
91-105-91
101-84-80
90-101-90
/
1
1
1000
107-100-78
92-101-76
101-100-82
88-97-86
91-93-87
8.5(s>
1
1
10000
88-105-77
103-81-77
89-99-84
107-104-78
93-105-78
80(s>
10
10
10
90-108-90
104-91-83
104-100-93
95-98-87
105-106-87
/
10
10
100
98-96-96
93-99-90
88-90-80
105-92-80
91-95-85
/
10
10
1000
101-96-78
91-89-80
96-104-87
105-105-84
88-99-78
9.5(s>
10
10
10000
99-92-77
97-95-75
96-104-76
89-99-76
91-101-75
90(s>
100
100
100
95-100-86
98-90-80
104-99-78
93-88-81
92-99-80
/
100
100
1000
109-98-85
91-100-82
100-99-77
114-101-84
96-110-76
11(s>
100
100
10000
96-101-78
101-86-76
101-97-80
99-110-76
99-111-77
100(s>
说明:
以最后一行第一次运行“96-101-78”为例,96和101分别为2次N取
100时得到的100*2个随机解中的最优解,78为经过M=10000代的遗传(交叉变异选择>后得到的最终最优解。
明显地发现:
M的增大所产生的优化效果明显好于N增大产生的优化效果
M从1-10-100-1000-10000的变化使最优解有从9*--8*--7*的变化规律,
N的1-10-100的变化则不明显。
因此相对于随机取解,经过遗传算法优化之后效果是显著的另外对采用遗传算法前后模拟所得数据进行比较:
第一次
第二次
第三次
第四次
第五次
均值
平均时间
N=1000,M=0
78
79
81
80「
79
25(S>
79.4
N=1,N=1,M=1000
80
75
77
76
82
78.0
P8.5(S>:
(表六>
由上表看来,虽然在均值方面相差不显著,但是时间上采用遗传算法之后节约了约三分之二的运行时间,效率显而易见。
九•模型优缺点及改进
模型优点,采用遗传算法可对一个理论上无法求尽的NP问题以较有效
方法在较短时间内得到较精确解。
缺点,采用遗传算法还不全面,只是一个简单模型,未考虑收敛性,适
配值等,对参数设置与最优解关系研究还不够深入。
模型本身还具有漏动,仍需改进,较好设想为采用和模拟退火算法的混合遗传算法,因为时间紧迫,在此就不再深入给出模型及分析了。
[参考文献]:
1•车间调度与遗传算法王凌清华大学出版社
2•数值计算的算法与分析张可村赵英良科学出版社
3.PermutationBasedGAsandOrderedGreedPeterG.Anderson,
4.MATLAB6.0与科学计算王沫然电子工业出版社
5.C程序设计<第二版)潭浩强清华大学出版社
信息014孙卓明
2003年8月14日
本文网上下载地址(个人主页>:
子程序一:
(种群初始化,得较优个
体>
function[minminmax,ss]=chushijie(n>
%种群初始化,以下为编码和解码过程,同时对n次选取最优化个体
Jm=[31234000。
14230000。
34
121000。
23414300。
423413
40。
12134131]。
minminmax=200。
ford=1:
n。
s=0。
%编码程序:
基于操作的编码策略
k=1。
fort=1:
35。
I=randint(1,1,[1,6]>。
whileJm(I,1>==0。
I=randint(1,1,[1,6]>。
end。
s(k>=lo
k=k+1o
X=1o
whilex<=7。
Jm(l,x>=Jm(l,x+1>o
x=x+1o
endo
Jm(I,8>=0o
endo
Jm=[31234000o14230000o34
121000o23414300o423413
40o12