这是遗传算法中的代码,报错部分已经用图片展示了,感谢。
figure(1);
fplot('x+8*sin(5*x)+5*cos(4*x)',[0,10]);
clear all;clc;
NP=50;
L=20
Pc=0.7;
Pm=0.2;
G=100;
Xs=10;
Xx=0;
f=randi([0,1],NP,L);
trace=zeros(1,G);
for k=1:G
%解码
for i = 1:NP
U = f(i,:);
m=0;
for j = 1:L
m=U(j)*2^(j-1)+m;
end
x(i)=Xx +m*(Xs-Xx)/(2^L-1);
Fit(i) = func1(x(i));
end
maxFit=max(Fit);
minFit=min(Fit);
rr = find(Fit==maxFit);
fBest = f(rr(1,1),:);
xBest = x(rr(1,1));
Fit = (Fit-minFit)/(maxFit-minFit);
%复制操作
sum_Fit = sum(Fit);
fitvalue = Fit./sum_Fit;
fitvalue = cumsum(fitvalue);
ms=sort(rand(NP,1))
fiti = 1;
newi = 1;
while newi <=NP
if(ms(newi)<fitvalue(fiti))
nf(newi,:)=fitvalue(fiti);
newi=newi+i;
else
fiti = fiti +1;
end
end
%基于概率的交叉操作
for i =1:2:NP
p=rand;
if p<Pc
q = randi([0,1],1,L);
for j =1:L
if q(j)==1
temp = nf(i + 1, j);
nf(i+1,j)=nf(i.j);
nf(i,j)=temp;
end
end
end
end
%基于概率的变异操作
i=1;
while i <= round(NP*Pm)
h = randi([1,NP],1,1);
for j = 1:round(L*Pm)
g=randi([1,L],1,1);
nf(h,g) = ~nf(h,g);
end
i=i+1;
end
f=nf;
f(1,:)=fBest;
trace(k)=maxFit;
end
disp('最优解')
disp(xBest)
figure(2)
plot(trace)
xlabel('迭代次数')
ylabel('目标函数值')
title('适应度进化曲线')
function fit = func1(x)
fit = x+8 *sin(5*x) + 5*cos(x);
end