1. 程式人生 > >標準粒子群演算法(PSO)matlab實現

標準粒子群演算法(PSO)matlab實現

標準PSO演算法的核心公式如下:
在這裡插入圖片描述
其中,w,c1,c2是預置好的:
w稱為慣性權重,大小一般在[0.5,1.5]。
c1,c2稱為學習因子,一般取值[1,4],通常設定的c1=c2,但是c1與c2不必完全相同。

此實驗是在二維空間尋找最小值,設定多峰函式:
z = x^2 + y-7cos(pix)-8cos(2pi*y);
它的影象如下所示,我們要找的是z的最小值,也是z軸的最低點。
在這裡插入圖片描述

下面是一些引數設定的變化對粒子收斂情況的影響
本次實驗中,種群規模為100,迭代次數為100,其他引數進行不斷的變化
(1)w=0.8 , c1=1.4 , c2=1.4 這是一般情況下引數的設定。
在這裡插入圖片描述


上圖是粒子群在三維圖上的變化,可以看出粒子的分佈越來越集中,由於尋找的是最小值,後期的分佈很難看出,以下是x-y的一個俯檢視,看出粒子越來越集中。
在這裡插入圖片描述
後面為了更加直觀的瞭解粒子的收斂情況,只給出粒子在二維平面(x,y)的一個運動情況。
在這裡插入圖片描述

(2)w=1.2 , c1=1.4 , c2=1.4 慣性權重變大,使得粒子對上一代的速度繼承了更多,可能會導致粒子收斂困難。

在這裡插入圖片描述

(3)w=0.8 , c1=3 , c2=1.4。這裡將w繼續設定為0.8,個體學習因子c1變大,對收斂會有部分影響,通過多次實驗發現它會導致最終尋找的最優解的變化範圍變大。
在這裡插入圖片描述

(4)w=0.8 , c1=1.4 , c2=3。群體學習因子c2變大,對收斂會有部分影響,但是影響程度沒有w劇烈。
在這裡插入圖片描述


結論:
1.c1的值如果較大會缺乏搜尋指導,雖然有時會得到最優解,但實驗的結果隨機性過大。
2.c2的值如果較大會影響最優值,但影響不大。
3.w的值如果較大會讓粒子迅速拉向目標區域或者越過目標區域,進而影響演算法效能。
4.對演算法效能影響最大的是慣性權重,其次是加速係數。
5. 在種群規模不太小的情況下,適當的增加迭代次數會使結果更優。

改進:
1.初始使用較大的c1值和較小的c2值,增加多樣性,後期讓c1的值線性降低,c2的值線性增加,增強粒子收斂能力。
2.w的值在前期設定較大有助於全域性搜尋,後期減小加強區域性搜尋。

以上就是PSO的簡單總結,初次更博,可能存在很多不足。matlab程式碼放出可能重複率較高,若有讀者感興趣可私信。