一种基于Levy飞行的改进蝗虫优化算法 -附代码

一种基于Levy飞行的改进蝗虫优化算法

文章目录

  • 一种基于Levy飞行的改进蝗虫优化算法
    • 1.蝗虫优化算法
    • 2. 基于 Levy 飞行改进蝗虫优化算法
      • 2.1 基于 Levy 飞行的局部搜索机制
      • 2.2 基于线性递减参数的随机跳出策略
    • 3.实验结果
    • 4.参考文献
    • 5.Matlab代码
    • 6.python代码

摘要:蝗虫优化算法是一种元启发式优化算法,能够用于解决任务调度问题。已有的改进蝗虫优化算法缺乏随机性,跳出局部最优的能力较弱,改进效果不够显著。针对这一问题,本文提出一种基于 Levy 飞行的改进蝗虫优化算法( LB-GOA) 。该算法引入基于 Levy 飞行的局部搜索机制增强算法的随机性,并采用基于线性递减参数的随机跳出策略来提高算法跳出局部最优的能力。

1.蝗虫优化算法

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

2. 基于 Levy 飞行改进蝗虫优化算法

2.1 基于 Levy 飞行的局部搜索机制

原始蝗虫优化算法中的所有参数都是确定性的,非常缺乏随机性。这会导致算法在迭代演进的过程中缺乏创造性,每个搜索单元只能搜索相对确定的位置。将随机因子引入到确定性系统中是提高性能的常用方法。

Levy 飞行是一种非常有效的提供随机因子的数学方法。Levy 飞行可以提供步长符合 Levy 分布的随机游走方法,Levy 分布如式( 5) :
 Levy  ∼ u = t − λ , 1 < λ ⩽ 3 (5) \text { Levy } \sim \mathrm{u}=t^{-\lambda}, \quad 1<\lambda \leqslant 3 \tag{5}  Levy u=tλ,1<λ3(5)
为了扩展搜索单元的搜索半径,增强算法的随机性以及局部最优值的搜索能力,本节提出一种基于Levy 飞行的局部搜索机制。当一次位置更新的迭代过程结束的时候,该机制可以以一定概率通过 Levy飞行对每个搜索单元的位置进行局部调整,调整公式的定义如式( 6) 所示。在某种程度上,Levy 飞行可以在搜索单元向着最优解位置搜索的过程中为其提供一定的“视觉”,使得搜索单元可以“看到”它们周围的一片较小的区域内的情况。
X = X + 10 × c × s t s × Levy ⁡ ( dim ⁡ ) × X (6) X=X+10 \times c \times s_{t s} \times \operatorname{Levy}(\operatorname{dim}) \times X \tag{6} X=X+10×c×sts×Levy(dim)×X(6)
其中, s t s s_{ts} sts是控制飞行方向和变化概率的阈值函数, s t s s_{ts} sts的计算方法如式( 7) 所示。其中, s i g n ( x ) sign( x) sign(x) s i g n sign sign 符号函数, x t r a n s x_{trans} xtrans 是取值在[-3,3]之间的随机数。
s t s = sign ⁡ ( x trans  − 1 ) + sign ⁡ ( x trans  + 1 ) (7) s_{t s}=\operatorname{sign}\left(x_{\text {trans }}-1\right)+\operatorname{sign}\left(x_{\text {trans }}+1\right) \tag{7} sts=sign(xtrans 1)+sign(xtrans +1)(7)

2.2 基于线性递减参数的随机跳出策略

为了提高蝗虫优化算法的跳出局部最优的能力,本节提出基于线性递减参数的随机跳出策略。当搜索单元搜索到当前最优解的位置的时候,该目标位置可以替换旧的目标位置。如果没有搜索到最优解,则可以开始启动基于线性递减参数的随机跳出策略。该策略的计算方式如式(8) :
X i = ( 2 × ( 0.5 − rand ⁡ ( 0 , 1 ) ) + 1 ) × X i (8) X_{i}=(2 \times(0.5-\operatorname{rand}(0,1))+1) \times X_{i} \tag{8} Xi=(2×(0.5rand(0,1))+1)×Xi(8)
其中, X i X_i Xi 是第 i i i个搜索单元的位置。如果新搜索到的 X i X_i Xi 拥有更优的适应度值,那么它将会取代原来的 X i X_i Xi ,可以认为发生了一次成功的跳出行为。

原始蝗虫优化算法的演进公式仅仅将当前迭代获得的最佳位置作为搜索方向,但是忽略了一些其他可能有用的信息。为了使新发生的成功跳出动作所提供的信息能够持续影响接下来的搜索过程,LB-GOA 将搜索单元的位置迭代演进公式变成式( 9) :
X i = m × S i + ( 1 − p ) × T d + p × X i (9) X_{i}=m \times S_{i}+(1-p) \times T_{d}+p \times X_{i}\tag{9} Xi=m×Si+(1p)×Td+p×Xi(9)
其中, p p p 是用于控制搜索单元位置影响的协调参数。 p p p 在第一次迭代的时候初始化为 0。如果搜索单元没有进行跳出或者跳出局部最优失败, p p p 仍会被设置为0,以确保只有 S i S_i Si T d T_d Td 才能影响下一次迭代演进。当搜索单元完成一次成功跳出时, p p p 被设置为在接下来的 3 次迭代中线性递减为 0 的变量,以使成功跳出的行为对搜索过程的影响持续到接下来的 3 次迭代过程中。经过一些试验, p p p 的递减间隔被设置为0.35。对 p p p 取值的进一步研究不在本文讨论范围内。参数 p p p 的计算方法如式( 10) :
p = { p − 0.35 ,  末跳出且  p > 0 0 ,  末跳出且  p ⩽ 0 1.05 ,  成功跳出  (10) p=\left\{\begin{array}{ll} p-0.35, & \text { 末跳出且 } p>0 \\ 0, & \text { 末跳出且 } p \leqslant 0 \\ 1.05, & \text { 成功跳出 } \end{array}\right. \tag{10} p=p0.35,0,1.05, 末跳出且 p>0 末跳出且 p0 成功跳出 (10)
基于 Levy 飞行的改进蝗虫优化算法的流程如算法 1 所示。

算法 1 基于 Levy 飞行的改进蝗虫优化算法
1: 初始化蝗虫集群初始位置,计算目标适应度
2: while 未达到最大迭代次数 do
3: 根据公式( 9) 更新 X i 的位置
4: X i 搜索单元根据公式( 6) 进行 Levy 飞行
5: 计算适应度值
6: if 当前适应度值优于目标适应度值 then
7: 更新目标适应度值和目标最优解位置
8: else
9: X i 搜索单元根据公式( 9) 进行跳出
10: 计算适应度值
11: if 当前适应度值优于搜索单元自身适应度值 then
12: 更新搜索单元的位置
13: end if
14: 根据公式( 10) 设置参数 p 的值
15: end if
16: end while
17: 返回得到的目标最优值和目标最优解的位置

3.实验结果

一种基于Levy飞行的改进蝗虫优化算法 -附代码_第1张图片

4.参考文献

[1]赵然,郭志川,朱小勇.一种基于Levy飞行的改进蝗虫优化算法[J].计算机与现代化,2020(01):104-110.

5.Matlab代码

6.python代码

你可能感兴趣的:(智能优化算法改进,matlab,算法)