1. 程式人生 > 實用技巧 >就這?粒子群優化演算法快速入門

就這?粒子群優化演算法快速入門

粒子群優化演算法

1.1 粒子群優化演算法簡介

粒子群優化演算法(Particle Swarm Optimization,PSO)是進化計算的一個分支,是一種模擬自然界的生物活動的隨機搜尋演算法。

PSO模擬了自然界鳥群捕食和魚群捕食的過程。通過群體中的協作尋找到問題的全域性最優解。它是1995年由美國學者Eberhart和Kennedy提出的,現在已經廣泛應用於各種工程領域的優化問題之中。

1.1.1 思想來源

從動物界中的鳥群、獸群和魚群等的遷移等群體活動而來。在群體活動中,群體中的每一個個體都會受益於所有成員在這個過程中所發現和累積的經驗。

1.1.2 基本原理

在這裡插入圖片描述
以鳥群覓食為例,與粒子群優化演算法作對比,如上。

在粒子群優化演算法中,鳥群中的每個小鳥被稱為“粒子”,且同小鳥一樣,具有速度和位置。

通過隨機產生一定數量的粒子(具體定多少數量後面會講)作為問題搜尋空間的有效解,然後進行迭代搜尋,通過該問題對應的適應度函式確定粒子的適應值,得到優化結果。

那具體怎麼迭代搜尋呢?後面例項會具體講到。

且這裡記得有所謂的“粒子本身的歷史最優解”和“群體的全域性最優解”,這兩個用來影響粒子的速度和下一個位置,藉此求得最優解。

1.2.1 基本流程

來看一下PSO的演算法步驟:
(1)初始化所有粒子,即給它們的速度和位置賦值,並將個體的歷史最優pBest設為當前位置,群體中的最優個體作為當前的gBest。
(2)在每一代的進化中,計算各個粒子的適應度函式值。

(3)如果當前適應度函式值優於歷史最優值,則更新pBest。
(4)如果當前適應度函式值優於全域性歷史最優值,則更新gBest。
(5)對每個粒子i的第d維的速度和位置分別按照公式6.1和公式6.2進行更新:
在這裡插入圖片描述
在這裡插入圖片描述
(6)判斷是否達到了結束條件(具體怎麼定義後面會提),否的話就轉到(2)繼續執行。

演算法流程圖和虛擬碼

在這裡插入圖片描述

1.2.2 應用舉例

上面看不懂?

沒關係,看了這個例項,保證你能理解最簡單的PSO是如何實現的。

在這裡插入圖片描述
在這裡插入圖片描述
注意對於越界的位置,需要進行合法性調整,將超出定義範圍的數值改成範圍內的邊界值。

1.3 粒子群優化演算法的改進研究

粒子群優化演算法的研究內容和改進方向

在這裡插入圖片描述

1.3.1 理論研究改進

年代久遠,看看就成了。

在這裡插入圖片描述

6.3.2 拓撲結構改進

1.靜態拓撲結構‘’

全域性版本(Global Version PSO, GPSO)和區域性版本(Local Version PSO, LPSO)兩個主要正規化。

兩者主要區別在於社會網路結構的定義不同。

從全域性和區域性其實也不難看出,粒子在更新速度和位置的時候,前者使用到的是自身的歷史最好位置pBest和整個群體中最好的位置gBest,而後者的話,每個粒子所處的“社會”不是整體,而是一個小的鄰域。更新速度和位置時用到的除了自身最好的歷史位置pBest外,還用到鄰域中的最好位置lBest作為更新的嚮導。

不難發現,後者的多樣性更好,在處理複雜的問題的時候,LPSO也會表現出更好的效能。
在這裡插入圖片描述
2.動態拓撲結構

由於即使是LPSO也很容易陷入區域性最優的問題,而研究動態拓撲結構是希望能夠通過在不同的進化階段使用不同的拓撲結構,動態地改變演算法的探索能力和開發能力,在保種群多樣性和演算法收斂性上取得動態的變化和平衡,以提高演算法的整體效能。

在這裡插入圖片描述
在這裡插入圖片描述
3.其他拓撲結構
在這裡插入圖片描述

1.3.3 混合演算法改進

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

1.3.4 離散版本改進

PSO是非常適合於連續領域問題優化的演算法,且已經在此取得相當成功的應用。

離散版本改進將PSO運用到離散領域(組合優化)之中。

在眾多的離散PSO改進版本中,二進位制編碼PSO和整數編碼PSO是常見的兩種形式。

在這裡插入圖片描述

1.4 相關應用

年代久遠,看看就成。
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

1.5 引數設定

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

結束語

本文參考了很多張軍老師《計算智慧》的第六章知識。感興趣的可以到https://blog.csdn.net/qq_44186838/article/details/109181453進行了解。

由於博主能力有限,博文中提及的資訊,也難免會有疏漏之處。希望發現疏漏的朋友能熱心指出其中的錯誤,以便下次修改時能以一個更完美更嚴謹的樣子,呈現在大家面前。同時如果有更好的方法也請不吝賜教。

如果有什麼相關的問題,也可以關注評論留下自己的問題,我會盡量及時傳送!

然後如果這些內容對你有所幫助的話,闊以點贊關注哦!