优化算法在汽车制造行业中的应用.docx
《优化算法在汽车制造行业中的应用.docx》由会员分享,可在线阅读,更多相关《优化算法在汽车制造行业中的应用.docx(14页珍藏版)》请在冰豆网上搜索。
优化算法在汽车制造行业中的应用
优化算法在汽车制造行业中的应用
1综述
如今人类社会飞速发展,工业技术的开发更是日新月异。
发展生产力,节约自然资源,提高资源利用水平是工业一直不断在追求的目标。
为了提高企业的竞争力和生存能力,一方面,企业继续寻求更好的生产与运作管理模式,如准时生产制、最优生产技术等;另一方面,企业也积极探索和应用新的制造技术和生产组织方式使其能更快、更好和更省地制造出市场需求的产品。
在制造领域,车间生产调度是实现制造业生产高效率、高柔性和高可靠性的关键,生产调度是指针对一项可分解的工作(如产品生产),在尽可能满足约束条件(如工艺路线、资源情况、交货期等)的前提下,通过下达生产指令,安排其组成部分(操作)所使用的资源、加工时间以及加工次序,以获得产品制造时间或成本等的最优化。
在传统的针对制造系统研究中,工艺规划和车间调度是两个独立的子系统,研究人员对它们分别进行独立地研究,对二者的集成研究还不够。
虽然利用工艺规划系统可以对生产品工艺路线进行规划进而提高产品生产的效率,车间调度系统可以对加工顺序和资源的利用进行优化,但是研究表明,工艺规划系统和车间调度系统单个的效率很难再得到很大的提高。
事实上,如果把工艺规划和车间调度系统进行集成则可以更进一步地提高它们的工作效率,从而提高制造系统的效率。
2问题的提出
对于制造业务中给定的N个部分,选择合理的顺序进行生产,以确定操作之间的优先级约束可以满足相应的目标并得以实现。
车间调度作业最流行的标准,包括完工时间,迟到早退的工作和平衡机器的利用率水平。
在文章中,都是以完工时间作为标准。
车间调度问题(JSP),已经被证明是一个NP-hard的难题。
基于遗传算法的方法适合于来解决他。
3国内外的研究概况
工艺规划与车间调度集成的研究始于20世纪80年代中期Chryssolouris和Chan在80年代中期首先提出了工艺规划与车间调度集成的构想。
随后,Beckendorff[86]使用可选工艺路线来增加系统的柔性。
Khoshnevis将动态反馈的思想引入到工艺规划与车间调度集成之中。
Zhang和Larsen提出的集成模型在继承可选工艺路线和动态反馈思想的同时,已经在一定程度上体现了分层规划的思想。
近年来,针对工艺规划与车间调度的集成问题,国内外的研究学者已经开展了大量的研究,提出了各种集成模型以及研究方法,使工艺规划与车间调度集成的研究不断丰富。
研究的现状
目前,针对工艺规划与车间调度的集成问题,国内外研究学者提出了一些集成模型,它们大致可以归纳成以下三类:
非线性工艺规划、闭环式工艺规划以及分布式工艺规划。
它们的共同特点是利用工艺规划和车间调度的交叉,通过对工艺规划系统的某种改良,充分发挥工艺规划系统的柔性,从而提高整个集成系统的柔性。
非线性工艺规划
这个是工艺规划与车间调度集成的最基本的模型。
由于此模型的集成思想简单、可操作性强,所以现有对集成模型的研究主要集中在该模型上。
非线性工艺规划(NonlinearProcessPlanning,NLPP)模型基于静态的制造环境,在每个零件进入车间之前生成所有可能的工艺路线,并根据工艺规划的优化目标给每个可选工艺路线赋予一定的优先级,然后进入调度系统,由车间调度系统根据车间的具体资源状况选择最优的工艺路线。
工艺规划与车间调度集成的已有文献大部分都采用到了该集成模型的思想。
此模型的优点是生成了所有可能的工艺路线,从而扩大了车间调度的优化空间,有利于找到最优的工艺路线;其缺点是由于生成了所有可能的工艺路线,从而加大了系统的存储空间,而且对所有的工艺路线进行优化搜索,增加了系统优化的计算时间,有可能造成无法在可以接受的时间内找到满意解。
它的具体表现形式有以下几种:
非线性工艺规划、多工艺规划(Multi-ProcessPlanning,MPP)和可选工艺规划(AlternativeProcessPlanning,APP)。
以上几种形式从本质上讲没有区别,只是在描述上有所不同。
非线性工艺规划:
在制定一项工艺路线时,产生的是被加工零件的所有可能的工艺路线,因而形成可供选择的多条工艺路线,所有可能的工艺路线按照工艺优化准则存储在数据库中,在优化的前提下,这些可供选择的工艺路线经过评价排序后都确定了优先级。
具有最高优先级的工艺路线首先被选中,看其是否适合于当前的车间资源状况,如果不合适,则另选具有第二优先级的路线,如此不断重复,直到找到满意的工艺路线为止。
在并行工程的思想下,提出了基于统一资源数据库的面向FMS的柔性工艺规划与生产调度的集成方法。
多工艺规划:
一般可用树结构表示,称为工艺路线树。
树中结点表示加工工序,边表示加工工序间的次序关系,从根结点到叶子结点的一条路径表示一个工艺路线方案,从任一非根结点到叶子结点的一条路径表示一个子工艺路线方案。
工件加工过程等价于工艺路线树的搜索过程。
可选工艺规划:
其基本思想是在充分考虑制定零件工艺路线种种约束条件的基础上,产生多种可选的工艺路线,以提高工艺规划的柔性,为生产调度提供方便。
NLPP的基本流程图
图1NLPP流程图
●步骤1:
进行相应的工艺规划方案
●步骤2:
找出所有的可行方案
●步骤3:
进行相应的调度规划
●步骤3:
最后生产产品
闭环式工艺规划CLPP
闭环式工艺规划(ClosedProcessPlanning,CLPP)模型是根据调度系统所反馈的车间资源信息来生成工艺路线,因此CLPP能够较好地考虑到车间资源的状态,生成的工艺路线相对于当前的生产环境是可行的。
实时状态数据是CLPP的关键,根据实时的反馈信息进行动态工艺规划。
它的具体表现形式有如下几种:
闭环式工艺规划、动态工艺规划(DynamicProcessPlanning)和在线工艺规划(On-lineProcessPlanning,OLPP)。
闭环式工艺规划:
是面向车间的动态工艺规划系统,它通过车间资源信息的动态反馈来产生实时优化的工艺路线。
车间调度系统把当前车间可用设备的资源状况反
反馈给草拟的工艺路线,使之能及时进行更改与调整,从而可以提高工艺方案的可行性。
工艺设计将作业计划编制、生产调度系统集成在一起,形成工艺路线自动调整的闭环回路。
这种动态系统可明显提高工艺规划系统的实时性、指导性与可操作性,同时可以提高工艺规划系统工艺路线的利用率。
在线工艺规划:
即通过考虑车间的具体情况来对工艺规划和车间调度系统进行集成。
这有助于工艺路线能够适应实时的车间生产情况。
该方案中最重要的是车间的实时信息和调度的动态反馈。
CLPP利用了集成原理中的反馈机制,能够较好地实现工艺规划与车间调度的集成,但是由于现有的CLPP只是提供了信息与功能接口,而在信息和功能的耦合上考虑的深度不够。
如何提高CLPP信息和功能的耦合深度,是一个有待解决的问题;而且CLPP需要实时地采集车间资源的信息,如何表示、传输和处理车间资源的实时信息,也是一个有待解决的问题。
CLPP的基本流程图如下所示:
图2CLPP流程图
●环节1:
确定相应的工艺规划方案
●环节2:
一个实时的调度决策系统
●环节3:
调度规划由环节1、2共同决定
●环节4:
实时产品检测。
其得出的数据对调度起一个反馈作用。
分布式工艺规划DPP
分布式工艺规划(DistributedProcessPlanning,DPP),它的具体表现形式有如下几种:
分布式工艺规划、并行工艺规划(ConcurrentProcessPlanning)、协同工艺规划(CollaborativeProcessPlanning)。
分布式工艺规划:
也称及时工艺规划(Just-in-timeProcessPlanning,JTPP),在此模型中工艺规划和调度计划是同步完成的。
它将工艺规划和调度计划分成两个阶段:
第一阶段是初步规划阶段,在此阶段中,主要是分析零件特征及特征与特征之间的关系,根据零件的特征信息确定初步的加工方法,同时对加工资源(如原材料、加工设备等)进行初步的计算估计;第二阶段是详细规划阶段,主要工作是把车间加工设备信息和生产任务信息进行匹配,同时生成完整的工艺路线和调度计划。
并行工艺规划:
指运用并行工程的思想,将工艺设计与生产调度分成几个层次,在各层次将工艺设计与生产调度相关的部分分别进行集成,以期实现相互协作及共同决策的目的。
协同工艺规划:
即在进行工艺规划的同时也考虑车间的资源情况,使得工艺计划和调度计划两者协同进行。
DPP的基本思想是分层规划。
此模型在初期就考虑到了工艺规划系统与车间调度系统的集成问题,并且工艺规划与调度计划始终是并行进行的,双方在整个集成决策过程中都体现了交互、协调与合作的工作方式。
但是其从整体上优化工艺路线与调度计划的能力不够,此模型可以通过与其它模型的综合来提高其整体优化的能力。
DPP的基本流程图如下:
图3DPP流程图
在这个流程图中,可是看出:
工艺规划和车间调度是并行发生的。
在第一个大阶段中又分出了三个小阶段。
整合了并行的两个部分。
最后给出一个总体的工艺规划和车间调度方案并投入生产。
4实验研究现状
在文章中,两个实验用于阐明针对IPPS问题提出的方法。
实现的目标是完工的时间,方法是实现综合的工艺规划和车间调度。
比较没有整合和整合后的效果。
问题一
Sundaram和FU采用了实验一的方法,在这个问题里,以完工时间为目标,构造了5个工作和5台机器。
每一个部分都要经过四个不同的操作(这四个操作有着指定的顺序)。
研究者们根据这个问题采取了不同的手段和方法得到了不同的结果。
并对结果进行了相应的分析和说明。
图6实验一的甘特图(完工时间=33)
问题二
实验二是通过考虑以有的外部机器。
在本实验中,是由8个工作和6台机器构成的4个问题,同样是以完工时间为目标。
但是在这片论文中,外部加入的机器并没有很好的考虑。
表一显示了实验的结果。
二下面的甘特图显示了第一个问题的结果。
表1实验二的结果
从上面的结果可以看出整合后的模型更好的解决了问题,图中的四个问题,整合后的完工时间均比没有整合规划的完工时间要少出很多。
时间的节省比率是:
25.8%、24.6%、24.3%、23.2%。
可以看出节省的时间大概是24%左右,虽然随着操作数的增加,节省的时间比率有减少的趋势,但是就总体而言。
还是非常优异的结果了。
下面是基于上面的分析和实验得出的遗传算法甘特图:
图7实验二的甘特图(完工时间=33)
5思考与方法总结
遗传算法是优化算法中非常典型的一种。
该算法有着非常经典的数学模型。
遗传算法的准备内容
从网络和查找到的PPT教程,我基本了解了遗传算法的整个过程。
然后通过相关的书籍,我大致的掌握的其原理和使用。
由于现在MATLAB在遗传算法方面有很多友好的工具箱。
如比较知名的谢菲尔德大学的MATALB遗传算法工具箱。
在网络上我下载了该工具箱后。
进行了基础的遗传算法编码。
遗传算法的五个基本要素是:
编码和解码、种群初始设计、适应度函数设计、遗传算子设计(主要包括选择、交叉、变异等)和遗传参数设置(种群规模、遗传算子的概率等),这五个要素构成了GA的核心内容。
步骤如下:
Step1:
按照一定的初始化方法产生初始种群P(0);
Step2:
评价种群P(0),计算种群中各个个体的适应度值;
Step3:
判断是否满足算法的终止条件,若满足则输出优化结果;否则转到Step4;
Step4:
执行遗传操作,利用选择、交叉和变异算子产生新一代种群P(gen);
Step5:
转到Step2,gen=gen+1;
到目前为止,GA有很多种变型或改进,但其基于生物遗传进化的思想实现优化过程的机制没变,区别于传统优化算法,它具有以下特点:
(1)GA对问题参数编码成“染色体”后进行进化操作,而不是针对参数本身,这使得GA不受函数约束条件的限制,如连续性、可导性等;
(2)GA的搜索过程是从问题解的一个集合开始的,而不是从单个个体开始的,具有隐含并行搜索特性,从而极大减小了陷入局部极小的可能;
(3)GA使用的遗传操作均为随机操作,同时GA根据个体的适应度值进行搜索,而无需其它信息,如导数信息等;
(4)GA具有全局搜索能力,最善于搜索复杂问题和非线性问题。
GA的优越性主要表现在:
(1)算法进行全空间并行搜索,并将搜索重点集中于性能高的部分,从而能够提高搜索效率且不易陷入局部极小;
(2)算法具有固有的并行性,通过对种群的遗传处理可处理大量的模式,并且容易并行实现。
虽然GA具有以上的优势,但是,如何利用GA高效求解柔性工艺规划问题,一直被认为是一个具有挑战意义的课题。
遗传算法的初始化
这里的初始化有一点特别,因为在IPPS中遗传算法的初始种群要满足车间调度中的优先级约束。
是要这优先原则基础上做出的初始化。
GA中的选择操作的目的是为了从当前群体中选出优良的个体,使他们有机会作为附带为下一代繁殖子孙。
MATLAB代码如下:
%选择操作。
轮盘赌主方法
functionret=select(individuals,sizepop)
individuals.fitness=1./(individuals.fitness);
sumfitness=sum(individuals.fitness);
sumf=individuals.fitness./sumfitness;
index=[];
fori=1:
sizepop
pick=rand;
whilepick==0%这里pick是不可以等于0的
pick=rand;
end%等于0就在转,知道不等于为止
forj=1:
sizepop
pick=pick-sumf(j);
ifpick<0
index=[indexj];
break;%index数组不断的扩充
end
end
end
individuals.chrom=individuals.chrom(index,:
);
individuals.fitness=individuals.fitness(index);
ret=individuals;
遗传算法的交叉和变异
按论文中所说,交叉操作一共有四个步骤。
(在每个小的步骤中又有更细的操作。
)
●步骤1:
选择一对染色体P1和P2(相应的调度方案)。
并初始化两个空的后代。
●步骤2:
该步骤就是交叉串P1和P2.比较两个串B的位置并进行记录。
对串进行追加操作。
●步骤3:
对所得的串进行匹配操作,避免得到非法的O1和O2.
●步骤4:
在最后取得两个有效的交叉后代。
论文中的例子如下图所示:
图4交叉操作
下面是我根据谢菲尔德工具箱的操作指导,编写的程序代码。
下面的仅为GA中的交叉操作。
(MATLAB代码)
%%交叉操作
functionret=Cross(pcross,lenchrom,chrom,sizepop,bound)
fori=1:
sizepop
%随机选择两个染色体进行交叉
pick=rand(1,2);
whileprod(pick)==0
pick=rand(1,2);
end
index=ceil(pick.*sizepop);
%从交叉概率来决定是否进行交叉
pick=rand;
whilepick==0
pick=rand;
end
ifpick>pcross
continue;
end
flag=0;
whileflag==0%这里的flag是一个记号,表明所得是否可行的
pick=rand;
whilepick==0
pick=rand;
end
pos=ceil(pick.*sum(lenchrom));
pick=rand;
v1=chrom(index
(1),pos);
v2=chrom(index
(2),pos);
chrom(index
(1),pos)=pick*v2+(1-pick)*v1;
chrom(index
(2),pos)=pick*v1+(1-pick)*v2;
flag1=test(lenchrom,bound,chrom(index
(1),:
),fcode);
flag2=test(lenchrom,bound,chrom(index
(2),:
),fcode);
ifflag1*flag2==0
flag=0;
elseflag=1;
end
end
end
ret=chrom;
变异操作是遗传算法中为了避免陷入局部最优解而做出的一种针对性操作。
具体的步骤和交叉操作很类似。
具体的步骤如下:
图5变异操作
●步骤1:
从调度方案中选取一个染色体。
●步骤2:
从P染色体中随机选取一个B-字符串。
●步骤3:
选择另一个工艺计划将其替换掉。
●步骤4:
判断新产生的这个染色体是否合法。
不合法则进行相应的操作。
这样一个变异操作就完成了。
上面是相应的变异流程图。
下面是对应的MATLAB代码。
%%变异操作
functionret=Mutation(pmutation,lenchrom,chrom,sizepoppop,bound)
fori=1:
sizepop
%随机选择一个染色体进行变异
pick=rand;
whilepick==0
pick=rand;
end
index=ceil(pick*sizepop);
%变异概率决定该轮循环是否进行变异
pick=rand;
ifpick>pmutation
continue;
end
flag=0;
whileflag==0
%变异位置
pick=rand;
whilepick==0;
pick=rand;
end
pos=ceil(pick*sum(lenchrom));
v=chrom(i,pos);
v1=v-bound(pos,1);
v2=bound(pos,2)-v;
pick=rand;
ifpick>0.5
delta=v2*(1-pick^((1-pop
(1)/pop
(2))^2));
chrom(i,pos)=v+delta;
else
delta=v1*(1-pick^((1-pop
(1)/pop
(2))^2));
chrom(i,pos)=v-delta;
end
flag=test(lenchrom,bound,chrom(1,:
),fcode);
end
end
ret=chrom;
下面的是整个遗传算法中的主体部分,即程序的入口。
maxgen=200;
sizepop=20;
pcross=[0.6];
pmutation=[0.01];
lenchrom=[11111];
bound=[00.9*pi;00.9*pi;00.9*pi;00.9*pi;00.9*pi];
%%个体初始化
individuals=struct('fitness',zeros(1,sizepop),'chrom',[]);
avgfitness=[];
bestfitness=[];
bestchrom=[];
%初始化种群
fori=1:
sizepop
%随机产生一个种群
individuals.chrom(i,:
)=Code(lenchrom,bound);
x=individuals.chrom(i,:
);
individuals.fitness(i)=fun(x);
end
%找最好的染色体
[bestfitnessbestindex]=min(individuals.fitness);
bestchrom=individuals.chrom(bestindex,:
);
avgfitness=sum(individuals.fitness)/sizepop;
%记录每一代进化中最好的适应度和平均适应度
trace=[];
%%进化开始
fori=1:
maxgen
%选择\
individuals=Select(individuals.sizepop);
avgfitness=sum(individuals.fitness)/sizepop;
%交叉
individuals.chrom=Cross(pcorss,lenchrom,individuals.chrom,sizepop,bound);
%变异
individuals.chrom=Mutation(pmutation,lenchrom,individuals.chrom,sizepop,[imaxgen],bound);
%每进化10代,以所得值为初始值进行非线性寻优
ifmod(i,10)==0
individuals.chrom=nonlinear(individuals.chrom,sizepop);
end
%找到最优染色体及他们在种群中的位置
[newbestfitness,newbestindex]=min(individuals.fitness);
%代替上一次进化中最好的染色体
ifbestfitness>newbestfitness
bestfitness=newbestfitness;
bestchrom=individuals.chrom(newbestindex,:
);
end
avgfitness=sum(individuals.fitness)/sizepop;
trace=[trace;avgfitnessbestfitness];
end
6总结
通过这次大作业,我们了解了优化算法在汽车制造行业中的应用。
另外我们还通过网络和有关书籍学习了遗传算法的MATLAB程序编程,并进行了一定程度的实现。
我们的视野得到了扩展,学习技能也得到了一定程度的提高,更重要的是我们品尝到了成功地完成一件作品所带来的喜悦。
这些经历以及知识,对于我们从今往后的学习和工作都将会是大有裨益的。
参考文献:
[1]XingyuLi,Liang,Gao,ChaoyongZhang,XinyuShao:
AGeneticAlgorithmforIntegrationofProcess
PlanningandSchedulingProblem,1-8(2009)
[2]XinyuLi,LiangGao,ChaoyongZhang,andXinyuShao,WeidongLi:
Anagent-basedapproachforintegratedprocessplanningandscheduling.1-10ESWAPress,(2009)
[3]XinyuLi,LiangGao*,ChaoyongZhangandXinyuShao:
AreviewonIntegratedProcessPlanningandScheduling.Int.J.ManufacturingResearch,1-20(2010)
[4]张宁:
《遗传算法的特点及其应用》IOI集训队论文复旦大学出版社1-20200