用遗传算法进行简单函数的优化

上传人:精****档 文档编号:43400731 上传时间:2018-06-06 格式:DOC 页数:3 大小:38KB
返回 下载 相关 举报
用遗传算法进行简单函数的优化_第1页
第1页 / 共3页
用遗传算法进行简单函数的优化_第2页
第2页 / 共3页
用遗传算法进行简单函数的优化_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《用遗传算法进行简单函数的优化》由会员分享,可在线阅读,更多相关《用遗传算法进行简单函数的优化(3页珍藏版)》请在金锄头文库上搜索。

1、%用遗传算法进行简单函数的优化用遗传算法进行简单函数的优化 主函数主函数 clearbn=22; %个体串长度个体串长度 inn=50; %初始种群大小初始种群大小 gnmax=500; %最大代数最大代数 pc=0.75; %交叉概率交叉概率 pm=0.05; %变异概率变异概率%产生初始种群产生初始种群 s=round(rand(inn,bn);%计算适应度计算适应度,返回适应度返回适应度 f 和累积概率和累积概率 p f,p=objf(s); gn=1; while gngnmax+1for j=1:2:inn%选择操作选择操作seln=sel(s,p);%交叉操作交叉操作scro=cr

2、o(s,seln,pc);scnew(j,:)=scro(1,:);scnew(j+1,:)=scro(2,:);%变异操作变异操作smnew(j,:)=mut(scnew(j,:),pm);smnew(j+1,:)=mut(scnew(j+1,:),pm);ends=smnew; %产生了新的种群产生了新的种群%计算新种群的适应度计算新种群的适应度 function f,p=objf(s);%记录当前代最好和平均的适应度记录当前代最好和平均的适应度fmax,nmax=max(f);fmean=mean(f);ymax(gn)=fmax;ymean(gn)=fmean;%记录当前代的最佳个体记

3、录当前代的最佳个体x=n2to10(s(nmax,:);xx=-1.0+x*3/(power(2,bn)-1);xmax(gn)=xx;gn=gn+1 end gn=gn-1;%计算适应度函数计算适应度函数 function f,p=objf(s); inn=size(s,1); %有有 inn 个个体个个体 bn=size(s,2); %个体长度为个体长度为 bnfor i=1:innx=n2to10(s(i,:); %讲二进制转换为十进制讲二进制转换为十进制xx=-1.0+x*3/(power(2,bn)-1); %转化为转化为-1,2区间的实数区间的实数f(i)=ft(xx); %计算函

4、数值,即适应度计算函数值,即适应度 end f=f;%计算选择概率计算选择概率 fsum=sum(f.*f); ps=f.*f/fsum;%计算累积概率计算累积概率 p(1)=ps(1); for i=2:innp(i)=p(i-1)+ps(i); end p=p;%“选择选择”操作操作 function seln=sel(s,p); inn=size(p,1); %从种群中选择两个个体从种群中选择两个个体 for i=1:2r=rand; %产生一个随机数产生一个随机数prand=p-r;j=1;while prand(j)0j=j+1;endseln(i)=j; %选中个体的序号选中个体的

5、序号 end%“交叉交叉”操作操作 function scro=cro(s,seln,pc);inn=size(s,1); bn=size(s,2);pcc=pro(pc); %根据交叉概率决定是否进行交叉操作,根据交叉概率决定是否进行交叉操作,1 则是,则是,0 则否则否 if pcc=1chb=round(rand*(bn-2)+1; %在在1,bn-1范围内随机产生一个交叉位范围内随机产生一个交叉位scro(1,:)=s(seln(1),1:chb) s(seln(2),chb+1:bn);scro(2,:)=s(seln(2),1:chb) s(seln(1),chb+1:bn); e

6、lsescro(1,:)=s(seln(1),:);scro(2,:)=s(seln(2),:); end %“变异变异”操作操作 function snnew=mut(snew,pm);bn=size(snew,2); snnew=snew;pmm=pro(pm); %根据变异概率决定是否进行变异操作,根据变异概率决定是否进行变异操作,1 则是,则是,0 则否则否 if pmm=1chb=round(rand*(bn-1)+1; %在在1,bn范围内随机产生一个变异位范围内随机产生一个变异位snnew(chb)=abs(snew(chb)-1); end %目标函数目标函数 function y=ft(x); %y=x.*sin(10*pi*x)+2; y=-x*x+2*x+0.5;%将将 2 进制数转换为进制数转换为 10 进制数进制数 function x=n2to10(s);bn=size(s,2); x=s(bn); for i=1:bn-1x=x+s(bn-i)*power(2,i); end

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号