一种自适应模拟退火粒子群优化算法-附代码
一種自適應模擬退火粒子群優化算法
文章目錄
- 一種自適應模擬退火粒子群優化算法
- 1.粒子群優化算法
- 2. 改進粒子群算法
- 2.1 自適應模擬退火粒子群優化算法
- 3.實驗結果
- 4.參考文獻
- 5.Matlab代碼
- 6.Python代碼
摘要:為了提高粒子群算法的尋優速度和精度,避免陷入局部優解,提出一種自適應模擬退火粒子群優化算法。采用雙曲正切函數來控制慣性權重系數,進行非線性自適應變化;利用線性變化策略控制社會學習因子和自我學習因子,達到改變不同階段尋優重點的目的;引入模擬退火操作,根據種群的初始狀態設置一個溫度,根據Metropolis準則和溫度指導種群以一定的概率接受差解,保證了算法跳出局部最優解的能力。
1.粒子群優化算法
基礎粒子群算法的具體原理參考網絡資料
2. 改進粒子群算法
2.1 自適應模擬退火粒子群優化算法
以往應用經典的粒子群算法算法時,設置 ω 、 c 1 和 c 2 的值,大多依賴經驗的判斷,或者根據大量的仿真實驗來確定一個固定的值.但通過上述的分析,如果這三個參數能夠隨著優化的進行不斷變化的話,粒子群算法將會有著更加優秀的效果.慣性權重系數 ω 直接影響著算法搜索能力的強弱, ω 控制粒子繼承以往運動趨勢,即搜索飛行的慣性.若需要算法的全局搜索能力較強,則設置 ω 的值比較大,但受前一次迭代速度的影響較大,相應的粒子飛行距離較大,不利于局部尋優 .若需要進行局部精細解的搜索,提升局部區域尋優能力,則設置當 ω 的值較小,但陷入局部最優的概率會變大. ω 值的選取與算法收斂速度和全局搜索能力成正比,與局部搜索能力成反比.本文選取[-4,4]之間負的雙曲正切曲線來控制慣性權重系數的變化,雙曲正切曲線時一個非線性的控制策略,在搜索初期其遞減速度較慢,給粒子充分的時間進行大范圍的全局搜索,減小陷入局部最優的情況;中期近似線性遞減,逐漸加強局部搜索的能力;后期變化率再次減小,著重細致的局部搜索,精準確定全局最優解,慣性權重函數如下:
ω=(ωmax?+ωmin?)/2+tanh?(?4+8?(kmax??k)/kmax?)(ωmax??ωmin?)/2(8)\omega=\left(\omega_{\max }+\omega_{\min }\right) / 2+\tanh \left(-4+8 *\left(k_{\max }-k\right) / k_{\max }\right)\left(\omega_{\max }-\omega_{\min }\right) / 2\tag{8} ω=(ωmax?+ωmin?)/2+tanh(?4+8?(kmax??k)/kmax?)(ωmax??ωmin?)/2(8)
其中, ωmax?,ωmin?\omega_{\text {max }}, \omega_{\text {min }}ωmax??,ωmin?? 是慣性權重系數的最大值和最小值, 本文中取 ωmax?=0.95,ωmin?=0.4\omega_{\max }=0.95, \omega_{\min }=0.4ωmax?=0.95,ωmin?=0.4, 經大量實驗證明采用 如上取值時算法性能會大幅度提升 [2]{ }^{[2]}[2]; kkk 是當前迭代次數, kmax?k_{\max }kmax? 是最大迭代次數。
當 c1>c2c_{1}>c_{2}c1?>c2? 時, 粒子的運動更偏向個體最優的方向, 反之則更偏向群體最優方向. 筆者所提的優化算法初 始階段注重全局搜索, 著重突出粒子的自我認知能力, 注重粒子運動的遍歷性, 減小陷入局部最優解的概 率; 隨著迭代的進行, 加強粒子間的交流, 使種群最優解的位置對每個粒子的運行起到更大的影響, 著重 漸增大. 筆者采取如下參數變化策略:
c1=c1max??k(c1max??c1min?)/kmax?(9)c_{1}=c_{1 \max }-k\left(c_{1 \max }-c_{1 \min }\right) / k_{\max } \tag{9} c1?=c1max??k(c1max??c1min?)/kmax?(9)
c2=c2min??k(c2min??c2max?)/kmax?(10)\begin{aligned} &c_{2}=c_{2 \min }-k\left(c_{2 \min }-c_{2 \max }\right) / k_{\max } \end{aligned} \tag{10} ?c2?=c2min??k(c2min??c2max?)/kmax??(10)
其中, cmax?,cmin?c_{\max }, c_{\min }cmax?,cmin? 是自我學習因子的最大值和最小值, cmax?,cmin?c_{\text {max }}, c_{\text {min }}cmax??,cmin?? 分別社會學習因子的最大值和最小值. 參照文 獻 [16]并進行大量實驗后, 本文取 cmax?=2.5;cman?=1.25;cmin?=1.25c_{\max }=2.5 ; c_{\operatorname{man}}=1.25 ; c_{\min }=1.25cmax?=2.5;cman?=1.25;cmin?=1.25 和 c2min?=2.5c_{2 \text { min }}=2.5c2?min??=2.5. 隨著迭代次數 kkk 的增加, c1c_{1}c1? 由 2.52.52.5 線性減小至 1.251.251.25, 而 c2c_{2}c2? 則由 1.251.251.25 逐步線性增加到 2.52.52.5, 這樣設置就滿足了初期注重粒子在空間上的遍 歷性, 增強全局搜索能力, 在迭代次數過半時 c1<c2c_{1}<c_{2}c1?<c2?, 且差距越來越大, 局部搜索的能力也隨之增強。
將模擬退火算法中的Metropolis準則引入迭代中, 根據最初的粒子最優值設置初始溫度, 并且每次迭代 后以一定的而降溫系數 μ\muμ 衰減, 具體操作如下:
T(k)={E(Gbest?)/log?(0.2),k=1T(k?1)?μ,k>1.(11)T(k)=\left\{\begin{array}{ll} E\left(G_{\text {best }}\right) / \log (0.2) & , k=1 \\ T(k-1) * \mu & , k>1 \end{array} .\right. \tag{11} T(k)={E(Gbest??)/log(0.2)T(k?1)?μ?,k=1,k>1?.(11)
其中T為初始溫度. 每次迭代后計算更新后位置的內能 (適應度) 與種群最優點內能的差距, 根據式 (5) 計 算得出的概率與rand () 進行對比, 判斷是否接受較差的解. 本文中取降溫系數 μ=0.95\mu=0.95μ=0.95. 筆者所提出的自適 應模擬退火粒子群算法對粒子群算法的三個重要參數進行了自適應變化且加入了模擬退火操作, 增加了尋 優的精度和速度, 具體步驟如下:
步驟 1 設置搜索空間及搜索速度的邊界值, 設置種群規模 Size 及最大迭代次數 kmax?k_{\max }kmax?.
步驟 2 隨機產生種群中所有粒子的初始位置和初始速度.
步驟 3 評價全局粒子的適應度值并記錄 Gsoss?G_{\text {soss }}Gsoss??, 并根據式 (11) 設置模擬退火的初始溫度.
步驟 4 根據式 (8) ~(10)\sim(10)~(10) 自適應的改變 ω、c1\omega 、 c_{1}ω、c1? 和 c2c_{2}c2?.
步驟 5 根據式 (1) 改變粒子速度, 根據式 (2) 進行一次迭代尋優.
步驟 6 計算移動后粒子的適應度.
步驟 7 根據式 (3) 更新粒子的自身的歷史最優位置.
步驟 8 根據式 (5) 計算接受新解的概率 pi(k)p_{i}(k)pi?(k).
步驟 9 以 Metropolis 準則為依據, 對比概率 pi(k)p_{i}(k)pi?(k) 與 rand () 判斷是否由產生的新解替代全局最優解 進行退火操作, 更新溫度.
步驟 10 判斷是否達到最大迭代次數 kmax?k_{\max }kmax?, 若末達到返回步驟 4 .
步驟 11 輸出當前最優粒子, 即尋優結果, 算法終止.
3.實驗結果
4.參考文獻
[1]閆群民,馬瑞卿,馬永翔,王俊杰.一種自適應模擬退火粒子群優化算法[J/OL].西安電子科技大學學報:1-9[2021-06-17].http://kns.cnki.net/kcms/detail/61.1076.TN.20210303.1129.011.html.
5.Matlab代碼
6.Python代碼
總結
以上是生活随笔為你收集整理的一种自适应模拟退火粒子群优化算法-附代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 烙饼啊烙饼{转自ITEO
- 下一篇: Android学习笔记-判断手机外部存储