y=x.*sin(10*pi*x)+2;
clear
x=-1:2;
bn=22;
inn=50;
gnmax=200;
pc=0.75;
pm=0.05;
s=round(rand(inn,bn));
[f,p]=objf(s);
gn=1;
while gn
for j=1:2:inn
seln=sel(s,p);
scro=cro(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);
end
s=smnew;
[f,p]=objf(s);
[fmax,nmax]=max(f);
fmean=mean(f);
ymax(gn)=fmax;
ymean(gn)=fmean;
x=n2to10(s(nmax,:));
xx=-1.0+x*3/(power(2,bn)-1);
xmax(gn)=xx;
gn=gn+1
end
gn=gn-1;
subplot(2,1,1);
plot(1:gn,[ymax;ymean]);
title('历代适应度变化','fonts',10);
legend('最大适应度','平均适应度');
string1=['最终适应度',num2str(ymax(gn))];
gtext(string1);
subplot(2,1,2);
plot(1:gn,xmax,'r-');
legend('自变量');
string2=['最终自变量',num2str(xmax(gn))];
gtext(string2);
for i=1:inn
x=n2to10(s(i,:));
xx=-1.0+x*3/(power(2,bn)-1);
f(i)=ft(xx);
end
f=f';
fsum=0;
for i=1:inn
fsum=fsum+f(i)*f(i);
end
for i=1:inn
ps(i)=f(i)*f(i)/fsum;
end
p(1)=ps(1);
for i=2:inn
p(i)=p(i-1)+ps(i);
end
p=p';
function y=ft(x);
y=x.*sin(10*pi*x)+2;
function seln=sel(s,p);
inn=size(p,1);
for i=1:2
r=rand;
prand=p-r;
j=1;
while prand(j)<0
j=j+1;
end
seln(i)=j;
end
function scro=cro(s,seln,pc);
[inn bn]=size(s);
if rand
chb=ceil(rand*(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)];
else
scro(1,:)=s(seln(1),:);
scro(2,:)=s(seln(2),:);
end
function snnew=mut(snew,pm);
bn=size(snew,2);
snnew=snew;
if rand
chb=ceil(rand*bn);
snnew(chb)=abs(snew(chb)-1);
end
未定义函数或变量 'x'。