0


基于蒲公英优化算法的函数寻优算法

文章目录

一、理论基础

1、蒲公英优化算法

文献[1]模拟蒲公英种子依靠风的长距离飞行过程提出了一种新的群体智能仿生优化算法,称为蒲公英优化(Dandelion Optimizer, DO)算法,用于解决连续优化问题。

(1)初始化

与其他自然启发元启发式算法相似,DO在种群初始化的基础上进行种群进化和迭代优化。在提出的DO算法中,假设每个蒲公英种子代表一个候选解,其种群表示为:

        p
       
       
        o
       
       
        p
       
       
        u
       
       
        l
       
       
        a
       
       
        t
       
       
        i
       
       
        o
       
       
        n
       
       
        =
       
       
        
         [
        
        
         
          
           
            
             
              x
             
             
              1
             
             
              1
             
            
           
          
          
           
            
             ⋯
            
           
          
          
           
            
             
              x
             
             
              1
             
             
              
               D
              
              
               i
              
              
               m
              
             
            
           
          
         
         
          
           
            
             
              ⋮
             
             
              
             
            
           
          
          
           
            
             ⋱
            
           
          
          
           
            
             
              ⋮
             
             
              
             
            
           
          
         
         
          
           
            
             
              x
             
             
              
               p
              
              
               o
              
              
               p
              
             
             
              1
             
            
           
          
          
           
            
             ⋯
            
           
          
          
           
            
             
              x
             
             
              
               p
              
              
               o
              
              
               p
              
             
             
              
               D
              
              
               i
              
              
               m
              
             
            
           
          
         
        
        
         ]
        
       
      
     
     
     
      
       (1)
      
     
    
   
   
    population=\begin{bmatrix} x_1^1 & \cdots & x_1^{Dim} \\[2ex]\vdots & \ddots & \vdots\\[2ex]x_{pop}^1 & \cdots & x_{pop}^{Dim}\end{bmatrix}\tag{1}
   
  
 population=⎣⎡​x11​⋮xpop1​​⋯⋱⋯​x1Dim​⋮xpopDim​​⎦⎤​(1)其中,

 
  
   
    p
   
   
    o
   
   
    p
   
  
  
   pop
  
 
pop表示种群数量,

 
  
   
    D
   
   
    i
   
   
    m
   
  
  
   Dim
  
 
Dim表示问题变量的维数。每个候选解在给定问题的上界(

 
  
   
    U
   
   
    B
   
  
  
   UB
  
 
UB)和下界(

 
  
   
    L
   
   
    B
   
  
  
   LB
  
 
LB)之间随机生成,第

 
  
   
    i
   
  
  
   i
  
 
i个个体

 
  
   
    
     X
    
    
     i
    
   
  
  
   X_i
  
 
Xi​的表达式为:
 
  
   
    
     
     
      
       
        
         X
        
        
         i
        
       
       
        =
       
       
        r
       
       
        a
       
       
        n
       
       
        d
       
       
        ×
       
       
        (
       
       
        U
       
       
        B
       
       
        −
       
       
        L
       
       
        B
       
       
        )
       
       
        +
       
       
        L
       
       
        B
       
      
     
     
     
      
       (2)
      
     
    
   
   
    X_i=rand\times(UB-LB)+LB\tag{2}
   
  
 Xi​=rand×(UB−LB)+LB(2)其中,

 
  
   
    r
   
   
    a
   
   
    n
   
   
    d
   
  
  
   rand
  
 
rand表示0和1之间的随机数,

 
  
   
    L
   
   
    B
   
  
  
   LB
  
 
LB和

 
  
   
    U
   
   
    B
   
  
  
   UB
  
 
UB如下所示:
 
  
   
    
     
     
      
       
        
         
          
           
            L
           
           
            B
           
           
            =
           
           
            [
           
           
            l
           
           
            
             b
            
            
             1
            
           
           
            ,
           
           
            ⋯
            
           
            ,
           
           
            l
           
           
            
             b
            
            
             
              D
             
             
              i
             
             
              m
             
            
           
           
            ]
           
          
         
        
       
       
        
         
          
           
            U
           
           
            B
           
           
            =
           
           
            [
           
           
            u
           
           
            
             b
            
            
             1
            
           
           
            ,
           
           
            ⋯
            
           
            ,
           
           
            u
           
           
            
             b
            
            
             
              D
             
             
              i
             
             
              m
             
            
           
           
            ]
           
          
         
        
       
      
     
     
     
      
       (3)
      
     
    
   
   
    \begin{array}{c}LB=[lb_1,\cdots,lb_{Dim}]\\[2ex]UB=[ub_1,\cdots,ub_{Dim}]\end{array}\tag{3}
   
  
 LB=[lb1​,⋯,lbDim​]UB=[ub1​,⋯,ubDim​]​(3)在初始化过程中,DO将适应度值最优的个体作为初始精英,认为这是蒲公英种子最适合生长的位置。以最小值为例,初始精英个体

 
  
   
    
     X
    
    
     
      e
     
     
      l
     
     
      i
     
     
      t
     
     
      e
     
    
   
  
  
   X_{elite}
  
 
Xelite​的数学表达式为:
 
  
   
    
     
     
      
       
        
         
          
           
            
             f
            
            
             
              b
             
             
              e
             
             
              s
             
             
              t
             
            
           
           
            =
           
           
            min
           
           
            ⁡
           
           
            (
           
           
            f
           
           
            (
           
           
            
             X
            
            
             i
            
           
           
            )
           
           
            )
           
          
         
        
       
       
        
         
          
           
            
             X
            
            
             
              e
             
             
              l
             
             
              i
             
             
              t
             
             
              e
             
            
           
           
            =
           
           
            X
           
           
            (
           
           
            f
           
           
            i
           
           
            n
           
           
            d
           
           
            (
           
           
            
             f
            
            
             
              b
             
             
              e
             
             
              s
             
             
              t
             
            
           
           
            =
           
           
            f
           
           
            (
           
           
            
             X
            
            
             i
            
           
           
            )
           
           
            )
           
           
            )
           
          
         
        
       
      
     
     
     
      
       (4)
      
     
    
   
   
    \begin{array}{c}f_{best}=\min(f(X_i))\\[2ex]X_{elite}=X(find(f_{best}=f(X_i)))\end{array}\tag{4}
   
  
 fbest​=min(f(Xi​))Xelite​=X(find(fbest​=f(Xi​)))​(4)其中,

 
  
   
    f
   
   
    i
   
   
    n
   
   
    d
   
   
    (
   
   
    )
   
  
  
   find()
  
 
find()表示具有相等值的两个索引。

(2)上升阶段

在上升阶段,蒲公英的种子需要达到一定的高度才能离开父母。在风速、空气湿度等影响下,蒲公英种子会上升到不同高度。在这里,天气分为以下两种情况:
第一种情况:在晴天,风速可被视为具有对数正态分布

    ln
   
   
    ⁡
   
   
    Y
   
   
    ∼
   
   
    N
   
   
    (
   
   
    μ
   
   
    ,
   
   
    
     σ
    
    
     2
    
   
   
    )
   
  
  
   \ln Y\sim N(\mu,\sigma^2)
  
 
lnY∼N(μ,σ2)。在这种分布下,随机数沿

 
  
   
    Y
   
  
  
   Y
  
 
Y轴分布更为均匀,这增加了蒲公英种子传播到遥远地区的机会。因此,DO在该情况下中强调探索。在搜索空间中,蒲公英种子被风随机吹到各个位置。蒲公英种子的上升高度由风速决定。风越大,蒲公英飞得越高,种子撒得越远。受风速的影响,蒲公英种子上方的漩涡不断被调整,使其呈螺旋状上升。在这种情况下对应的数学表达式为:
 
  
   
    
     
     
      
       
        
         X
        
        
         
          t
         
         
          +
         
         
          1
         
        
       
       
        =
       
       
        
         X
        
        
         t
        
       
       
        +
       
       
        α
       
       
        ∗
       
       
        
         v
        
        
         x
        
       
       
        ∗
       
       
        
         v
        
        
         y
        
       
       
        ∗
       
       
        ln
       
       
        ⁡
       
       
        Y
       
       
        ∗
       
       
        (
       
       
        
         X
        
        
         s
        
       
       
        −
       
       
        
         X
        
        
         t
        
       
       
        )
       
      
     
     
     
      
       (5)
      
     
    
   
   
    X_{t+1}=X_t+\alpha*v_x*v_y*\ln Y*(X_s-X_t)\tag{5}
   
  
 Xt+1​=Xt​+α∗vx​∗vy​∗lnY∗(Xs​−Xt​)(5)其中,

 
  
   
    
     X
    
    
     t
    
   
  
  
   X_t
  
 
Xt​表示第

 
  
   
    t
   
  
  
   t
  
 
t次迭代时蒲公英种子的位置,

 
  
   
    
     X
    
    
     s
    
   
  
  
   X_s
  
 
Xs​表示第

 
  
   
    t
   
  
  
   t
  
 
t次迭代时搜索空间中随机选择的位置,式(6)给出了随机生成位置的表达式。
 
  
   
    
     
     
      
       
        
         X
        
        
         s
        
       
       
        =
       
       
        r
       
       
        a
       
       
        n
       
       
        d
       
       
        (
       
       
        1
       
       
        ,
       
       
        D
       
       
        i
       
       
        m
       
       
        )
       
       
        ∗
       
       
        (
       
       
        U
       
       
        B
       
       
        −
       
       
        L
       
       
        B
       
       
        )
       
       
        +
       
       
        L
       
       
        B
       
      
     
     
     
      
       (6)
      
     
    
   
   
    X_s=rand(1,Dim)*(UB-LB)+LB\tag{6}
   
  
 Xs​=rand(1,Dim)∗(UB−LB)+LB(6)

 
  
   
    ln
   
   
    ⁡
   
   
    Y
   
  
  
   \ln Y
  
 
lnY表示服从

 
  
   
    μ
   
   
    =
   
   
    0
   
  
  
   \mu=0
  
 
μ=0和

 
  
   
    
     σ
    
    
     2
    
   
   
    =
   
   
    1
   
  
  
   \sigma^2=1
  
 
σ2=1的对数正态分布,其数学表达式为:
 
  
   
    
     
     
      
       
        ln
       
       
        ⁡
       
       
        Y
       
       
        =
       
       
        
         {
        
        
         
          
           
            
             
              
               1
              
              
               
                y
               
               
                
                 
                  2
                 
                 
                  π
                 
                
               
              
             
             
              exp
             
             
              ⁡
             
             
              
               [
              
              
               −
              
              
               
                1
               
               
                
                 2
                
                
                 
                  σ
                 
                 
                  2
                 
                
               
              
              
               (
              
              
               ln
              
              
               ⁡
              
              
               y
              
              
               
                )
               
               
                2
               
              
              
               ]
              
             
             
             
              y
             
             
              ≥
             
             
              0
             
            
           
          
         
         
          
           
            
             
              0
             
             
             
             
             
             
             
             
             
             
             
                
             
              y
             
             
              <
             
             
              0
             
            
           
          
         
        
       
      
     
     
     
      
       (7)
      
     
    
   
   
    \ln Y=\begin{dcases}\frac{1}{y\sqrt{2\pi}}\exp\left[-\frac{1}{2\sigma^2}(\ln y)^2\right]\quad y\geq0\\[2ex]0\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\,\,\, y<0\end{dcases}\tag{7}
   
  
 lnY=⎩⎨⎧​y2π​1​exp[−2σ21​(lny)2]y≥00y<0​(7)在式(7)中,

 
  
   
    y
   
  
  
   y
  
 
y表示标准正态分布

 
  
   
    N
   
   
    (
   
   
    0
   
   
    ,
   
   
    1
   
   
    )
   
  
  
   N(0,1)
  
 
N(0,1),

 
  
   
    α
   
  
  
   \alpha
  
 
α是用于调整搜索步长的自适应参数,数学表达式为:
 
  
   
    
     
     
      
       
        α
       
       
        =
       
       
        r
       
       
        a
       
       
        n
       
       
        d
       
       
        (
       
       
        )
       
       
        ∗
       
       
        
         (
        
        
         
          1
         
         
          
           T
          
          
           2
          
         
        
        
         
          t
         
         
          2
         
        
        
         −
        
        
         
          2
         
         
          T
         
        
        
         t
        
        
         +
        
        
         1
        
        
         )
        
       
      
     
     
     
      
       (8)
      
     
    
   
   
    \alpha=rand()*\left(\frac{1}{T^2}t^2-\frac{2}{T}t+1\right)\tag{8}
   
  
 α=rand()∗(T21​t2−T2​t+1)(8)![在这里插入图片描述](https://img-blog.csdnimg.cn/a7b4f7bded014bf6959232a044434953.png#pic_center)

图1

    α
   
  
  
   \alpha
  
 
α的动态变化

图1将

    α
   
  
  
   \alpha
  
 
α随迭代次数的动态变化可视化。根据图1所示,

 
  
   
    α
   
  
  
   \alpha
  
 
α是在接近0的非线性减小过程中

 
  
   
    [
   
   
    0
   
   
    ,
   
   
    1
   
   
    ]
   
  
  
   [0,1]
  
 
[0,1]之间的随机扰动。这种波动使得算法在早期阶段更加关注全局搜索,在后期阶段转向局部搜索,这有利于确保在全局搜索之后的精确收敛。

 
  
   
    
     v
    
    
     x
    
   
  
  
   v_x
  
 
vx​和

 
  
   
    
     v
    
    
     y
    
   
  
  
   v_y
  
 
vy​表示蒲公英由于分离涡流作用而产生的升力系数,式(9)用于计算可变维度上的力。
 
  
   
    
     
     
      
       
        
         
          
           
            
             r
            
            
             =
            
            
             
              1
             
             
              
               e
              
              
               θ
              
             
            
           
          
         
        
       
       
        
         
          
           
            
             v
            
            
             x
            
           
           
            =
           
           
            r
           
           
            ∗
           
           
            cos
           
           
            ⁡
           
           
            θ
           
          
         
        
       
       
        
         
          
           
            
             v
            
            
             y
            
           
           
            =
           
           
            r
           
           
            ∗
           
           
            sin
           
           
            ⁡
           
           
            θ
           
          
         
        
       
      
     
     
     
      
       (9)
      
     
    
   
   
    \begin{array}{c}\displaystyle{r=\frac{1}{e^\theta}}\\[2ex]v_x=r*\cos\theta\\[2ex]v_y=r*\sin\theta\end{array}\tag{9}
   
  
 r=eθ1​vx​=r∗cosθvy​=r∗sinθ​(9)其中,

 
  
   
    θ
   
  
  
   \theta
  
 
θ是

 
  
   
    [
   
   
    −
   
   
    π
   
   
    ,
   
   
    π
   
   
    ]
   
  
  
   [-\pi,\pi]
  
 
[−π,π]的随机数。

第二种情况:在下雨天时,由于空气阻力、湿度等因素,蒲公英种子不能随风上升。在这种情况下,蒲公英种子是在局部邻域开发的,对应的数学表达式为:

         X
        
        
         
          t
         
         
          +
         
         
          1
         
        
       
       
        =
       
       
        
         X
        
        
         t
        
       
       
        ∗
       
       
        k
       
      
     
     
     
      
       (10)
      
     
    
   
   
    X_{t+1}=X_t*k\tag{10}
   
  
 Xt+1​=Xt​∗k(10)其中,

 
  
   
    k
   
  
  
   k
  
 
k用于调节蒲公英的局部搜索域,利用式(11)计算。
 
  
   
    
     
     
      
       
        
         
          
           
            
             q
            
            
             =
            
            
             
              1
             
             
              
               
                T
               
               
                2
               
              
              
               −
              
              
               2
              
              
               T
              
              
               +
              
              
               1
              
             
            
            
             
              t
             
             
              2
             
            
            
             −
            
            
             
              2
             
             
              
               
                T
               
               
                2
               
              
              
               −
              
              
               2
              
              
               T
              
              
               +
              
              
               1
              
             
            
            
             t
            
            
             +
            
            
             1
            
            
             +
            
            
             
              1
             
             
              
               
                T
               
               
                2
               
              
              
               −
              
              
               2
              
              
               T
              
              
               +
              
              
               1
              
             
            
           
          
         
        
       
       
        
         
          
           
            k
           
           
            =
           
           
            1
           
           
            −
           
           
            r
           
           
            a
           
           
            n
           
           
            d
           
           
            (
           
           
            )
           
           
            ∗
           
           
            q
           
          
         
        
       
      
     
     
     
      
       (11)
      
     
    
   
   
    \begin{array}{c}\displaystyle{q=\frac{1}{T^2-2T+1}t^2-\frac{2}{T^2-2T+1}t+1+\frac{1}{T^2-2T+1}}\\[2ex]k=1-rand()*q\end{array}\tag{11}
   
  
 q=T2−2T+11​t2−T2−2T+12​t+1+T2−2T+11​k=1−rand()∗q​(11)![在这里插入图片描述](https://img-blog.csdnimg.cn/e5b50ae552b340928917a15e10c6047c.png#pic_center)

图2

    k
   
  
  
   k
  
 
k的动态趋势

图2显示了

    k
   
  
  
   k
  
 
k的动态波形。显然,

 
  
   
    k
   
  
  
   k
  
 
k表现出“向下凸”振荡,这有利于算法在早期阶段长步长的全局探索和后期阶段短步长的算法的局部开发。在迭代结束时,参数

 
  
   
    k
   
  
  
   k
  
 
k逐渐接近1,以确保种群最终收敛到最优搜索个体。

综上所述,蒲公英种子上升阶段的数学表达式为:

         X
        
        
         
          t
         
         
          +
         
         
          1
         
        
       
       
        =
       
       
        
         {
        
        
         
          
           
            
             
              
               X
              
              
               t
              
             
             
              +
             
             
              α
             
             
              ∗
             
             
              
               v
              
              
               x
              
             
             
              ∗
             
             
              
               v
              
              
               y
              
             
             
              ∗
             
             
              ln
             
             
              ⁡
             
             
              Y
             
             
              ∗
             
             
              (
             
             
              
               X
              
              
               s
              
             
             
              −
             
             
              
               X
              
              
               t
              
             
             
              )
             
             
             
              r
             
             
              a
             
             
              n
             
             
              d
             
             
              n
             
             
              <
             
             
              1.5
             
            
           
          
         
         
          
           
            
             
              
               X
              
              
               t
              
             
             
              ∗
             
             
              k
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
              e
             
             
              l
             
             
              s
             
             
              e
             
            
           
          
         
        
       
      
     
     
     
      
       (12)
      
     
    
   
   
    X_{t+1}=\begin{dcases}X_t+\alpha*v_x*v_y*\ln Y*(X_s-X_t)\quad randn<1.5\\[2ex]X_t*k\quad\quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad else\end{dcases}\tag{12}
   
  
 Xt+1​=⎩⎨⎧​Xt​+α∗vx​∗vy​∗lnY∗(Xs​−Xt​)randn<1.5Xt​∗kelse​(12)其中,

 
  
   
    r
   
   
    a
   
   
    n
   
   
    d
   
   
    n
   
   
    (
   
   
    )
   
  
  
   randn()
  
 
randn()是服从标准正态分布的随机数。

(3)下降阶段

在该阶段,提出的DO算法也强调探索。蒲公英种子在上升到一定距离后逐渐下降。DO中采用布朗运动来模拟蒲公英的运动轨迹。由于布朗运动在每次变化时服从正态分布,使得个体在迭代更新过程中容易遍历更多的搜索区域。为了反映蒲公英下降的稳定性,采用上升阶段后的平均位置信息,这有利于整个种群向有希望的区域发展。对应的数学表达式为:

         X
        
        
         
          t
         
         
          +
         
         
          1
         
        
       
       
        =
       
       
        
         X
        
        
         t
        
       
       
        −
       
       
        α
       
       
        ∗
       
       
        
         β
        
        
         t
        
       
       
        ∗
       
       
        (
       
       
        
         X
        
        
         
          m
         
         
          e
         
         
          a
         
         
          n
         
         
          _
         
         
          t
         
        
       
       
        −
       
       
        α
       
       
        ∗
       
       
        
         β
        
        
         t
        
       
       
        ∗
       
       
        
         X
        
        
         t
        
       
       
        )
       
      
     
     
     
      
       (13)
      
     
    
   
   
    X_{t+1}=X_t-\alpha*\beta_t*(X_{mean\_t}-\alpha*\beta_t*X_t)\tag{13}
   
  
 Xt+1​=Xt​−α∗βt​∗(Xmean_t​−α∗βt​∗Xt​)(13)其中,

 
  
   
    
     β
    
    
     t
    
   
  
  
   \beta_t
  
 
βt​表示服从正态分布的布朗运动随机数,

 
  
   
    
     X
    
    
     
      m
     
     
      e
     
     
      a
     
     
      n
     
     
      _
     
     
      t
     
    
   
  
  
   X_{mean\_t}
  
 
Xmean_t​表示第

 
  
   
    t
   
  
  
   t
  
 
t次迭代时种群的平均位置,表达式如下:
 
  
   
    
     
     
      
       
        
         X
        
        
         
          m
         
         
          e
         
         
          a
         
         
          n
         
         
          _
         
         
          t
         
        
       
       
        =
       
       
        
         1
        
        
         
          p
         
         
          o
         
         
          p
         
        
       
       
        
         ∑
        
        
         
          i
         
         
          =
         
         
          1
         
        
        
         
          p
         
         
          o
         
         
          p
         
        
       
       
        
         X
        
        
         i
        
       
      
     
     
     
      
       (14)
      
     
    
   
   
    X_{mean\_t}=\frac{1}{pop}\sum_{i=1}^{pop}X_i\tag{14}
   
  
 Xmean_t​=pop1​i=1∑pop​Xi​(14)

(4)着陆阶段

在这一部分中,DO算法的重点是开发。在前两个阶段的基础上,蒲公英种子随机选择降落地点。随着迭代的逐步进行,该算法有望收敛到全局最优解。因此,得到的最优解是蒲公英种子最容易存活的近似位置。为了精确地收敛到全局最优,搜索代理利用当前精英的信息,在他们的局部邻域中加以利用。随着种群的进化,最终可以找到全局最优解。对应的数学表达式如下:

         X
        
        
         
          t
         
         
          +
         
         
          1
         
        
       
       
        =
       
       
        
         X
        
        
         
          e
         
         
          l
         
         
          i
         
         
          t
         
         
          e
         
        
       
       
        +
       
       
        L
       
       
        e
       
       
        v
       
       
        y
       
       
        (
       
       
        λ
       
       
        )
       
       
        ∗
       
       
        α
       
       
        ∗
       
       
        (
       
       
        
         X
        
        
         
          e
         
         
          l
         
         
          i
         
         
          t
         
         
          e
         
        
       
       
        −
       
       
        
         X
        
        
         t
        
       
       
        ∗
       
       
        δ
       
       
        )
       
      
     
     
     
      
       (15)
      
     
    
   
   
    X_{t+1}=X_{elite}+Levy(\lambda)*\alpha*(X_{elite}-X_t*\delta)\tag{15}
   
  
 Xt+1​=Xelite​+Levy(λ)∗α∗(Xelite​−Xt​∗δ)(15)其中,

 
  
   
    
     X
    
    
     
      e
     
     
      l
     
     
      i
     
     
      t
     
     
      e
     
    
   
  
  
   X_{elite}
  
 
Xelite​表示第

 
  
   
    t
   
  
  
   t
  
 
t次迭代蒲公英种子的最优位置,

 
  
   
    L
   
   
    e
   
   
    v
   
   
    y
   
   
    (
   
   
    λ
   
   
    )
   
  
  
   Levy(\lambda)
  
 
Levy(λ)为使用式(16)计算的莱维飞行函数。
 
  
   
    
     
     
      
       
        l
       
       
        e
       
       
        v
       
       
        y
       
       
        (
       
       
        λ
       
       
        )
       
       
        =
       
       
        s
       
       
        ×
       
       
        
         
          w
         
         
          ×
         
         
          σ
         
        
        
         
          ∣
         
         
          t
         
         
          
           ∣
          
          
           
            1
           
           
            β
           
          
         
        
       
      
     
     
     
      
       (16)
      
     
    
   
   
    levy(\lambda)=s\times\frac{w\times\sigma}{|t|^{\frac{1}{\beta}}}\tag{16}
   
  
 levy(λ)=s×∣t∣β1​w×σ​(16)其中,

 
  
   
    β
   
  
  
   \beta
  
 
β是

 
  
   
    [
   
   
    0
   
   
    ,
   
   
    2
   
   
    ]
   
  
  
   [0,2]
  
 
[0,2]的随机数(本文取值为1.5),

 
  
   
    s
   
  
  
   s
  
 
s是值为0.01的常数,

 
  
   
    w
   
  
  
   w
  
 
w和

 
  
   
    t
   
  
  
   t
  
 
t均为

 
  
   
    [
   
   
    0
   
   
    ,
   
   
    1
   
   
    ]
   
  
  
   [0,1]
  
 
[0,1]间的随机数。

 
  
   
    σ
   
  
  
   \sigma
  
 
σ的数学表达式如下:
 
  
   
    
     
     
      
       
        σ
       
       
        =
       
       
        
         
          (
         
         
          
           
            Γ
           
           
            (
           
           
            1
           
           
            +
           
           
            β
           
           
            )
           
           
            ×
           
           
            sin
           
           
            ⁡
           
           
            
             (
            
            
             
              
               π
              
              
               β
              
             
             
              2
             
            
            
             )
            
           
          
          
           
            Γ
           
           
            
             (
            
            
             
              
               1
              
              
               +
              
              
               β
              
             
             
              2
             
            
            
             )
            
           
           
            ×
           
           
            β
           
           
            ×
           
           
            
             2
            
            
             
              
               β
              
              
               −
              
              
               1
              
             
             
              2
             
            
           
          
         
         
          )
         
        
        
         
          1
         
         
          /
         
         
          β
         
        
       
      
     
     
     
      
       (17)
      
     
    
   
   
    \sigma=\left(\frac{\Gamma(1+\beta)\times\sin\left(\frac{\pi\beta}{2}\right)}{\Gamma\left(\frac{1+\beta}{2}\right)\times\beta\times2^{\frac{\beta-1}{2}}}\right)^{1/\beta}\tag{17}
   
  
 σ=⎝⎛​Γ(21+β​)×β×22β−1​Γ(1+β)×sin(2πβ​)​⎠⎞​1/β(17)

 
  
   
    δ
   
  
  
   \delta
  
 
δ是

 
  
   
    [
   
   
    0
   
   
    ,
   
   
    2
   
   
    ]
   
  
  
   [0,2]
  
 
[0,2]之间的线性递增函数,由式(18)计算。
 
  
   
    
     
     
      
       
        δ
       
       
        =
       
       
        
         
          2
         
         
          t
         
        
        
         T
        
       
      
     
     
     
      
       (18)
      
     
    
   
   
    \delta=\frac{2t}{T}\tag{18}
   
  
 δ=T2t​(18)

2、DO算法的执行流程

图3详细介绍了所提出的DO算法的伪代码。
在这里插入图片描述

图3 DO算法伪代码

二、仿真实验与结果分析

将DO与SCA、WOA、MSA、HHO、ChOA、LFD和AO进行对比,以文献[1]中表1的CEC2017测试函数中的F1、F7、F10、F12、F15、F20、F22、F27、F29(均为100维)为例,实验设置种群规模为60,最大迭代次数为1000,每种算法独立运算1次,结果显示如下:
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

函数:F1
DO:最优值:19262026.7925
SCA:最优值:180264829590.4785
WOA:最优值:33434687957.6166
MSA:最优值:44139380.5715
HHO:最优值:239831305568.1186
ChOA:最优值:163190736645.5512
LFD:最优值:11451124698.8789
AO:最优值:219529495597.1949
函数:F7
DO:最优值:2692.7047
SCA:最优值:4077.4433
WOA:最优值:3320.2794
MSA:最优值:3144.6896
HHO:最优值:3609.0676
ChOA:最优值:3566.1324
LFD:最优值:3165.6704
AO:最优值:3894.5837
函数:F10
DO:最优值:17945.7965
SCA:最优值:32078.0625
WOA:最优值:27380.6281
MSA:最优值:20540.8192
HHO:最优值:29445.7762
ChOA:最优值:32875.5792
LFD:最优值:28053.6615
AO:最优值:28306.884
函数:F12
DO:最优值:234840575.4431
SCA:最优值:77170391704.8942
WOA:最优值:4675795339.4043
MSA:最优值:327709094.9033
HHO:最优值:137558155924.6333
ChOA:最优值:95693777394.4027
LFD:最优值:1635684388.095
AO:最优值:146090422790.8117
函数:F15
DO:最优值:21096.9149
SCA:最优值:4096041438.6636
WOA:最优值:12604715.5035
MSA:最优值:164323.2623
HHO:最优值:15908267021.9471
ChOA:最优值:12179594962.1346
LFD:最优值:55014.3099
AO:最优值:21065137079.1419
函数:F20
DO:最优值:5365.4403
SCA:最优值:7950.7499
WOA:最优值:7426.1413
MSA:最优值:5819.5207
HHO:最优值:6703.9059
ChOA:最优值:8417.0223
LFD:最优值:7125.6988
AO:最优值:7820.4613
函数:F22
DO:最优值:21927.5193
SCA:最优值:34368.0613
WOA:最优值:27212.8616
MSA:最优值:23073.6819
HHO:最优值:30794.0726
ChOA:最优值:34825.0492
LFD:最优值:25985.6373
AO:最优值:32088.292
函数:F27
DO:最优值:3810.8168
SCA:最优值:7438.483
WOA:最优值:4499.5888
MSA:最优值:4852.7852
HHO:最优值:12291.1722
ChOA:最优值:6984.1297
LFD:最优值:9350.2706
AO:最优值:8927.1797
函数:F29
DO:最优值:7089.3285
SCA:最优值:17231.9778
WOA:最优值:19473.5493
MSA:最优值:9369.5667
HHO:最优值:226686.5125
ChOA:最优值:47326.7475
LFD:最优值:11301.7902
AO:最优值:110937.2222

实验结果表明:与已有的优化算法相比,DO算法具有出色的迭代优化性能和较强的鲁棒性。

三、参考文献

[1] Shijie Zhao, Tianran Zhang, Shilin Ma, et al. Dandelion Optimizer: A nature-inspired metaheuristic algorithm for engineering applications[J]. Engineering Applications of Artificial Intelligence, 2022, 114: 105075.


本文转载自: https://blog.csdn.net/weixin_43821559/article/details/126817327
版权归原作者 心️升明月 所有, 如有侵权,请联系我们删除。

“基于蒲公英优化算法的函数寻优算法”的评论:

还没有评论