首页 > 编程知识 正文

思维进化算法,差分进化算法改进

时间:2023-05-03 11:42:45 阅读:147759 作者:3182

差分进化算法(differential evolution,DE )是一种基于群体智能理论的优化算法,是由群体中个体之间的合作与竞争产生的智能优化搜索算法。 与进化计算相比,保持了基于种群的全局搜索策略,采用了基于实数编码、差分的简单变异操作和“一对一”竞争生存策略,降低了进化计算操作的复杂性。

1主要特征结构简单,使用方便

性能优越

适应性

具有内在的并行性

算法通用化

2算法流程2.1随机生成初始化一次个体群x:xn (n=1,2 . NP )。

2.2变异基于个体间的向量加减:VN=xn1f(xn2-xn3 ),n1、n2、n3各不相同(NP=4),f为变异算子,F=[0 2]为实数系数,变异

2.3交叉与进化计算中个体间的交叉操作不同,差分进化计算中对各个体的维度在变异个体群v和初始个体群x之间进行一致性的交叉操作,保证至少一次交叉、CR交叉算子、交叉个体群u。

2.4基于选择适应度比较,在初始种群x和交叉种群u中进行选择操作,形成下一代种群x。

2.5边界条件处理的两种方案,一种是再生成,一种是边界吸收。

3关键参数3.1种群数量NP一般在5D-10D之间,d为变量维数。

3.2变异算子F F=[0 2]是实数系数,f过小时容易早熟,f过大时容易陷入局部最佳,通常取0.4-1,更优选取0.5。

3.3交叉算子CR CR=[0 1],一般取0.1,过大容易加速收敛。

3.4最大进化代数g一般取100-500。

4模拟实例问题: f(x,y )=3COS ) x y ) x y,x,y=[-4 4],求出最小值。

4.1问题情节x=-4:0.02:4; y=-4:0.02:4; n=size(x,2 ); forI=1:nforj=1:nz(I,j )=3*cos(x ) I ) y ) j ) ) x ) I ) y ) j; 结束消息(x,y,z ); xlabel(x ); ylabel(y );

4.2代码求解4.2.1种群初始化%%%%%初始化参数NP=20; D=2; G=100; F0=0.5; CR=0.1; xs=4; xx=-4; 初始种群x=rand(d,NP ) ) (*(xs-xx ) xx; %初始种群v=Zeros(d,NP ); %变异种群u=Zeros(d,NP ); %交叉种群4.2.2适应度计算%%%%%适应度fornp=1:npob(NP )=func2) x ) :NP ) ); end%%%%%适应度函数functionresult=func2(x ) z=3*cos ) x )1) x )2) ) x )1) x )2); result=z; end 4.2.3变异操作trace(1)=min(ob ); %循环算法for gen=1:G %%%%%变异lamda=exp(1-g/) g1-gen ); F=F0*2^lamda; for i=1:NP r1=粗暴的年糕(NP ); while r1==i r1=粗暴的年糕(NP ); end r2=粗暴的年糕(NP ); while r2==i || r2==r1 r2=粗鲁的雪糕(NP ); end r3=粗暴的年糕(NP ); while r3==i || r3==r2 || r3==r1 r3=粗暴的雪糕(NP ); end v(:I )=x(:r1 ) f* ) x65:R2(-x65:r3 ); end 4.2.4交叉操作%%%%%交叉r=粗年糕(d ); for i=1:D cr=rand; ifcrcr|||I==ru(I, )=v ) I, ); ELSEu(I, )=x ) I, end end 4.2.5边界条件处理%%%%%边界条件处理forI=1:dforj=1:NPifu(I,j ) xxu ) I,j )=xx; 采取%边界吸收原则。 因为最小值在边界上,所以elseifu(I,j ) xsu ) I,j )=xs; endendend4.2.6选择操作%%%%%选择fornp=1:NPnob(NP )=func2) u65:NP ) ); endfornp=1x(x(:npifnob(np ) ob ) NP ) x ) :NP )=u ) :NP ); endendfornp=1:NPob(NP )=func2) x ) :NP ); endtrace(gen1)=min ) ob; end 4.2.7结果输出%%%结果和图y=min(ob ); [nindex]=find(ob==y ); x=x(3360,索引) ); 图形; plot (跟踪; xlabel ('重复次数); ylabel (目标函数值); title(de目标曲线); 4.3问题的结果[x y]=[-3.9478 -4.0000],ans=-10.9374。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。