智能优化算法:自私羊群优化算法-附代码
文章目录
摘要:自私羊群优化 (Selfish Herds optimization,SHO) 算法是由 Fausto 于 2017 年提出的元启发式算法。该算法主要模拟羊群受到捕食者攻击时的自私行为(尽量聚集到牧群中心远离捕食者),它具有易于理解和实施的特点。
1.算法原理
SHO 算法它主要基于汉密尔顿提出的自私群理论来模拟猎物与捕食者之间的狩猎关系。当群体中的个体受到捕食者的攻击时,为了增加生存机会,群体中的个体产生聚集行为,个体更有可能移动到相对安
全的位置(群体的中心位置),并且群体的边缘个体更容易受到攻击,这也导致群体的边缘个体逃离群体,以增加他们被捕食者攻击时的生存机会。该方法假设整个平原是一个解空间,该算法包含两个不同的搜索因子:被狩猎群和狩猎群。每个搜索因子通过一组不同的进
化算子指导算法的计算,以便更好地模拟猎物与捕食者关系之间的关系。
1.1 初始化种群个体
假设自私羊群体优化算法的群体集合是 S S S ,它包含 N N N 个种群个体,种群中的每一个体被定义为 S i = ( s i , 1 , s i , 2 , … , s i , n ) S_i=(s_{i,1},s_{i,2},…,s_{i,n}) Si=(si,1,si,2,…,si,n) ,其代表个体在种群中的位置信息,n 代表解决方案的大小。整个种群组的初始化公式如下:
s i , j = x j l o w + r a n d ( 0 , 1 ) . ( x j h i g h − x j l o w ) (1) s_{i,j}=x_j^{low} +rand(0,1).(x_j^{high}-x_j^{low})\tag{1} si,j=xjlow+rand(0,1).(xjhigh−xjlow)(1)
其中 x j l o w x^{low}_j xjlow和 x j h i g h x^{high}_j xjhigh分别表示解空间的下限和上限。算法参数值的范围: i = 1 , 2 , . . , N i=1,2,..,N i=1,2,..,N和 j = 1 , 2 , . . . , n j=1,2,...,n j=1,2,...,n。 r a n d ( ) rand() rand()表示随机函数,生成值的范围落在区间[0,1]内。
在自私羊群优化算法中,整个种群 S S S 被分为两个子群: H H H 和 P ( S = H ∪ P ) , H ( H = h 1 , h 2 , … , h N h ) P(S = H ∪ P) ,H(H = h_1,h_2,…,h_{Nh}) P(S=H∪P),H(H=h1,h2,…,hNh) 代表一群猎物, P ( P = p 1 , p 2 , … , p N p ) P(P = p_1,p_2,…,p_{Np}) P(P=p1,p2,…,pNp)代表一群捕食者。在自然界中,猎物的数量通常多于捕食者的数量。在 SHO 中,猎物 ( N h ) (N_h) (Nh) 的数量占总个体的 70%~90% ( N N N) ,其余的个体被认为是捕食者 ( N p N_p Np) 。 N h N_h Nh和 N p N_p Np按以下公式计算:
N h = f l o o r ( N . r a n d ( 0.7 , 0.9 ) ) (2) N_h=floor(N.rand(0.7,0.9))\tag{2} Nh=floor(N.rand(0.7,0.9))(2)
N p = N − N h (3) N_p = N- N_h \tag{3} Np=N−Nh(3)
其中, r a n d ( ) rand() rand() 表示一个随机数,其值范围为 0.7到 0.9, f l o o r ( ) floor() floor() 表示将实数转换为整数的函数。
1.2 分配生存价值
在 SHO 中,为整个种群 ( S S S) 的每个体 ( s i s_i si) 分配一个生存值 ( S V s i SV_{si} SVsi) ,其代表个体的生存能力,有机会在攻击中生存或成功杀死攻击中的猎物。生存价值的数学公式定义如下:
S V s i = f ( s i − f w o r s t ) f b e s t − f w o r s t (4) SV_{si}=\frac{f(s_i-f_{worst})}{f_{best}-f_{worst}}\tag{4} SVsi=fbest−fworstf(si−fworst)(4)
其中, f ( ) f () f() 代表目标函数, f b e s t f_{best} fbest和 f w o r s t f_{worst} fworst分别代表目标函数的最佳值和最差值。对 70%~90%的猎物计算生存价值,生存价值最高的为猎物领袖,生存价值越低的为最容易被捕获的猎物。
1.3 算法的结构
基于 SHO 的算法的结构主要包括四个方面:① 猎物(被捕食者)领袖的运动;② 猎物追随者的跟随运动或逃脱运动;③ 捕食者的狩猎运动;④ 捕食阶段和恢复阶段。
1.3.1 猎物领袖的运动
猎物的领导者被定义为猎物种群中最大的生存价值。定义公式如下:
h L = ( S V h j = m a x ( S V h i ) ) , i ∈ 1 , 2 , . . . , N (5) h_L=(SV_{h_j}=max(SV_{h_i})),i\in{1,2,...,N}\tag{5} hL=(SVhj=max(SVhi)),i∈1,2,...,N(5)
猎物领袖的位置更新如下:
h L = { h L + 2. α . φ h L , p M . ( p M − h L ) , S V h L = 1 h L + 2. α . φ h L , x b e s t . ( x b e s t − h L ) , S V h L < 1 (6) h_L=\begin{cases} h_L+2.\alpha.\varphi_{h_L,p_M}.(p_M-h_L),SV{h_L}=1\\ h_L+2.\alpha.\varphi_{h_L,x_{best}}.(x_{best}-h_L),SV_{h_L}<1 \end{cases}\tag{6} hL={
hL+2.α.φhL,pM.(pM−hL),SVhL=1hL+2.α.φhL,xbest.(xbest−hL),SVhL<1(6)
α \alpha α代表区间[0,1]之间的随机数, α \alpha α 越大,位置更新越快,捕获的猎物越多; α \alpha α 越小,捕获的猎物越少。 φ \varphi φ 代表个体之间的吸引力, p M p_M pM代表猎物的相对危险位置, φ \varphi φ 与 p M p_M pM定义如下:
φ h i , h j = S V h j . e − ∣ ∣ h i − h j ∣ ∣ 2 (7) \varphi_{h_i,h_j}=SV_{h_j}.e^{-||h_i-h_j||^2}\tag{7} φhi,hj=SVhj.e−∣∣hi−hj∣∣2(7)
p M = ∑ i = 1 N p S V p i . p i ∑ i = 1 N p S V p i (8) p_M = \frac{\sum_{i=1}^{N_p}SV_{p_i}.p_i}{\sum_{i=1}^{N_p}SV_{p_i}}\tag{8} pM=∑i=1NpSVpi∑i=1NpSVpi.pi(8)
1.3.2 猎物追随者的跟随运动或逃脱运动
在猎物种群中,猎物追随者分为跟随猎物 ( H F H_F HF) 和逃生猎物 ( H D H_D HD) ,跟随猎物又分为优势猎物 ( H d H_d Hd) 和下属猎物 ( H s H_s Hs) 。其定义如下:
H F = { h i ≠ h L ∣ S V h i ≥ r a n d ( 0 , 1 ) } (9) H_F=\{h_i\neq h_L|SV_{h_i}\geq rand(0,1)\} \tag{9} HF={
hi=hL∣SVhi≥rand(0,1)}(9)
H D = { h i ≠ h L ∣ S V h i < r a n d ( 0 , 1 ) } (10) H_D=\{h_i\neq h_L|SV_{h_i}< rand(0,1)\} \tag{10} HD={ hi=hL∣SVhi<rand(0,1)}(10)
H d = { h i ∈ H F ∣ S V h i ≥ S V h u } (11) H_d = \{h_i\in H_F|SV_{h_i}\geq SV_{h_u} \} \tag{11} Hd={ hi∈HF∣SVhi≥SVhu}(11)
H s = { h i ∈ H F ∣ S V h i < S V h u } (12) H_s = \{h_i\in H_F|SV_{h_i}< SV_{h_u} \} \tag{12} Hs={ hi∈HF∣SVhi<SVhu}(12)
其中 S V h u SV_{h_u} SVhu代表猎物生存价值的平均值,定义如下:
S V h u = ∑ i = 1 N h S V h i N h (13) SV_{h_u}=\frac{\sum_{i=1}^{N_h}SV_{h_i}}{N_h}\tag{13} SVhu=Nh∑i=1NhSVhi(13)
跟随猎物的位置更新公式如下:
h i = { h i + 2. ( β . φ h i , h j . ( h L − h i ) + r . φ h i , h j . ( h c i − h i ) ) , h i ∈ H d h i + 2. δ . φ h i , h M . ( h M − h i ) , h i ∈ H s (14) h_i=\begin{cases} h_i+2.(\beta.\varphi_{h_i,h_j}.(h_L-h_i)+r.\varphi_{h_i,h_j}.(h_{c_i}-h_i)),h_i \in H_d \\ h_i+2.\delta.\varphi_{h_i,h_M}.(h_M - h_i),h_i \in H_s \end{cases} \tag{14} hi={
hi+2.(β.φhi,hj.(hL−hi)+r.φhi,hj.(hci−hi)),hi∈Hdhi+2.δ.φhi,hM.(hM−hi),hi∈Hs(14)
其中, β , r , δ β ,r,\delta β,r,δ 表示区间[0,1]内的随机数形式, h c i h_{c_i} hci表示局部最优个体, h M h_M hM表示猎物的相对安全位置,其定义如下:
h c i = ( h j ∈ H , h j ≠ [ h i , h L ] ∣ S V h j > S V h i r i , j = m i n ∣ ∣ h i , h j ∣ ∣ ) (14) h_{c_i} = (\frac{h_j \in H,h_j\neq [h_i,h_L]|SV_{h_j}>SV_{h_i}}{r_{i,j}=min||h_i,h_j||})\tag{14} hci=(ri,j=min∣∣hi,hj∣∣hj∈H,hj=[hi,hL]∣SVhj>SVhi)(14)
h M = ∑ i = 1 N h S V h i . h i ∑ i = 1 N h S V h i (15) h_M =\frac{\sum_{i=1}^{N_h}SV_{h_i}.h_i}{\sum_{i=1}^{N_h}SV_{h_i}} \tag{15} hM=∑i=1NhSVhi∑i=1NhSVhi.hi(15)
其中 r i , j r_{i,j} ri,j代表猎物个体之间的欧几里德距离。逃生猎物的位置更新公式如下:
h i = h i + 2. ( β , φ h i , x b e s t . ( x b e s t − h i ) + r . ( 1 − S V h i ) . e ) (16) h_i=h_i + 2.(\beta,\varphi_{h_i,x_{best}}.(x_{best}-h_i)+r.(1-SV_{h_i}).e)\tag{16} hi=hi+2.(β,φhi,xbest.(xbest−hi)+r.(1−SVhi).e)(16)
其中, x b e s t x_{best} xbest表示全局最优位置, β β β 和 r r r 表示在区间[0,1]内的随机数, β β β 表示距离猎物领袖位置, β β β 越小,表示距离越近; r r r表示控制随机偏移值的长短, r r r越小,表示偏移值越小。 e e e 表示空间解中的随机方向。
1.3.3 捕食者的狩猎运动
在捕食者种群中,捕食者的位置更新公式如下:
p i = p i + 2. ρ . ( h r − p i ) (17) p_i=p_i+2.\rho.(h_r-p_i)\tag{17} pi=pi+2.ρ.(hr−pi)(17)
其中, ρ ρ ρ 代表区间[0,1]之间的随机数, ρ ρ ρ 值越大,位置更新越远,越容易忽略猎物。 h r h_r hr是基于捕食概率从猎物种群中随机选择的猎物,捕食概率 ( θ p i , h j ) (θ_{p_i},h_j) (θpi,hj) 定义如下:
θ p i , h j = w p i , h j ∑ m = 1 N h w p i , h m (18) \theta_{p_i,h_j} = \frac{w_{p_i,h_j}}{\sum_{m=1}^{N_h}w_{p_i,h_m}}\tag{18} θpi,hj=∑m=1Nhwpi,hmwpi,hj(18)
w p i , h j w_{p_i,h_j} wpi,hj表示捕食者和猎物之间的吸引力,吸引力的数学公式定义如下:
w p i , h j = ( 1 − S V h j ) . e − ∣ ∣ p i − h j ∣ ∣ 2 (19) w_{p_i,h_j} = (1- SV_{h_j}).e^{-||p_i-h_j||^2}\tag{19} wpi,hj=(1−SVhj).e−∣∣pi−hj∣∣2(19)
其中 ∣ ∣ p i − h j ∣ ∣ 2 ||p_i-h_j||^2 ∣∣pi−hj∣∣2代表 p i p_i pi和 h j h_j hj之间的欧几里德距离。
1.3.4 捕食阶段和恢复阶段
捕食阶段:每个猎物都有一个危险的区域,如果它属于这个领域,很可能被捕食者捕杀。危险域通常是一个圆,其半径定义为:
R = ∑ j = 1 n ∣ x j l o w − x j h i g h ∣ 2. n (20) R = \frac{\sum_{j=1}^{n}|x_j^{low}-x_j^{high}|}{2.n}\tag{20} R=2.n∑j=1n∣xjlow−xjhigh∣(20)
危险区域的猎物收集定义如下:
T p i = { h j ∈ H ∣ S V h j < S V p i , ∣ ∣ p i − h j ∣ ∣ ≤ R } (21) T_{p_i}=\{ h_j \in H | SV_{h_j}<SV_{p_i},||p_i-h_j||\leq R\}\tag{21} Tpi={
hj∈H∣SVhj<SVpi,∣∣pi−hj∣∣≤R}(21)
猎物在危险区域被猎杀的概率定义如下:
u p i , h i = w p i , h i ∑ h m ∈ T p i w p i , h i , h j ∈ T p i (22) u_{p_i,h_i} = \frac{w_{p_i,h_i}}{\sum_{h_m \in T_{p_i}}w_{p_i,h_i}},h_j \in T_{p_i} \tag{22} upi,hi=∑hm∈Tpiwpi,hiwpi,hi,hj∈Tpi(22)
恢复阶段:在 SHO 中,被捕食者猎杀的所有猎物都将被新生的猎物所取代,新的猎物将通过交配操作产生,SHO通过交配概率选择交配猎物,其定义如下:
σ h j = S V h j ∑ h m ∈ M S V h m (23) \sigma_{h_j}=\frac{SV_{h_j}}{\sum_{h_m\in M}SV_{h_m}}\tag{23} σhj=∑hm∈MSVhmSVhj(23)
其中 M M M 代表一群没有被捕食者捕杀的猎物集,交配操作定义如下:
h n e w = m i x ( [ h r 1 , 1 , h r 2 , 2 , . . . , h r n , n ] ) (24) h_{new}=mix([h_{r_1,1},h_{r_2,2},...,h_{r_n,n}])\tag{24} hnew=mix([hr1,1,hr2,2,...,hrn,n])(24)
函数 m i x ( ) mix() mix() 用于从不同个体 ( s = r 1 , r 2 , … , r n ) (s = r_1,r_2,…,r_n) (s=r1,r2,…,rn) 中选择维度组件。
算法流程如下:
1.Input
2.Begin
3.利用公式初始化所有个体 S
4.定义羊群成员和捕食者的个数,利用公式(1)并将S 分为两组:H 与 P
5.For entire S do
6.利用公式(3)计算生存值
7.End For
8.While(t <Max number of iterations)
9.执行自私羊群移动操作
-
For each selfish herd
-
IF leader of the herd
-
利用公式(5)为羊群领袖更新位置
-
Else
-
利用公式(3)和(16)更新羊群跟随或逃离运动
-
End IF
-
End For
-
捕食者移动操作
-
For each predators
-
For each selfish herd
-
利用公式(18)计算追逐概率
-
End For
-
利用公式(17)更新捕食者位置
-
End For
-
利用公式(3)重新计算 H 和 P 中每个成员的生存值
-
利用公式(20)计算危险域半径 R
-
利用公式(21)、(22)执行捕食阶段
-
利用公式(23)、(24)执行恢复阶段
-
t = t + 1
-
End while
-
返回羊群领导者位置
-
Output 最优值
-
End
2.算法结果
3.参考文献
[1] Fausto F,Cuevas E,Valdivia A,et al.A global optimization
algorithm inspired in the behavior of selfish herds[J].
BioSystems,2017,160:39-55.
[2] 朱惠娟,王永利,陈琳琳.面向三维模型轻量化的自私羊群优化算法研究[J].计算机工程与应用,2020,56(03):42-48.