[最佳化演算法]粒子群演算法Particle swarm optimization (PSO)
Apr 7, 2021
簡單來說,一群被稱為粒子的潛在解在多維度解空間中找尋最佳解位置,粒子每次移動都會參考自身過往曾找到的的最佳解位置、所有粒子的過往最佳解位置,然後再決定移動方向還有距離。
首先我們必初始化所有粒子,從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。