遗传算法的Matlab实现讲解_第1页
遗传算法的Matlab实现讲解_第2页
遗传算法的Matlab实现讲解_第3页
遗传算法的Matlab实现讲解_第4页
遗传算法的Matlab实现讲解_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数学建模专题之

遗传算法的MATLAB实现遗传算法的Matlab实现讲解ContentsIMatlab编程实现GA1Matlab函数调用实现GA2Matlab工具箱实现GA3遗传算法的Matlab实现讲解Matlab编程实现GA例1:计算目标函数值函数

遗传算法的Matlab实现讲解主程序

%遗传算法主程序functionMy_GAglobalCmin;Cmin=-10^6;popsize=50;%群体大小Gene=20;chromlength=20;%字符串长度(个体长度)pc=0.8;%交叉概率pm=0.01;%变异概率Xmax=10;Xmin=0;Matlab编程实现GApop=initpop(popsize,chromlength);%随机产生初始群体fori=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);%求出群体中适应值最大的个体及其适应值

x(i)=decodechrom(bestindividual,1,chromlength)*10/(2^chromlength-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)',[010])holdonplot(x,y,'r*')holdoff遗传算法的Matlab实现讲解初始化(编码)

%initpop.m函数的功能是实现群体的初始化,popsize表示群体的大小,chromlength表示染色体的长度(二值数的长度),%长度大小取决于变量的二进制编码的长度(在本例中取20位)。%Name:initpop.mfunctionpop=initpop(popsize,chromlength)pop=round(rand(popsize,chromlength));%rand随机产生每个单元为{0,1}行数为popsize,列数为chromlength的矩阵,%round对矩阵的每个单元进行取整。这样产生的初始种群。Matlab编程实现GA遗传算法的Matlab实现讲解将二进制数转化为十进制数

将二进制数转化为十进制数%产生[2^n2^(n-1)...1]的行向量,然后求和,将二进制转化为十进制functionpop2=decodebinary(pop)[px,py]=size(pop);%求pop行和列数fori=1:py pop1(:,i)=2.^(py-i).*pop(:,i);endpop2=sum(pop1,2);%求pop1的每行之和functionpop2=decodechrom(pop,spoint,length)pop1=pop(:,spoint:spoint+length-1);pop2=decodebinary(pop1);Matlab编程实现GA遗传算法的Matlab实现讲解计算目标函数值

计算目标函数值%calobjvalue.m函数的功能是实现目标函数的计算,其公式采用本文示例仿真,可根据不同优化问题予以修改。%遗传算法子程序%Name:calobjvalue.m%实现目标函数的计算function[objvalue]=calobjvalue(pop,chromlength,Xmax,Xmin)temp1=decodechrom(pop,1,chromlength);%将pop每行转化成十进制数x=temp1*(Xmax-Xmin)/(2^chromlength-1);%将十进制域中的数转化为变量域的数objvalue=2*x+10*sin(5*x)+7*cos(4*x);%计算目标函数值Matlab编程实现GA遗传算法的Matlab实现讲解计算个体的适应值

functionfitvalue=calfitvalue(objvalue)globalCmin;fitvalue=objvalue-Cmin;Matlab编程实现GA遗传算法的Matlab实现讲解选择复制

function[newpop]=selection(pop,fitvalue)%程序中采用赌轮盘选择法选择实现totalfit=sum(fitvalue);%求适应值之和fitvalue=fitvalue/totalfit;%单个个体被选择的概率fitvalue=cumsum(fitvalue);%如fitvalue=[1234],则cumsum(fitvalue)=[13610][px,py]=size(pop);ms=sort(rand(px,1));%从小到大排列fitin=1;newin=1;whilenewin<=px%蒙特卡洛方法抽样

if(ms(newin))<fitvalue(fitin)newpop(newin,:)=pop(fitin,:);newin=newin+1;elsefitin=fitin+1;endendMatlab编程实现GA遗传算法的Matlab实现讲解交叉

function[newpop]=crossover(pop,pc)[px,py]=size(pop);newpop=ones(size(pop));fori=1:2:px-1if(rand<pc)cpoint=round(rand*py);newpop(i,:)=[pop(i,1:cpoint),pop(i+1,cpoint+1:py)];newpop(i+1,:)=[pop(i+1,1:cpoint),pop(i,cpoint+1:py)];elsenewpop(i,:)=pop(i);newpop(i+1,:)=pop(i+1);endendMatlab编程实现GA遗传算法的Matlab实现讲解变异

function[newpop]=mutation(pop,pm)[px,py]=size(pop);newpop=ones(size(pop));fori=1:pxif(rand<pm)mpoint=round(rand*py);ifmpoint<=0mpoint=1;endnewpop(i,:)=pop(i,:);

Matlab编程实现GAifany(newpop(i,mpoint))==0newpop(i,mpoint)=1;elsenewpop(i,mpoint)=0;endelsenewpop(i,:)=pop(i,:);endend遗传算法的Matlab实现讲解求出群体中最大的适应值及其个体

function[bestindividual,bestfit]…=best(pop,fitvalue)[px,py]=size(pop);bestindividual=pop(1,:);bestfit=fitvalue(1);fori=2:pxiffitvalue(i)>bestfitbestindividual=pop(i,:);bestfit=fitvalue(i);endendMatlab编程实现GA或function[bestindividual,bestfit]=…best(pop,fitvalue)[bestfit,m_indx]=max(fitvalue);bestindividual=pop(m_indx,:);遗传算法的Matlab实现讲解结果见My_GA.m

Matlab编程实现GA遗传算法的Matlab实现讲解Matlab函数调用实现GAMatlab的GA函数

[xfval]=ga(@fitnessfun,nvars,[],[],[],[],[],[],[],options);fitnessfcn—Fitnessfunctionnvars—NumberofvariablesfortheproblemAineq—MatrixforinequalityconstraintsBineq—VectorforinequalityconstraintsAeq—MatrixforequalityconstraintsBeq—VectorforequalityconstraintsLB—LowerboundonxUB—Upperboundonxnonlcon—NonlinearconstraintFunctionoptions—Optionsstructure遗传算法的Matlab实现讲解Matlab函数调用实现GAMatlab的GA函数x=ga(fitnessfcn,nvars)x=ga(fitnessfcn,nvars,A,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实现讲解Matlab函数调用实现GAGA函数调用步骤第一步:编写适应度函数;第二步:对GA参数进行设置;options=gaoptimset(‘参数名’,参数值,…,‘参数名’,参数值)例:options=gaoptimset('PopulationSize',100)第三步:调用GA函数;[xfval]=ga(@fitnessfun,nvars)[xfvalexitflagoutputpopulationscores]=ga(@fitnessfcn,nvars)[xfval]=ga(@fitnessfun,nvars,[],[],[],[],[],[],[],options);specifyanylinearequality,linearinequality,ornonlinearconstraints遗传算法的Matlab实现讲解Matlab函数调用实现GA调用GA函数求例1的最大值(见ga_eg1.m)第一步:编写适应度函数;functiony=fit1(x)y=-(2*x+10*sin(5*x)+7*cos(4*x));第二步:设置参数options=gaoptimset('PopulationSize',100,'PopulationType','doubleVector','PlotFcns',{@gaplotbestf,@gaplotbestindiv,@gaplotexpectation,@gaplotstopping})第三步:调用GA函数[xfval]=ga(@fit1,1,[],[],[],[],0,10,[],options);最后还原y=-1*fit1(x)%最小值还原为最大值figure;fplot('2*x+10*sin(5*x)+7*cos(4*x)',[010])holdonplot(x,y,'*')遗传算法的Matlab实现讲解

遗传算法的GA工具箱实现:Matlab的GA工具箱(R2007)遗传算法的Matlab实现讲解Matlab的GA工具箱(R2010b)

遗传算法的GA工具箱实现:遗传算法的Matlab实现讲解例二求下列优化问题遗传算法的Matlab实现讲解Matlab函数调用实现调用GA函数求解(见ga_eg2.m)

functionga_eg2A=[11;-12;21];b=[2;2;3];lb=zeros(2,1);[x,fval,exitflag]=ga(@lincontest6,2,A,b,[],[],lb);mesh_lincontest6;holdon;plot3(x(1),x(2),fval,'r*');

functionmesh_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实现讲解Matlab函数调用实现调用GA函数求解(见ga_eg2.m)

遗传算法的Matlab实现讲解遗传算法的GA工具箱实现Matlab的GA工具箱(R2010b)遗传算法的Matlab实现讲解练习一在-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.7遗传算法的Matlab实现讲解ContentsIIGA求解多目标优化问题1GA优化BP神经网络2GA求解TSP问题3遗传算法的Matlab实现讲解II-1GA求解多目标优化问题通常多目标优化,例如非线性整数规划是一个具有指数复杂度的NP问题,如果约束较为复杂,Matlab优化工具箱和一些优化软件比如lingo等,常常无法应用,即使能应用也不能给出一个较为令人满意的解。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论