• 一种改进的樽海鞘群算法-附代码


    一种改进的樽海鞘群算法


    摘要:针对樽海鞘群算法在对函数优化问题求解上出现的求解精度不高、收敛速度慢的缺点,提出了一种改进的群海鞘群算法。对于领导者引入加权重心取代最优个体位置,防止过早聚集在最优个体附近;对于追随者引入自适应惯性权重平衡算法的全局搜索和局部寻优能力;最后对于个体进行逐维随机差分变异,减少维间干扰,提高了种群的多样性。

    1.樽海鞘群算法

    基础樽海鞘群算法的具体原理参考,我的博客:https://blog.csdn.net/u011835903/article/details/107767869

    2.改进樽海鞘群算法

    2.1 加权重心学习策略

    标准樽海鞘群算法中,所有领导者都向食物源进行学习,忽略了种群内其他优秀的个体。文献[20]提出重心反向学习,重心中包含了群体搜索经验,但是重心中所有个体的贡献相同。本文提出了加权重心, 根据个体的优劣状况使用不同的 权重来计算重心, 可以在不忽略较差个体的同时向更多优秀个 体学习, 合理利用了种群的信息, 同时避免了只向最优个体学 习陷入早熟。
    定义 1 重心。设 ( X 1 , ⋯   , X N ) \left(X^1, \cdots, X^N\right) (X1,,XN) D D D 维空间中的 n n n 个点, 则整体重心为
    M = x 1 + ⋯ + x n n (7) M=\frac{x^1+\cdots+x^n}{n} \tag{7} M=nx1++xn(7)
    加权重心公式为
    M W = ∑ i = 1 n x i ( f bad  − f X i α ) + F ( f bad  − f F α ) n + 1 (8) M_W=\frac{\sum_{i=1}^n x^i\left(\frac{f_{\text {bad }}-f_{X i}}{\alpha}\right)+F\left(\frac{f_{\text {bad }}-f_F}{\alpha}\right)}{n+1} \tag{8} MW=n+1i=1nxi(αfbad fXi)+F(αfbad fF)(8)

    α = ∑ i = 1 n ( f bad  − f X i ) + ( f bad  − f F ) (9)

    α=i=1n(fbad fXi)+(fbad fF)" role="presentation" style="position: relative;">α=i=1n(fbad fXi)+(fbad fF)
    \tag{9} α=i=1n(fbad fXi)+(fbad fF)(9)
    其中: M W M_W MW 为加权重心; f bad  f_{\text {bad }} fbad  为当前种群最差个体适应度值; f F f_F fF 为 食物源适应度值; f x i f_{x^i} fxi 为当前种群 x i x^i xi 个体的适应度值; F F F 为食物 源位置; ( f bad  − f ) / α \left(f_{\text {bad }}-f\right) / \alpha (fbad f)/α 是个体的权重, 越优秀的个体其权重越 大, 在加权重心中占比也就越大, 同时在加权重心引入食物源 的位置和权重,可以更加充分地利用全局种群信息。
    修改后的领导者公式为
    x i = ω x i + rand ⁡ × ( M W − x i ) , ω = ( l / l max ⁡ ) 2 (10) x^i=\omega x^i+\operatorname{rand} \times\left(M_W-x^i\right), \omega=\left(l / l_{\max }\right)^2 \tag{10} xi=ωxi+rand×(MWxi),ω=(l/lmax)2(10)
    修改后的公式可以在向最优解逐渐学习的同时没有过多 丢失种群多样性。 ω \omega ω 用来调节个体在搜索过程中对自身位置 的依赖, 搜索前期较低的 ω \omega ω 可以降低个体对自身的依赖, 从而 增大了搜索的范围, 算法的全局搜索能力得到增强。搜索后期 ω \omega ω 逐渐向 1 靠拢, 不影响算法寻优。

    2.2 自适应惯性权重

    自适应惯性权重在很多群体智能优化算法中被使用, 搜索 前期权重较大, 可以增强全局搜索能力, 搜索后期自适应权重 较小, 可以增强局部寻优能力。使用的自适应惯性权重公式为
    ω = λ ( − φ × t / 7 ) × cos ⁡ ( π t ) (11) \omega=\lambda^{(-\varphi \times t / 7)} \times \cos (\pi t) \tag{11} ω=λ(φ×t/7)×cos(πt)(11)
    将式(11) 应用到式 (6) 中, 新的追随者更新公式为
    x j i = 1 2 ( x j i + ω x j i − 1 ) (12) x_j^i=\frac{1}{2}\left(x_j^i+\omega x_j^{i-1}\right) \tag{12} xji=21(xji+ωxji1)(12)
    λ = 2 , φ = 4 / 3 \lambda=2, \varphi=4 / 3 λ=2,φ=4/3 时, 式 (12) 的值为从 − 1 -1 1 和 1 逐渐向 − 0.4 -0.4 0.4 0.4 0.4 0.4 收敛, 文献 [13] 提出自适应惯性权重从 0.9 0.9 0.9 线性递减到 0. 4。相较于文献 [13] 中的自适应惯性权重, 式 (12) 可以在不 提高计算复杂度的同时提高算法前期的搜索范围 , 增加种群多 样性。

    2.3 逐维随机差分变异

    在基本樽海鞘群算法中,领导者受到食物源的位置来更新自己的位置,追随者追随上一个个体进行更新。如式(3)(6)所示,领导者 X 的更新是在食物源头 F 的附近产生新的个体,追随者再根据领导者的位置进行位置更新。因此食物源的位置将直接影响整个种群的搜索方向,如果食物源陷入局部最优,那么种群会在食物源附近不断搜索,无法跳出局部最优,降低了种群的多样性,从而算法只能得到局部最优解。为了解决这一问题,常用的方法是加入变异操作,对更新完的个体进行变异,增强了种群的多样性,从而跳出局部最优。常使用的变异算子有高斯变异、柯西变异等。通常变异均是对所有维度同时进行变异,再根据目标函数来评判,这样对于高维函数,维度间会相互干扰,造成有些维度经过变异得到了更好的解,但是由于其他维度经过变异后变异效果不好,且变异效果差的维度覆盖了变异效果好的维度,使个体最后变异效果不佳,进而影响了算法的收敛速度和精度。使用逐维变异可以避免高维函数之间每个维度相互干扰,从而提高变异解的质量。使用随机差分变异 [21] 进行逐维变异,通过该变异得到一
    个新的个体的维度,具体公式为:
    x j i = r 1 × ( F j − x j i ) + r 2 × ( x j ′ − x j i ) (13) x_j^i=r_1 \times\left(F_j-x_j^i\right)+r_2 \times\left(x_j^{\prime}-x_j^i\right) \tag{13} xji=r1×(Fjxji)+r2×(xjxji)(13)
    其中: x j i x_j^i xji 为樽海鞘群中的第 i i i 个个体的第 j j j 维; F j F_j Fj 为食物源位置 的第 j j j 维; x j ′ x_j^{\prime} xj 为种群中随机的一个个体的第 j j j 维; r 1 r_1 r1 r 2 r_2 r2 [ 0 [0 [0, 1] 的随机数。在种群位置更新完成后, 使用逐维随机差分变 异对个体的每个维度进行变异, 某一维度进行变异后对其进行 评价, 如果优秀, 则保留变异后的解, 如果变异后评价结果变 差, 则舍弃较差的维度信息, 减少了各个维度间的千扰, 同时增 大了搜索的范围。由于变异操作具有一定的盲目性,将所有个 体都进行逐维随机差分变异势必会导致算法的搜索效率下降 和计算量大幅的增加, 所以仅挑选种群中最优秀和最差个体进 行变异, 对最优个体变异可以提高搜索效率, 对最差个体变异 可以提高搜索范围, 跳出局部最优解。

    算法具体步骤如下:

    a) 初始化种群和参数。初始化种群个体数量 N N N, 最大迭代 次数 T T T, 使用式(2) 生成初始种群。
    b) 计算种群每个个体的适应度, 最优的个体作为食物位置。
    c) 根据位置更新公式更新个体位置。前一半个体为领导 者使用式 (10) 进行更新, 后一半个体为追随者使用式 (12) 进 行更新。
    d) 对更新完的个体选择最优和最差个体, 对其通过式 (13) 进行逐维随机差分变异, 将更新的维度与其余维度组成 新的个体, 比较变异前后个体适应度值的变化, 如果好则保留。
    e)找出最优个体适应度值更新食物位置。
    f) 判断是否满足迭代次数要求或精度要求, 若是转步骤 g ) \mathrm{g}) g) ,否则返回步乑 c)。
    g) 输出最优个体的适应度值。

    3.实验结果

    请添加图片描述

    4.参考文献

    [1]陈连兴,牟永敏.一种改进的樽海鞘群算法[J].计算机应用研究,2021,38(06):1648-1652.

    5.Matlab代码

    6.python代码

  • 相关阅读:
    基于b/s架构搭建一个支持多路摄像头的实时处理系统 (3) -- Django 结合WebSocket 进行实时图像与消息的展示, 前后端交互与定时任务的重构
    uniapp 转微信小程序遇到的坑
    PostgreSQL执行计划:Bitmap scan VS index only scan
    如何从代码层提高产品质量
    【Go入门】struct类型
    干货分享 | 一文了解TSMaster中Seed&key的两种处理方法
    github上star较多的三个c++ 内存池memory pool分析
    接口性能测试 —— Jmeter并发与持续性压测
    K8S存储
    uniapp接入萤石微信小程序插件
  • 原文地址:https://blog.csdn.net/u011835903/article/details/126904866