粒子群优化算法及MATLAB实现
上一篇博客是關于蟻群優化算法的,有興趣的可以看下
https://blog.csdn.net/HuangChen666/article/details/115913181
1. 粒子群優化算法概述
2. 粒子群優化算法求解
?????2.1 連續解空間問題
?????2.2 構成要素
?????2.3 算法過程描述
?????2.4 粒子速度更新公式
?????2.5 速度更新參數分析
3. 粒子群優化算法小結
4. MATLAB代碼
1. 粒子群優化算法概述
粒子群優化算法是一種基于 種群尋優的啟發式搜索算法。在1995年由Kennedy和Eberhart首先提出來的。它的主要啟發來源于對 鳥群群體運動行為的研究。我們經常可以觀察到鳥群表現出來的同步性,雖然每只鳥的運動行為都是互相 獨立的,但是在整個鳥群的飛行過程中卻表現出了高度一致性的復雜行為,并且可以自適應的調整飛行的狀態和軌跡。
鳥群具有這樣的復雜飛行行為的原因,可能是因為每只鳥在飛行過程中都遵循了一定的行為規則,并能夠掌握鄰域內其它鳥的飛行信息。
粒子群優化算法借鑒了這樣的思想,每個粒子代表待求解問題搜索解空間中的一一個潛在解,它相當于一只飛行信息”包括粒子當前的 位置和速度兩個狀態量。
每個粒子都可以獲得其鄰域內其它個體的信息,對所經過的位置進行評價,井根據這些 信息和位置速度更新規則,改變自身的兩個狀態量,在“飛行”過程中傳遞信息和宣相學習,去更好地適應環境。隨著這一過程的不斷進行,粒子群最終能夠找到問題的近似最優解。
2. 粒子群優化算法求解
粒子群優化算法一般適合解決連續解空間的問題,比如通過粒子群在解空間里進行搜索,找出極大值。2.1 連續解空間問題
上圖就是一個典型的粒子群優化算法求解極值的案例,可以看到初始時有四個粒子,求解過程可以理解為四個粒子不斷向最大的粒子靠攏,在靠攏的過程中不斷更新自身的最大值和整體的最大值,在自身最大值和整體最大值的影響下改變自身移動的速度,最終所有粒子均達到同一個極值的過程。2.2 構成要素
1、粒子群
-
每個粒子對應所求解問題的一個可行解
即每個粒子本身就是一個可行解 -
粒子通過其位置和速度表示
在代碼中的粒子用位置和速度表示,即橫坐標表示粒子的位置,速度表示粒子接下來的運動趨勢。
xn(i)x_n^{(i)}xn(i)? 表示粒子 i 在第 n 輪的位置
vn(i)v_n^{(i)}vn(i)? 表示粒子 i 在第 n 輪的速度
2、記錄
- pbest(i)p_{best}^{(i)}pbest(i)? 表示粒子 i 的歷史最好位置
- gbest(i)g_{best}^{(i)}gbest(i)? 表示全局歷史最好位置
3、計算適應度的函數
- 適應度:f(x)f(x)f(x) 即函數表達式
2.3 算法過程描述
1、初始化- 初始化粒子群:每個粒子的位置和速度,位置即每個粒子的初始 xxx 坐標,速度表示該粒子下一輪中 xxx 坐標的變化值,可正可負,即x0(i)x_0^{(i)}x0(i)? 和 v0(i)v_0^{(i)}v0(i)?
- 初始化粒子 i 的歷史最好位置pbest(i)p_{best}^{(i)}pbest(i)? 和全局粒子歷史最好位置 gbest(i)g_{best}^{(i)}gbest(i)? ,pbest(i)p_{best}^{(i)}pbest(i)?的初始值使用隨機數賦值, gbest(i)g_{best}^{(i)}gbest(i)?設置為一個無窮小值(因為這里以求最大值為例)
2、循環執行如下三步直至滿足結束條件
- 計算每個粒子的適應度(即函數值):f(xn(i))f(x_n^{(i)})f(xn(i)?)
- 更新每個粒子歷史最好適應度及其相應的位置,更新當前全局最好適應度及其相應的位置
- 更新每個粒子的速度和位置
粒子位置的更新即對每個粒子所在x軸的橫坐標進行更新(其實每個粒子就是一個橫坐標上的數),下一輪的位置等于上一輪的位置加上速度的變化乘以一個單位時間,所以這里的乘以1沒有寫出來。
2.4 粒子速度更新公式解讀
從公式可以看出粒子下一輪的速度 = 粒子上一輪的速度 + 回到自己歷史最好位置的傾向 + 去向全局最好位置的傾向,即慣性項+記憶項+社會項。
一般情況下確定了一個變量和其他變量的關系,下面就是參數的設置了,這里有兩對參數ck和rkc_k和r_kck?和rk?,ckc_kck? 是權重參數,一般取值為2,實際上它影響了優化的速度,rkr_krk? 是隨機參數,即0和1之間的隨機數。
2.5 速度更新參數分析
權重參數主要是影響了粒子飛行的速度,在今后的使用中一般設置c1和c2c_1和c_2c1?和c2?相等的情況較多。
3. 粒子群優化算法改進
隨著粒子群算法的廣泛使用,人們發現如果加入一個慣性權重的話,優化的效果更好。
引入了一個 www 參數,控制先前粒子速度對下一輪粒子速度的影響,以適應不同場景。
4. MATLAB代碼
求f= xsin(x)cos(2x) - 2xsin(3x)在[0,20]上的最大值
因為這里是多峰,所以設置權重參數c2>c1效果會更好。
代碼借鑒 https://www.pianshen.com/article/2364328713/
總結
以上是生活随笔為你收集整理的粒子群优化算法及MATLAB实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hasLayout和filter滤镜的细
- 下一篇: Socket 死连接详解