[最佳化演算法]粒子群演算法Particle swarm optimization (PSO)

Roger Yong
Apr 7, 2021

--

From: https://www.sciencedirect.com/science/article/abs/pii/S0169743915002117

簡單來說,一群被稱為粒子的潛在解在多維度解空間中找尋最佳解位置,粒子每次移動都會參考自身過往曾找到的的最佳解位置、所有粒子的過往最佳解位置,然後再決定移動方向還有距離。

首先我們必初始化所有粒子,從uniform distribution [min,max]中隨機抽樣出粒子,其中N為粒子數,D為維度。

自身過往找到的的最佳解位置,因為當前t=0

計算粒子的適應值,當條件滿足

代表粒子k的適應值為群體中最佳的(假設適應值越小越好)

更新每一粒子的速率,c1,c2為加速度常數,R為隨機亂數(從uniform distribution中隨機產生),我們可以調整c1、c2來改變粒子依賴「自身最佳位置」和「群體最佳位置」的程度

其中,在更新過程中透過w來縮小v(t),以防止速度爆炸,我在這邊使用的方法是線性遞減

同樣為了為防止速度爆炸(velocity explosion)因此初始速度 V(0)建議極小值或者直接設0

速度v的約束條件-避免速度爆炸,k為超參數

更新粒子的位置,並同時確認位置沒有超出參數空間

更新自身過往找到的的最佳解位置

更新群體中最佳解位置

接著我們用一個簡單的數學式來做demo,x1, x2的參數範圍都是-1到1,更新150次。

最後x1會收斂至0,x2會收斂至0.05,以達到極小值0。

--

--