📄 ga.m
字号:
function []=main(N,pcro,pmut)
%遗传算法主函数
%用以实现求给定函数fun在给定区间[low,up]上的极大值
% pcro交叉概率,pmut变异概率,N为迭代次数
low=0; %区间下限
up=9; %区间上限
n=50; %种群个数
length=22; %求得单个变量编码长度
pop=encode(length,n); %用解码函数求得初始种群,n为种群个体个数
f='x+10*sin(x.*5)+7*cos(x.*4)';
gen=0; %代数初始化
vfx=[];
mfx=[];
while(gen<=N)
fval=zeros(1,n); %初始化函数值
fit=zeros(1,n); %初始化适应度
x=decode(pop(:,1:22),low,up);
fx=eval(f);
if gen==1
figure(1);fplot(f,[low,up]);grid on;hold on;
plot(x,fx,'k*');
title('(a)染色体初始位置分布图');
xlabel('x');ylabel('f(x)');
end
fsum=sum(fx);
fmin=min(fx);
fs=fsum-n*fmin;
fit=(fx-fmin)/fs; %求个体的适应度
pfx=mean(fx);
q(1)=fit(1);
for i=2:n
q(i)=q(i-1)+fit(i); %累加个体适应度形成赌轮
end
pop=select(pop,q,n); %选择
pop=crossover(pop,pcro,n,length); %交叉
pop=mutation(pop,pmut,n,length); %变异
gen=gen+1; %下一代
[x]=decode(pop(1,:),low,up);
fval=fun(x);
maxf=fval;
for i=1:n
[x]=decode(pop(i,:),low,up); %解码最终得到的个体
fval=fun(x); %计算其函数值
if fval>maxf %最优点及最优值得到最终种群中的
maxf=fval;
x0=[x];
end
end
mfx=[mfx pfx];
vfx=[vfx maxf];
if gen==N
x=decode(pop(:,1:22),low,up);
fx=eval(f);
figure(2);fplot(f,[low,up]);grid on;hold on;
plot(x,fx,'k*');
title('(b)染色体最终位置分布图');
xlabel('x');ylabel('f(x)');
end
end
figure(3);plot(vfx);
title('函数最优个体适应度值变化曲线')
xlabel('Generation');ylabel('maxf');
figure(4);plot(mfx);
title('函数平均个体适应度值变化曲线')
xlabel('Generation');ylabel('pf');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -