function obj=yichuan(lb,ub,px,pm)
%lb,ub为自变量的下界与上界,px为杂交概率,pm为变异概率
popsize=40; %设定种群大小为40
maxgen=500; %设定最大遗传代数为500代
dim=20; %定义变量的维数为20
bits=20; %设定变量的二进制位数为20
duan=20;
trace=zeros(maxgen,2); %遗传算法性能跟踪
chrom=crt(popsize,dim*bits); %创建初始种群
gen=0; %代计数器
x=bs(chrom,lb,ub,dim,bits);
obj=fun(x);
figure(1)
plot(obj,'-xr');grid;
title('初始种群中个体的分布图')
xlabel('个体');
ylabel('目标函数值');
Nesl=popsize; %轮盘选择个数,设定为与种群大小相等
gen=0; %遗传代数计数器,设定初始值为0
obj=fun(x);
fitv=fel(x);
%基于适应度的轮盘选择
chrom=exrws(chrom,fitv,Nesl);
while gen%单点交叉后得到大小为popsize子代新种群,与原来的父代种群合并为大小为2*popsize的新种群
newchrom=[chrom;exxov(chrom,px)];
%最优个体保护策略 (先提出种群中的最优个体,然后用轮盘选择出Nesl-1个个体
%构建成新的种群,再将最优个体插入新种群的第一行)
x=bs(newchrom,lb,ub,dim,bits);
fitv=fel(x);
[Y,I]=max(fitv);
newchrom=[newchrom(I,:);exrws(newchrom,fitv,Nesl-1)];
%变异概率为pm的基本位变异,假设有N个染色体发生了变异,将这N个染色体插入原来的种群中,得到大小为popsize+N的新种群
chrom=[newchrom;exmut(newchrom,pm)];
%最优个体保护策略 (先提出种群中的最优个体,然后用轮盘选择出Nesl-1个个体
%构建成新的种群,再将最优个体插入新种群的第一行)
x=bs(chrom,lb,ub,dim,bits);
fitv=fel(x);
[Y,I]=max(fitv);
chrom=[chrom(I,:);exrws(chrom,fitv,Nesl-1)];
%计算新种群的目标函数值
x=bs(chrom,lb,ub,dim,bits);
obj=fun(x);
fitv=fel(x);
if gen==20
figure(2)
plot(obj,'-xr');grid;
title('经过20次遗传迭代后种群中个体的分布图')
xlabel('个体');
ylabel('目标函数值');
end
if gen==100
figure(3)
plot(obj,'-xr');grid;
title('经过100次遗传迭代后种群中个体的分布图')
xlabel('个体');
ylabel('目标函数值');
end
if gen==250
figure(4)
plot(obj,'-xr');grid;
title('经过250次遗传迭代后种群中个体的分布图')
xlabel('个体');
ylabel('目标函数值');
end
gen=gen+1;
trace(gen,1)=min(obj);
trace(gen,2)=sum(obj)/length(obj);
aver=zeros(length(fitv),1);
aver(:,1)=sum(fitv)/length(fitv);
aver=(fitv-aver)
该博客介绍了一个使用Matlab实现的遗传算法来寻找多元函数最小值的方法。通过设定种群大小、最大遗传代数、变量维数和二进制位数,算法创建初始种群并进行轮盘选择、单点交叉、变异等操作,同时实施最优个体保护策略,以在迭代过程中优化目标函数。博客展示了不同遗传代数后种群中个体分布的图表。

16万+

被折叠的 条评论
为什么被折叠?



