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