当前位置: 首页 > news >正文

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

一种改进的樽海鞘群算法

文章目录

  • 一种改进的樽海鞘群算法
    • 1.樽海鞘群算法
    • 2.改进樽海鞘群算法
      • 2.1 加权重心学习策略
      • 2.2 自适应惯性权重
      • 2.3 逐维随机差分变异
    • 3.实验结果
    • 4.参考文献
    • 5.Matlab代码
    • 6.python代码

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

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) \begin{gathered} \alpha=\sum_{i=1}^n\left(f_{\text {bad }}-f_{X i}\right)+\left(f_{\text {bad }}-f_F\right) \end{gathered}\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代码

相关文章:

  • CDH 01CentOS配置(markdown新版一)
  • 前端Vue之Request URL:请求地址乱套问题记录
  • Java面向对象/类和对象/封装/private/public关键字
  • 认识ICMP协议 —— ping命令的作用过程
  • 【Pandas总结】第七节 Pandas 合并数据集_pd.concat()
  • 【Meetup预告】OpenMLDB+37手游:一键查收实时特征计算场景案例及进阶使用攻略
  • OPTEE:TA镜像的签名和加载-上(五)
  • mysql在django中开启事务,实现悲观锁和乐观锁
  • 极限多标签学习之-PLT
  • MMDetection系列 | 5. MMDetection运行配置介绍
  • java实现顺序表
  • 【英语:基础进阶_核心词汇扩充】E5.常见词根拓词
  • 命令执行漏洞——系统命令执行
  • 【数据结构与算法】List接口栈队列
  • 将cookie字符串转成editthiscookie插件的json格式
  • 【node学习】协程
  • 07.Android之多媒体问题
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • Java教程_软件开发基础
  • Java-详解HashMap
  • miaov-React 最佳入门
  • mongodb--安装和初步使用教程
  • Python学习之路13-记分
  • spring security oauth2 password授权模式
  • Swoft 源码剖析 - 代码自动更新机制
  • Unix命令
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 微信小程序设置上一页数据
  • 自定义函数
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (C语言)共用体union的用法举例
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (多级缓存)缓存同步
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (七)c52学习之旅-中断
  • (七)Java对象在Hibernate持久化层的状态
  • (一)插入排序
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .net 流——流的类型体系简单介绍
  • .Net(C#)自定义WinForm控件之小结篇
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • /bin/bash^M: bad interpreter: No such file or directory
  • ?php echo ?,?php echo Hello world!;?