差分进化算法(Differential Evolution)

差分进化算法(Differential Evolution)

1.算法提出及思想来源

差分进化算法(Differential Evolution,DE)于1997年由Rainer Storn和Kenneth Price在遗传算法等进化思想的基础上提出的,本质是一种多目标(连续变量)优化算法(MOEAs),用于求解多维空间中整体最优解。

差分进化思想来源即是早期提出的遗传算法(GeneticAlgorithm,GA),模拟遗传学中的杂交(crossover)、变异(mutation)、复制(reproduction)来设计遗传算子。

差分进化算法相对于遗传算法而言,相同点都是通过随机生成初始种群,以种群中每个个体的适应度值为选择标准,主要过程也都包括变异、交叉和选择三个步骤。不同之处在于遗传算法是根据适应度值来控制父代杂交,变异后产生的子代被选择的概率值,在最大化问题中适应值大的个体被选择的概率相应也会大一些。而差分进化算法变异向量是由父代差分向量生成,并与父代个体向量交叉生成新个体向量,直接与其父代个体进行选择。显然差分进化算法相对遗传算法的逼近效果更加显著。

2.算法过程:

这里写图片描述
DE的群体由突变和选择过程驱动。突变过程,包括突变和交叉操作,这两步操作被设计用于利用或探索搜索空间,而选择过程被用于确保有希望的个体的信息可以进一步利用。

(1)种群初始化

在解空间中随机均匀产生M个个体,每个个体由n维向量组成

Xi(0)=(xi,1(0),xi,2(0),xi,3(0),,xi,n(0))i=1,2,3,,M X i ( 0 ) = ( x i , 1 ( 0 ) , x i , 2 ( 0 ) , x i , 3 ( 0 ) , … , x i , n ( 0 ) ) i = 1 , 2 , 3 , … , M

第i个个体的第j维值取值方式如下:
Xi,j(0)=Lj_min+rand(0,1)(Lj_maxLj_min)i=1,2,3,,Mj=1,2,3,,n X i , j ( 0 ) = L j _ m i n + r a n d ( 0 , 1 ) ( L j _ m a x − L j _ m i n ) i = 1 , 2 , 3 , … , M j = 1 , 2 , 3 , … , n

对于群体规模参数M,一般介于 5×n 5 × n 10×n 10 × n 之间,但不能少于 4×n 4 × n

(2)变异:
在第g次迭代中,从种群中随机选择3个个体 Xp1(g),Xp2(g),Xp3(g) X p 1 ( g ) , X p 2 ( g ) , X p 3 ( g ) ,且 p1p2p3i p 1 ≠ p 2 ≠ p 3 ≠ i ,生成的变异向量为:

Hi(g)=Xp1(g)+F(Xp2(g)Xp3(g)) H i ( g ) = X p 1 ( g ) + F · ( X p 2 ( g ) − X p 3 ( g ) )

其中 Δp2,p3(g)=Xp2(g)Xp3(g) Δ p 2 , p 3 ( g ) = X p 2 ( g ) − X p 3 ( g ) 是差分向量, F F 是缩放因子
对于缩放因子F,一般是在[0,2]之间选择,通常取0.5
参数 F F 的自适应调整:
将变异算子中随机选择的三个个体进行从优到劣的排序,得到Xb,Xm,Xw,对应适应度 fb,fm,fw f b , f m , f w ,变异算子改为:
Vi=Xb+Fi(XmXw) V i = X b + F i ( X m − X w )

同时,F的取值根据生成差分向量的两个个体自适应变化:
Fi=Fl+(FuFl)fmfbfwfbFl=0.1,Fu=0.9 F i = F l + ( F u − F l ) f m − f b f w − f b 其 中 , F l = 0.1 , F u = 0.9

变异策略:

DE/rand/1:Vi(g)=Xp1(g)+F(Xp2(g)Xp3(g)) D E / r a n d / 1 : V i ( g ) = X p 1 ( g ) + F · ( X p 2 ( g ) − X p 3 ( g ) )
DE/best/1:Vi(g)=Xbest(g)+F(Xp1(g)Xp2(g)) D E / b e s t / 1 : V i ( g ) = X b e s t ( g ) + F · ( X p 1 ( g ) − X p 2 ( g ) )
DE/current to best/1:Vi(g)=Xi(g)+F(Xbest(g)Xi(g))+F(Xp1(g)Xp2(g)) D E / c u r r e n t   t o   b e s t / 1 : V i ( g ) = X i ( g ) + F · ( X b e s t ( g ) − X i ( g ) ) + F · ( X p 1 ( g ) − X p 2 ( g ) )
DE/best/2:Vi(g)=Xbest(g)+F(Xp1(g)Xp2(g))+F(Xp3(g)Xp4(g)) D E / b e s t / 2 : V i ( g ) = X b e s t ( g ) + F · ( X p 1 ( g ) − X p 2 ( g ) ) + F · ( X p 3 ( g ) − X p 4 ( g ) )
DE/rand/2:Vi(g)=Xp1(g)+F(Xp2(g)Xp3(g))+F(Xp4(g)Xp5(g)) D E / r a n d / 2 : V i ( g ) = X p 1 ( g ) + F · ( X p 2 ( g ) − X p 3 ( g ) ) + F · ( X p 4 ( g ) − X p 5 ( g ) )

(3)交叉:

vi,j={hi,j(g)xi,j(g),rand(0,1)cr,else v i , j = { h i , j ( g ) , r a n d ( 0 , 1 ) ≤ c r x i , j ( g ) , e l s e

其中 cr[0,1] c r ∈ [ 0 , 1 ] 为 交 叉 概 率
参数 cr c r 的自适应调整:
这里写图片描述
其中 fi f i 是个体 Xi X i 的适应度, fmin f m i n fmax f m a x 分别是当前种群中最差和最优个体的适应度, f¯ f ¯ 是当前种群适应度平均值, crl c r l cru c r u 分别是 cr c r 的下限与上限,一般 crl=0.1,cru=0.6 c r l = 0.1 , c r u = 0.6

(4)选择:

Xi(g+1)={Vi(g)Xi(g),f(Vi(g))<f(Xi(g)),else X i ( g + 1 ) = { V i ( g ) , f ( V i ( g ) ) < f ( X i ( g ) ) X i ( g ) , e l s e

对于每个个体, Xi(g+1) X i ( g + 1 ) 要好于或持平于 Xi(g) X i ( g ) ,通过变异,交叉,选择达到全部最优。
伪代码:
这里写图片描述

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值