指数分布优化器(EDO)(含MATLAB代码)
先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法,经典的,或者是近几年提出的新型智能优化算法,并附MATLAB代码。
“今天给大家推送的也是2023年提出的一种新算法,发表在AIRE上,这个期刊目前影响因子12,还是很有含金量。就这个算法效果而言,我觉得还可以,并且它框架也简单~
另外,这个算法基于指数分布理论,没有什么好看的图,更多的是数学公式,学起来可能有点枯燥~”

该研究提出了一种新的基于种群的元启发式算法,称为指数分布优化器(Exponential Distribution Optimizer, EDO)。EDO的主要灵感来自于数学中的指数概率分布模型。EDO算法包括了开发策略和勘探策略。利用CEC2014、CEC2017、CEC2020和CEC2022等测试套件以及6个工程设计问题将EDO算法与L-SHADE、LSHADE-cnEpSin和AGSK进行了比较。EDO得到了更理想的结果,并且统计分析在95%的置信区间上证明了EDO的优越性。它的原始参考文献如下:
“Abdel-Basset M, El-Shahat D, Jameel M, et al. Exponential distribution optimizer (EDO): a novel math-inspired algorithm for global optimization and engineering problems[J]. Artificial Intelligence Review, 2023: 1-72.”
01
预备知识
指数分布理论是EDO算法的灵感来源。
指数分布是一种连续分布,常用于描述各种自然现象。例如,从现在到地震袭击的等待时间呈指数分布。此外,车辆到达收费站的概率随时间呈指数分布。假设有一个指数随机变量x,参数为λ,可以写成x∼EXP(λ)。该随机变量的概率密度函数(Probability Density Function, PDF)可表示为:

其中,x表示在事件发生前的等待时间。时间是连续的,不能是一个负值,即x≥0。此外,参数λ>0是指数分布的速率。利用该公式可计算得到指数累积分布函数(Cumulative Distribution Function, CDF):

图1显示了衰减参数λ对指数PDF的影响,使用相同的x值和四个不同的λ值(0.25、0.5、0.75和1)。曲线从λ值开始,并逐渐下降。因此,指数分布总是一个关于PDF的递减函数。指数率的值越大,相关的指数随机变量的PDF值就越小。图2展现了使用不同的λ值的CDF曲线的情况。它是一个递增函数,从指数速率开始,CDF随指数随机变量的增加而增加。

图1 不同λ值对应的PDF

图2 不同λ值对应的指数CDF
指数分布随机变量的均值(μ)和方差(σ^2)可以表示为:

从前面的方程中,可以认为参数λ的值与均值和方差值成反比,反之亦然。换句话说,λ值越大,均值和方差值就越小。那么,标准差(σ)与均值相等,可计算如下:

如果只想了解算法的计算流程,可以不看这一节的。这一节就是介绍一下指数分布模型,知不知道都不怎么影响。不是数学专业的同学,可以了解一下。
02
算法设计
为了便于大家理解,介绍算法时就直接抬出公式和流程,就不过多讨论作者的设计思路和出发点了(哎呀,动机、思路、出发点这些都是写给审稿人看的,能自圆其说就行的,了解来也没啥用,知道算法怎么计算的就行了)。与往期推送一样,这部分内容在Word文档里先写好,然后做成图片,最后导入。


03
计算流程
EDO算法的计算流程伪代码如下(公式序号对应上文):

04
实验仿真
这里对EDO算法的性能进行简单的测试。首先将EDO用于函数寻优,算法的MATLAB程序是严格按照它的原始参考文献进行编码的。此外,种群规模取N等于50,Benchmark函数分别采用了CEC2005测试集、CEC2013测试集、CEC2014测试集、CEC2017测试集、CEC2020优化函数测试集和CEC2022优化函数测试集。仅对仿真结果进行简要展示,不再进一步分析。
首先,检验一下EDO对全局勘探和局部开发的平衡能力。不知道我在说啥的,看一下之前的这一期推送:
种群的勘探(Exploration)与开发(Exploitation)(含MATLAB代码)
如图3所示,是EDO在CEC2005测试函数f7上的勘探和开发占比曲线。

图3 EDO在CEC2005 f7上的勘探和开发百分占比变化曲线
其次,利用CEC2005测试集验证EDO的性能,这里选择今年很火热的蜣螂优化(DBO)算法进行对比(为了对比的公平,两种算法的种群大小设置为30,最大迭代次数为200)。对比结果如下所示:
EDO Vs DBO
可以看到,EDO的竞争力还是很可观的,在一些函数上收敛曲线突然不见了,是因为已经收敛到理论最优值0了。我使用的是semilogy来绘制的收敛曲线,而semilogy画的是y轴的对数,因此,若曲线收敛到0,semilogy是画不出来的。那么,EDO在绝大部分的函数上,用了不到两百次迭代就收敛到了最优值。在CEC2005的大部分函数上,相比于DBO,EDO算法更简单,收敛速度更快,且收敛精度更高。对EDO算法,我本人还是比较推荐的,简单易实现,并且没有调参,不涉及需要用户改动的参数。
再次,以CEC2013测试集中的单峰函数F1为例,展示EDO在30维环境下的收敛效果,如图4所示。(注意是画的误差曲线)

图4 EDO在CEC2013 F1上的误差收敛曲线
接着,以CEC2014测试集中的多模态函数F14为例,展示EDO在30维环境下的收敛效果,如图5所示。(注意是画的误差曲线)

图5 EDO在CEC2014 F14上的误差收敛曲线
再然后,以CEC2017测试集中的多模态函数F4为例,展示EDO在30维环境下的收敛效果,如图6所示。(注意是画的误差曲线)

图6 EDO在CEC2017 F4上的误差收敛曲线
在此之后,以CEC2020优化函数测试集中的单峰函数F2为例,展示EDO在10维环境下的收敛效果,如图7所示。(注意是画的误差曲线)

图7 EDO在CEC2020优化函数F2上的误差收敛曲线
最后,以CEC2022优化函数测试集中的单峰函数F1为例,展示EDO在10维环境下的收敛效果,如图8所示。(注意是画的误差曲线)

图8 EDO在CEC2022优化函数F1上的误差收敛曲线
进一步,可将EDO应用于复杂工程约束优化问题,例如之前推送的两期算法应用内容:
算法应用:基于DBO算法的工程优化设计(第1期)(含MATLAB代码)
算法应用:工程优化设计(第2期)(含MATLAB代码)
这里以行星轮系设计优化问题(Planetary gear train design optimization problem)为例,展示EDO求解效果。该问题的主要目标是使汽车齿轮传动比的最大误差最小化,如图9所示。为了使最大误差最小化,计算了自动行星传动系统的总齿数。

图9 行星轮系设计优化问题(Planetary gear train design)
该问题包含6个整数变量和11个不同的几何约束和装配约束(10个不等式约束,1个等式约束)。这个问题可以定义如下:

采用罚函数处理约束条件,然后利用EDO算法进行求解,最优值和最优解如下所示。目标函数的收敛曲线如图10所示。


图10 EDO在行星轮系设计问题上的目标函数收敛曲线
05
MATLAB代码
EDO算法对应的MATLAB代码链接如下:
| EDO跑CEC2005测试集 | 公众号里有链接 |
| EDO跑CEC2013测试集 | 公众号里有链接 |
| EDO跑CEC2014测试集 | 公众号里有链接 |
| EDO跑CEC2017测试集 | 公众号里有链接 |
| EDO跑CEC2020优化函数测试集 | 公众号里有链接 |
| EDO跑CEC2022优化函数测试集 | 公众号里有链接 |
| EDO的勘探(Exploration)和开发(Exploitation)占比分析 | 公众号里有链接 |
| EDO的工程应用(第1期):压力容器设计、滚动轴承设计、拉伸/压缩弹簧设计、悬臂梁设计、轮系设计、三杆桁架设计 | 公众号里有链接 |
| EDO的工程应用(第2期):焊接梁设计、多盘离合器制动器设计问题、步进圆锥滑轮问题、减速机设计问题、行星轮系设计优化问题、机器人夹持器问题 | 公众号里有链接 |
可通过下方链接下载代码清单,在里面寻找需要的算法代码,然后去对应的链接获取。清单会同步更新,一旦有新的代码,就可以在清单里找到。清单里面有部分代码是开源获取的。可随时免费下载。
链接:https://pan.baidu.com/s/1n2vpbwuhpA8oyXSJGsAsmA
提取码:8023
相关文章:
指数分布优化器(EDO)(含MATLAB代码)
先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法,经典的,或者是近几年…...
Java 时间的加减处理
时间的加减处理 Date date new Date(操作时间(类型Date)-(60000*60*1));600001分钟 60000*60*1 1小时...
基于A4988/DRV8825的四路步进电机驱动器
概述 简化板的CNC sheild V3.0,仅保留步进电机速度与方向的控制引脚STEP/DIR、使能端EN、芯片供电VCC\GND,共计11个引脚。PCB四周开设四个M3通孔,以便于安装固定。此外,将板载的焊死的保险丝更改为可更换的保险座保险丝ÿ…...
万字总结网络原理
目录 一、网络基础 1.1认识IP地址 1.2子网掩码 1.3认识MAC地址 1.4一跳一跳的网络数据传输 1.5总结IP地址和MAC地址 二、网络设备及相关技术 2.1集线器:转发所有端口 2.2交换机:MAC地址转换表+转发对应端口 2.3主机:网络分层从上到下封装 2.4主机&路由器:ARP…...
【AI视野·今日CV 计算机视觉论文速览 第262期】Fri, 6 Oct 2023
AI视野今日CS.CV 计算机视觉论文速览 Fri, 6 Oct 2023 Totally 73 papers 👉上期速览✈更多精彩请移步主页 Daily Computer Vision Papers Improved Baselines with Visual Instruction Tuning Authors Haotian Liu, Chunyuan Li, Yuheng Li, Yong Jae Lee大型多模…...
一文搞懂Jenkins持续集成解决的是什么问题
1、持续集成的定义 大师 Martin Fowler 是这样定义持续集成的: 持续集成是一种软件开发实战, 即团队开发成员经常集成他们的工作. 通常, 每个成员每天至少集成一次, 也就意味着每天可能发生多次集成. 持续集成并不能消除Bug, 而是让它们非常容易发现和改正. 根据对项目实战的理…...
微信小程序去除默认滚动条展示
一、微信小程序改版框架升级后,滚动条默认展示了。 在实际应用中效果不好,如果想默认隐藏掉,代码段如下: /* 去除默认滚动条效果 */ ::-webkit-scrollbar {display:none;width:0;height:0;color:transparent; } 设置成全局样式…...
3.02 创建订单操作详细-订单创建与回滚 (创建订单操作详细)
步骤1: 创建orders订单表,子订单表和订单状态表对应的pojo和mappperOrders和OrderItemsMapperOrderItems和OrderItemsMapperOrderStatus和OrderStatusMapper步骤2:创建OrderService和对应的实现类 public interface OrderService {/*** 用于创建订单相关…...
需求放缓、价格战升级、利润率持续恶化对小鹏汽车造成了严重影响
来源:猛兽财经 作者:猛兽财经 收入和每股收益不及预期,亏损创记录 财报显示,小鹏汽车(XPEV)2023年第二季度收入为50.6亿元人民币(合7亿美元),略低于预期,而且还产生了比预期更大的亏…...
《算法通关之路》chapter19解题技巧和面试技巧
《算法通关之路》学习笔记,记录一下自己的刷题过程,详细的内容请大家购买作者的书籍查阅。 1 看限制条件 1.1数据规模 有的题目数据规模较小,那么暴力法就可行;如果暴力法不行,那么再稍微加一个诸如缓存和剪枝的优化…...
什么是TF-A项目的长期支持?
安全之安全(security)博客目录导读 问题:Trusted Firmware-A社区每六个月发布一次代码。然而,对于生产中的平台,该策略在维护、重要软件修复的向后兼容性、获得最新的安全缓解措施和整体产品生命周期管理方面不具备可扩展性。 开源软件项目&…...
【LinuxC】时间、时区,相关命令、函数
文章目录 一、序1.1 时间和时区1.11 时间1.12 时区 1.2 查看时间时区的命令1.21 Windows1.22 Linux 二、C语言函数2.1 通用2.11 函数简介2.12 数据类型简介 2.2 windows 和 Linux特有函数2.3 C语言示例 一、序 1.1 时间和时区 1.11 时间 时间是一种用来描述物体运动变化的量…...
mac清理垃圾的软件有哪些?这三款我最推荐
没错,Mac电脑真的好用,但是清理系统垃圾可不是件容易的事。由于Mac系统的封闭性,系统的缓存垃圾常常隐藏得让人发现不了。不过,别担心!有一些专业的Mac清理软件可以帮你解决这一系列问题,让清理垃圾变得轻松…...
复习Day11:链表part04: 206. 反转链表、92. 反转链表II、25. K 个一组翻转链表、148. 排序链表
我用的方法是在leetcode再过一遍例题,明显会的就复制粘贴,之前没写出来就重写,然后从拓展题目中找题目来写。辅以Labuladong的文章看。然后刷题不用CLion了,使用leetcode自带的IDE模拟面试环境。 哈希表章节的题目思路很清晰&…...
一年一度的国庆节又结束了
这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…...
雷达干扰和烧穿范围简介
一、干扰信号比 J/S或J-to-S是从目标发射的干扰信号接收的功率(J)与从目标的雷达反向散射接收的功率的比率。 二、烧穿范围 通过电子攻击(J)可以首先检测到目标回波信号(S)的雷达到目标的距离。 三、自保护干扰 也称为主瓣干扰(雷达回波源和干扰机并置)。 烧穿范围…...
“秋天第一只大闸蟹”背后,看见京东一体化供应链
京东似乎正在从一个大闸蟹的物流服务商、销售商,转变为一个大闸蟹的“供货商”。 作者|斗斗 编辑|皮爷 出品|产业家 阳澄湖连续几天的降雨,使得通往蟹塘的路异常难走。 长期驻扎此地的京东相关负责人蹲在蟹塘边的小路上,指着蟹塘说道…...
大模型Java编码能力评估
大模型如火如荼发展,不能只看热闹,也需要躬身入局。要想评估大模型的能力,必须有一个评估方法和评估数据集。下面就梳理下当前大模型是如何评估代码能力的 权威评估 opencompass: https://opencompass.org.cn/datalearner: https://www.dat…...
javascript选择框和选择文本的创建与增加以及设置选中项
<script type"text/javascript">//得到选中项的索引,文本和值函数function getselected(selectedIndex){var selectboxdocument.forms[0].elements["location"];var indexselectbox[selectedIndex];var selectedOptionselectbox.options[…...
汽车驾驶任务的隐马尔可夫模型识别方法研究
汽车驾驶任务的隐马尔可夫模型识别方法研究 一、Introduction 自动驾驶汽车经过了几十年的发展,是目前国内外汽车行业中的重要研究方向。自 动驾驶汽车的智能化需要车辆能够有类“人”的行为,在决策策略上可以满足人的心理 需求。人在驾驶过程中&#…...
DA7280触觉驱动库解析:嵌入式Haptic闭环控制实战
1. DA7280触觉驱动库技术解析:面向嵌入式系统的高精度Haptic控制器集成方案DA7280是Dialog Semiconductor(现为Renesas子公司)推出的高性能、低功耗、IC可编程触觉驱动芯片,专为智能手机、可穿戴设备、工业HMI及IoT终端设计。其核…...
Python 属性描述符:从原理到 ORM 实践详解
Python 属性描述符(Descriptor):从原理到 ORM 实践详解(2026 年视角) 属性描述符是 Python 中最底层、最强大却最被低估的特性之一。它是 property、classmethod、staticmethod、方法绑定、SQLAlchemy Column、Django…...
ARM寄存器体系深度解析:从Cortex-M到AArch64的演进与实践
1. ARM架构寄存器体系深度解析ARM处理器的寄存器设计是其指令集架构(ISA)的核心组成部分,直接决定了程序执行效率、异常处理机制、系统安全模型以及软件可移植性。不同于x86等复杂指令集架构中寄存器数量有限且功能高度专用的特点,…...
保姆级教程:在Ubuntu 18.04 + ROS Melodic上搞定PX4-Avoidance避障仿真(附常见报错解决)
保姆级教程:在Ubuntu 18.04 ROS Melodic上搞定PX4-Avoidance避障仿真(附常见报错解决) 引言:为什么选择PX4-Avoidance? 对于刚接触无人机自主避障开发的初学者来说,PX4-Avoidance无疑是一个理想的起点。这…...
如何用C语言打造一个带排序功能的通讯录?qsort函数详解与实战
如何用C语言打造一个带排序功能的通讯录?qsort函数详解与实战 在开发C语言项目时,通讯录管理系统是一个经典的练手项目。它不仅涵盖了数据结构、文件操作等基础知识,还能让我们深入理解排序算法的实际应用。本文将重点介绍如何利用C标准库中的…...
Linux块设备I/O调度器选型指南:NOOP、DEADLINE、CFQ深度对比
Linux 内核块设备 I/O 调度算法深度解析1. I/O 调度器的工程定位与设计动因在嵌入式 Linux 系统开发中,尤其是面向工业控制、数据采集或边缘存储节点等对实时性与可靠性有明确要求的场景,块设备 I/O 性能并非仅由硬件带宽决定。真正制约系统响应确定性与…...
YOLO标注文件可视化保姆级教程:用Python+OpenCV把txt里的数字变成图像上的框
YOLO标注文件可视化实战指南:从原理到批量处理的完整解决方案 当你第一次拿到YOLO格式的数据集时,面对那些充满数字的txt文件,是否感到无从下手?本文将带你深入理解YOLO标注格式的本质,并手把手教你用Python和OpenCV将…...
产品经理必看:如何用IPD的Charter任务书避免研发踩坑?
产品经理实战指南:用IPD Charter任务书打造高成功率产品 在中小企业和初创公司中,产品失败最常见的原因往往不是技术实现问题,而是从一开始就选错了方向。作为产品负责人,你是否经历过这样的困境:研发团队埋头苦干大半…...
Z-Image-Turbo_Sugar脸部Lora在计算机网络教学中的应用:可视化协议交互角色
Z-Image-Turbo_Sugar脸部Lora在计算机网络教学中的应用:可视化协议交互角色 1. 引言 想象一下,你正在给一群学生讲解TCP/IP协议栈。当你讲到数据包从应用层一路封装到物理层,再经过路由器层层解封装和转发时,台下不少同学的眼神…...
libsodium嵌入式移植实战:ESPHome安全工程指南
1. libsodium 在嵌入式系统中的工程化移植:以 ESPHome 为例的深度解析1.1 为什么嵌入式系统需要 libsodium?在资源受限的 MCU 平台上(如 ESP32、nRF52840、STM32H7),密码学功能长期面临三重矛盾:安全性要求…...
