一种改进的鲸鱼优化算法-附代码

2023-11-16

一种改进的鲸鱼优化算法


摘要: 针对鲸鱼优化算法( whale optimization algorithm,WOA) 容易陷入局部最优和收敛精度低的问题进行了研究,提出一种改进的鲸鱼优化算法( IWOA) 。该算法通过准反向学习方法来初始化种群,提高种群的多样性;然后将线性收敛因子修改为非线性收敛因子,有利于平衡全局搜索和局部开发能力; 另外,通过增加自适应权重改进鲸鱼优化算法的局部搜索能力,提高收敛精度; 最后,通过随机差分变异策略及时调整鲸鱼优化算法,避免陷入局部最优。

1.鲸鱼优化算法

基础鲸鱼算法的具体原理参考,我的博客:https://blog.csdn.net/u011835903/article/details/107559167

2. 改进鲸鱼优化算法

2.1 准反向学习初始化种群

Gondro 等人 [ 8 ] { }^{[8]} [8] 指出高质量的初始化种群对算法的求解精 度和收敛速度等性能有很大的帮助。然而, 基本的鲸鱼优化算 法采用的是随机初始化的方法, 该方法随机性很大, 不能保证 初始种群的多样性。为了保证初始化种群的多样性, 采用了反 向学习的改进方法, 即准反向学习来初始化种群。
反向学习 [ 6 , 9 , 10 ] { }^{[6,9,10]} [6,9,10] 是在明确变量的范围边界, 通过按照一定 的规则来求其对应的反向解, 其详细内容如下:
假设鲸鱼种群的规模为 N N N, 搜索空间为 d d d 维, 第 i i i 只鲸鱼 在第 d d d 维空间中的位置可以表示为 X i = ( x i 1 , x i 2 , ⋯   , x i d ) ( i = 1 \boldsymbol{X}_{i}=\left(x_{i}^{1}, x_{i}^{2}, \cdots, x_{i}^{d}\right)(i=1 Xi=(xi1,xi2,,xid)(i=1, 2 , ⋯   , N ) , x i j ∈ [ a i j , b i j ] ( j = 1 , 2 , ⋯   , d ) , a i j 2, \cdots, N), x_{i}^{j} \in\left[a_{i}^{j}, b_{i}^{j}\right](j=1,2, \cdots, d), a_{i}^{j} 2,,N),xij[aij,bij](j=1,2,,d),aij b i j b_{i}^{j} bij 分别表示 x i j x_{i}^{j} xij 的 下界和上界,其对应反向解如下:
x ^ i j = a i j + b i j − x i j (7) \hat{x}_{i}^{j}=a_{i}^{j}+b_{i}^{j}-x_{i}^{j} \tag{7} x^ij=aij+bijxij(7)
在实际应用中, 反向解的效果并不一定很好, 本文为了解 决这一问题采用了准反向解的方法, 该方法可以根据式 (7) 演 变得到:
x i j ^ = { rand ⁡ ( avg ⁡ i j , x ^ i j ) x i j ⩽ avg ⁡ i j rand ⁡ ( x ^ i j , avg ⁡ i j ) x i j > avg ⁡ i j (8) \hat{x_{i}^{j}}= \begin{cases}\operatorname{rand}\left(\operatorname{avg}_{i}^{j}, \hat{x}_{i}^{j}\right) & x_{i}^{j} \leqslant \operatorname{avg}_{i}^{j} \\ \operatorname{rand}\left(\hat{x}_{i}^{j}, \operatorname{avg}_{i}^{j}\right) & x_{i}^{j}>\operatorname{avg}_{i}^{j}\end{cases} \tag{8} xij^= rand(avgij,x^ij)rand(x^ij,avgij)xijavgijxij>avgij(8)
其中: avg ⁡ i j = b i j − a i j 2 ; ( a , b ) \operatorname{avg}_{i}^{j}=\frac{b_{i}^{j}-a_{i}^{j}}{2} ;(a, b) avgij=2bijaij;(a,b) 代表在 a 、 b a 、 b ab 之间的随机数。
随机产生的 N N N 个初始个体和准反向学习 [ 9 ] { }^{[9]} [9] 求得的 N N N 个准 反向解将其合并, 然后通过一种种群多样性最大化的篮选机 制, 从这 2 N 2 N 2N 个个体中选择种群多样性最大化的 N N N 个个体。
为了使种群获得比较好的初始化种群, 本文将随机解与其 对应的准反向解进行取优化处理, 这样既保证了种群的多样性, 同时又能使种群较快地收敛到全局最优解。其数学模型如下:
 fit  ( X ) >  fit  ( V ∨ ) ? X , X V (9) \text { fit }(X)>\text { fit }(\stackrel{\vee}{V}) ? X, \stackrel{V}{X} \tag{9}  fit (X)> fit (V)?X,XV(9)
其中: fit 为适应度函数; X X X X X X 分别表示随机产生的个体和准 反向学习产生的个体。

2.2 非线性收敛因子

与其他群体智能优化算法类似, 鲸鱼优化算法在寻优过程 中同样会遇到全局搜索能力和局部开发能力不平衡的现象。 在基本鲸鱼优化算法中, 其掌握鲸鱼进行全局搜索还是局部搜 索的是参数 ∣ A ∣ |A| A, 当参数 ∣ A ∣ ⩾ 1 |A| \geqslant 1 A1 时, 算法以 0.5 0.5 0.5 的概率进行随 机全局搜索, 当 ∣ A ∣ < 1 |A|<1 A<1 时, 算法进行局部开发。由于收玫因子 a a a 进行线性变化并不能很好地调节全局搜索能力和局部开发 能力, 因此本文提出来一种非线性收敛因子 [ 5 , 11 , 12 ] { }^{[5,11,12]} [5,11,12]
a = 2 − 2 sin ⁡ ( μ t m a x i t e r π + φ ) (10) a=2-2 \sin \left(\mu \frac{t}{{ max_iter }} \pi+\varphi\right) \tag{10} a=22sin(μmaxitertπ+φ)(10)
其中: max_iter 为最大迭代次数; t t t 为当前迭代次数; μ \mu μ φ \varphi φ 是其 表达式相关参数, 选取 μ = 1 2 , φ = 0 \mu=\frac{1}{2}, \varphi=0 μ=21,φ=0

2.3 自适应权重策略与随机差分法变异策略

鲸鱼优化算法在后期局部开发时易陷入局部最优, 出现早 熟收敛的现象, 为了使算法能够保持种群的多样性并且能够及 时跳出局部最优, 提出来一种自适应权重策略和随机差分变异策略
自适应权重策略数学表达式如下:
ω = 1 − e t max ⁡  iter  − 1 e − 1 , X ( t + 1 ) = ω ⋅ X p ( t ) − A ⋅ D (11) \omega=1-\frac{e^{\frac{t}{\max \text { iter }}-1}}{e-1}, \boldsymbol{X}(t+1)=\omega \cdot \boldsymbol{X}_{p}(t)-\boldsymbol{A} \cdot \boldsymbol{D} \tag{11} ω=1e1emax iter t1,X(t+1)=ωXp(t)AD(11)

X ( t + 1 ) = ω ⋅ X p ( t ) + D ⋅ e b l ⋅ cos ⁡ ( 2 π l ) (12) \boldsymbol{X}(t+1)=\omega \cdot \boldsymbol{X}_{p}(t)+\boldsymbol{D} \cdot e^{b l} \cdot \cos (2 \pi l) \tag{12} X(t+1)=ωXp(t)+Deblcos(2πl)(12)

随机差分变异策略如下:
X ( t + 1 ) = r 1 × ( X p ( t ) − X ( t ) ) + r 2 × ( X ′ ( t ) − X ( t ) ) (13) \boldsymbol{X}(t+1)=r_{1} \times\left(\boldsymbol{X}_{p}(t)-\boldsymbol{X}(t)\right)+r_{2} \times\left(\boldsymbol{X}^{\prime}(t)-\boldsymbol{X}(t)\right) \tag{13} X(t+1)=r1×(Xp(t)X(t))+r2×(X(t)X(t))(13)
其中: r 1 r_{1} r1 r 2 r_{2} r2 [ 0 , 1 ] [0,1] [0,1] 的随机数, X ′ ( t ) X^{\prime}(t) X(t) 为种群中随机选取的个体。
每个个体都要经过包围捕食、螺旋更新、搜索猎物阶段, 当 个体进行包围捕食或螺旋更新时采用自适应权重策略去更新位置,之后个体需要通过随机差分变异策略对其再次更新,取其变化前后的最优位置,加快了种群的收敛,有效地防止了种群陷入局部最优。种群通过这两种策略协同工作,使得算法具有更好的寻优效果。
请添加图片描述

3.实验结果

请添加图片描述

4.参考文献

[1]武泽权,牟永敏.一种改进的鲸鱼优化算法[J].计算机应用研究,2020,37(12):3618-3621.

5.Matlab代码

6.Python代码

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一种改进的鲸鱼优化算法-附代码 的相关文章

随机推荐

  • 云服务器上Wamp搭建网站

    说明 想要在云服务器搭建网站 且需要被外网访问浏览的苦逼程序员可以参考本文 前提是你已经购买好了服务器以及公网IP 近一个月买了3次服务器 使用wamp搭建了3次网站了 本以为最后一次会轻车熟路 但是东搞西搞还是花了1个多小时 看来还是要把
  • (附源码)python+mysql+基于协同过滤算法的书籍推荐 毕业设计101555

    摘 要 21世纪的今天 随着社会的不断发展与进步 人们对于信息科学化的认识 已由低层次向高层次发展 由原来的感性认识向理性认识提高 管理工作的重要性已逐渐被人们所认识 科学化的管理 使信息存储达到准确 快速 完善 并能提高工作管理效率 促进
  • “晓白”学python-科普篇(3)-那些和python相关的岗位之python-web开发工程师

    老袁啊 python有这么广泛的应用 那我学好python能不能找到一份和python相关的工作呢 晓白问道 老袁听了回答道 你这个问题太笼统了 实际上你想问的是两个问题 一个就是那个工作岗位和python是相关的 第二个就是这些工作岗位对
  • nginx 正向代理 配置 http 和 https

    nginx 正向代理 配置 http 和 https 应用场景 同学A 所在公司对外网有所限制 借助云服务器nginx正向代理 实现正常浏览公网资料 服务端 云服务器 安装nginx cd usr local wget http nginx
  • Vue3内置组件teleport详解

    teleport的作用 该组件可以将指定内容渲染到特定容器中 而不受 DOM 层级的限制应用场景 当蒙层内容在一个组件中时 蒙层内容是无法遮挡住全部内容的 因此 需要使用teleport将蒙层内容渲染到更全局的组件中 如果不使用telepo
  • python入门(二)——数据类型

    目录 一 数字类型 二 字符串 例题1 凯撒密码 例题2 星号三角形 三 time模块 人家说合格的程序员要养成经常写博客的习惯 嗯 我正在培养中 日积月累 希望自己能坚持下去 一 数字类型 1 整数 与往常的C C 等语言的不同是 pyt
  • python为什么没有指针_Python的指针:有什么意义?

    Python部落 python freelycode com 组织翻译 禁止转载 欢迎转发 目录为什么Python没有指针 Python中的对象 不可变对象和可变对象 了解变量C的变量 Python的名称 关于Python的预实现对象的注释
  • slect( )、poll( )、epoll( )函数详解

    1 slect 函数 1 1 函数原型 include
  • QT 手动建立 带参数的信号槽

    在QT中 如果直接使用UI 在控件上点击槽函数自动建立信号槽及槽函数是非常方便的 但是 有时候 我们会采用全代码 动态建立窗口和控件 这个时候就需要手动方式来建立控件的槽函数 方法如下 1 首先在window h头文件中添加 public
  • Java中多态的实现机制

    多态性是面向对象程序设计代码重用的一个重要机制 我们曾不只一次的提到Java多态性 在Java运行时多态性 继承和接口的实现一文中 我们曾详细介绍了Java实现运行时多态性的动态方法调度 今天我们再次深入Java核心 一起学习Java中多态
  • JavaScript 错误处理

    错误处理 一 What 什么是错误处理 错误是指导致系统不能按照用户意图工作的一切原因 事件 在程序设计过程中 由于某些错误的存在 致使程序无法正常运行 处理这些错误以使程序正确运行就称为错误处理 错误处理功能是衡量编译器性能的重要方面 它
  • elasticsearch 出现 cluster_block_exception read_only_allow_delete问题

    做爬虫的时候 只是简单的存入elasticsearch中 在测试服务器上结果发现老是插入不进去 提示的错误 logstash outputs elasticsearch retrying failed action with respons
  • java数组经典题目:数3退1;每数到3就退出一个人,求最后剩下一个人的编号;

    import java util Arrays public class Tes public static void main String args 数3退1 每数到3就退出一个人 求最后剩下一个人的下标 boolean people
  • 竞赛:STL之vector用法详解(关于vector这一篇就够了!)

    目录 前言 一 什么是vector 二 vector常见的函数 1 函数说明表 2 vector的存储和遍历 构造vector的四种方法 3 vector的插入 删除 insert的几种形式 erase的用法 4 begin函数和front
  • 【目标检测】Fast R-CNN详解

    前言 Fast R CNN是作者Ross Girshick继R CNN后的又一力作 同样使用VGG16作为网络的骨架 在训练速度比R CNN快了近9倍 测试速度快了213倍 在Pascal VOC数据集上accuracy从62 提升至66
  • Java8中Map的遍历方式总结

    public class LambdaMap private Map
  • 核方法计算

    什么是核方法 往简单里说 核方法是将一个低维的线性不可分的数据映射到一个高维的空间 并期望映射后的数据在高维空间里是线性可分的 我们以异或数据集为例 在二维空间中 异或数据集是线性不可分的 但是通过将其映射到三维空间 我们可以非常简单地让其
  • Unity—反向动力学IK

    每日一句 人生最精彩的不是实现梦想的瞬间 而是坚持梦想的过程 目录 定义 准备 API 设置IK 头部IK 设置人物的头部根据视角旋转 手脚IK 案例 脚步IK 定义 一般来说 骨骼动画都是传统的从父节点到子节点的带动方式 即正向动力学 I
  • Django-Apscheduler定时任务

    常用方法 django crontab 最简单 类似crontab的方法进行定时任务的设置 但不支持Windows平台 django celery 非常晚上的定时任务库 但通常需要结合redis es等中间件结合使用 重 django ap
  • 一种改进的鲸鱼优化算法-附代码

    一种改进的鲸鱼优化算法 文章目录 一种改进的鲸鱼优化算法 1 鲸鱼优化算法 2 改进鲸鱼优化算法 2 1 准反向学习初始化种群 2 2 非线性收敛因子 2 3 自适应权重策略与随机差分法变异策略 3 实验结果 4 参考文献 5 Matlab