粒子群演算法中對於學習因子的改進

卢宇博發表於2024-08-19

個體學習因子c1和社會(群體)學習因子c2決定了粒子本身經驗資訊和其他粒子的經驗資訊對粒子執行軌跡的影響,其反映了粒子群之間的資訊交流。設定c1較大的值,會使粒子過多地在自身的區域性範圍內搜尋,而較大的c2的值,則又會促使粒子過早收斂到區域性最優值。那麼如何改進這兩個因子的取值才能更好地找到我們的最優解呢?下面我們來介紹兩個方法

目錄
  • 一、壓縮因子法
    • 1.演算法公式
    • 2.程式碼實現
  • 二、非對稱學習因子
    • 1.演算法思想
    • 2.演算法公式
    • 3.程式碼實現

一、壓縮因子法

為了有效地控制粒子的飛行速度,使演算法達到全域性搜尋與區域性搜尋兩者間的有效平衡,Clerc構造了引入收縮因子的PS0模型,採用了壓縮因子,這種調整方法透過合適選取引數,可確保PS0演算法的收斂性,並可取消對速度的邊界限制

1.演算法公式

引入壓縮因子後,我們只需要在迭代速度之前乘上壓縮因子即可。這樣會使我們速度變小,從而控制飛行速度,加入這個限制之後,我們也可以在迴圈中取消對速度是否超出邊界的的判斷,加快了執行速度

2.程式碼實現

fai = 2/abs((2-C-sqrt(C^2-4*C))); % 收縮因子
v(i,:) = fai * (w*v(i,:) + c1*rand(1)*(pbest(i,:) - x(i,:)) + c2*rand(1)*(gbest - x(i,:)));

二、非對稱學習因子

在經典PSO演算法中,由於在尋優後期粒子缺乏多樣性,易過早收斂於區域性極值,因此透過調節學習因子,在搜尋初期使粒子進行大範圍搜尋,以期獲得具有更好多樣性的高質量粒子,儘可能擺脫區域性極值的干擾。

1.演算法思想

搜尋的初期,我們希望廣撒網,也就是儘量使粒子遍歷全域性解空間,進行全域性搜尋。c1的值變大會導致粒子在自身的區域性最優解周圍進行搜尋,使粒子儘量發散到搜尋空間,即強調“個體獨立意識”,有利於全域性搜尋。
相反,c2越大的話,區域性的搜尋能力就越強。
因此在初期,我們個體學習因子c1的值應該增大,c2的值變小,有利於全域性搜尋;在後期減少c1的值,增大c2的值,有利於區域性搜尋進行收斂。

2.演算法公式

隨著迭代次數的增加,使c1線性遞減,c2線性遞增,從而加強了粒子向全域性最優點的收斂能力

3.程式碼實現

同樣,在迭代速度之前迭代c1與c2

for d = 1:K  % 開始迭代,一共迭代K次
    %    w = 0.9 - 0.5*d/K;  % 效果不是很好的話可以同時考慮線性遞減權重
        c1 = c1_ini + (c1_fin - c1_ini)*d/K;
        c2 = c2_ini + (c2_fin - c2_ini)*d/K;
    for i = 1:n   % 依次更新第i個粒子的速度與位置
        v(i,:) = w*v(i,:) + c1*rand(1)*(pbest(i,:) - x(i,:)) + c2*rand(1)*(gbest - x(i,:));  % 更新第i個粒子的速度

相關文章