收藏 分享(赏)

遗传算法MATLAB完整代码(不用工具箱).doc

上传人:weiwoduzun 文档编号:2808441 上传时间:2018-09-27 格式:DOC 页数:5 大小:36.50KB
下载 相关 举报
遗传算法MATLAB完整代码(不用工具箱).doc_第1页
第1页 / 共5页
遗传算法MATLAB完整代码(不用工具箱).doc_第2页
第2页 / 共5页
遗传算法MATLAB完整代码(不用工具箱).doc_第3页
第3页 / 共5页
遗传算法MATLAB完整代码(不用工具箱).doc_第4页
第4页 / 共5页
遗传算法MATLAB完整代码(不用工具箱).doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

1、遗传算法解决简单问题%主程序:用遗传算法求解 y=200*exp(-0.05*x).*sin(x)在区间-2,2上的最大值clc;clear all;close all;global BitLengthglobal boundsbeginglobal boundsendbounds=-2,2;precision=0.0001;boundsbegin=bounds(:,1);boundsend=bounds(:,2);%计算如果满足求解精度至少需要多长的染色体BitLength=ceil(log2(boundsend-boundsbegin)./precision);popsize=50; %初

2、始种群大小Generationmax=12; %最大代数pcrossover=0.90; %交配概率pmutation=0.09; %变异概率%产生初始种群population=round(rand(popsize,BitLength);%计算适应度,返回适应度 Fitvalue 和累计概率 cumsumpFitvalue,cumsump=fitnessfun(population);Generation=1;while GenerationGenerationmax+1for j=1:2:popsize%选择操作seln=selection(population,cumsump);%交叉操作

3、scro=crossover(population,seln,pcrossover);scnew(j,:)=scro(1,:);scnew(j+1,:)=scro(2,:);%变异操作smnew(j,:)=mutation(scnew(j,:),pmutation);smnew(j+1,:)=mutation(scnew(j+1,:),pmutation);endpopulation=scnew; %产生了新的种群%计算新种群的适应度Fitvalue,cumsump=fitnessfun(population);%记录当前代最好的适应度和平均适应度fmax,nmax=max(Fitvalue)

4、;fmean=mean(Fitvalue);ymax(Generation)=fmax;ymean(Generation)=fmean;%记录当前代的最佳染色体个体x=transform2to10(population(nmax,:);%自变量取值范围是-2,2,需要把经过遗传运算的最佳染色体整合到-2,2区间xx=boundsbegin+x*(boundsend-boundsbegin)/(power(boundsend),BitLength)-1);xmax(Generation)=xx;Generation=Generation+1;endGeneration=Generation-1;

5、Bestpopulation=xx;Besttargetfunvalue=targetfun(xx);%绘制经过遗传运算后的适应度曲线。一般的,如果进化过程中的种群的平均适应度%与最大适应度在曲线上有相互趋同的形态,表示算法收敛进行地很顺利,没有出现震荡;%在这种前提下,最大适应度个体连续若干代都没有发生进化表示种群已经成熟figure(1);hand1=plot(1:Generation,ymax);set(hand1,linestyle,-,linewidth,1.8,marker,*,markersize,6);hold on;hand2=plot(1:Generation,ymean)

6、;set(hand2,color,r,linestyle,-,linewidth,1.8,marker,.h,markersize,6);xlabel(进化代数);ylabel(最大/平均适应度);xlim(1 Generationmax);box off;hold off;%子程序:计算适应度函数,函数名称存储为 fitnessfunfunctionFitvalue,cumsump=fitnessfun(population)global BitLengthglobal boundsbeginglobal boundsendpopsize=size(population,1); %有 pop

7、size 个个体for i=1:popsizex=transform2to10(population(i,:); %将二进制转换为十进制%转化为-2,2区间的实数xx=boundsbegin+x*(boundsend-boundsbegin)/(power(boundsend),BitLength)-1);Fitvalue(i)=targetfun(xx);end%给适应度函数加上一个大小合理的数以便保证种群适应值为正数Fitvalue=Fitvalue+230;%计算选择概率fsum=sum(Fitvalue);Pperpopulation=Fitvalue/fsum;%计算累积概率cums

8、ump(1)=Pperpopulation(1);for i=2:popsizecumsump(i)=cumsump(i-1)+Pperpopulation(i);endcumsump=cumsump;%子程序:新种群变异操作,函数名称存储为 mutation.mfunction snnew=mutation(snew,pmutation)BitLength=size(snew,2);snnew=snew;pmm=IfCroIfMut(pmutation); %根据变异概率决定是否进行变异操作,1 则是,0 则否if pmm=1chb=round(rand*(BitLength-1)+1;%在

9、1,BitLength范围内随机产生一个变异位snnew(chb)=abs(snew(chb)-1);end%子程序:新种群交叉操作,函数名存储为 crossover.mfunction scro=crossover(population,seln,pc)BitLength=size(population,2);pcc=IfCroIfMut(pc); %根据交叉概率决定是否进行交叉操作,1 则是,0 则否if pcc=1chb=round(rand*(BitLength-2)+1;%在1,BitLength-1范围内随机产生一个交叉位scro(1,:)=population(seln(1),1

10、:chb) population(seln(2),chb+1:BitLength); scro(2,:)=population(seln(2),1:chb) population(seln(1),chb+1:BitLength);elsescro(1,:)=population(seln(1),:);scro(2,:)=population(seln(2),:);end%子程序:判断遗传运算是否需要进行交叉或变异,函数名称存储为 IfCroIfMut.mfunction pcc=IfCroIfMut(mutORcro)test(1:100)=0;l=round(100*mutORcro);te

11、st(1:l)=1;n=round(rand*99)+1;pcc=test(n);%子程序:新种群选择操作,函数名称存储为 selection.mfunction seln=selection(population,cumsump)%从种群中选择两个个体for i=1:2r=rand;prand=cumsump-r; %产生一个随机数j=1;while prand(j)0j=j+1;endseln(i)=j; %选中个体的序号end%子程序:将二进制数转换为十进制数,函数名称存储为 transform2to10.mfunction x=transform2to10(Populaton)BitLength=size(Populaton,2);x=Populaton(BitLength);for i=1:BitLength-1x=x+Populaton(BitLength-i)*power(2,i);end%子程序:对于优化最大值或极大值函数问题,目标函数可以作为适应度函数%函数名称存储为 targetfun.mfunction y=targetfun(x) %目标函数y=200*exp(-0.05*x).*sin(x);运行结果:Bestpopulation =1.5764Besttargetfunvalue =184.8383基本接近理论值

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报