美文网首页
GA算法入门——针对简单的Object function

GA算法入门——针对简单的Object function

作者: _Nigora_ | 来源:发表于2019-08-07 10:33 被阅读0次

做了一次简单的尝试,也算是对学习的一个小巩固了叭。GA部分函数使用谢菲尔德大学遗传工具箱。

总的看来效果海星哈哈哈,继续改进鸭!不过这类算法可真的尽是些佛系看命算法啊哈哈哈~

%obj=sin(x)+(cos(4*x).^2)-2*x.^(0.5);

%GAtest

%m=-20:0.1:20;

diedai=400;%迭代次数

group=40;%种群规模

len=9;%染色体长度

lb=-20;

ub=20;

code=0;

scale=0;

lbin=1;

ubin=1;

axin=0;%max=1,min=0,求最大值还是最小值

FieldD=[len lb ub code scale lbin ubin]';

Chrom=crtbp(group,len);

history=zeros(group,diedai*len);

outputy=zeros(diedai,1);

outputx=zeros(diedai,1);

for i=1:diedai

history(:,(i-1)*len+1:(i-1)*len+len)=Chrom;

Phen=bs2rv(Chrom,FieldD);%将种群转化为实值

obj=objfunc(Phen);

obj=real(obj);

if axin==0

[m,position]=min(obj);

else [m,position]=max(obj);

end

outputx(i,1)=Phen(position,1);

outputy(i,1)=m;

FitnV=ranking(obj);

Chrom=xovmp(Chrom,0.7,2,0);%不减少代理的两点交叉

NewChrIx=rws(FitnV,group);%遗传,轮盘赌

Chrom=Chrom(NewChrIx,:);

Chorm=mutate('mut',Chrom);%突变

end

[a,b]=find(outputy==max(max(outputy)));

figure(1)

x=-20:0.1:20;

plot(x,objfunc(x));

hold on

plot(outputx(a,b),outputy(a,b),'r*');

figure(2)

plot(1:diedai,outputy,'*-');

所得收敛情况如下图

figure1 函数曲线与最终收敛点(min) figure2  收敛曲线

相关文章

网友评论

      本文标题:GA算法入门——针对简单的Object function

      本文链接:https://www.haomeiwen.com/subject/ujwgdctx.html