📄 ga.m
字号:
function []=main(N,pcro,pmut)
%遗传算法主函数
%用以实现求给定函数fun在给定区间[low,up]上的极大值
% pcro交叉概率,pmut变异概率,N为迭代次数
low=-5; %区间下限
up=5; %区间上限
prec=0.0001; %要求结果精度
n=100; %种群个数
length=ceil(log2((up-low)/prec+1)); %求得单个变量编码长度
pop=encode(length,n); %用解码函数求得初始种群,n为种群个体个数
gen=0; %代数初始化
while(gen<=N)
fval=zeros(1,n); %初始化函数值
fit=zeros(1,n); %初始化适应度
for i=1:n
[x1,x2]=decode(pop(i,:),low,up,length); %利用解码函数解码个体
fval(i)=fun(x1,x2); %求个体的函数值值
end
fsum=sum(fval);
fmax=max(fval);
fs=n*fmax-fsum;
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,pcro,n,length); %交叉
pop=mutation(pop,pmut,n,length); %变异
gen=gen+1; %下一代
end
minf=inf;
for i=1:n
[x1,x2]=decode(pop(i,:),low,up,length); %解码最终得到的个体
fval=fun(x1,x2); %计算其函数值
if fval<minf %最优点及最优值得到最终种群中的
minf=fval;
x0=[x1,x2];
end
end
minf,x0 %输出最小值以及此时的自变量
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -