📄 ga.asv
字号:
function []=main(N,pcro,pmut)
%遗传算法主函数
%用以实现求给定函数fun在给定区间[low, up]上的极大值
% pcro交叉概率,pmut变异概率,N为迭代次数
pcro=0.8;
pmut=0.1;
N=400;
low=1; %区间下限
up1=4; %区间上限
up2=2; %区间上限
perk=0.0001; %要求结果精度
n=150; %种群个数
length1=ceil(log2((up1-low)/perk+1)); %求得单个变量编码长度x1
length2=ceil(log2((up2-low)/perk+1)); %求得单个变量编码长度x2
pop=encode(length1,length2,n); %用解码函数求得初始种群,n为种群个体个数
gen=1; %代数初始化
minf=inf;
while(gen<=N)
fval=zeros(1,n); %初始化函数值
fit=zeros(1,n); %初始化适应度
for i=1:n
[x1,x2]=decode(pop(i,:),low,up1,up2,length1); %利用解码函数解码个体
fval(i)=fun5(x1,x2); %求个体的函数值
end
fsum=sum(fval);
fmax=max(fval);
%fit=fval/fsum;
fs=n*fmax-fsum;
%fit=1-fval;
fit=(fmax-fval)/fs; %求个体的适应度
q(1)=fit(1);
for i=2:n
q(i)=q(i-1)+fit(i); %累加个体适应度形成赌轮
end
pop=select(pop,q,n); %选择
pop=crossover(pop,gen,N,n,length); %交叉
%pop=crossover(pop,pcro,n,length); %交叉
%pop=mutation(pop,pmut,n,length); %变异
pop=mutation(pop,gen,N,n,length); %变异
for i=1:n
[x1,x2]=decode(pop(i,:),low,up,length); %解码最终得到的个体
fval(i)=fun5(x1,x2); %计算其函数值
% if fval(i)>minf %求最大值
if fval(i)<minf %最优点及最优值得到最终种群中的
minf=fval(i);
x0=[x1,x2];
end
end
best(gen)=minf;
%best(gen)=fmax;
ave(gen)=fsum/n;
on_line(gen)=sum(ave)/gen;
off_line(gen)=sum(best)/gen;
%if gen==400
% figure;plot(fval,'g');
% end
gen=gen+1; %下一代
end
minf,x0 %输出最小值以及此时的自变量
figure;plot(best,'b');
title('每一代的最优值');
figure;plot(ave,'r');
title('每一代的平均值');
figure;plot(on_line,'k');
title('在线性能');
figure;plot(off_line,'g');
title('离线性能');
result;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -