《遗传算法的Matlab实现讲解.ppt》由会员分享,可在线阅读,更多相关《遗传算法的Matlab实现讲解.ppt(37页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、数学建模专题之数学建模专题之遗传算法的遗传算法的MATLABMATLAB实现实现Contents IMatlab编程实现编程实现GA1Matlab函数调用实现函数调用实现GA2Matlab工具箱实现工具箱实现GA3Matlab编程实现GAv例1:计算目标函数值函数 v主程序%遗传算法主程序function My_GAglobal Cmin;Cmin=-106;popsize=50;%群体大小Gene=20;chromlength=20;%字符串长度(个体长度)pc=0.8;%交叉概率pm=0.01;%变异概率Xmax=10;Xmin=0;Matlab编程实现GApop=initpop(pops
2、ize,chromlength);%随机产生初始群体for i=1:Gene%20为迭代次数 objvalue=calobjvalue(pop,chromlength,Xmax,Xmin);%计算目标函数 fitvalue=calfitvalue(objvalue);%计算群体中每个个体的适应度 newpop=selection(pop,fitvalue);%复制 newpop=crossover(newpop,pc);%交叉 newpop=mutation(newpop,pm);%变异 bestindividual,bestfit=best(pop,fitvalue);%求出群体中适应值最大
3、的个体及其适应值 x(i)=decodechrom(bestindividual,1,chromlength)*10/(2chromlength-1);%最佳个体解码 y(i)=bestfit+Cmin;%最佳个体适应度 y_mean(i)=mean(fitvalue+Cmin);%第i代平均适应度 pop=newpop;endfplot(2*x+10*sin(5*x)+7*cos(4*x),0 10)hold onplot(x,y,r*)hold offv初始化(编码)%initpop.m函数的功能是实现群体的初始化,popsize表示群体的大小,chromlength表示染色体的长度(二值
4、数的长度),%长度大小取决于变量的二进制编码的长度(在本例中取20位)。%Name:initpop.mfunction pop=initpop(popsize,chromlength)pop=round(rand(popsize,chromlength);%rand随机产生每个单元为 0,1 行数为popsize,列数为chromlength的矩阵,%round对矩阵的每个单元进行取整。这样产生的初始种群。Matlab编程实现GAv将二进制数转化为十进制数 将二进制数转化为十进制数%产生 2n 2(n-1).1 的行向量,然后求和,将二进制转化为十进制function pop2=decodeb
5、inary(pop)px,py=size(pop);%求pop行和列数for i=1:pypop1(:,i)=2.(py-i).*pop(:,i);endpop2=sum(pop1,2);%求pop1的每行之和function pop2=decodechrom(pop,spoint,length)pop1=pop(:,spoint:spoint+length-1);pop2=decodebinary(pop1);Matlab编程实现GAv计算目标函数值 计算目标函数值%calobjvalue.m函数的功能是实现目标函数的计算,其公式采用本文示例仿真,可根据不同优化问题予以修改。%遗传算法子程序
6、%Name:calobjvalue.m%实现目标函数的计算function objvalue=calobjvalue(pop,chromlength,Xmax,Xmin)temp1=decodechrom(pop,1,chromlength);%将pop每行转化成十进制数x=temp1*(Xmax-Xmin)/(2chromlength-1);%将十进制域 中的数转化为变量域 的数objvalue=2*x+10*sin(5*x)+7*cos(4*x);%计算目标函数值Matlab编程实现GAv计算个体的适应值 function fitvalue=calfitvalue(objvalue)glo
7、bal Cmin;fitvalue=objvalue-Cmin;Matlab编程实现GAv选择复制 function newpop=selection(pop,fitvalue)%程序中采用赌轮盘选择法选择实现totalfit=sum(fitvalue);%求适应值之和fitvalue=fitvalue/totalfit;%单个个体被选择的概率fitvalue=cumsum(fitvalue);%如 fitvalue=1 2 3 4,则 cumsum(fitvalue)=1 3 6 10 px,py=size(pop);ms=sort(rand(px,1);%从小到大排列fitin=1;new
8、in=1;while newin=px%蒙特卡洛方法抽样 if(ms(newin)fitvalue(fitin)newpop(newin,:)=pop(fitin,:);newin=newin+1;else fitin=fitin+1;endendMatlab编程实现GAv交叉 function newpop=crossover(pop,pc)px,py=size(pop);newpop=ones(size(pop);for i=1:2:px-1 if(randpc)cpoint=round(rand*py);newpop(i,:)=pop(i,1:cpoint),pop(i+1,cpoint
9、+1:py);newpop(i+1,:)=pop(i+1,1:cpoint),pop(i,cpoint+1:py);else newpop(i,:)=pop(i);newpop(i+1,:)=pop(i+1);endendMatlab编程实现GAv变异 functionnewpop=mutation(pop,pm)px,py=size(pop);newpop=ones(size(pop);for i=1:px if(randpm)mpoint=round(rand*py);if mpointbestfit bestindividual=pop(i,:);bestfit=fitvalue(i);
10、endend Matlab编程实现GA或function bestindividual,bestfit=best(pop,fitvalue)bestfit,m_indx=max(fitvalue);bestindividual=pop(m_indx,:);v结果见My_GA.m Matlab编程实现GAMatlab函数调用实现GAMatlab的GA函数 x fval=ga(fitnessfun,nvars,options);fitnessfcn Fitness functionnvars Number of variables for the problemAineq Matrix for i
11、nequality constraintsBineq Vector for inequality constraintsAeq Matrix for equality constraintsBeq Vector for equality constraintsLB Lower bound on xUB Upper bound on xnonlcon Nonlinear constraint Functionoptions Options structureMatlab函数调用实现GAMatlab的GA函数x=ga(fitnessfcn,nvars)x=ga(fitnessfcn,nvars,A
12、,b)x=ga(fitnessfcn,nvars,A,b,Aeq,beq)x=ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB)x=ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB,nonlcon)x=ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB,nonlcon,options)x=ga(problem)x,fval=ga(.)x,fval,exitflag=ga(.)Matlab函数调用实现GAGA函数调用步骤第一步:编写适应度函数;第二步:对GA参数进行设置;options=gaoptimset(参数名,参数
13、值,参数名,参数值)例:options=gaoptimset(PopulationSize,100)第三步:调用GA函数;x fval=ga(fitnessfun,nvars)x fval exitflag output population scores=ga(fitnessfcn,nvars)x fval=ga(fitnessfun,nvars,options);specify any linear equality,linear inequality,or nonlinear constraintsMatlab函数调用实现GA调用GA函数求例1的最大值(见ga_eg1.m)第一步:编写适
14、应度函数;第一步:编写适应度函数;function y=fit1(x)y=-(2*x+10*sin(5*x)+7*cos(4*x);第二步:设置参数第二步:设置参数options=gaoptimset(PopulationSize,100,PopulationType,doubleVector,PlotFcns,gaplotbestf,gaplotbestindiv,gaplotexpectation,gaplotstopping)第三步:调用第三步:调用GAGA函数函数x fval=ga(fit1,1,0,10,options);最后还原最后还原y=-1*fit1(x)%最小值还原为最大值f
15、igure;fplot(2*x+10*sin(5*x)+7*cos(4*x),0 10)hold onplot(x,y,*)遗传算法的GA工具箱实现:Matlab的GA工具箱(R2007)Matlab的GA工具箱(R2010b)遗传算法的遗传算法的GA工具箱实现:工具箱实现:例二求下列优化问题Matlab函数调用实现调用GA函数求解(见ga_eg2.m)function ga_eg2A=1 1;-1 2;2 1;b=2;2;3;lb=zeros(2,1);x,fval,exitflag=ga(lincontest6,2,A,b,lb);mesh_lincontest6;hold on;plot
16、3(x(1),x(2),fval,r*);function mesh_lincontest6m=10;n=1000;x=-n:m:n;y=-n:m:n;z=0.5*(ones(length(x),1)*x).2+(ones(length(y),1)*y).2.-(ones(length(x),1)*x).*(ones(length(y),1)*y)-2*(ones(.length(x),1)*x)-6*(ones(length(y),1)*y);mesh(x,y,z)Matlab函数调用实现调用GA函数求解(见ga_eg2.m)遗传算法的GA工具箱实现Matlab的GA工具箱(R2010b)练
17、习一在5=Xi=5,i=1,2区间内,求解 f(x1,x2)=-20*exp(0.2*sqrt(0.5*(x1.2+x2.2)-exp(0.5*(cos(2*pi*x1)+cos(2*pi*x2)+22.71282的最小值。要求:种群大小20,最大代数100,变异率0.1,交叉率0.7Contents IIGA求解多目标优化问题求解多目标优化问题1GA优化优化BP神经网络神经网络2GA求解求解TSP问题问题3II-1 GA求解多目标优化问题通常多目标优化,例如非线性整数规划是一个具有指数复杂度的NP问题,如果约束较为复杂,Matlab优化工具箱和一些优化软件比如lingo等,常常无法应用,即使
18、能应用也不能给出一个较为令人满意的解。这时就需要针对问题设计专门的优化算法。模型的形式和适应度函数定义如下:II-1 GA求解多目标优化问题 源代码见nonlin.m 练习二 利用GA求解以下多目标优化问题:II-2 GA优化BP神经网络给定一百组数据(X,Y,Z),(X,Y)为两种测量参数(即输入),Z为结果(即输出)。请利用NN模拟输入和输出的关系。测量数据可利用函数关系模拟:II-2 GA优化BP神经网络 源代码见GABPNN.mII-2 GA优化BP神经网络GA优化的结果II-2 GA优化BP神经网络GA优化的结果练习三给定100组数据(X1,X2,X3,X4,Y1,Y2),(X1,X2,X3,X4)为四种测量参数(即输入),(Y1,Y2)为结果(即输出)。请利用GA优化BPNN模拟输入和输出的关系。测量数据可利用函数关系模拟:II-3 GA求解TSP问题 求中国31个省会城市的最短路径(GATSP_PPT2.m)II-3 GA求解TSP问题GA收敛过程(GATSP_PPT2.m)练习四 调节GATSP_PPT2中的参数,使其达到最佳状态。