题目与分析
题目:计算函数
的最小值,其中每个变量的取值区间都是[-1, +1]。
案例分析:这是一个平方和函数,很明显,它唯一一个极小值点是(0,0,0,0,0,0,0,0,0,0)。程序的个体变量数为40,最大遗传代数为500,变量维数20,每个变量用20位表示,代沟为0.9。
对设定的群体进行选择,重组,变异,重插入然后不断进行迭代,其中的函数应用了gatbx工具箱,参数的设定如上。
工具箱地址:https://download.csdn.net/download/wlfyok/12583634
结果显示
上面两图是迭代到200次和400次时,函数值的取值分布,可以看到有异常的个体,但超过一半以慢慢向最优种群进化,随着迭代次数的增加,最终将我们得到想要的结果。
这是最终500次迭代后函数值的趋势,可以看到趋于0,与我们最初的分析一致。
代码
% 求解代码
NIND=40;
MAXGEN=500;
NVAR=20;
PRECI=20;
GGAP=0.9;
trace=zeros(MAXGEN,2);
FieldD=[rep([PRECI],[1,NVAR]);rep([-1;1],[1,NVAR]);rep([1;0;1;1],[1,NVAR])];
Chrom=crtbp(NIND,NVAR*PRECI);
gen=0;
zhi=bs2rv(Chrom,FieldD);
j=1;
for i=1:40
ObjV(i,:)=sum(zhi(i,:).^2);
end
while gen < MAXGEN
FitnV=ranking(ObjV);
SelCh=select('sus',Chrom,FitnV,GGAP);
SelCh=recombin('xovsp',SelCh,0.7);
SelCh=mut(SelCh);
zhi=bs2rv(SelCh,FieldD);
for i=1:36
ObjVSel(i,:)=sum(zhi(i,:).^2);
end
[Chrom,ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel);
gen=gen+1;
trace(gen,1)=min(ObjV);
trace(gen,2)=sum(ObjV)/length(ObjV);
if mod(gen,100)==0
figure(j)
plot(ObjVSel)
j=j+1;
end
end
figure(j)
plot(trace(:,1))
hold on
plot(trace(:,2),'g-')
grid on
legend('种群均值变化','解的变化')
gatbx工具箱
分享gatbx工具箱,读者想要可联系笔者或在评论区发言,我们借一步说话,哈哈哈。
这个是工具箱的网址,大家可以去下载。
https://download.csdn.net/download/wlfyok/12583634