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