融合差分变异策略和自适应调整权重的改进蝴蝶优化算法

一、理论基础

1、基本蝴蝶优化算法

请参考这里

2、DMABOA改进算法

(1)引入非线性惯性权重

针对基本蝴蝶算法对于复杂函数收敛速度慢、寻优精度低的缺点,本文在全局搜索阶段引入自适应惯性权重,该权重随着进化代数的增加非线性递减,提出的惯性权重函数如下: w = 1 [ ( t + 1 ) ( α + β ) ] 3 ⋅ ( α ⋅ t α N i t e r α + β ⋅ t β N i t e r β ) (1) w=\frac1{[{(t+1)^{(\alpha+\beta)}}]^3}\cdot\left(\frac{\alpha\cdot t^\alpha}{N_{iter}^\alpha}+\frac{\beta\cdot t^\beta}{N_{iter}^\beta}\right)\tag{1} w=[(t+1)(α+β)]31(Niterααtα+Niterββtβ)(1)其中, α \alpha α β \beta β为权重系数,且 α = 3 \alpha=3 α=3 β = 5 \beta=5 β=5。分析上式可以得出,惯性权重 w w w的值在 [ 0 , 1 ] [0,1] [0,1]之间,取值随着迭代次数的增加呈减速递减趋势,即在进化前期,权重值较大,算法的全局搜索能力较强、探测范围较大,有利于算法跳出局部最优,而随着迭代次数的增加权重值减小,此时蝴蝶在最优值附近进行精细挖掘,使得算法的寻优精度提升和收敛速度加快。而后期不断减速的递减趋势,也在提升挖掘能力的同时,平衡了一定的搜索能力,维持了适当的种群活跃性和跳离局部极值点的能力。改进后的全局位置更新公式为: X i t + 1 = w ⋅ X i t + ( r 2 ⋅ g ∗ − X i t ) ⋅ f i (2) X_i^{t+1}=w\cdot X_i^t+(r^2\cdot g^*-X_i^t)\cdot f_i\tag{2} Xit+1=wXit+(r2gXit)fi(2)

(2)加入具有全局自适应特征的F分布随机变异

本文为提高蝴蝶种群的活跃性,将自适应随机变异引入全局公式中,使算法在全局搜索时,下一代蝴蝶位置的更新不仅由当前蝴蝶位置和全局最优蝴蝶位置决定,也有当代种群中随机蝴蝶位置的参与,从而增加了蝴蝶种群的多样性,提高了算法在全局阶段的搜索能力。自适应随机变异公式如下: Ra = ε ⋅ ( X j t − X k t ) (3) \text{Ra}=\varepsilon\cdot(X_j^t-X_k^t)\tag{3} Ra=ε(XjtXkt)(3) ε = ε 0 + fpdf() ⋅ ( 1 − ε 0 ) ⋅ ( N i t e r − t N i t e r ) (4) \varepsilon=\varepsilon_0+\text{fpdf()}\cdot(1-\varepsilon_0)\cdot\left(\frac{N_{iter}-t}{N_{iter}}\right)\tag{4} ε=ε0+fpdf()(1ε0)(NiterNitert)(4)式(3)中, X j t X_j^t Xjt X k t X_k^t Xkt是当代种群内部随机产生的随机解, ε \varepsilon ε为变异算子,其计算公式如式(4)所示。 其中 ε 0 \varepsilon_0 ε0是初始变异算子,经大量测试, ε 0 \varepsilon_0 ε0为0.1时,算法改进效果最好。 fpdf() \text{fpdf()} fpdf()为服从F分布产生的随机数,自由度为 μ \mu μ λ \lambda λ,经反复测试, μ = 3 , λ = 4 \mu=3,\lambda=4 μ=3,λ=4时,算法在全局搜索时能力最强,收敛速度最快。此时全局搜索的公式如下所示: X i t + 1 = w ⋅ X i t + ( r 2 ⋅ g ∗ − X i t + Ra ) ⋅ f i (5) X_i^{t+1}=w\cdot X_i^t+(r^2\cdot g^*-X_i^t+\text{Ra})\cdot f_i\tag{5} Xit+1=wXit+(r2gXit+Ra)fi(5)

(3)融入差分定向变异策略的局部搜索

蝴蝶优化算法求得高质量全局最优解的关键是算法能否摆脱局部极值,若只是单一加入定向变异策略则在加快收敛速度的同时也会增加算法落入局部极值的可能。为了降低这一风险,DMABOA算法在定向差分策略的基础上,利用判定系数 ξ \xi ξ在当前蝴蝶位置与当前代全局最优蝴蝶位置二者之间进行选择,如果决策随机数大于判定系数,就基于当前蝴蝶位置进行随机游走;若决策随机数小于等于该系数,则基于当前代全局最优蝴蝶位置进行随机游走。定向变异策略表达式如下: X i t + 1 = { X i t + ( r 2 ⋅ X j t − X k t ) ⋅ f i ,     rand > ξ η ⋅ g ∗ + θ ⋅ ( X j t − X k t ) ⋅ f i , rand ≤ ξ (6) X_i^{t+1}=\begin{dcases}X_i^t+(r^2\cdot X_j^t-X_k^t)\cdot f_i,\quad\,\,\, \text{rand}>\xi\\\eta\cdot g^*+\theta\cdot(X_j^t-X_k^t)\cdot f_i,\quad \text{rand}≤\xi\end{dcases}\tag{6} Xit+1={Xit+(r2XjtXkt)fi,rand>ξηg+θ(XjtXkt)fi,randξ(6)其中, θ \theta θ为黄金比例系数, r r r [ 0 , 1 ] [0,1] [0,1]之间的均匀分布随机数, g ∗ g^* g是当前全局最优解,可以使新解朝着最优解方向移动,加快收敛速度。经大量实验反复测试, ξ = 0.9 \xi=0.9 ξ=0.9时,算法局部搜索能力最强,且更容易跳出局部极值; η \eta η为扰动因子,是为了防止因当前最优值的引入而导致在局部搜索时算法陷入局部极值,进一步提高算法的寻优性能,找到全局最优解, η \eta η的计算公式如下: η = 1 + gamrnd() ⋅ tan ⁡ ( π ⋅ ( rand − 1 2 ) ) (7) \eta=1+\text{gamrnd()}\cdot\tan\left(\pi\cdot(\text{rand}-\frac12)\right)\tag{7} η=1+gamrnd()tan(π(rand21))(7)其中, gamrnd() \text{gamrnd()} gamrnd()是伽马随机数, gamrnd() \text{gamrnd()} gamrnd()随机数取值的跳跃性有助于算法跳出局部最优值,并使得扰动因子 η \eta η的取值更加灵活多样。

3、DMABOA算法流程

DMABOA算法描述如下:

适应度函数f(x),x=(x1, x2, ..., xdim)
初始化蝴蝶种群 xi(i=1, 2, ..., n)
初始化各参数 c, a, p, ε0, Niter
计算所有个体适应度值, 并进行排序, 找到当前最优值
WHILE(t <= Niter)
	由式(1)计算非线性惯性权重
	由式(4)计算随机变异算子
	FOR i =1∶ n
		由式(1)计算蝴蝶的香味浓度 f
		IF rand < p
			由式(3)计算全局随机变异
			按式(5)进行全局搜索
		ELSE
			IF rand > ξ
				根据式(6)进行基于当前位置的随机游走
			ELSE
				由式(7)计算扰动因子
				根据式(6)进行基于最优位置的随机游走
			END IF
		END IF
		计算新的适应度值,确定当前最优值和最优值位置
	END FOR
	更新香味浓度的感觉形态c
END WHILE
输出结果

二、复杂函数优化问题实验结果分析

将本文算法DMABOA与基本蝴蝶算法BOA进行对比分析,通过10个CEC 2017基准测试函数进行仿真对比测试,具体测试函数如文献[1]的表1所示。对比算法采用相同软、硬件平台,且运行次数、种群规模、空间维度和最大迭代次数都保持一致,即 N = 30 N=30 N=30 d i m = 100 dim=100 dim=100 N i t e r = 500 N_{iter}=500 Niter=500,每种算法分别独立运行50次。以F1、F3、F5、F7、F9为例。
结果显示如下:
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

函数:F1
DMABOA:最优值: 0,最差值:0,平均值:0,标准差:0
BOA:最优值: 1.3342e-11,最差值:1.8014e-11,平均值:1.5927e-11,标准差:1.1835e-12
函数:F3
DMABOA:最优值: 0,最差值:0,平均值:0,标准差:0
BOA:最优值: 1.124e-11,最差值:1.4984e-11,平均值:1.307e-11,标准差:9.4101e-13
函数:F5
DMABOA:最优值: 0,最差值:0,平均值:0,标准差:0
BOA:最优值: 0,最差值:1.416e-09,平均值:4.8717e-11,标准差:2.367e-10
函数:F7
DMABOA:最优值: 0,最差值:0,平均值:0,标准差:0
BOA:最优值: 0,最差值:2.0742e-07,平均值:4.4981e-09,标准差:2.9312e-08
函数:F9
DMABOA:最优值: 0,最差值:0,平均值:0,标准差:0
BOA:最优值: 4.8246e-12,最差值:1.5509e-11,平均值:1.0661e-11,标准差:2.6922e-12

上述实验说明DMABOA算法较好解决了蝴蝶优化算法在求解高维复杂函数极值优化问题上寻优精度不高、易陷入局部极值、收敛速度较慢的缺点,具有很好的寻优能力和维度适应性,本文对算法的改进是成功和有效的。

三、参考文献

[1] 刘景森, 马义想, 李煜. 改进蝴蝶算法求解多维复杂函数优化问题[J]. 电子学报, 2021, 49(6): 1068-1076.

  • 6
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
以下是融合反向学习和自适应策略优化的差分进化算法的伪代码: ``` 输入:目标函数f(x),种群大小pop_size,进化代数gens,自适应参数F和CR的范围[F_min, F_max]和[CR_min, CR_max],反向学习策略的概率p 输出:最优解best_x及其对应的目标函数值best_f 初始化种群P for g = 1 to gens do for i = 1 to pop_size do // 选择三个不同的个体,进行差分变异操作 r1, r2, r3 = 随机选择三个不同的个体 v = r1 + F * (r2 - r3) // 自适应参数F和CR的更新 if 随机数 < p then F = F_min + rand() * (F_max - F_min) else F = 0.1 * |N(0,1)| end if CR = CR_min + rand() * (CR_max - CR_min) // 反向学习策略优化 if 随机数 < p then v = v + p * (best_x - x_i) end if // 交叉操作,生成新个体 u = x_i for j = 1 to D do if 随机数 < CR or j = 随机选择的维度 then u_j = v_j end if end for // 选择操作,更新种群 if f(u) < f(x_i) then x_i = u if f(u) < f(best_x) then best_x = u end if // 反向学习策略优化,更新p p = p + alpha * (1 - p) else // 反向学习策略优化,更新p p = p - alpha * p end if end for end for 返回best_x及其对应的目标函数值best_f ``` 其中,D为目标函数f(x)的维度,N(0,1)表示均值为0,方差为1的标准正态分布,rand()表示生成[0,1]之间的随机数,alpha为学习率。该算法在传统的差分进化算法的基础上,增加了反向学习策略的概率p的自适应调整,通过p的增加或减少来调整反向学习策略的使用程度。当选择操作成功时,p会增加,表明反向学习策略对此次进化发挥了积极作用;反之,p会减少,表明反向学习策略对此次进化发挥了消极作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心️升明月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值