智慧優化演算法:蜉蝣演算法 - 附程式碼
2020 智慧優化演算法:蜉蝣演算法 - 附程式碼
文章目錄
摘要:蜉蝣演算法(mayfly algorithm,MA)是於2020年提出的新型之智慧優化演算法。該演算法具有尋優能力強等優點,具有較強的研究價值。
1.演算法原理
蜉蝣是屬於蜉蝣目的昆蟲,是古翅目昆蟲的一部分。據估計,全世界有超過3000種蜉蝣。它們的名字來源於它們主要出現在英國的五月。從卵中孵化出來後,肉眼可以看到未成熟的蜉蝣,它們花了幾年時間成長為水生若蟲,直到它們準備好成年後上升到水面。一隻成年蜉蝣只存活幾天,直到它完成繁殖的最終目標。為了吸引雌性,大多數雄性成蟲成群結隊地聚集在水面上幾米的地方,通過特有的上下運動模式,表演一場婚禮舞蹈。雌鳥飛入這些蜂群,為了與空中的雄性交配。交配可能只持續幾秒鐘,當交配完成後,雌鳥將卵落在水面上,它們的生命週期就結束了。
它的靈感來源於蜉蝣的社會行為,特別是它們的交配過程。我們假設蜉蝣從卵中孵化出來後,已經是成蟲了,而最適合的蜉蝣存活下來,而不管它們活多久。每個蜉蝣在搜尋空間中的位置代表了問題的潛在解決方案。演算法的工作原理如下。最初,隨機產生兩組蜉蝣,分別代表雄性和雌性種群。也就是說,每個蜉蝣被隨機放置在問題空間中,作為由d維向量表示的候選解
x
=
(
x
1
,
.
.
.
,
x
d
)
x = (x_1,...,x_d)
x=(x1,...,xd),並根據預先確定的目標函式
f
(
x
)
f(x)
f(x)對其效能進行評價。蜉蝣的速度
v
=
(
v
1
,
.
.
.
,
v
d
)
v = (v_1,...,v_d)
1.1 雄性蜉蝣的運動
雄性蜉蝣成群的聚集,意味著每隻雄性蜉蝣的位置都是根據自己和鄰居的經驗來調整的。假設
x
i
t
x_i^t
xit是時間步長
t
t
t時蜉蝣
i
i
i在搜尋空間中的當前位置,通過在當前位置上新增速度
v
i
t
+
1
v_i^{t+1}
vit+1來改變位置。這可以表述為:
考慮到雄性蜉蝣總是在水面上幾米處表演舞蹈,我們假設它們不能發展出很快的速度,而且它們會不斷地移動。因此,雄性蜉蝣的速度計算如下:
v i j t + 1 = v i j t + a 1 e − β r p 2 ( p b e s t i j − x i j t ) + a 2 e − β r g 2 ( g b e s t j − x i j t ) (2) v_{ij}^{t+1}=v_{ij}^{t} + a_1e^{-\beta r_p^2}(pbest_{ij} - x_{ij}^t)+a_2e^{-\beta r_g^2}(gbest_j - x_{ij}^t) \tag{2} vijt+1=vijt+a1e−βrp2(pbestij−xijt)+a2e−βrg2(gbestj−xijt)(2)
其中 v i j t v_{ij}^t vijt是蜉蝣 i i i在 j j j維度 t t t時刻的速度。 x i j t x_{ij}^t xijt代表t時刻的位置。a1和a2是社會作用正吸引係數。pbest程式碼蜉蝣歷史最有位置。gbest代表最佳蜉蝣位置。 β \beta β是蜉蝣的能見度係數,控制蜉蝣的能見範圍。rp代表當前位置與pbest的距離。rg代表當前位置與gbest的距離。距離的計算如下:
∣ ∣ x i − X i ∣ ∣ = ∑ j = 1 n ( x i j − X i j ) 2 (3) ||x_i - X_i||=\sqrt{\sum_{j=1}^n(x_{ij}-X_{ij})^2} \tag{3} ∣∣xi−Xi∣∣=j=1∑n(xij−Xij)2 (3)
對於演算法的執行來說,群中最好的蜉蝣繼續表演他們特有的上下舞蹈是很重要的。因此,最好的蜉蝣必須不斷地改變它們的速度,在這種情況下,計算如下:
v i j t + 1 = v i j t + d ∗ r (4) v_{ij}^{t+1}=v_{ij}^t + d*r \tag{4} vijt+1=vijt+d∗r(4)
其中d是舞蹈系數,r為[-1,1]之間的隨機數。這種上下移動在演算法中引入了一個隨機元素。
1.2 雌性蜉蝣的運動
與雄性不同,雌性蜉蝣不會成群聚集。它們會飛到雄性來繁殖。假設
y
i
t
y_i^t
yit為在時刻t時的蜉蝣i,它的位置的更新通過增加速度來更新:
y
i
t
+
1
=
y
i
t
+
v
i
t
+
1
(5)
y_i^{t+1} = y_i^{t} + v_i^{t+1}\tag{5}
yit+1=yit+vit+1(5)
鑑於吸引過程是隨機的,我們決定將其建模為一個確定性過程。也就是說,根據它們的健狀屬性,最好的雌性應該被最好的雄性吸引,第二好的雌性應該被第二好的雄性吸引,等等。因此,考慮到極小化問題,速度的計算如下:
v
i
j
t
+
1
=
{
v
i
j
t
+
a
2
e
−
β
r
m
f
2
(
x
i
j
t
−
y
i
j
t
)
,
i
f
f
(
y
i
)
>
f
(
x
i
)
v
i
j
t
+
f
l
∗
r
i
f
f
(
y
i
)
≤
f
(
x
i
)
(6)
v_{ij}^{t+1} = \begin{cases} v_{ij}^{t} + a_2e^{-\beta r_{mf}^2}(x_{ij}^t - y_{ij}^t) , if\, f(y_i)>f(x_i)\\ v_{ij}^t + fl*r if \, f(y_i)\leq f(x_i) \end{cases}\tag{6}
vijt+1={vijt+a2e−βrmf2(xijt−yijt),iff(yi)>f(xi)vijt+fl∗riff(yi)≤f(xi)(6)
其中
v
i
j
t
v_{ij}^t
vijt代表速度。
y
i
j
t
y_{ij}^t
yijt代表蜉蝣的位置。
a
2
a_2
a2是一個正係數。
β
\beta
β是一個固定的能見係數。
r
m
f
r_{mf}
rmf代表雌性蜉蝣距離雄性蜉蝣的距離。
f
l
fl
fl是一個隨機遊走係數,當雌性沒有被雄性攻擊時起作用。r是一個在範圍[-1,1]的隨機數。
1.3 蜉蝣交配
交叉運算元代表了兩個蜉蝣的交配過程:從雄性種群中選擇一個親本,從雌性種群中選擇一個。選擇父母的方式與雄性吸引雌性的方式相同。特別是,選擇可以是隨機的,也可以基於它們的適應度函式。在後者中,最好的雌性與最好的雄性繁殖,次好的雌性與次好的雄性繁殖。交叉的結果是兩個後代,其產生如下:
o
f
f
s
p
r
i
n
g
1
=
L
∗
m
a
l
e
+
(
1
−
L
)
∗
f
e
m
a
l
e
o
f
f
s
p
r
i
n
g
2
=
L
.
f
e
m
a
l
e
+
(
1
−
L
)
∗
m
a
l
e
(7)
offspring1 = L*male+(1-L)*female\\ offspring2 = L.female + (1-L)*male \tag{7}
offspring1=L∗male+(1−L)∗femaleoffspring2=L.female+(1−L)∗male(7)
其中male是父本,female是母本。L是一個特定範圍的隨機數。
蜉蝣演算法流程如下:
Step1 . 初始化雌性蜉蝣,雄性蜉蝣,設定引數。
Step2 . 計算適應度值,並且排序,獲取pbest和gbest。
Step3.依次跟新雄性蜉蝣,雌性蜉蝣位置,並且交配。
Step4.計算適應度,並更新pbest和gbest
Step5.是否滿足停止條件,如果滿足則退出,輸出結果,否則重複執行Step3-5。
2.演算法結果
3.參考文獻
[1]Konstantinos Zervoudakis,Stelios Tsafarakis. A mayfly optimization algorithm[J]. Computers & Industrial Engineering,2020,145.