一种改进的蝴蝶优化算法-附代码

一种改进的蝴蝶优化算法


摘要:本文针对基本的蝴蝶优化算法存在收敛速度慢、精度低和易陷入局部最优等缺陷,提出一种改进的蝴蝶优化算法.首先通过实验分析参数对算法的影响,其次融入差分进化策略和精英策略。

1.蝴蝶优化算法

基础蝴蝶优化算法的具体原理参考,我的博客:https://blog.csdn.net/u011835903/article/details/107855860

2. 改进蝴蝶优化算法

2.1 差分进化算法

差分进化算法是 Storn 和 Price 在 1995 年首次提出的优化方法, 该算法是一类基于群体 的自适应全局优化算法, 与遗传算法非常类似, 它整个进化过程包括变异、交叉和选择.
变异操作: 在每一次迭代中其变异过程是通过在种群中选择 3 个不同的个体, 通过式 (6) 产生新的个体:
V i , G + 1 = X r 3 , G + F ∗ ( X r 1 , G − X r 2 , G ) V_{i, G+1}=X_{r 3, G}+F *\left(X_{r 1, G}-X_{r 2, G}\right) Vi,G+1=Xr3,G+F(Xr1,GXr2,G)
其中, i = 1 , ⋯   , N P , r 1 , r 2 , r 3 ∈ ( 1 , ⋯   , N P ) , r 1 ≠ r 2 ≠ r 3 ≠ i , F ∈ [ 0 , 1 ] , F i=1, \cdots, N P, r_{1}, r_{2}, r_{3} \in(1, \cdots, N P), r_{1} \neq r_{2} \neq r_{3} \neq i, F \in[0,1], F i=1,,NP,r1,r2,r3(1,,NP),r1=r2=r3=i,F[0,1],F 控制变异的概率. 交叉操作: 新个体 V i , G + 1 V_{i, G+1} Vi,G+1 与当前个体 X i , G X_{i, G} Xi,G 通过式 (7) 交叉操作形成个体 U i , G + 1 U_{i, G+1} Ui,G+1.
U j , i , G + 1 = { v j , i , G + 1  if   rand  j ≤ C R  or  j = k x j , i , G  otherwise  U_{j, i, G+1}=\left\{\begin{array}{lc} v_{j, i, G+1} & \text { if } \text { rand }_{j} \leq C R \text { or } j=k \\ x_{j, i, G} & \text { otherwise } \end{array}\right. Uj,i,G+1={ vj,i,G+1xj,i,G if  rand jCR or j=k otherwise 
其中, j = 1 , ⋯   , n , k = 1 , ⋯   , N P , C R ∈ [ 0 , 1 ] j=1, \cdots, n, k=1, \cdots, N P, C R \in[0,1] j=1,,n,k=1,,NP,CR[0,1] 之间的交叉率, rand 为 [ 0 , 1 ] [0,1] [0,1] 之间的随机数. 选择操作: 经过变异和交叉生成的个体 U i , G U_{i, G} Ui,G 和目标个体 X i , G X_{i, G} Xi,G 通过式 (8) 更新种群.
X i , G + 1 = { U i , G + 1  if  f ( U i , G + 1 ) ≤ f ( X i , G ) X i , G  otherwise  X_{i, G+1}=\left\{\begin{array}{lc} U_{i, G+1} & \text { if } f\left(U_{i, G+1}\right) \leq f\left(X_{i, G}\right) \\ X_{i, G} & \text { otherwise } \end{array}\right. Xi,G+1={ Ui,G+1Xi,G if f(Ui,G+1)f(Xi,G) otherwise 

2.2 精英策略

在最优解附近产生符合正态分布的随机数. 使用如下式 (9):
x i t =  best  + 0.001 × randn ⁡ ( 1 , d ) x_{i}^{t}=\text { best }+0.001 \times \operatorname{randn}(1, d) xit= best +0.001×randn(1,d)
式 (9) 中 best 为当前最优解, d d d 为问题的维数.

B O A \mathrm{BOA} BOA 没有充分利用种群个体之间的交互信息. 针对 BOA 的不足, 再结合差分进化算法 和精英策略的优势形成 IBOA, 具体实施的伪代码如下:
步骤 1 初始化各参数及种群空间并求解当前空间最优值 fmin 及最优解 best.
步骤 2 for t = 1 \mathrm{t}=1 t=1 : Ngen
for i = 1 : n ( n i=1: n(n i=1:n(n 表示种群数目 ) ) )
利用式 (1) 计算 f i f_{i} fi
If rand < p ( p <\mathrm{p}(\mathrm{p} <p(p 表示全局和局部之间的概率转换 ) ) )
利用公式 (2) 计算 X i t X_{i}^{t} Xit
else
利用公式 (3) 计算 X i t X_{i}^{t} Xit
end
计算 Fnew, if Fnew < < < fmin, 则替换原来的最优值 fmin 及最最优解 best.
融入差分进化算法

重新计算 Fnew, if Fnew < < < fmin, 则替换原来的最优值 fmin 及最最优解 best. 利用式 (9) 进行局部搜索
重新计算 Fnew, if Fnew < < < fmin, 则替换原来的最优值 fmin 及最最优解 best. 利用公式 (4) 调整变量 c
end
end
步骤 3 输出最优值 fmin 及最最优解 best.

3.实验结果

请添加图片描述

4.参考文献

[1]谢聪,封宇.一种改进的蝴蝶优化算法[J].数学的实践与认识,2020,50(13):105-115.

5.Matlab代码

6.Python代码

猜你喜欢

转载自blog.csdn.net/u011835903/article/details/126311826