粒子群算法
粒子群算法是一種啟發式算法,它的核心是思想是利用群體中的個體對信息的共享使整個群體的運動在問題求解空間中產生從無序到有序的演化過程,從而獲得問題的可行解。
思想就是放一群鳥,每過一段時間更新(迭代)每只鳥的位置和速度。
粒子(鳥)的速度主要與三個因素有關,1、慣性;2、自己飛行過程中的最佳位置(自我認知);3、整個鳥群飛行過程中的最佳位置(社會認知)。
核心公式有
其中,
\({v_i^d}\)表示第d次迭代時,第i個粒子的速度
\({x_i^d}\)表示第d次迭代時,第i個粒子的位置
w是慣性權重,一般取0.9~1.2
c1是個體學習因子,最初提出粒子群的大牛認為這兩個因子取2合適
c2是社會學習因子
\({pbest_i^d}\)表示第 i 個粒子截止到第 d 次迭代的最佳位置
\({gbest^d}\)表示截止到第 d 次迭代,所有粒子的最佳位置
r1、r2是0~1的隨機數,就是讓過程具有隨機性
一、慣性權重的改進
1、定值
直接取0.9~1.2之間的一個定值
2、(非)線性遞減慣性權重
一個較大的慣性權值有利於全局搜索,而一個較小的權值則更利於局部搜索。
即慣性權值大表現為廣撒網,慣性權值小表現為精准捕撈。
\({w^d}\)表示第 d 次迭代時的慣性權值,隨着迭代次數的增加而線性遞減。
同理,也有學者提出非線性遞減:
三者的關系:
3、自適應慣性權重
對於每一次迭代,每一個粒子的適應度不同,根據這個適應度來確定權重,適應度越好(離最優解越近),則給的權重越小,讓它搜索的步長小一點,反之越大。
4、隨機慣性權重
之前只用線性/非線性遞減時,我們讓它前期廣撒網,有利於全局搜索;后期精准捕撈,有利於局部搜索。
如果使用隨機的慣性權重,可以避免在迭代前期局部搜索能力的不足,也可以避免在迭代后期全局搜索能力的不足。
(實際上就是每次迭代給慣性權重一個隨機數)
兩種實現:
1)直接用rand(1)給一個[0,1)的隨機數
2)\({w=w_{end}+(w_{start}-w_{end})×rand(1)+\sigma×randn(1)}\)
\({\sigma}\)是正態分布的標准差,一般取0.2~0.5之間的一個數
二、學習因子的改進
1、壓(收)縮因子法
個體學習因子c1和社會(群體)學習因子c2決定了粒子本身經驗信息和其他粒子的經驗信息對粒子運行軌跡的影響,其反映了粒子群之間的信息交流。
設置c1較大的值,會使粒子 過多地在自身的局部范圍內搜索,而較大的c2的值,則又會促使粒子過早收斂到局部最優值。
為了有效地控制粒子的飛行速度,使算法達到全局搜索與 局部搜索兩者間的有效平衡,Clerc構造了引入收縮因子的 PSO模型,采用了壓縮因子,這種調整方法通過合適選取參 數,可確保PSO算法的收斂性,並可取消對速度的邊界限制。
具體實現為:
就相當於對每次的速度進行了壓縮。
2、非對稱學習因子
由於c1越大,全局搜索能力越強,c2越大,局部搜索能力越強,因此在搜索前期我們應當讓c1大、c2小,在后期讓c1小、c2大。
所以讓c1隨迭代次數線性遞減、c2線性遞增,也可以嘗試一下非線性的效果。
在一個學者的一篇論文中,c1從2.5到0.5,c2從1.0到2.25,也可以嘗試其他值。
小結:粒子群算法需結合其他智能算法才適合解決組合優化問題,所以組合優化問題使用智能算法的話優先選擇模擬退火算法。