差分进化算法
文章目錄
- 前言
- 一、差分進(jìn)化算法描述
- 二、差分進(jìn)化算法流程
- 1.初始化
- 2.變異
- 3.交叉
- 4.選擇
- 5。終結(jié)條件
- 2.流程圖
- 總結(jié)
前言
差分進(jìn)化算法(Differential Evolution Algorithm,DE)是一種高效的全局優(yōu)化算法。它也是基于群體的啟發(fā)式搜索算法,群中的每個個體對應(yīng)一個解向量。差分進(jìn)化算法的進(jìn)化流程則與遺傳算法非常類似,都包括變異、雜交和選擇操作,但這些操作的具體定義與遺傳算法有所不同。(百度百科)
一、差分進(jìn)化算法描述
差分進(jìn)化算法和遺傳算法有些相似,但是比遺傳算法簡單好實現(xiàn),但是差分進(jìn)化算法的變種,或者說變形有很多,大家可以根據(jù)具體情況選擇。
差分進(jìn)化算法也是在現(xiàn)有的解上面,根據(jù)一定的辦法選擇幾個解,根據(jù)變異公式把這幾個解融合成一個變異解,這個過程稱為變異;把第i個變異解和第i個舊解的每個參數(shù),跟據(jù)一定概率選擇選擇新解或者舊解的值,稱為交叉,形成交叉解;把第i個交叉解和第i個舊解比較,選擇較優(yōu)的解保存作為下一次循環(huán)的解,這也是差分進(jìn)化算法最不同于遺傳算法的地方。
二、差分進(jìn)化算法流程
1.初始化
隨機(jī)初始化數(shù)目為NP的D維參數(shù)向量x,x(i)表示第i個解,每個解參數(shù)可以表示為x(i,j),i=1,2,…,NP,j=1,2,…,D
解數(shù)目NP根據(jù)情況選擇,一般選取[50,200]。
2.變異
對于每個解向量x(i),對應(yīng)的變異向量v可以表示為:
v(i)=x(r0)+F*(x(r1)-x(r2))
r0,r1,r2為屬于[1,…,NP]的三個隨機(jī)數(shù),并且i,r0,r1,r2都不相同,這要求NP必須大于等于4。
變異算子 F 取值范圍為[0,2],F過小可能陷入局部最優(yōu),F過大則不容易收斂,一般去[0.4,1]居多。
邊界問題:如果變異以后的值v(i,j)超出了邊界,可以隨機(jī)再選擇一個數(shù),或者直接去邊界值都是可以的。
3.交叉
接下來求交叉向量u,對于u的每個值,有:
如果 rand()<=CR: u(i,j)=v(i,j)
如果 rand()>CR : u(i,j)=x(i,j)
rand()是一個隨機(jī)數(shù),CR是交叉算子,[0,1],用來控制選擇變異向量值還是原來的向量值。
4.選擇
把交叉向量和原向量對比,選擇較優(yōu)的那個,這里交叉向量之和對應(yīng)的原向量對比,也就是對比u(i)和x(i)哪個更優(yōu),就選擇哪個作為新的解向量,更新向量x,進(jìn)行下一步。
5。終結(jié)條件
當(dāng)最后的解滿足條件,或者遍歷次數(shù)達(dá)到最大,則結(jié)束,否則重復(fù)2到4。
2.流程圖
總結(jié)
差分進(jìn)化算法比較簡答,容易實現(xiàn),可修改的地方也不少,比如變異向量選擇上面,可以選擇x(best)+F*(x(r1)-x(r2)),x(best)是全局最優(yōu)解。甚至說F*(…)里面的隨機(jī)參數(shù),可以是四個六個,這些都是差分進(jìn)化算法的變形。
總結(jié)
- 上一篇: RRT算法三维避障的MATLAB实现
- 下一篇: 解决从PDF复制文本到word的时候排版