智能优化算法:群居蜘蛛优化算法-附代码
摘要:群居蜘蛛优化(Social Spider Optimization,SSO) 算法是一种群体智能进化算法,该算法基于群居蜘蛛中个体与群体协作行为的模拟,考虑两个不同的搜索动因:雄性和雌性。按照性别,个体分属于两种不同的进化算子,并在群体内模仿不同的协作行为。该算法具有较好的收敛速度和全局搜索能力。
1.算法原理
群居蜘蛛(Social Spider)是一类倾向群居的蜘蛛物种,个体间保持有复杂的协作行为准则,根据雌雄执行多种任务,如捕食,交配,蜘蛛网设计及群体协作等。群居蜘蛛由个体和蜘蛛网络组成,个体分为雄性和雌性两种类别。种群依据个体雌雄分配不同的任务,个体之间通过直接或间接的协作将有用信息通过蜘蛛网络传递给群居中的其他个体,并将此信息编码成振动的强弱在个体间进行协作。振动的强弱可被群居中个体解码成不同的信息,如猎物的大小,相邻个体特征等,而振动的强度取决于蜘蛛的重量和距离。SSO 算法在真实模拟群居蜘蛛群体内不同协作行为的基础上,引入新的计算机制,有效避免了目前常规群算法中存在的早熟收敛和局部极值问题在解决连续变量优化问题时,SSO 算法是以迭代的方式不断地寻找最优值,最重个体蜘蛛所处的位置即优化问题的解。假设整个搜索空间为蜘蛛网络,每个潜在解即为搜索空间中蜘蛛所处的位置。依据雄性和雌性的搜索机制,每个个体分属于两种不同的进化算子,并在群体内模仿不同的协作行为。
SSO 算法步骤可归纳如下:
Step1 设搜索空间的维度
n
n
n,雌性蜘蛛
N
f
N_f
Nf ,雄性蜘蛛
N
m
N_m
Nm 以及总种群数量
N
N
N。定义
N
f
N_f
Nf及
N
m
N_m
Nm 为:
N
f
=
f
l
o
o
r
[
(
0.9
−
r
a
n
d
⋅
0.25
)
⋅
N
]
(1)
N_f = floor[(0.9 - rand\cdot 0.25)\cdot N] \tag{1}
Nf=floor[(0.9−rand⋅0.25)⋅N](1)
N m = N − N f (2) N_m=N-N_f \tag{2} Nm=N−Nf(2)
式中: r a n d rand rand 为[0,1]上的随机数; f l o o r ( ⋅ ) floor(·) floor(⋅)为实数到整数的映射。
Step2 设种群
S
S
S由
N
N
N个蜘蛛个体组成,
N
N
N由两个子群的
F
F
F、
M
M
M 组成。随机初始化雌性蜘蛛
(
F
=
{
f
1
,
.
.
.
,
f
N
f
}
)
(F=\{f_1,...,f_{N_f}\})
(F={f1,...,fNf}) 和雄性蜘蛛,则
(
M
=
m
1
,
m
2
,
.
.
.
,
m
N
m
)
(M = {m_1,m_2,...,m_{N_m}})
(M=m1,m2,...,mNm),定义交配半径 r 由下式表示:
r
=
∑
j
=
1
n
(
p
j
h
i
g
h
−
p
j
l
o
w
)
2
n
(3)
r = \frac{\sum_{j=1}^{n} (p_{jhigh} - p_{jlow})}{2n}\tag{3}
r=2n∑j=1n(pjhigh−pjlow)(3)
式中:
p
j
h
i
g
h
p_{jhigh}
pjhigh 和
p
j
l
o
w
p_{jlow}
pjlow分别为第
j
j
j 个变量雌性蜘蛛上下限值。
Step3 计算每一个蜘蛛的重量
w
i
w_i
wi :
w
i
=
J
(
s
i
)
−
w
o
r
s
t
s
b
e
s
t
s
−
w
o
r
s
t
s
(4)
w_i = \frac{J(s_i)-worst_s}{best_s - worst_s}\tag{4}
wi=bests−worstsJ(si)−worsts(4)
式中:
J
(
s
i
)
J(s_i)
J(si)是蜘蛛 i 所在位置对应的目标函数适应度值;
b
e
s
t
s
=
m
a
x
k
∈
1
,
2
,
.
.
.
,
N
(
J
(
s
k
)
)
best_s = max_{k\in{1,2,...,N}}(J(sk))
bests=maxk∈1,2,...,N(J(sk))
w o r s t s = m i n k ∈ 1 , 2 , . . . , N ( J ( s k ) ) worst_s =min_{k\in{1,2,...,N}}(J(sk)) worsts=mink∈1,2,...,N(J(sk))
Step4 根据协作机制按式(11) 移动雌性蜘蛛:
{
f
i
k
+
1
=
f
i
k
+
α
⋅
V
i
b
c
⋅
(
s
c
−
f
i
k
)
β
⋅
V
i
b
b
i
⋅
(
s
b
−
f
i
k
)
+
δ
⋅
(
r
a
n
d
−
0.5
)
,
i
f
r
m
<
P
F
f
i
k
+
1
=
f
i
k
−
α
⋅
V
i
b
c
⋅
(
s
c
−
f
i
k
)
−
β
⋅
V
i
b
b
i
⋅
(
s
b
−
f
i
k
)
+
δ
⋅
(
r
a
n
d
−
0.5
)
,
e
l
s
e
(5)
\begin{cases} f_i^{k+1} = f_i^k + \alpha \cdot Vibc \cdot(s_c-f_i^k)\\ \beta\cdot Vibb_i \cdot(s_b-f_i^k) + \delta \cdot(rand-0.5),if \, r_m<PF\\ f_i^{k+1} = f_i^{k} - \alpha \cdot Vibc \cdot (s_c -f_i^k) - \beta \cdot Vibb_i \cdot (s_b - f_i^k)+ \delta \cdot (rand - 0.5) , else \end{cases} \tag{5}
⎩⎪⎨⎪⎧fik+1=fik+α⋅Vibc⋅(sc−fik)β⋅Vibbi⋅(sb−fik)+δ⋅(rand−0.5),ifrm<PFfik+1=fik−α⋅Vibc⋅(sc−fik)−β⋅Vibbi⋅(sb−fik)+δ⋅(rand−0.5),else(5)
式中:
α
、
β
、
δ
α、β 、δ
α、β、δ 及
r
a
n
d
rand
rand 均为[0,1]上的随机数; k 为当前迭代次数;
s
c
、
s
b
s_c 、s_b
sc、sb 分别为最近个体 i 的较好重量和最佳重量;振动因子
V
i
b
c
i
、
B
i
b
b
i
Vibc_i 、Bibb_i
Vibci、Bibbi 分别由式(6)、式(7) 表示:
V
i
b
c
i
=
w
c
⋅
e
−
d
i
,
c
2
(6)
Vibc_i = w_c\cdot e^{-d_{i,c}^2} \tag{6}
Vibci=wc⋅e−di,c2(6)
V i b b i = w b ⋅ e − d t , b 2 (7) Vibb_i = w_b\cdot e^{-d_{t,b}^2} \tag{7} Vibbi=wb⋅e−dt,b2(7)
式中: w c > w i ; w b = m a x k ∈ 1 , 2 , . . . , N ( w k ) ; d i , j = ∣ ∣ s i − s j ∣ ∣ w_c >w_i;w_b = max_{k\in {1,2,...,N}(w_k)};d_{i,j}=||s_i - s_j|| wc>wi;wb=maxk∈1,2,...,N(wk);di,j=∣∣si−sj∣∣。
Step5 根据协作机制按式(8) 移动雄性蜘蛛:
{
m
i
k
+
1
=
m
i
k
+
α
⋅
V
i
b
f
i
⋅
(
s
f
−
m
i
k
)
+
δ
⋅
(
r
a
n
d
−
0.5
)
,
i
f
w
N
f
+
i
>
w
N
f
+
m
m
i
k
+
1
=
m
i
k
+
α
⋅
(
∑
h
=
1
N
m
m
h
k
⋅
w
N
f
+
h
∑
h
=
1
N
m
w
N
f
+
h
−
m
i
k
)
,
e
l
s
e
(8)
\begin{cases} m_i^{k+1}=m_i^k + \alpha \cdot Vibf_i \cdot(s_f - m_i^k)+\delta \cdot (rand-0.5),if \, w_{N_{f+i}}>w_{N_{f+m}} \\ m_i^{k+1}=m_i^k + \alpha \cdot (\frac{\sum_{h=1}^{N_m}m_h^k \cdot w_{N_{f+h}}}{\sum_{h=1}^{N_m} w_{N_{f+h}}}-m_i^k),else \end{cases} \tag{8}
⎩⎨⎧mik+1=mik+α⋅Vibfi⋅(sf−mik)+δ⋅(rand−0.5),ifwNf+i>wNf+mmik+1=mik+α⋅(∑h=1NmwNf+h∑h=1Nmmhk⋅wNf+h−mik),else(8)
式中:
s
f
s_f
sf 为最近雌蜘蛛个体重量;振动因子
V
i
b
f
i
Vibf_i
Vibfi可由式(9) 表示:
V
i
b
f
i
=
w
f
⋅
e
−
d
i
,
f
2
(9)
Vibf_i = w_f \cdot e^{-d_{i,f}^2} \tag{9}
Vibfi=wf⋅e−di,f2(9)
式中:
w
f
w_f
wf 为常量。
Step6 在交配过程中,以每个个体重量定义交配概率,越重的蜘蛛个体具有获得繁育后代更大的概率。本文按轮盘赌法确定概率
p
s
i
ps_i
psi :
p
s
i
=
w
i
∑
j
∈
T
g
w
j
(10)
ps_i = \frac{w_i}{\sum_{j\in Tg}w_j} \tag{10}
psi=∑j∈Tgwjwi(10)
Step7 判断是否满足停止条件,若满足则算法结
束;否则,返回 step3。
2.算法结果
3.参考文献
[1] Cuevas E,Cienfuegos M,Zaldívar D,et al. A swarm optimization algorithm inspired in the behavior of the social-spider[J].Expert Systems with Applications,2013,40(16):6374 -6384.
4.Matlab代码
个人资料介绍