沙猫群优化算法(Sand Cat Swarm Optimization,SCSO)(附改进及Matlab源码,完整,免费)

一、算法灵感

  沙猫群优化(Sand Cat Swarm Optimization, SCSO)算法是一种受自然界沙猫行为而设计的元启发式算法。沙猫的两个主要动作是觅食和攻击猎物。这个算法的灵感来源于沙猫对低频噪声的检测能力。沙猫无论是在地面上还是在地下,都能凭借其独特的特征找到猎物。

二、算法介绍

2.1 初始化

  该算法是一种基于种群的方法,将相关结构定义为向量。在 d d d 维优化问题中,沙猫是表示问题解的 1 × d 1×d 1×d 数组,其定义如图1所示。每个变量值 ( x 1 , x 2 , … , x d ) (x_1, x_2, …, x_d) (x1,x2,,xd)都是一个浮点数。在这里,每个 x x x 必须位于下界和上界之间。在初始化算法中,首先,根据问题的大小 ( N p o p × N d ) (N_{pop} × N_d) (Npop×Nd) ( p o p = 1 , … , n ) (pop = 1,…,n) (pop=1n)用沙猫种群创建一个候选矩阵。每只沙猫的适应度通过待解决问题的适应度函数得到。
在这里插入图片描述

图1 沙猫初始化过程

2.2 搜索猎物(探索阶段)

  控制探索与开发阶段过渡的最终参数和主要参数是 R R R,当 ∣ R ∣ > 1 \left| R \right| > 1 R>1 时,沙猫对进行猎物搜索。沙猫对猎物的搜索依赖于低频噪声的释放,假设沙猫的灵敏度范围 r G {r_G} rG 0 0 0 2 2 2 kHz。 S M S_M SM 灵感来自沙猫的听觉特征,假设其值为 2 2 2 i t e r c ite{r_c} iterc 为当前迭代, i t e r max ⁡ ite{r_{\max }} itermax 为最大迭代, r a n d ( 0 , 1 ) rand(0,1) rand(0,1) 表示 0 0 0 1 1 1 的随机数。
r G = s M − s M × i t e r c i t e r m a x (1) {r_G} = {s_M} - { { {s_M} \times {iter_c}} \over { { {iter}_{ { {max}}}}}} \tag{1} rG=sMitermaxsM×iterc(1) R = 2 × r ⃗ G × r a n d ( 0 , 1 ) − r ⃗ G (2) R = 2 \times {\vec r_G} \times rand(0,1) - {\vec r_G} \tag{2} R=2×r G×rand(0,1)r G(2) r = r G × r a n d ( 0 , 1 ) (3) r = {r_G} \times rand(0,1) \tag{3} r=rG×rand(0,1)(3)
  每只沙猫根据最佳候选位置( P o s b c Po{s_{bc}} Posbc)和当前位置( P o s c Po{s_{c}} Posc)及其灵敏度范围( r r r)更新自己的位置。因此,沙猫能够找到其他可能的最佳猎物位置。
P o s ( t + 1 ) = r ⋅ ( P o s b c ( t ) − r a n d ( 0 , 1 ) ⋅ P o s c ( t ) ) (4) Pos\left( {t + 1} \right) = r \cdot \left( {Po{s_{bc}}\left( t \right) - rand\left( {0,1} \right) \cdot Po{s_c}\left( t \right)} \right) \tag{4} Pos(t+1)=r(Posbc(t)rand(0,1)Posc(t))(4)

2.3 攻击猎物(开发阶段)

  当 ∣ R ∣ ≤ 1 \left| R \right| \le 1 R1 时,沙猫进行攻击猎物。首先,利用最佳位置 P o s b c Po{s_{bc}} Posbc 与当前位置 P o s c Po{s_{c}} Posc 来生成一个随机位置。假设沙猫的灵敏度范围是一个圆,利用轮盘赌法给每一只沙猫随机选择一个角度 θ \theta θ,最后通过公式(6)实现攻击猎物。其中,随机位置可以确保沙猫靠近猎物,随机角度可以避免算法陷入局部最优。
P o s r n d = ∣ r a n d ( 0 , 1 ) ⋅ P o s b ( t ) − P o s c ( t ) ∣ (5) Po{s_{rnd}} = \left| {rand(0,1) \cdot Po{s_b}(t) - Po{s_c}(t)} \right| \tag{5} Posrnd=rand(0,1)Posb(t)Posc(t)(5) P o s ( t + 1 ) = P o s b ( t ) − r ⃗ ⋅ P o s r n d ⋅ cos ⁡ ( θ ) (6) Pos\left( {t + 1} \right) = Po{s_b}(t) - \vec r \cdot Po{s_{rnd}} \cdot \cos (\theta ) \tag{6} Pos(t+1)=Posb(t)r Posrndcos(θ)(6)
在这里插入图片描述

图2 沙猫群在 t 次迭代的位置

在这里插入图片描述

图3 沙猫群在 t +1次迭代的位置

2.4 算法伪代码

  1. 初始化沙丘猫数量 N N N 和最大迭代次数 T T T
  2. 初始化种群: P o s i ( i = 1 , 2 , . . . , N ) Pos_i(i=1,2,...,N) Posi(i=1,2,...,N)
  3. While t < = T t<=T t<=T do
  4.   更新 r r r r G r_G rG R R R
  5.   检查是否有沙丘猫超出了搜索空间并进行修改
  6.   计算每只沙丘猫的饥饿值(适应度值),并找到吃的最饱的沙丘猫 ( P o s b c ) (Pos_{bc}) (Posbc)
  7.   For i = 1 i=1 i=1 to N N N do
  8.     利用轮盘选择算法获得随机角度 ( 0 º ≤ θ ≤ 360 º ) (0º≤\theta≤360º) (θ360º)
  9.     If ∣ R ∣ < = 1 |R|<=1 R<=1 then
  10.       根据等式(6)更新沙猫的搜索位置。
  11.     Else
  12.       根据等式(4)更新沙猫的搜索位置。
  13.     End If
  14.   End For
  15.    t = t + 1 t=t+1 t=t+1
  16. End While
  17. 返回吃的最饱的猫(最优解) P o s b c Pos_{bc} Posbc

三、实验结果

SCSO在23个经典测试函数(设置维度 d i m = 30 dim=30 dim=30)的F3、F6、F9中的收敛曲线,测试函数公式如下:

函数 公式 理论值
F3 F 3 ( x ) = ∑ i = 1 n ( ∑ j − 1 i x j ) 2 {F_3}(x) = \sum\nolimits_{i = 1}^n { { {(\sum\nolimits_{j - 1}^i { {x_j}} )}^2}} F3(x)=i=1n(j1ixj)2 0.00 0.00 0.00
F6 F 6 ( x ) = ∑ i = 1 n ( x i + 5 ) 2 {F_6}(x) = {\sum\nolimits_{i = 1}^n {({x_i} + 5)} ^2} F6(x)=i=1n(xi+5)2 0.00 0.00 0.00
F9 F 9 ( x ) = ∑ i = 1 n [ x i 2 − 10 cos ⁡ ( 2 π x i ) + 10 ] {F_9}(x) = \sum\nolimits_{i = 1}^n {[x_i^2 - 10\cos (2\pi {x_i}) + 10]} F9(x)=i=1n[xi210cos(2πxi)+10] 0.00 0.00 0.00

3.1 F3收敛曲线

在这里插入图片描述

3.2 F6收敛曲线

请添加图片描述

3.3 F9收敛曲线

请添加图片描述

四、改进沙猫群优化算法

点这里:改进的沙猫群优化算法(Modified Sand Cat Swarm Optimization,MSCSO)

五、Matlab代码

代码在资源中,可自行免费下载。
快速跳转:RSA源代码
     SO源代码
     SCSO源代码

六、参考文献

[1] Seyyedabbasi, A., Kiani, F. Sand Cat swarm optimization: a nature-inspired algorithm to solve global optimization problems. Engineering with Computers, 2022.

猜你喜欢

转载自blog.csdn.net/jiaheming1983/article/details/129338497