基于遗传算法的车间调度算法.doc
《基于遗传算法的车间调度算法.doc》由会员分享,可在线阅读,更多相关《基于遗传算法的车间调度算法.doc(7页珍藏版)》请在冰点文库上搜索。
得分:
_______
南京林业大学
研究生课程论文
2011~2012学年第一学期
课程号:
73327
课程名称:
Matlab语言
论文题目:
基于遗传算法的车间调度算法
学科专业:
交通运输工程
学号:
8113102
姓名:
闫盖
任课教师:
王一雄
二○一一年十二月
基于遗传算法的车间调度算法
【摘要】车间调度问题具有建模复杂性、计算复杂性、动态多约束、多目标性等特点。
近几年,各种演化计算方法逐渐被引入到生产调度中,特别是遗传算法的应用。
本文主要介绍了企业车间调度问题的遗传算法实现,通过Matlab实现对遗传算法的编程,其仿真调度结果验证了遗传算法用于求解车间调度问题的可行性和有效性。
【关键词】遗传算法车间调度Matlab
Flow-Shopschedulingbasedongeneticalgorithm
Abstract:
TheFlow-Shopschedulingproblemhasthepropertyofmodelingcomplexity,computationalcomplexity,dynamicmulti-constraintandmulti-targeted.Inrecentyearsavarietyofevolutionarycomputationmethods,inparticular,theapplicationofgeneticalgorithmshasbeengraduallyintroducedintotheproductionschedulingproblem.ThispaperputsforwardamethodtodesignFlow-Shopbyusinggeneticalgorithm.ProgramaboutgeneticalgorithmdesignsbyusingMatlab,SimulationresultsofourexperimentshowthefeasibilityandeffectivenessofgeneticalgorithmforsolvingFlow-Shopscheduling.
Keywords:
GeneticalgorithmFlow-ShopschedulingMatlab
引言
生产调度对企业的生产作业过程具有重要的作用。
有效的调度方法和优化技术是实现先进制造和提高生产效益的基础和关键。
研究和解决好调度问题,能极大提高企业的生产效率,从而提高这些企业的竞争力。
自从1954年Johnson发表第一篇关于流水车间调度问题的文章以来,流水车间调度问题引起了许多学者的关注,提出了许多解决的方法。
其中,以遗传算法、模拟退火、禁忌搜索以及人工神经网络为代表的智能化优化技术迅速发展,用来解决流水车间调度问题,受到人们的普遍关注。
遗传算法以其优良的计算性能和显著的应用效果而特别引人注目,很多启发式混合方法都是在此基础上发展起来的。
本文采用遗传算法进行求解。
1车间调度问题描述
车间调度是指根据产品制造的合理需求分配加工车间顺序,从而达到合理利用产品制造资源,提高企业经济效益的目的。
车间调度问题从数学上可以描述为有n个代加工的零件在m台机器上加工,车间调度的数学模型如下:
(1)机器集,表示第j台机器,j=1,2,…,m。
(2)零件集,表示第i个零件,i=1,2,…,n。
(3)工序序列集,表示零件加工工序序列。
(4)可选机器集,表示零件加工工序j可以选择的加工机器。
(5)使用机器加工零件的时间矩阵T,,表示第i个零件使用第j个机器的加工时间。
(6)使用机器加工零件的费用矩阵C,,表示第i个零件使用第j个机器的加工费用。
另外,问题需要满足的条件包括每个零件的各道工序使用每台机器不多于1次,每个零件加工都按照一定的顺序进行加工。
2遗传算法的车间调度算法模型建立
基于多层编码遗传算法的车间调度算法流程如下图所示。
其中,种群初始化模块初始化种群构成问题的初始解集,适应度值计算模块计算染色体的适用度值,选择操作采用轮盘赌法选择优秀个体;交叉操作采用整数交叉法得到优秀个体,变异操作采用证书变异法得到优秀个体。
算法流程图
3模型算法的实现
3.1个体编码
染色体编码方式为证书编码,每个染色体表示全部工件的加工顺序,当待加工的工件总数为n,工件的加工工序共为时,则个体表示为长度为的整数串。
其中,染色体的前半部分表示所有工件在机器上的加工顺序,后半部分表示工件每道工序的加工机器序号。
如个体
[2431123421332213]
该个体表达了4个加工工序都是2次的工件在3台机器上的加工顺序。
其中,前8位表示工件的加工顺序,为工件2→工件4→工件3→工件1→工件1→工件2→工件3→工件4;9到16位表示加工机器,依次为机器2→机器1→机器3→机器3→机器2→机器2→机器1→机器3。
3.2适应度值
染色体的适应度值为全部工件的完成时间,适应度值计算公式为:
其中,time指全部任务完成时间,全部工件完成时间越短,该染色体越好。
3.3选择操作
选择操作采用轮盘赌法选择适应度较好的染色体,个体选择概率为:
;
其中,表示染色体i在每次选择中被选中的概率。
3.4交叉操作
种群通过交叉操作获得新染色体,从而推动整个种群向前进化,交叉操作采用整数交叉法。
交叉操作首先从种群中随机选取两个染色体,并取出每个染色体的前位,然后随机选择交叉位置进行交叉。
操作方法如下:
交叉位置为5,只对个体前位进行交叉。
个体-[112322331112121222]交叉[221322331112121222]
极值-[221331213112212111][112331213112212111]
交叉后某些工件的工序多余(如个体中的工件2),某些工件的工序缺失(如个体中的工件1),因此,把工件工序多余的操作变为工件工序缺失的操作,并按交叉前个体的操作机器来调整个体位到位的加工机器,如下所示:
交叉后个体-[221322331112121222]调整[221312331112221222]
3.5变异操作
种群通过变异操作获得新的个体,从而推动整个种群向前进化。
变异算子首先从种群中随机选取变异个体,然后选择变异位置pos1和pos2,最后把个体中pos1和pos2位的加工工序以及对应的加工机器序号对换,如下列示,交叉位置为2和4。
个体-[221322331112121222]交叉个体-[231222331112121222]
4Matlab程序实现和仿真结果
采用多层编码遗传算法求解车间调度问题,共有6个工件,在10台机器上加工,每个工件都要经过6道加工工序,每个工序可选择机器序号下表所示。
工序可选机器表
工件
工件1
工件2
工件3
工件4
工件5
工件6
工序1
3,10
2
3,9
4
5
2
工序2
1
3
4,7
1,9
2,7
4,7
工序3
2
5,8
6,8
3,7
3,10
6,9
工序4
4,7
6,7
1
2,8
6,9
1
工序5
6,8
1
2,10
5
1
5,8
工序6
5
4,10
5
6
4,8
3
每道工序加工时间如下表所示。
工序加工时间表
工件
工件1
工件2
工件3
工件4
工件5
工件6
工序1
3,5
6
1,4
7
6
2
工序2
10
8
5,7
4,3
10,12
4,7
工序3
9
1,4
5,6
4,6
7,9
6,9
工序4
5,4
5,6
5
3,5
8,8
1
工序5
3,3
3
9,11
1
5
5,8
工序6
10
3,3
1
3
4,7
3
根据多层编码遗传算法原理,在Matlab中编程实现基于多层编码遗传算法的车间调度算法,首先进行个体初始化,然后采用选择、交叉和变异操作搜索最佳个体,得到最优的车间调度方法,主要代码如下:
[PNumberMNumber]=size(Jm);%PNumber工件个数、MNumber工序个数
trace=zeros(2,MAXGEN);%寻优结果的初始值
WNumber=PNumber*MNumber;%工序总个数
Number=zeros(1,PNumber);
fori=1:
PNumber
Number(i)=MNumber;
end
Chrom=zeros(NIND,2*WNumber);
forj=1:
NIND
WPNumberTemp=Number;
fori=1:
WNumber
val=unidrnd(PNumber);
whileWPNumberTemp(val)==0
val=unidrnd(PNumber);
end
Chrom(j,i)=val;
WPNumberTemp(val)=WPNumberTemp(val)-1;
Temp=Jm{val,MNumber-WPNumberTemp(val)};
SizeTemp=length(Temp);
Chrom(j,i+WNumber)=unidrnd(SizeTemp);
end
end
[PValObjVPS]=cal(Chrom,JmNumber,T,Jm);%计算目标函数值
whilegenFitnV=ranking(ObjV);%分配适应度值
SelCh=select('rws',Chrom,FitnV,GGAP);%选择操作
SelCh=across(SelCh,XOVR,Jm,T);%交叉操作
SelCh=aberranceJm(SelCh,MUTR,Jm,T);%变异操作
[PValObjVSelPS]=cal(SelCh,JmNumber,T,Jm);%计算目标适应度值
end
[ChromObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel);%重新插入新种群
gen=gen+1;
trace(1,gen)=min(ObjV);%保存最优值
trace(2,gen)=mean(ObjV);
ifgen==1%%记录最佳值
Val1=PVal;
Val2=P;
MinVal=min(ObjV);
STemp=S;
end
ifMinVal>trace(1,gen)%%记录最小的工序
Val1=PVal;
Val2=P;
MinVal=trace(1,gen);
STemp=S;
end
end
PVal=Val1;
P=Val2;
S=STemp;
figure
(1)%%描绘解的变化
plot(trace(1,:
));
holdon;
plot(trace(2,:
),'-.');grid;
legend('解的变化','种群均值的变化');
figure
(2);%%显示最优解
MP=S(1,PNumber*MNumber+1:
PNumber*MNumber*2);
fori=1:
WNumber
val=P(1,i);
a=(mod(val,100));
b=((val-a)/100);
Temp=Jm{b,a};
mText=Temp(MP(1,i));
x1=PVal(1,i);
x2=PVal(2,i);
y1=mText-1;
y2=mText;
PlotRec(x1,x2,mText);
PlotRec(PVal(1,i),PVal(2,i),mText);
holdon;
fill([x1,x2,x2,x1],[y1,y1,y2,y2],[1-1/b,1/b,b/PNumber]);
text((x1+x2)/2,mText-0.25,num2str(P(i)));
end
算法的基本参数为:
种群数目为40,最大迭代次数为50,交叉概率为0.8,变异概率为0.6,算法搜索得到的全部工件完成的最短时间为47s,算法搜索过程和最优个体对应的零件加工甘特图如下图所示。
5结论
本文提出多层编码遗传算法的车间调度算法可以满足生产调度的动态性要求。
Matlab仿真结果显示该算法具有实用性和有效性,为生产应用提供一个强有力的辅助工具,不需要做过多的改变就能满足其他类似调度应用。
该遗传算法对车间调度问题大有改进,缩短了整个加工工序时间,减少目标函数运算量,为快速制订生产计划提供了一种切实有效的方法。
参考文献
[1]金志勇.基于遗传算法的车间调度系统研究[D].武汉理工大学,学位论文,2006
[2]蒋丽雯.基于遗传算法的车间作业调度问题研究[D].上海交通大学,学位论文,2006
[3]冯冠,章建功.多群体并行遗传算法在动态车间调度中的应用[A].中国管理信息化,2008.6
[4]王凌,郑大钟.基于遗传算法的job-shop调度研究进展[J].控制与决策,2001
[5]张群会.工序排序问题的遗传算法[J].煤矿机械,2001.5
[6]刘天虎,许维胜,吴启迪.基于遗传算法的生产调度系统建模及优化[J].华东经济管理,2008
[7]张松艳,基于遗传算法的大型Flow-shop生产调度[A].浙江科技学院学报,2010.4