智能优化算法:蜣螂优化算法-附代码
智能優(yōu)化算法:蜣螂優(yōu)化算法
摘要:蜣螂優(yōu)化算法( Dung beetle optimizer, DBO), 是由 Jiankai Xue 等于2022 年提出的一種群體智能優(yōu)化算法。其靈感來源于蜣螂的生物行為過程,具有尋優(yōu)能力強,收斂速度快的特點。
1.蜣螂優(yōu)化算法
眾所周知,蜣螂是自然界中一種常見的昆蟲,動物的糞便為食,在全世界內(nèi)分布廣泛,扮演著自然界中分解者的角色,對生態(tài)系統(tǒng)平衡起著至關(guān)重要的作用。蜣螂有一個有趣的習(xí)慣,它們會把糞便捏成球,然后把它滾出來,目的是能夠盡可能快速、有效地移動糞球,防止被其他蜣螂搶奪。蜣螂的可以利用天體線索(特別是太陽、月亮和偏振光)來導(dǎo)航,讓糞球沿著直線滾動,如果完全沒有光源(也就是在完全黑暗的環(huán)境中),蜣螂的就不再走直線,而是彎曲的,有時甚至略圓,有很多因素(如風(fēng)、地面不平)都會導(dǎo)致蜣螂偏離原來的方向,蜣螂在滾糞球的過程如遇到障礙物而無法前進時,通常會爬到糞球上面"跳舞"(包括一系列的旋轉(zhuǎn)和停頓),決定它們的運動方向。
從蜣螂的習(xí)性中觀察發(fā)現(xiàn),其獲取糞球主要有以下兩個目的:①用來產(chǎn)卵和養(yǎng)育下一代;②作為食物。蜣螂會把糞球埋起來,雌性蜣螂會在糞球里產(chǎn)卵,糞球不僅是蜣螂幼蟲的發(fā)育場所,也是必需的食物。所以,糞球?qū)︱掾氲纳嫫鹬豢商娲淖饔谩?/p>
本位介紹了一種新的群體智能優(yōu)化算法------DBO(Dung beetle optimizer)技術(shù),其靈感主要來源于蜣螂的滾球、跳舞、覓食、偷竊、和繁殖等行為。
1.1 結(jié)構(gòu)和算法
根據(jù)上面的討論,蜣螂在滾動過程中需要通過天體線索導(dǎo)航,以保持糞球在直線路徑上滾動。為了模擬滾球行為,要求蜣螂在整個搜索空間中沿著給定的方向移動。蜣螂的運動軌跡如圖1所示。在圖1中,蜣螂利用太陽來導(dǎo)航,其中紅色箭頭表示的是滾動的方向,同時,我們假設(shè)光源的強度也會影響蜣螂的路徑。在滾動過程中,滾球蜣螂的位置更新,可以表示為
xi(t+1)=xi(t)+α×k×xi(t?1)+b×Δx,Δx=∣xi(t)?Xw∣(1)x_{i}(t + 1) = x_{i}(t) + \alpha \times k \times x_{i}(t - 1) + b \times \mathrm{\Delta}x,\\\mathrm{\Delta}x = \left| x_{i}(t) - X^{w} \right|\tag{1}xi?(t+1)=xi?(t)+α×k×xi?(t?1)+b×Δx,Δx=∣xi?(t)?Xw∣(1)
其中, ttt 表示當前迭代次數(shù), xi(t)x_i(t)xi?(t) 表示第 iii 只蛻螂在第 ttt 次迭代時的位置信息, k∈(0,0.2]k \in(0,0.2]k∈(0,0.2] 表示撓度系數(shù), 為定值。 bbb 表示屬于 (0,1)(0,1)(0,1) 的定值, α\alphaα 為自然系數(shù), 賦值為 ?1-1?1 或 1,Xw1, X^w1,Xw 表示全局 最差位置, Δx\Delta xΔx 用于模擬光強的變化。
圖1蜣螂運動軌跡的概念模型在式(1)中, 適當選擇兩個參數(shù) (k(k(k 和 bbb )的值至關(guān)重要, α\alphaα 代表諸多自然因素(如風(fēng)和不平坦 的地面)可使蠔螂偏離原來的方向。當 α=1\alpha=1α=1 時, 表示無偏差, 當 α=?1\alpha=-1α=?1 時, 表示偏離原方向。本 文中, 為模擬現(xiàn)實世界中的復(fù)雜環(huán)境, 通過概率法設(shè) α\alphaα 為 1 或-1。同樣, Δx\Delta xΔx 的值越高表示光源 越弱, 同時, kkk 和 bbb 分別設(shè)為 0.10.10.1 和 0.30.30.3 。利用 Δx\Delta xΔx 有以下兩個優(yōu)點: (1)算法在優(yōu)化過程中, 可盡 可能地徹底地探索整個空間; (2)使算法具有更強的搜索性能, 從而避免陷入局部最優(yōu)。 XwX^wXw 通 過控制 Δx\Delta xΔx 的值, 來擴大搜索范圍。
圖2 切線函數(shù)的概念模型和蜣螂的舞蹈行為當蛢螂遇到障礙物無法前進時, 就需要通過跳舞來重新定位, 目的是獲得新的路線。為了 模擬舞蹈行為, 用切線函數(shù)得到新的滾動方向。需要指出的是, 只需要考慮定義在區(qū)間 [0,π][0, \pi][0,π], 如圖 2 所示。一旦蜣螂成功確定了一個新的方向, 它繼續(xù)把球向后?。因此, 將?螂的位置更 新, 并定義如下:
xi(t+1)=xi(t)+tan?θ∣xi(t)?xi(t+1)∣(2)x_i(t+1)=x_i(t)+\tan \theta\left|x_i(t)-x_i(t+1)\right| \tag{2} xi?(t+1)=xi?(t)+tanθ∣xi?(t)?xi?(t+1)∣(2)
其中, θ\thetaθ 為撓度角, 屬于 [0,π][0, \pi][0,π] 。 ∣xi(t)?xi(t+1)∣\left|x_i(t)-x_i(t+1)\right|∣xi?(t)?xi?(t+1)∣ 表示第 iii 只蛻螂在第 ttt 次迭代時的位置與其 在第 t?1t-1t?1 次迭代時的位置之差。如果 θ=0,π/2,π\(zhòng)theta=0, \pi / 2, \piθ=0,π/2,π, 蛢螂的位置不更新。
在自然界中, 糞球是被蛢螂滾到安全的地方藏起來。為了給它們的后代提供安全的環(huán)境, 選擇合適的產(chǎn)卵地點對蠔螂來說至關(guān)重要。模擬?蠔螂產(chǎn)卵的區(qū)域邊界選擇策略, 其定義為:
Lb?=max?(X?×(1?R),Lb),Ub?=min?(X?×(1+R),Ub)(3)\begin{aligned} & L b^*=\max \left(X^* \times(1-R), L b\right), \\ & U b^*=\min \left(X^* \times(1+R), \quad U b\right) \end{aligned}\tag{3} ?Lb?=max(X?×(1?R),Lb),Ub?=min(X?×(1+R),Ub)?(3)
其中, X?X^*X? 為當前局部最佳位置, Lb?L b^*Lb? 和 Ub?U b^*Ub? 分別為產(chǎn)卵區(qū)下限和上界, R=1?t/Tmax?,Tmax?R=1-t / T_{\max }, T_{\max }R=1?t/Tmax?,Tmax? 表 示最大迭代次數(shù), LbL bLb 和 Ub\mathrm{Ub}Ub 分別代表優(yōu)化問題的下界和上界。
如圖 3 所示, 當前局部最佳位置 X?X^*X? 用一個大的棕色圈表示, 而 X?X^*X? 周圍的小黑圈表示卵球。 每個卵球中都蘊含一枚蜣螂卵, 紅色的小圓圈代表邊界的上下界。
一旦確定了產(chǎn)卵區(qū)域, 雌性蛻螂就會選擇這個區(qū)域的卵卵球產(chǎn)卵。對于 DBO 算法, 每只 雌蠔螂在每次迭代中只產(chǎn)一個卵。此外, 從式(3)中可以清楚地看到, 產(chǎn)卵區(qū)域的邊界范圍是 動態(tài)變化的, 這主要是由 RRR 值決定的。由此可見, 卵球的位置在迭代過程中也是動態(tài)的, 表示 為:
Bi(t+1)=X?+b1×(Bi(t)?Lb?)+b2×(Bi(t)?Ub?)(4)B_i(t+1)=X^*+b_1 \times\left(B_i(t)-L b^*\right)+b_2 \times\left(B_i(t)-U b^*\right) \tag{4} Bi?(t+1)=X?+b1?×(Bi?(t)?Lb?)+b2?×(Bi?(t)?Ub?)(4)
Bi(t)B_i(t)Bi?(t) 為第 t\mathrm{t}t 次迭代時第 i\mathrm{i}i 個卵球的位置信息, b1b_1b1? 和 b2b_2b2? 表示大小為 1×D1 \times \mathrm{D}1×D 的兩個獨立隨機向量, D\mathrm{D}D 表示優(yōu)化問題的維數(shù)。卵球的位置被嚴格限制在一定范圍內(nèi)。
一些已經(jīng)長成成蟲的蠔螂會從地下鉆出來受食, 我們稱它們?yōu)樾∠栻? 還需要建立最優(yōu)受 食區(qū)域來引導(dǎo)蜣螂受食, 最佳受食區(qū)域的邊界定義如下:
Lbb=max?(Xb×(1?R),Lb),Ubb=min?(Xb×(1+R),Ub)(5)\begin{aligned} & L b^b=\max \left(X^b \times(1-R), \quad L b\right), \\ & U b^b=\min \left(X^b \times(1+R), \quad U b\right) \end{aligned} \tag{5} ?Lbb=max(Xb×(1?R),Lb),Ubb=min(Xb×(1+R),Ub)?(5)
XbX^bXb 表示全局最佳受食位置, LbbL b^bLbb 和烏 UbbU b^bUbb 分別為最優(yōu)受食區(qū)域的下界和上界, 其他參數(shù)在 式(3)中定義, 因此小蠔螂的位置更新如下:
xi(t+1)=xi(t)+C1×(xi(t)?Lbb)+C2×(xi(t)?Ubb)(6)x_i(t+1)=x_i(t)+C_1 \times\left(x_i(t)-L b^b\right)+C_2 \times\left(x_i(t)-U b^b\right) \tag{6} xi?(t+1)=xi?(t)+C1?×(xi?(t)?Lbb)+C2?×(xi?(t)?Ubb)(6)
其中, xi(t)x_i(t)xi?(t) 表示第 ttt 次迭代時第 iii 只小蠔螂的位置信息, C1C_1C1? 表示一個服從正態(tài)分布的隨機數(shù), C2C_2C2? 表示屬于 (0,1)(0,1)(0,1) 的隨機向量。
還有一些蠔螂被稱為偷竊?螂, 會從其他蠔螂那里偷糞球,這是自然界中非常常見的現(xiàn)象。 從式(5)可以看出, XbX^bXb 即最優(yōu)的食物來源位置。因此, 我們可以假設(shè) XbX^bXb 即表示爭奪食物的最佳 地點。在迭代過程中, 偷窮槩螂的位置更新信息定義如下:
∣xi(t+1)=Xb+S×g×(∣xi(t)?X?∣+∣xi(t)?Xb∣)(7)\mid x_i(t+1)=X^b+S \times g \times\left(\left|x_i(t)-X^*\right|+\left|x_i(t)-X^b\right|\right) \tag{7} ∣xi?(t+1)=Xb+S×g×(∣xi?(t)?X?∣+∣∣?xi?(t)?Xb∣∣?)(7)
其中, xi(t)x_i(t)xi?(t) 表示第 iii 個偷竊蛻螂在第 ttt 次迭代時的位置信息, ggg 是一個大小為 1×D1 \times \mathrm{D}1×D 維的隨機向 量, 服從于正態(tài)分布, SSS 表示恒定值。
偷竊蜣螂在優(yōu)化過程中位置不斷更新, 最后輸出最佳位置 XbX^bXb 。根據(jù)此算法 更具體地說, 在 DBO\mathrm{DBO}DBO 算法中, 一個蛻螂種群包括 N\mathrm{N}N 種目標代理, 其中代理 iii 都代表一組候選 解, 第 iii 個代理的位置向量用 xi(t)x_i(t)xi?(t) 表示, xi(t)=(xi1(t),xi2(t),……,xiD(t))x_i(t)=\left(x_{i 1}(t), x_{i 2}(t), \ldots \ldots, x_{i D}(t)\right)xi?(t)=(xi1?(t),xi2?(t),……,xiD?(t)), 其中, DDD 為搜索 空間的維數(shù)。它們的分布比例沒有指定, 可以根據(jù)實際應(yīng)用問題進行設(shè)置。
1.2 計算步驟
DBO 算法作為一種新穎的基于 SI 的優(yōu)化技術(shù), 主要有六個步驟:
(1) 初始化蜣螂群和 DBO 算法的參數(shù);
(2) 根據(jù)目標函數(shù)計算出所有目標代理的適應(yīng)度值;
(3) 更新所有蟯螂的位置;
(4) 判斷每個目標代理是否超出邊界;
(5) 更新當前最優(yōu)解及其適應(yīng)度值;
(6) 重復(fù)上述步驟, 直到 t 滿足終止準則, 輸出全局最優(yōu)解及其適應(yīng)度值。
2.實驗結(jié)果
3.參考文獻
[1] Jiankai Xue & Bo Shen (2022) Dung beetle optimizer: a new meta-heuristic algorithm for global optimization. The Journal of Supercomputing, DOI:10.1007/s11227-022-04959-6
4.Matlab
5.Python
總結(jié)
以上是生活随笔為你收集整理的智能优化算法:蜣螂优化算法-附代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js 对一个字段去重_js面试
- 下一篇: 【总结】防火墙NAT技术