基於層次學習的粒子羣算法(LLSO)

近期閱讀了關於大尺度優化問題論文:《A Level-Based Learning Swarm Optimizer for Large-Scale Optimization》,是對PSO做出的改進,算法容易實現,這裏做出簡單總結。

一、改進策略

(一)動態層數選擇
在這裏插入圖片描述
將種羣按適應度值進行排序,排序後將粒子分層,層數的大小從層數池中選擇。層數池爲集合S:
在這裏插入圖片描述
粒子的總數np,所分的層數爲nl(nl∈S),每層的粒子數爲ls,ls=np/nl,餘數=(np%nl),放入底層。
(1)動態層數選擇
爲了提高粒子的收斂速度,使用輪盤賭的方法在集合S中動態選擇層數。定義集合:
在這裏插入圖片描述
各元素初始化爲1,其中存放的是對集合S中存放的層數的相對性能改進。
在這裏插入圖片描述
F是上一代全局最佳適應度值,F彎是當代全局最佳適應度值。
定義集合
在這裏插入圖片描述
存放的是集合S中各層數被選擇的概率。使用輪盤賭的方法,通過生成[0,1]的隨機數,落在特定的概率區間,就選擇一個特定的層數。
在這裏插入圖片描述
每更新一代將重新排序,再次隨機選擇層數,最大評估粒子數MAX_fes作爲結束條件。
(二)分層學習
層數選好之後,粒子從底層開始不斷向上更新,第一層不更新直接進入下一代。
在這裏插入圖片描述
在這裏插入圖片描述
公式中v(d,(i,j))代表當前在i層的第j個粒子在維度d的速度,參數ф=0.4,是(i-1)層中的隨機兩層,且規定rl1<rl2(如果i=2,則直接在第一層中選擇),k1是[1,ls]的隨機數,指在第rl1層中第k1粒子,同樣的,k2是[1,ls]的隨機數,指在第rl2層中第k2粒子(如果i=2,則規定k1<k2)。

二、實驗結果

本實驗使用測試函數
z = x^2 + y^2 - 10cos(2pix) - 10cos(2piy) + 20;
三維圖像如下:
在這裏插入圖片描述
實驗參數:
ф = 0.4;
MAX_fes=10^5; %最大評估粒子
np =300; %種羣規模
s=6; %層數池中的元素個數
S=[4,6,8,10,20,50];%層數池
在這裏插入圖片描述
這是粒子在三維圖上的分佈在z軸仰視圖,粒子逐漸密集與一個區域。
在這裏插入圖片描述
這是粒子在二維平面的運動變化收斂圖,可以明顯的看出粒子的收斂速度非常快。
在這裏插入圖片描述
這是記錄器記錄的粒子的適應度的變化,最優解的尋找速度也是比較快的。

三、總結

將粒子按適應度值進行動態分層,優秀粒子保留被學習,讓差的粒子進行探索,不僅保持了多樣性,還加速了粒子的收斂,實現了大規模優化。但是該算法還是存在一定的缺陷,改進接近全局最優將是下一步的工作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章