1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > matlab遗传算法先收敛后发散 遗传算法收敛问题

matlab遗传算法先收敛后发散 遗传算法收敛问题

时间:2022-01-20 11:22:47

相关推荐

matlab遗传算法先收敛后发散 遗传算法收敛问题

本人在做一个目标函数的最优化问题,但是目标函数以及进化曲线如下:

求得是目标函数的最小值,因此去目标函数的倒数作为适应度函数。

现在的问题是,进化曲线在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代

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。