参考资料
算法的特点![在这里插入图片描述](https://img-blog.csdnimg.cn/20201017093604857.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMTYzOTc4,size_16,color_FFFFFF,t_70#pic_center)
算法的理论基础
算法的基本概念
标准遗传算法
算法的改进方向
算法的流程
算法的关键参数
Matlab仿真
%clear all;
%clode all;
%clc;
x = 0:0.01:10;
y = x+10*sin(5*x)+7*cos(4*x);
plot(x,y)
xlabel('x')
ylabel('f(x)')
title('f(x)=x+10sin(5x)+7cos(4x)')
clear;
close all;
clc;
NP = 50;
L = 20;
Pc = 0.8;
Pm = 0.1;
G = 100;
Xs = 10;
Xx = 0;
f = randi([0,1],NP,L);
%%%遗传算法循环%%%
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,:) = f(fiti,:);
newi = newi+1;
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
xBest;
figure
plot(trace)
xlabel('迭代次数')
ylabel('目标函数值')
title('适应度进化曲线')
function result =func1(x)
fit=x+10*sin(5*x)+7*cos(4*x);
result=fit;
end```