做了一次简单的尝试,也算是对学习的一个小巩固了叭。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,'*-');
所得收敛情况如下图