本人在做一个目标函数的最优化问题,但是目标函数以及进化曲线如下:
求得是目标函数的最小值,因此去目标函数的倒数作为适应度函数。
现在的问题是,进化曲线在100代之前波动比较剧烈,这个是什么原因?进化曲线是否符合一般规律?
第二个,如果进化曲线有问题,可以通过调整哪些参数来改善?
下面附上自己的代码:
%% 定义遗传算法参数
NIND=20;
MAXGEN=200;
a=5;b=5;c=5;d=5;
Pc=0.7;
GGAP=0.95;
Pm=0.001;
FieldD=[a b c d;300 0.2 200 0.1;500 0.4 400 0.3;1 1 1 1;0 0 0 0;1 1 1 1;1 1 1 1];
Chrom=crtbp(NIND,20);
N=4;
trace=zeros(N+1,MAXGEN);
%优化省略
while gen
FitnV=ranking(-ObjV);
SelCh=select('sus',Chrom,FitnV);
SelCh=recombin('xovsp',SelCh,Pc);
SelCh=mut(SelCh,Pm);
abcd=bs2rv(Chrom,FieldD);
求子代目标函数值ObjVSel
[Chrom,ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel);
abcd=bs2rv(Chrom,FieldD);
gen=gen+1;
%获取每代的最优解及其序号,Y为最优解,I为个体的序号
[Y,I]=max(ObjV);
trace(1:N,gen)=abcd(I,:);
trace(end,gen)=Y;
end
%%画进化图
figure(1);
plot(1:MAXGEN,trace(end,:));
grid on
xlabel('遗传代数')
ylabel('误差的变化')
title('进化过程')
bestX=trace(1:end-1,end);
bestErr=trace(end,end);
目标函数.jpg
(4.35 KB, 下载次数: 10)
-2-2 09:29 上传
目标函数
500.jpg
(58.66 KB, 下载次数: 5)
-2-2 09:28 上传
500代
200.jpg
(62.09 KB, 下载次数: 5)
-2-2 09:28 上传
200代