蜣螂优化(DBO)算法(含MATLAB代码)

2023-10-31

先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法,经典的,或者是近几年提出的新型智能优化算法,并附MATLAB代码。

蜣螂优化(DBO)算法:

今天介绍的这个算法,应该是目前最新的一个群智能优化算法。实际上,一个周以前我就看到了,但是没有去深入了解和学习。昨天对它的原始参考文献进行了仔细阅读,并编码实现了这个算法,应该说,这个算法的收敛性能还是非常优越的!

这里再啰嗦一句,蜣螂,就是屎壳郎!翻译成蜣螂优化,会显得高大尚些,档次一下就有了,要是来个屎壳郎算法,就太不文雅了……”

蜣螂优化(Dung Beetle Optimizer, DBO)算法是2022年11月27日提出的,大家可以算算到今天才提出多久。它是由东华大学的沈波教授团队提出的一种全新的群智能优化算法。或许大家对这个团队不是很了解,但相信大家对麻雀搜索算法(Sparrow Search Algorithm, SSA)一定不陌生。著名的SSA就是由这个团队提出,感兴趣的同学可以进一步跟踪一下。

DBO算法的原始参考文献如下:

“Xue J, Shen B. Dung beetle optimizer: a new meta-heuristic algorithm for global optimization[J]. The Journal of Supercomputing, 2022: 1-32.”

01

灵感来源

蜣螂是自然界常见的昆虫,以动物的粪便为食。学过生物的同学都知道,它们在自然界中扮演着分解者的角色,这意味着它们在生态系统中至关重要。蜣螂有一个有趣的习惯,就是把粪便打成球状,然后滚出来,如图1所示。

图1 蜣螂的滚球行为

一方面,蜣螂会尽可能快速地移动它们的粪球,这样可防止被其他蜣螂竞争;另一方面,蜣螂会利用天体线索(特别是太阳、月亮和偏振光)来导航,使粪球沿直线滚动。然而,如果没有了光源(即完全黑暗),蜣螂的路径就不再是直线,而是弯曲的,有时甚至略圆。一些自然因素(如风和不平整的地面)也会导致蜣螂偏离原来的方向。此外,蜣螂在滚动粪球时很可能遇到障碍物,无法前进。此时,蜣螂会爬到粪球上跳舞(包括一系列的旋转和停顿),这也决定了它们新的运动方向。(这里我想好奇地问一下,你能想象一个东西站在粑粑上跳舞的画面吗)

蜣螂收获的粪球主要有两个目的:1) 一些粪球用来产卵和养育下一代;2) 其余的用作食物。具体来说,蜣螂把粪球埋起来,雌性蜣螂在这些粪球里产卵。粪球不仅是幼虫的发育场所,还为幼虫提供了生活所必需的食物。

另外,一些蜣螂会从其他蜣螂那里掠夺粪球,作者将它们称作小偷,如图2所示,这也是自然界中很常见的现象。

图2 蜣螂中的小偷掠夺粪球

基于蜣螂的这些行为,作者提出了DBO算法,主要灵感就来自于蜣螂的滚球、跳舞、觅食、偷窃和繁殖行为。准确来说,应该叫蜣螂优化器。

02

算法设计

如上所述,作者对蜣螂的滚球、跳舞、觅食、偷窃和繁殖行为进行数学建模。DBO算法主要包括四个过程:滚球、繁殖、觅食和偷窃。与前几期推送一样,目前我还不会在公众号里编辑数学公式。因此,这部分内容在Word文档里先写好,然后做成图片,最后导入。

由此,作者便提出了基于蜣螂滚球、跳舞、觅食、偷窃和繁殖行为的DBO算法。简单地说,DBO算法也是基于子种群的,每个子种群执行不同的搜索方式。与蛇优化(SO)和蜉蝣算法(MA)不同的是,DBO算法不是基于双种群的,而是基于多个子种群,作者划分了四个子种群。

03

计算流程

由于DBO算法将种群中的蜣螂划分成了四种不同的角色,因此它的计算流程会相对复杂一些,需要执行滚球、繁殖、觅食和偷窃四种算子。这里我用伪代码给出了它的计算流程,如图7所示。

图7 DBO算法计算流程

04

实验仿真

DBO算法到今天才提出两周不到,因此我非常好奇它的性能。这里对DBO算法的收敛性能进行了简单的测试。在编码中,所有参数按照它原始文献的取值进行设置,种群规模N为30,最大迭代次数T也与原文一致,等于500,问题维度D我选取的30。

这里以多峰函数Ackley、Levy和单峰函数Zakharov为例,展示DBO算法在30维环境下的收敛效果,如图8所示。这里就不再进一步做分析了。

(a) Ackley

(b) Levy

(c) Zakharov

图8 DBO算法的收敛曲线

05

MATLAB代码

公众号:启发式算法讨论

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

蜣螂优化(DBO)算法(含MATLAB代码) 的相关文章

  • 如何使用 MATLAB 的“等值面”函数创建三角球体

    如何创建一个三角球体 其中每个三角形的面面积相同 我想要这样的东西 http imageshack us a img198 5041 71183923 png http imageshack us a img198 5041 7118392
  • Matlab 中是否有相当于 R 的 dput() 的函数?

    Matlab 中是否有相当于 R 的 dput 的函数 dput 将 R 对象的 ASCII 文本表示形式写入文件或连接 UPDATE 1 添加了递归和对单元格的支持 UPDATE 2 添加了对结构的支持 UPDATE 3 增加了对逻辑 整
  • 有没有办法在 MATLAB 中查看 pcode 文件 (.p) 的源代码?

    有没有办法在 MATLAB 中打开 pcode 文件 p 如果 开放 是指edit 那么当然不是 pcode 中的 p 代表 受保护 其主要设计目标是在保护其源代码的同时部署功能组件 如果 开放 是指run 那么当然是的 引用手册 http
  • ODE 时间 Matlab 与 R

    如果在 matlab 中使用可变时间步长求解器 例如 ODE45 我会定义输出的时间跨度 即times 0 50 matlab 将返回 0 到 50 之间不同时间步长的结果 然而在 R 中 我似乎必须定义我希望 ODE 返回结果的时间点 即
  • 图像分析-光纤识别

    我是图像分析新手 您知道如何以仅获取纤维的方式对该图像进行二值化吗 我尝试过不同的阈值技术等 但没有成功 我不介意应该使用什么工具 但我更喜欢 NET or Matlab PS 我不知道该把答案放在哪里 所以我把它放在StackOverfl
  • 一次分配多个字段的聪明方法?

    由于遗留函数调用 我有时被迫编写像这样的丑陋的包装器 function return someWrapper someField a someField a b someField b and so on realistically it
  • 如何将条形图的 XtickLabels 向左移动?

    我目前正在尝试创建频率直方图 为此 我必须创建一个条形图 条形图之间没有空格 然而 这集中于XTickLabels在酒吧的中间 由于它是一个直方图 我希望数值位于每个条形之间的线上 以便它可以直观地指示间隔 本质上 我需要将所有刻度标签移至
  • 如何在 MATLAB 中可视化球体的交集?

    似乎这个问题在一些地方被问过 包括SO https stackoverflow com questions 35130336 draws the intersecting volume of two spheres in matlab 我最
  • Matlab:如何显示数组的“真实”值?

    我有一个在脚本中计算的向量 计算后 我将值显示到命令窗口 显示如下 finalResults 1 0e 05 0 0001 0 0 0005 0 0002 0 0001 0 0027 0 0033 0 0001 0 0000 0 0000
  • MATLAB中如何画水平线和垂直线?

    我目前正在尝试在 MATLAB 中绘制简单的垂直线和水平线 例如 我想绘制线 y 245 我该怎么做呢 MATLAB 根据您提供的向量逐点进行绘图 因此 要创建一条水平线 您需要改变x同时保持y对于垂直线恒定 反之亦然 xh 0 10 yh
  • 检查Matlab中脚本需要使用的函数

    我有一个别人写的代码包 我正在运行一个脚本 它调用一些函数 这些函数又调用更多函数 等等 我想获取不是 MATLAB 内置函数但属于包的一部分的函数列表 我尝试使用matlab codetools requiredFilesAndProdu
  • 如何使用matlab生成不同频率的正弦波?

    对于我的项目 我需要使用 matlab 生成一个正弦波 它有 100 000 个样本 并且频率在每 10 000 个样本后随机变化 采样率和频率可以根据方便而定 matlab中有没有函数可以生成这个 好的另一个例子 生成 5 个随机频率 r
  • 在 matlab 中求 3d 峰的体积

    现在我有一个带有峰值的 3D 散点图 我需要找到其体积 我的数据来自图像 因此 x 和 y 值表示 xy 平面上的像素位置 z 值是每个像素的像素值 这是我的散点图 scatter3 x y z 20 z filled 我试图找到数据峰值的
  • 如何找到在matlab中重复的矩阵的每一行的索引?

    我想找到矩阵中所有有重复项的行的索引 例如 A 1 2 3 4 1 2 3 4 2 3 4 5 1 2 3 4 6 5 4 3 要返回的向量将是 1 2 4 很多类似的问题建议使用unique函数 我已经尝试过 但我能得到的最接近我想要的功
  • 如何在没有安装Visual Studio的另一台机器上使用Visual Studio生成的dll?

    我已经在 Visual Studio 2012 中生成了动态库 我想在另一台机器上使用该库 但我不想在远程机器上安装 Visual Studio 我有 mex 库和 dll 我想运行一个使用这两个库的脚本 当我运行脚本时 出现以下错误 缺少
  • matlab中的排列函数是如何工作的

    这是一个有点愚蠢的问题 但我似乎无法弄清楚排列在 matlab 中是如何工作的 以文档为例 A 1 2 3 4 permute A 2 1 ans 1 3 2 4 到底是怎么回事 这如何告诉 matlab 3 和 2 需要交换 哇 这是我迄
  • 如何找到平面和 3d 矩阵之间的交平面

    如果我有一堆图像并且尺寸如下 size M 256 256 124 我有 3 个点 它们的坐标是 coor a 100 100 124 coor b 256 156 0 coor c 156 256 0 如何创建 M 与这 3 个点定义的平
  • 如何在放置颜色条后保持子图大小不变

    假设我们有一个 1 2 子图 我们在其中绘制了一些图形 如下所示 subplot 1 2 1 surf peaks 20 subplot 1 2 2 surf peaks 20 然后我们要添加一个颜色条 colorbar 我不希望结果中的正
  • 访问图像的 Windows“标签”元数据字段

    我正在尝试进行一些图像处理 所以现在我正在尝试读取图像 exif 数据 有 2 个内置函数可用于读取图像的 exif 数据 问题是我想读取图像标签 exifread and imfinfo这两个函数都不显示图像标签 Is there any
  • 如何在文本集中创建所有字符组合?

    例如 我有这样的文本集 第 1 栏 a b 第 2 栏 l m n 第 3 栏 v w x y 我想将它们组合起来以获得如下输出 alv alw alx aly amv amw amx amy 这将输出 24 种文本组合 如果我只使用前两列

随机推荐

  • Active Directory(活动目录) 域服务

    域环境 域环境是一种虚拟的环境 不受物理环境的限制 将计算机逻辑的组织到一起的集中管理 工作组 网络资源少 分散管理 适合小型网络 Windows域 适合大型网络 活动目录 活动目录是Windows的一种服务 是一个目录数据库 集中存储着整
  • 【小程序】input输入双向数据绑定

    小程序中 input标签中的数据为单向绑定
  • 7.27 Qt

    制作简易小闹钟 Timer pro QT core gui texttospeech greaterThan QT MAJOR VERSION 4 QT widgets CONFIG c 11 The following define ma
  • ubuntu 配置nfs 出现Failed to start nfs.service: Unit nfs.service not found

    ubuntu 10 0开启配置nfs 服务service nfs start时出现 Failed to start nfs service Unit nfs service not found 原因是ubuntu 10 0以上的版本取消了s
  • Pycharm--flake8的配置使用

    前言 Flake8 是由Python官方发布的一款辅助检测Python代码是否规范的工具 Flake8检查规则灵活 支持集成额外插件 扩展性强 一 安装flake8 进入虚拟环境 pip install flake8 二 在pycharm中
  • 安装imageio

    在python下安装imageio cmd中输入如下 pip install imageio
  • EWM100学习笔记(一)

    Unit 1 EWM与WM模块的差异 英文不太好 大概翻译了一部分内容 第一张大概介绍了一下WM与EWM各自的作用 最后总结了一下EWM相比WM的优势 SAP的常规操作 S 4后干脆就直接没有了WM模块 直接推EWM WM主要的功能 Tra
  • CSS-颜色属性+颜色函数+自定义变量

    最近更新时间 2017年5月8日16 08 13 我的博客地图 离开校园踏入职场 不是到达人生巅峰 而是人生才刚刚开始 校园里学的知识远不足工作需求 而且校园里的学习深度也比较浅显 因此 对于刚毕业前三年的工程师来说 马不停蹄不分昼夜的学习
  • 睿智的目标检测41——Pytorch搭建Retinanet目标检测平台

    睿智的目标检测41 Keras搭建Retinanet目标检测平台 学习前言 什么是Retinanet目标检测算法 源码下载 Retinanet实现思路 一 预测部分 1 主干网络介绍 2 从特征获取预测结果 3 预测结果的解码 4 在原图上
  • 思维模式

    1 整体思维 整体宏观的思考 2 反向思维 不断的问自己如果不这样 3 方法思维 不断的寻找方法 不断的提高自己 从知识范围 方法等宏观角度 还有特有技术方向
  • 字符输入流

    字符输入流 Character Input Stream 是用于从输入源 如文件 网络连接等 读取字符数据的流对象 在 Java 中 主要使用 java io Reader 及其子类来实现字符输入流的操作 FileReader 是 Java
  • uniapp 页面跳转的坑

    uniapp 页面跳转的坑 我们在使用 uniapp 的时候 经常使用到页面跳转 uniapp 的几个常用跳转我就不一一列表了 我就说我遇到的坑吧 如下图 我要从第一个页面跳到第二个页面 我在组件里面写的跳转 大家移位到下一张图 如下图 这
  • LaTex 使用特殊章节符号 (§)

    参考 LaTex 使用特殊章节符号 LaTex 使用特殊章节符号 在 tex文件开头 加上以下内容 usepackage utf8 inputenc usepackage cleveref crefname section Crefname
  • Android动画进阶指北

    原文链接 Android Animation Advanced Tricks 前面的文章介绍了动画的基本使用方法 本文来聊一聊涉及到动画的高级技巧 以及一些非常优质的学习资源和动画三方库和框架 页面之间的过渡动画 常规的动画都是针对某一页面
  • java配置文件中数据库密码加密

    最近 有位读者私信我说 他们公司的项目中配置的数据库密码没有加密 编译打包后的项目被人反编译了 从项目中成功获取到数据库的账号和密码 进一步登录数据库获取了相关的数据 并对数据库进行了破坏 虽然这次事故影响的范围不大 但是这足以说明很多公司
  • VScode使用pip已经下载了faker,但还是报错ModuleNotFoundError: No module named ‘faker‘

    修复一下pip python m ensurepip pip install faker 但是在安装faker的时候 出现了这样的情况 提示warning 换一种写法 pip install faker i http pypi douban
  • 给定一个介于0和1之间的实数,类型为double,打印它的二进制表示

    给定一个介于0和1之间的实数 0 625 类型为double 打印它的二进制表示 如果该数字无法精准地用32位以内的二进制表示 则打印 ERROR 先上代码 public class printbinary public static vo
  • ABAP DOI 技术

    用户提出的报表 是用EXCLE显示的 有许多特殊格式 比如 加粗 大小字体等 普通的ALV报表输出并不能满足用户的要求 那么只能用ALV与EXCLE的集成技术 目前已知的技术有两种 一种是OLE技术 用SMW0上传模板 然后填写数据 多数用
  • Springboot的pom.xml需要用到的依赖总结:

  • 蜣螂优化(DBO)算法(含MATLAB代码)

    先做一个声明 文章是由我的个人公众号中的推送直接复制粘贴而来 因此对智能优化算法感兴趣的朋友 可关注我的个人公众号 启发式算法讨论 我会不定期在公众号里分享不同的智能优化算法 经典的 或者是近几年提出的新型智能优化算法 并附MATLAB代码