differential

更新时间:2023-01-02 12:11:03 阅读: 评论:0


2023年1月2日发(作者:合肥学院怎么样)

差分进化算法(DifferentialEvolution,DE)实例详解

差分进化算法是(differentialevolution,DE)是基于群体智能理论的优化算法,是通过群体内个体间的合作与竞争⽽产⽣的智能优化搜

索算法。对⽐进化计算,它保留了基于种群的全局搜索策略,采⽤实数编码、基于差分的简单变异操作和“⼀对⼀”的竞争⽣存策略,降低

了进化计算操作的复杂性。

1主要特点

结构简单、容易使⽤

性能优越

⾃适应性

具有内在的并⾏性

算法通⽤

2算法流程

2.1初始化

随机⽣成初试种群X:Xn(n=1,2......NP)。

2.2变异

基于个体间的向量加减运算:Vn=Xn1+F(Xn2-Xn3),n1、n2、n3各不相同(NP>=4),F为变异算⼦,F=[02]是⼀个实常数因数,变

异种群V。

2.3交叉

不同于进化计算中对个体间进⾏交叉操作,差分进化计算对每个个体的维度在变异种群V和初始种群X间进⾏⼀致性交叉操作且⾄少保证⼀

次交叉,CR交叉算⼦,交叉种群U。

2.4选择

按照适应度⽐较,在初始种群X和交叉种群U中进⾏选择操作,形成下⼀代种群X。

2.5边界条件处理

2种⽅案,⼀是重新⽣成,⼆是边界吸收。

3关键参数

3.1种群数量NP

⼀般在5D-10D之间,D为变量维度。

3.2变异算⼦F

F=[02]是⼀个实常数因数,F过⼩容易早熟,F过⼤易陷⼊局部最优,⼀般取0.4-1,更好的是0.5。

3.3交叉算⼦CR

CR=[01],⼀般取0.1,过⼤容易加速收敛。

3.4最⼤进化代数G

⼀般取100-500。

4仿真实例

问题:f(x,y)=3cos(xy)+x+y,x、y=[-44],求最⼩值。

4.1问题画图

x=-4:0.02:4;

y=-4:0.02:4;

n=size(x,2);

fori=1:n

forj=1:n

z(i,j)=3*cos(x(i)*y(j))+x(i)+y(j);

end

end

mesh(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:NP

ob(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);

%循环算法

forgen=1:G

%%%%%变异

lamda=exp(1-G/(G+1-gen));

F=F0*2^lamda;

fori=1:NP

r1=randi(NP);

whiler1==i

r1=randi(NP);

end

r2=randi(NP);

whiler2==i||r2==r1

r2=randi(NP);

end

r3=randi(NP);

whiler3==i||r3==r2||r3==r1

r3=randi(NP);

end

v(:,i)=x(:,r1)+F*(x(:,r2)-x(:,r3));

end

4.2.4交叉操作

%%%%%交叉

r=randi(D);

fori=1:D

cr=rand;

ifcr

u(i,:)=v(i,:);

el

u(i,:)=x(i,:);

end

end

4.2.5边界条件处理

%%%%%边界条件处理

fori=1:D

forj=1:NP

ifu(i,j)

u(i,j)=xx;%采取边界吸收原则,因为最⼩值就在边界上

elifu(i,j)>xs

u(i,j)=xs;

end

end

end

end

4.2.6选择操作

%%%%%选择

fornp=1:NP

nob(np)=func2(u(:,np));

end

fornp=1:NP

ifnob(np)

x(:,np)=u(:,np);

end

end

fornp=1:NP

ob(np)=func2(x(:,np));

end

trace(gen+1)=min(ob);

end

4.2.7结果输出

%%%%%结果和画图

Y=min(ob);

[nindex]=find(ob==Y);

X=x(:,index)';

figure;

plot(trace);

xlabel('迭代次数');

ylabel('⽬标函数值');

title('DE⽬标曲线曲线');

4.3问题结果

[xy]=[-3.9478-4.0000],ans=-10.9374。

本文发布于:2023-01-02 12:11:03,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/90/77605.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

下一篇:daniella kertesz
标签:differential
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图