📄 main.m
字号:
%用遗传算法进行简单函数的优化
clear
bn=23; %个体中每个变量的串长度
N=50; %个体中变量个数
inn=100; %初始种群大小
gnmax=400; %最大代数
pc=0.75; %交叉概率
pm=0.05; %变异概率
%产生初始种群
s=round(rand(inn,N*bn));
%计算适应度,返回适应度f和累积概率p
[f,p]=objf(s);
gn=1;
while gn<gnmax+1
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;
%记录当前代的最佳个体和最优函数值
for i=1:N
x=n2to10(s(nmax,(bn*(i-1)+1):(bn*i))); %讲二进制转换为十进制
xx=-500.0+x*1000/(power(2,bn)-1); %转化为[-500,500]区间的实数
xmax(gn,i)=xx;
end
ybest(gn)=ft(xmax(gn,:));
gn=gn+1;
end
gn=gn-1;
%绘制曲线
subplot(2,1,1);
plot(1:gn,[ymax;ymean]);
title('历代适应度变化','fonts',10);
legend('最大适应度','平均适应度');
subplot(2,1,2);
plot(1:gn,ybest);
title('历代最优值变化');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -