本文主要是介绍基于蒲公英优化算法的函数寻优算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 一、理论基础
- 1、蒲公英优化算法
- (1)初始化
- (2)上升阶段
- (3)下降阶段
- (4)着陆阶段
- 2、DO算法的执行流程
- 二、仿真实验与结果分析
- 三、参考文献
一、理论基础
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π1exp[−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()∗(T21t2−T2t+1)(8)
图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θ1vx=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+11t2−T2−2T+12t+1+T2−2T+11k=1−rand()∗q(11)
图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=pop1i=1∑popXi(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∣β1w×σ(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算法的伪代码。
二、仿真实验与结果分析
将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.
这篇关于基于蒲公英优化算法的函数寻优算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!