📄 spga.m
字号:
x = 0:10; y1 = sin(x);
popsize=50;lchrom=32;gen=50;minn=0;sitea=0;
%a1=zeros(1,length(y)+3);
%a1(2)=rand(1,1)*max(y);
B=zeros(popsize,lchrom);
A=rand(popsize,lchrom);
bestch=zeros(1,lchrom);
format long;
for i=1:popsize
for j=1:lchrom
if A(i,j)>=0.5
A(i,j)=1;
else
A(i,j)=0;
end
end
end
%hopevalue=zeros(1,popsize);
for kk=1:gen
hopevalue=zeros(1,popsize);
for i=1:popsize
for j=2:lchrom
hopevalue(i)=hopevalue(i)+A(i,j)*(2^(-j+1));
end
if A(i,1)==1
hopevalue(i)=-hopevalue(i);
end
end
%hopevalue
%a2=-0.26627375583248;%*max(y);
%maxerr=gasp(y1,a2)
maxerr=zeros(1,popsize);
for i=1:popsize
maxerr(i)=gasp(y1,hopevalue(i));
end
%maxerr
[minerror,k]=min(maxerr);
minerror
bestch=A(k,:);
bestvalue=hopevalue(k)
merror=max(maxerr);
fitness=zeros(1,popsize);
sumfitness=0;
for i=1:popsize
fitness(i)=1-maxerr(i)/merror;
sumfitness=sumfitness+fitness(i);
end
%fitness
%sumfitness
for i=1:popsize/2
mate1=select(sumfitness,fitness);
mate2=mate1;
while mate2==mate1
mate2=select(sumfitness,fitness);
end
[B(2*i-1,:),B(2*i,:)]=crossover(A(mate1,:),A(mate2,:));
end
A=B;
A(k,:)=bestch;
kk
pause;
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -