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

2023-10-27

目录

一、蜣螂优化(DBO)算法灵感来源

二、蜣螂优化(DBO)算法设计

三、蜣螂优化(DBO)算法MATLAB部分代码

四、运行结果

       蜣螂优化(Dung Beetle Optimizer, DBO)算法是2022年11月27日提出的,大家可以算算到今天才提出多久。它是由东华大学的沈波教授团队提出的一种全新的群智能优化算法。或许大家对这个团队不是很了解,但相信大家对麻雀搜索算法一定不陌生,著名的SSA就是由这个团队提出。基于屎壳郎的滚球、跳舞、觅食、偷窃和繁殖行为,提出了一种基于种群的屎壳郎优化算法(DBO)。新提出的DBO算法兼顾了全局探索和局部开发,具有收敛速度快、解精度高的特点

       在本文中,详细讨论了一种新的基于si的优化技术——DBO算法,包括以下两个方面:灵感和数学模型。

一、蜣螂优化(DBO)算法灵感来源

       众所周知,屎壳郎是自然界中一种常见的昆虫,以动物的粪便为食。请注意,蜣螂在世界上大部分地区都有发现,它们在自然界中扮演着分解者的角色,这意味着它们在生态系统中至关重要。研究表明,蜣螂有一个有趣的习惯,就是把粪便揉成一个球,然后把它滚出去,如图1所示。值得一提的是,屎壳郎的目的是为了尽可能快速有效地移动它们的粪球,这可以防止它们与其他蜣螂竞争。

图1

       如图1所示,一只屎壳虫正在向后滚一个比自己还大的粪球。另一方面,屎壳郎有一种奇妙的行为,它可以利用天体的线索(尤其是太阳、月亮和偏振光)来导航,使粪球沿直线滚动。然而,如果根本没有光源(即完全黑暗),蜣螂的路径就不再是笔直的,而是弯曲的,有时甚至有点圆。注意,许多自然因素(如风和不平整的地面)会导致蜣螂偏离原来的方向。此外,屎壳郎在滚动的过程中很可能会遇到障碍物,无法前进。对此,蜣螂通常会爬到粪球上跳舞(包括一系列的旋转和停顿),这决定了它们的运动方向.

        从蜣螂的生活方式中观察到的另一个有趣的行为是,获得的粪球有以下两个主要目的:1)一些粪球用来产卵和抚养下一代,2)其余的用作食物。具体来说,蜣螂把粪球埋起来,雌性蜣螂在这些粪球里产卵。需要注意的是,粪球不仅是幼虫发育的场所,也为幼虫提供了生命所必需的食物。因此,粪球对屎壳郎的生存起着不可替代的作用。

        一种新的SI优化算法——DBO技术,主要是受到蜣螂的滚球、跳舞、觅食、偷窃和繁殖行为的启发。

二、蜣螂优化(DBO)算法设计

      根据上面的讨论,我们知道蜣螂在滚动过程中需要通过天体线索来导航,以保持粪球在一条直线上滚动。为了模拟滚球行为,蜣螂需要在整个搜索空间中沿着给定的方向移动。屎壳郎的飞行轨迹如图2所示。在这张图中,我们可以看到蜣螂利用太阳来导航,其中红色箭头表示滚动方向。在本文中,我们假设光源的强度也会影响蜣螂的路径。在滚动过程中,滚球蜣螂的位置被更新,可以表示为

式中,t表示当前迭代次数,x_{i}(t)表示第i只蜣螂在第n次迭代时的位置信息,k∈(0,0.2]表示一个常数,该常数表示缺陷系数,b表示一个属于(0,1)的常数,\alpha为自然系数,赋值为-1或1,x^{w}表示全局最差位置,Δx用于模拟光强的变化。

图2

在(1)中,两个参数(k和b)选择合适的值至关重要。请注意훼意味着许多自然因素(如风和不平整的地面)会使蜣螂偏离原来的方向。其中\alpha= 1表示不偏离,\alpha=−1表示偏离原方向。为了模拟现实世界的复杂环境,本文采用概率法将\alpha设为1或-1(见算法1)。同样,Δx值越高,表示光源越弱。另外,k和b分别设为0.1和0.3。Δx可以促进滚球蜣螂具有以下两个优点:1)在优化过程中尽可能彻底地探索整个问题空间;2)追求更强的搜索性能,减少陷入局部最优的可能性。因此,x^{w}更适合控制Δx的值来扩展搜索范围。 

         当屎壳郎遇到障碍物无法前进时,它需要通过跳舞来重新定位自己,目的是获得一条新的路线。值得注意的是,舞蹈行为在滚球的蜣螂中起着重要作用。图2屎壳郎飞行轨迹的概念模型。

图3

为了模拟舞蹈行为,我们使用正切函数来获得新的滚动方向。需要说明的是,我们只需要考虑在区间[0,\pi ]上定义的切函数的值,如图3所示。一旦蜣螂成功地确定了一个新的方向,它应该继续向后滚动球。因此,将滚球蜣螂的位置更新定义如下: 

式中\theta为属于[0,\pi ]的倾斜角。 

       式(2)中,∣xi (t)−xi (t−1)∣为第i只屎壳虫在第n次迭代时的位置与第t−1次迭代时的位置之差。因此,滚球蜣螂的位置更新与当前和历史信息密切相关,请注意,如果\theta等于0、\pi/2或\pi,则蜣螂的位置不会更新(参见算法2)。

       在自然界中,蜣螂会把粪球滚到安全的地方并藏起来(见图4)。为了给它们的后代提供一个安全的环境,选择合适的产卵地点对蜣螂来说至关重要。受上述讨论的启发,提出了一种边界选择策略来模拟雌性蜣螂产卵的区域,其定义为

 式中,X^{\ast }表示当前局部最优位置,Lb∗和Ub∗分别表示产卵区域的下界和上界,R=1-t/T_{max}T_{max}表示最大迭代次数,Lb和Ub分别表示优化问题的下界和上界。

       如图5所示,当前局部最佳位置X^{\ast }用一个大的棕色圆圈表示,而X^{\ast }周围的小黑色圆圈表示育雏球。请注意,每个育仔球都包含一枚屎壳虫卵(见图4)。此外,红色小圆圈代表边界的上下限。一旦确定了产卵区域,雌性蜣螂就会选择这个区域的卵球产卵。需要说明的是,对于DBO算法,每只雌性蜣螂在每次迭代中只产生一个卵。此外,由(3)可以清楚地看出,产卵区的边界范围是动态变化的,这主要是由R值决定的。因此,孵化球的位置在迭代过程中也是动态的,定义为

式中,B_{i}(t)为第i个育雏球在第n次迭代时的位置信息,b_{1}b_{2}表示大小为1 × D的两个独立随机向量,D表示优化问题的维数。注意孵蛋球的位置被严格限制在一定范围内,即产卵区域(见算法3)。

一些已经长大成人的屎壳郎会从地下钻出来寻找食物(见图6)。在本文中,我们称它们为小屎壳郎。此外,我们还需要建立最佳觅食区域来指导甲虫的觅食,并进行模拟这些屎壳郎在自然界的觅食过程。其中,最优觅食区域的边界定义为:

式中,X^{b}表示全局最佳位置,Lb和Ub分别表示最优觅食区域的下界和上界,其他参数定义如(3)所示。因此,小屎壳郎的位置更新如下:

式中,x_{i}(t)表示第i只小蜣螂在第n次迭代时的位置信息,C_{1}表示服从正态分布的随机数,C_{2}表示属于(0,1)的随机向量。

       另一方面,有些屎壳郎,被称为小偷,会从其他屎壳郎身上偷粪球(见图7)。需要指出的是,这是自然界中很常见的现象。由(5)可知,X^{b}是最优食物源。因此,我们可以假设周围的X^{b}表示争夺食物的最佳地点。在迭代过程中,小偷的位置信息更新,可以描述为:

 式中x_{i}(t)表示第i个贼在第n次迭代时的位置信息,g是大小为1 × D的随机向量,服从正态分布,S表示常数。

图5

图6
图7

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

 三、蜣螂优化(DBO)算法MATLAB部分代码

function [fMin , bestX, Convergence_curve ] = DBO(pop, M,c,d,dim,fobj)       
P_percent = 0.2;                  % The population size of producers accounts for "P_percent" percent of the total population size       
pNum = round( pop * P_percent );  % The population size of the producers   
lb= c.*ones( 1,dim );    
ub= d.*ones( 1,dim );  
%Initialization
for i = 1 : pop  
    x( i, : ) = lb + (ub - lb) .* rand( 1, dim ); 
    fit( i )  = fobj( x( i, : )) ;                       
end
pFit = fit;                       
pX=x; 
XX=pX;    
[fMin,bestI] = min(fit);      % fMin denotes the global optimum fitness value
bestX = x(bestI,:);           % bestX denotes the global optimum position corresponding to fMin
% Start updating the solutions.

 四、运行结果

The best solution obtained by DBO is : 3.2411e-25 -3.4589e-25 1.3799e-24 1.3902e-24 4.566e-26 -2.7352e-25 4.8812e-25 -1.8461e-24 -1.545e-24 -5.3451e-28
The best optimal value of the objective funciton found by DBO is : 1.0172e-47

    可以看出新提出的DBO算法兼顾了全局探索和局部开发,具有收敛速度快、解精度高的特点

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

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

  • 一道面试算法题

    给定一个整数数组和一个整数 返回两个数组的索引 这两个索引指向的数字的加和等于指定的整数 需要最优的算法 分析算法的空间和时间复杂度 参考答案 java实现 c 用字典应该也行吧 publicint twoSum int nums int

随机推荐

  • Windows7中搭建Android x86_64及armv8-a操作步骤

    1 从https developer android com tools sdk ndk index html 下载android ndk r10d windows x86 64 exe 和 android ndk r10d linux x
  • 瑞吉外卖开发梳理及重点知识讲解

    一 项目导读 瑞吉外卖是一个单体架构 整体的业务逻辑也较为简单 如果刚学SpringBoot技术 想要通过项目练手 那这是一个很好的选择 不仅可以练习SpringBoot技术 还可以学习Mybatis Plus Redis 项目部署 服务器
  • 网络基础:子网划分

    目录 一 理论 1 IP地址结构 2 子网掩码 3 网络地址 二 实验 1 中国移动10 0 0 0 8 为32个省分配各自的子网 一 理论 1 IP地址结构 IP地址就是一个唯一标识 是一段网络编码 二进制 IP地址由两部分组成 一部分为
  • XXXXRockey4ND加密狗复制

    一 加密狗复制的前提条件 1 有所使用的软件 2 有所需的原加密狗 3 同型号的加密狗 二 所需环境 1 windows 2 所需加密狗的软件正常安装 三 复制步骤 1 将Rockey4ND加密狗读狗工具中的Hid dll放置在所需加密狗的
  • 测试人员职业发展之路

    在我们开始尝试为大家描述软件测试工作的多种可能性之前 先来看看在现在所知最近代的开发模式中 测试人员还会继续存在吗 因为如果连测试工作本身都不存在了 我们也没必要进行后续的讨论了 很多做测试的朋友问过这样一个问题 现在敏捷开发模式中 自动化
  • Spring Boot 序列化和反序列化

    Spring Boot 开发一个web应用程序时 你可以通过使用嵌入式tomcat jetty Undertow 或者Netty来实现内置http Server 在spring boot中 只需要添加spring boot starter
  • Android 软件测试日志文件抓取

    http zzhhui i sohu com blog view 242248931 htm 1 log文件分类简介 实时打印的主要有 logcat main logcat radio logcat events tcpdump 还有高通平
  • Lodash 一个著名的javascript原生库

    Ldash官网 https lodash com 简介 Lodash是一个内部封装了诸多对字符串 数组 对象等常见的数据类型的处理函数的一套工具库 它使用延迟计算 使得其性能大大提升 延迟计算意味着在我们的链式方法在显示或者隐藏式的valu
  • 全栈之前端

    关注回复 学习交流群 加入 安全开发运维 答疑交流群 原文地址 全栈之前端 1 CSS3必备基础知识学习前面跟随着 WeiyiGeeker 作者 全栈工程师修炼指南 公众号一起学习了前端基础的知识以及HTML标签 属性 事件 字符集系列教程
  • 计算机图形图像知识梳理,计算机图形学知识点总结

    第一章 计算机图形学概论 1 比较计算机图形学与图象处理技术相同点和不同点 Computer Graphics 计算机图形学 和Computer Vision 计算机图像识别 是同一过程的两个方向 Computer Graphics将抽象的
  • Node.js学习笔记--npm命令

    npm命令 本章学习npm的命令 1 基础命令 1 npm v 查看版本 2 npm version 查看所有模块版本 3 npm search 包名搜索 4 npm install i 包安装 5 npm remove r 包移除 6 n
  • 【C进阶】指针(一)

    大家好 我是深鱼 前言 指针的主题 在初阶指针章节已经接触过了 我们知道了指针的概念 1 指针就是个变量 用来存放地址 地址的唯一标识一块内存空间 指针变量 内存单元是由编号的 编号 地址 指针 2 指针 地址 指针变量的大小是固定的4 8
  • Doxygen使用介绍

    Doxygen的主页为http doxygen nl 它的license为GPL 最新发布版本为1 8 17 源代码存放在https github com doxygen doxygen 它支持的语言包括C C Objective C C
  • matlab求解普通函数的导数问题(diff函数的用法)

    目录 一元函数的导数 MATLAB函数语法 应用举例 例1 普通函数求导 例2 复合泛函求导 例3 矩阵函数求导 多元函数的偏导数 MATLAB函数语法 应用举例 例1 求偏导并绘图 例2 三元函数求偏导 一元函数的导数 MATLAB函数语
  • matlab RANSAC拟合二次多项式曲线(详细过程版)

    目录 一 算法概述 二 代码实现 三 结果展示 四 相关链接 一 算法概述 RANSAC是一种鲁棒性较强的拟合算法 可以用于估计数据集中的模型参数 对于拟合二次多项式曲线 RANSAC算法的步骤如下 1 随机选择一小部分数据点 假设它们是符
  • NodeMCU-32S-内部DAC音频输出测试

    NodeMCU 32S 内部DAC音频输出测试 文章目录 NodeMCU 32S 内部DAC音频输出测试 前言 硬件说明 软件编译 测试 ESP32 DAC参考链接 前言 一直想玩玩ESP32的蓝牙音频功能 手上面有一个NodeMCU 32
  • DAY02: 编程入门03- 核心代码解析

    1 Arduino默认提供的两个方法 setup 方法 用于初始化 程序一开始 只运行一次 用于定于引脚为OUTPUT还是INPUT loop 方法 循环不停得执行 用于编写小车移动旋转等一直需要命令的代码 2 小车电机运动的核心方法 定于
  • ESP8266 NodeMCU 擦除闪存执行出厂重置

    在本教程中 我们将了解如何在 Windows Linux 和 MacOS 中使用 esptool py 命令行实用程序擦除 ESP8266 的闪存 并讨论为什么以及何时需要执行此操作 与任何电子设备一样 有时您可能需要将 ESP8266 重
  • 学校报名登记收缴费用小程序开发制作

    报名登记收缴费用小程序 适合培训机构 幼儿园 小学 高中 初中 大学等学校 报名登记小程序 微信扫码登记 手机端登记报名信息 数据发送至管理后台 管理员可查阅数据列表 完成了学生报名信息收集 审核 修改 复审 收费 等多项复杂功能 收费可以
  • 蜣螂优化(DBO)算法附MATLAB代码

    目录 一 蜣螂优化 DBO 算法灵感来源 二 蜣螂优化 DBO 算法设计 三 蜣螂优化 DBO 算法MATLAB部分代码 四 运行结果 蜣螂优化 Dung Beetle Optimizer DBO 算法是2022年11月27日提出的 大家可