智能優化演算法:海鷗演算法原理及Matlab代碼
- 文章導航
- 1. 演算法原理
- 2. SOA演算法流程
- 2.1 遷徙行為(exploration ability)
- 2.2 攻擊行為(exploitation ability)
- 3. SOA演算法流程如下:
- 4. 運行結果
文章導航
海鷗演算法(Seagull optimization algorithm,SOA),是由Gaurav Dhiman和Vijay kumar于2018年提出的一種新型群體智能優化演算法,該演算法主要模擬了自然界中海鷗遷徙以及遷徙程序中的攻擊行為(覓食行為),
1. 演算法原理
海鷗演算法主要模擬了海鷗的遷徙行為和攻擊行為 ,遷徙行為即海鷗從一個現階段不適宜生存的地方飛往另一個適宜生存的地方,遷徙行為影響著SOA演算法的全域探索能力;攻擊行為即海鷗在飛行程序中對地面、水域內食物的攻擊覓食,攻擊行為影響著SOA演算法的區域開發能力,
2. SOA演算法流程
2.1 遷徙行為(exploration ability)
根據原始文獻所述,海鷗在遷徙行為即演算法中個體從一個位置探索至另一個位置,在這個階段,需要注意三點:避免碰撞、、向最優個體靠攏、與最優代理保持密切聯系,
為了避免與周圍海鷗發生碰撞,演算法采用附加變數A調整海鷗的位置,
C s = A ? P s ( x ) C_s=A*P_s(x) Cs?=A?Ps?(x)其中A代表海鷗在給定搜索空間中的遷徙行為,A的大小通過 f c f_c fc?進行控制,, A = f c ? ( x ? f c / M a x i t e r a t i o n ) A =f_c-(x*f_c/Max_{iteration}) A=fc??(x?fc?/Maxiteration?)最終A的大小根據迭代次數,從2→0呈線性下降,
在保證海鷗個體之間不會發生碰撞之后,令所有海鷗向著最佳海鷗靠攏, M s = B ? ( P b e s t ( x ) ? P s ( x ) ) M_s=B*(P_{best}(x)-P_s(x)) Ms?=B?(Pbest?(x)?Ps?(x))其中, M s M_s Ms?表示個體向最佳海鷗的收斂方向, B B B作為平衡演算法探索和開發能力的重要算引數,其變化遵循: B = 2 ? A ? r a n d B=2*A*rand B=2?A?rand
在計算出每個海鷗的收斂方向后,海鷗開始向著這個位置進行移動:
D
s
=
∣
C
s
+
M
s
∣
D_s=|C_s+M_s|
Ds?=∣Cs?+Ms?∣其中
D
s
D_s
Ds?即海鷗的新位置,
2.2 攻擊行為(exploitation ability)
海鷗在覓食時產生的攻擊行為呈螺旋狀下降,通過不斷改變角度和半徑在空中進行移動,海鷗在三維空間中的具體位置為:
x
=
r
?
c
o
s
(
k
)
x=r*cos(k)
x=r?cos(k)
y
=
r
?
s
i
n
(
k
)
y=r*sin(k)
y=r?sin(k)
z
=
r
?
k
z=r*k
z=r?k
r
=
u
?
e
k
v
r=u*e^{kv}
r=u?ekv其中,
k
k
k是一個位于
[
0
,
2
π
]
[0,2\pi]
[0,2π]的亂數,演算法通過
u
u
u和
v
v
v控制螺旋半徑
r
r
r,
u
u
u和
v
v
v通常取1,
結合海鷗新位置,得到整體海鷗位置更新公式如下:
P
s
(
x
)
=
(
D
s
?
x
?
y
?
z
)
+
P
b
e
s
t
(
x
)
P_s(x)=(D_s*x*y*z)+P_{best}(x)
Ps?(x)=(Ds??x?y?z)+Pbest?(x)
3. SOA演算法流程如下:
step1:初始化引數
step2:計算每只海鷗的適應度值,即目標函式值
step3:根據上述公式(1-5)計算
D
s
D_s
Ds?
step4:根據上述公式(6-10)計算
P
s
(
x
)
P_s(x)
Ps?(x)
step5:更新最佳海鷗的位置資訊和適應度值,
i
n
e
r
a
t
i
o
n
=
i
t
e
r
a
t
i
o
n
+
1
ineration=iteration+1
ineration=iteration+1
step6:如果
i
n
t
e
r
a
t
i
o
n
>
M
a
x
i
t
e
r
a
t
i
o
n
interation>Max_{iteration}
interation>Maxiteration?,跳轉至step7,否則跳轉至step3
step7:輸出最佳海鷗位置和適應度值
4. 運行結果
以CEC標準測驗函式——單峰函式、多峰函式進行2維和30維測驗,測驗結果如下圖所示,


測驗函式為:30維下的Sphere函式,所測結果可以看出SOA演算法具有非常優秀的尋優能力!
具體Matlab代碼鏈接如下:
https://mianbaoduo.com/o/bread/aZqamJc=
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/202048.html
標籤:其他
上一篇:Codeforces Round #680 (Div. 2, based on Moscow Team Olympiad)——C. Division
