1. 簡介
粒子羣優化算法(Particle Swarm Optimization,PSO)是一種基於鳥類覓食提出來的進化計算技術,由電氣工程師Eberhart博士和美國社會心理學家Kennedy博士發明,是一種基於迭代的優化工具。
該算法的基本思想是通過羣體中個體之間的協作和信息共享來尋找最優解。由於沒有遺傳算法的交叉、變異,粒子羣算法更容易實現。
2. 基本運算過程
1)參數初始化
需要設置以下幾項:
-
迭代次數
-
羣體規模N。一般取20-60,複雜問題取100-200。
N過小,容易陷入局部最優; N過大,優化能力很好,但收斂速度慢。 -
最大速度Vm,最小速度-Vm。一般爲每一維度變量變化範圍的10%-30%。
作用在於維護算法的探索能力與開發能力的平衡。
較大,增強了全局搜索能力,但粒子容易飛過目標區域,導致局部搜索能力下降。
較小,開發能力增強,但會極大地增加全局搜索的時間,容易陷入局部最優。 -
變量取值範圍Xm,-Xm。
-
認知常數(學習因子、加速度常數)c1 c2 。c1=c2,取0- 4之間, 通常取2。
c1=0,喪失羣體多樣性,易陷入局優而無法跳出。
c2=0,由於個體之間沒有信息的交流,整個羣體相當於多個粒子進行盲目的隨機搜索,收斂速度慢,因而得到最優解的可能性小。
一般都不爲0,更容易保持收斂速度和搜索效果的均衡;c1=c2個體最優和全局最優佔相同權重。 -
隨機函數r1、r2。可以是相同類型,也可以是不同類型
2)獲取個體最優解與全局最優解
個體極值爲每個粒子找到的歷史上最優的位置信息,並從這些個體歷史最優解中找到一個全局最優解,與歷史最優解比較,選出最佳的作爲當前的歷史最優解。
3)更新粒子速度和位置
d表示維度
3.1)速度更新公式
速度更新公式由三部分構成:
第一部分“慣性”反映微粒的運動“習慣”,代表粒子有維持自己先前速度的趨勢。
第二部分“認知”反映粒子對自身歷史經驗的記憶或回憶,代表粒子有向自身歷史最佳位置逼近的趨勢。
第三部分“社會”反映粒子間協同合作與知識共享的羣體歷史經驗,代表粒子有向羣體歷史最佳位置逼近的趨勢。
通常在第d維的速度變化範圍限定在 [-Vm,Vm] 內,如果 v 超出了範圍,則該維的速度被限制爲該維邊界速度。
3.2)位置更新公式
通常在第d維的位置變化範圍限定在 [-Xm,Xm] 內,如果 x 超出了範圍,則該維的位置被限制爲該維邊界位置。
3.3)計算示意圖
用平行四邊形法則解釋如下:
4)循環終止條件
- 最大迭代數
- 可接受的滿意解在一個指定的範圍內即停止
3.有待改進
1)算法搜索精度不夠高。
2)算法不能夠絕對保證搜索到全局最優解,容易陷入局部極小解。
3)算法搜索性能對參數具有一定的依賴性。
4.求解多峯函數
推薦一個視頻 美賽蟻羣粒子羣魚羣
致謝 粒子羣算法的C++實現