光学显微镜算法(OMA)(含MATLAB代码)

news2024/12/24 10:05:08

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

“今天分享的算法是2023年9月3日才Online的,到今天还没有一个周,可以说是最新的一个智能优化算法之一,发表在KBS上~

我比较欣赏这个算法的灵感来源,觉得它的数学建模过程比较有趣。”

图片

图片

光学显微镜算法(Optical Microscope Algorithm, OMA)从光学显微镜对目标物体的放大能力中获得灵感,使用肉眼进行初始观察,并通过物镜和目镜模拟放大过程。通过两个实验验证了OMA的性能,该算法具有用户友好且不需要初始化参数的特点:(1)在50个Benchmark函数上,将OMA与九种启发式算法进行比较,结果表明OMA性能更优、计算时间更短;(2)将OMA应用于解决工程问题,包括多项目调度中的结构优化和多资源均衡。OMA不仅显示出优越性,而且使用目标函数评估次数最少。该算法具有鲁棒性好、易于实现、控制参数少等特点,可用于求解多种数值优化问题。它的原始参考文献如下:

“Cheng MY, Sholeh MN. Optical microscope algorithm: A new metaheuristic inspired by microscope magnification for solving engineering optimization problems[J]. Knowledge-Based Systems, 2023: 110939.”

01
灵感来源

我比较喜欢这个算法的模型灵感来源。下面,我就说一下我的理解:我们在使用显微镜观察物体时,都需要调试物镜和目镜,找到一个最优的观察效果。那么,这个最优的观察效果就对应于算法所要寻找的最优解,而调试物镜、目镜的过程,就对应于种群的迭代,即不断调试物镜和目镜相当于种群的不断进化。将物体放到显微镜载物台就对应于算法的种群初始化。这个抽象的过程由图1所示,算法的循环迭代即是不断调整物镜和目镜,以寻找最优的观察角度。

图片

图1 OMA的算法框架

02
算法设计

与往期推送一样,目前我还不会在公众号里编辑数学公式。因此,这部分内容在Word文档里先写好,然后做成图片,最后导入。

讲真说来,OMA的设计挺简单的,就两个位置更新公式,一个对应于物镜放大,一个对应于目镜放大。

图片

03
计算流程

OMA的计算流程图如图2所示(注意:图2截自GOA的原文,因此图中的符号含义需要对照原文看):

图片

图2 OMA的计算流程图

04
实验仿真

这里对OMA的性能进行简单的测试。首先将OMA用于函数寻优,算法的MATLAB程序是严格按照它的原始参考文献进行编码的。此外,种群规模取N等于50,Benchmark函数分别采用了CEC2005测试集、CEC2013测试集、CEC2014测试集、CEC2017测试集、CEC2020优化函数测试集和CEC2022优化函数测试集。这里对仿真结果进行简要展示,不再进一步分析。

首先,检验一下OMA对全局勘探和局部开发的平衡能力。不知道我在说啥的,看一下之前的这一期推送:
种群的勘探(Exploration)与开发(Exploitation)(含MATLAB代码)
如图3所示,是OMA在CEC2005测试函数f7上的勘探和开发占比曲线。

图片

图2 OMA在CEC2005 f7上的勘探和开发百分占比变化曲线

其次,以CEC2005的单峰函数Schwefel's 2.22 (f2)为例,展示OMA在30维环境下的收敛效果,如图4所示。

图片

图4 OMA在CEC2005 f2测试函数上的收敛曲线

再次,以CEC2013测试集中的单峰函数F1为例,展示OMA在30维环境下的收敛效果,如图5所示。(注意是画的误差曲线)

图片

图5 OMA在CEC2013 F1上的误差收敛曲线

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

图片

图6 OMA在CEC2014 F14上的误差收敛曲线

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

图片

图7 OMA在CEC2017 F4上的误差收敛曲线

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

图片

图8 OMA在CEC2020优化函数F2上的误差收敛曲线

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

图片

图9 OMA在CEC2022优化函数F1上的误差收敛曲线

进一步,可将OMA应用于复杂工程约束优化问题,例如之前推送的两期算法应用内容:

算法应用:基于DBO算法的工程优化设计(第1期)(含MATLAB代码)

算法应用:工程优化设计(第2期)(含MATLAB代码)

这里以压力容器设计(Pressure vessel design)问题为例,展示OMA求解效果。收敛曲线如图10所示。

图片

图10 OMA在压力容器设计问题上的目标函数收敛曲线

简单谈一下我的看法:OMA的设计简单,复杂度低,性能中规中矩吧。试了一下,在工程优化问题上的表现还不错。有两点建议:

1.OMA可以选择作为对比算法。本身是刚发表的新算法,并且是KBS上的文章,期刊水平在那里摆着。但OMA的性能又不是很好很好,把自己的算法适当改进一下或许就可以比过。

2.OMA完全也可以作为自己改进的算法。本身很新,性能中规中矩,所以可以改进的地方很多,不像一些算法都改不动了。你完全可以尝试把其他算法的改进策略用到OMA上去看效果。另外就是OMA的灵感来源我觉得还算新颖,里面的常数都取自显微镜设备上的实际数值,设计还是比较合理的,不是强行套。所以可以尝试做一做工作。

05
MATLAB代码

OMA跑CEC2005测试集

关注公众号:启发式算法讨论

OMA跑CEC2013测试集:
关注公众号:启发式算法讨论

OMA跑CEC2014测试集:
关注公众号:启发式算法讨论

OMA跑CEC2017测试集:

关注公众号:启发式算法讨论

OMA跑CEC2020优化函数测试集:

关注公众号:启发式算法讨论

OMA跑CEC2022优化函数测试集:

关注公众号:启发式算法讨论

OMA的勘探(Exploration)和开发(Exploitation)占比分析:

关注公众号:启发式算法讨论

OMA的工程应用(第1期):压力容器设计、滚动轴承设计、拉伸/压缩弹簧设计、悬臂梁设计、轮系设计、三杆桁架设计。

关注公众号:启发式算法讨论

OMA的工程应用(第2期):焊接梁设计、多盘离合器制动器设计问题、步进圆锥滑轮问题、减速机设计问题、行星轮系设计优化问题、机器人夹持器问题。

关注公众号:启发式算法讨论

可通过下方链接下载代码清单,在里面寻找需要的算法代码,然后去对应的链接获取。清单会同步更新,一旦有新的代码,就可以在清单里找到。清单里面有部分代码是开源获取的。可随时免费下载。

链接:https://pan.baidu.com/s/1n2vpbwuhpA8oyXSJGsAsmA

提取码:8023

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/989667.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

期权开户必读:费用、保证金和稳定性安全性必须兼备

期权开户的核心是判断50ETF方向,上涨下跌都能赚钱,其次选择0门槛期权平台要考量期权手续费和安全性是第一位,下文为大家科普期权开户的核心:费用、保证金和稳定性安全性必须兼备的知识点。本文来自 :期权酱 一、期权开…

如何把Android Framework学彻底?一条龙学习

Framework通俗易懂 平时学习 Android 开发的第一步就是去学习各种各样的 API,如 Activity,Service,Notification 等。其实这些都是 Framework 提供给我们的。Framework 层为开发应用程序提供了非常多的API,我们通过调用这些 API …

自然语言处理——数据清洗

一、什么是数据清洗 数据清洗是指发现并纠正数据文件中可识别的错误的最后一道程序,包括检查数据一致性,处理无效值和缺失值等。与问卷审核不同,录入后的数据清理一般是由计算机而不是人工完成。 ——百度百科 二、为什么要数据清洗 现实生…

Apipost:你API管理中的得力助手

API管理的难点在哪? 相信无论是前端,还是后端的测试和开发人员,都遇到过这样的困难。不同工具之间数据一致性非常困难、低效。多个系统之间数据不一致,导致协作低效、频繁出问题,开发测试人员痛苦不堪。 开发人员在 …

STM32F4X RTC

STM32F4X RTC 什么是RTCSTM32F4X RTCSTM32F4X RTC框图STM32F4X RTC计数频率STM32F4X RTC日历STM32F4X RTC闹钟 STM32F4X RTC例程 什么是RTC RTC全程叫Real-Time Clock实时时钟,是MCU中一个用来计时的模块。RTC的一个主要作用是用来显示实时时间,就像日常…

Visual Studio 2019下使用C++与Python进行混合编程——环境配置与C++调用Python API接口

前言 在vs2019下使用C与Python进行混合编程,在根源上讲,Python 本身就是一个C库,那么这里使用其中最简单的一种方法是把Python的C API来嵌入C项目中,来实现混合编程。当前的环境是,win10,IDE是vs2019,python版本是3.9&#xff0c…

一个帮各位填秋招表格省一点事的浏览器插件

最近应该很多和我一样的双非鼠鼠在秋招等面试,而且处于海投阶段,为了不忘记投了哪些公司,可以用这样一个表格来记录: 其中有些字段,比如状态、投递时间、查看进度的网址其实可以不手动输入,所以搞个插件来…

2023数模国赛C 题 蔬菜类商品的自动定价与补货决策-完整版创新多思路详解(含代码)

题目简评:看下来C题是三道题目里简单一些的,考察的点比较综合,偏数据分析。涉及预测模型和运筹优化(线性规划),还设了一问开放型问题,适合新手入门,发挥空间大。 题目分析与思路: 背景&#x…

部署zookeeper集群

zookeeper和jdk下载地址 jdk 链接:https://pan.baidu.com/s/13GpNaAiHM5HSDJ66ebBtEg 提取码:90se zookeeper 链接:https://pan.baidu.com/s/1nSFKEhSGNiwgSPZWdb7hkw 提取码:u5l2 在所有的机器上面执行下面步骤: 1.上…

C++的纯虚函数和抽象类

在C++中,可以将虚函数声明为纯虚函数,语法格式为: virtual 返回值类型 函数名 (函数参数) = 0; 纯虚函数没有函数体,只有函数声明,在虚函数声明的结尾加上=0,表明此函数为纯虚函数。 最后的=0并不表示函数返回值为0,它只起形式上的作用,告诉编译系统“这是纯虚函数”。…

继承的偏移量问题

下面是实际测试: p1 p3 ! p2 Base1* p1 &d; Derive* p3 &d;! Base2* p2 &d; 图解:

斯坦福小镇升级版——AI-Town搭建指南

导语: 8月份斯坦福AI小镇开源之后,引起了 AIGC 领域的强烈反响,但8月份还有另一个同样非常有意义的 AI-Agent 的项目开源,a16z主导的 AI-Town 本篇文章主要讲解如何搭建该项目,如有英文基础或者对这套技术栈熟悉&#…

监控系统prometheus部署

wget -c https://github.com/prometheus/prometheus/releases/downloa d/v2.37.1/prometheus-2.37.1.linux-amd64.tar.gz下载必要的组件。 mkdir -p /opt/prometheus创建目录。 此文章为9月Day 8学习笔记,内容来源于极客时间《运维监控系统实战笔记》。

docker安装开发常用软件MySQL,Redis,rabbitMQ

Docker安装 docker官网:Docker: Accelerated Container Application Development docker镜像仓库:https://hub.docker.com/search?qnginx 官网的安装教程:Install Docker Engine on CentOS | Docker Docs 安装步骤 1、卸载以前安装的doc…

Reqable项目技术栈全方面总结

大家好,最近有知乎网友问我Reqable技术选型的问题,恰好Reqable也刚刚发布了非常重要的1.3版本更新,所以此次写一篇关于Reqable项目技术栈的全方面总结。 本篇文章的目的,是向大家分享我关于Reqable项目的一些技术思考、细节和填坑…

鸿蒙应用程序入口UIAbility详解

一、UIAbility概述 UIAbility是一种包含用户界面的应用组件,主要用于和用户进行交互。UIAbility也是系统调度的单元,为应用提供窗口在其中绘制界面。每一个UIAbility实例,都对应于一个最近任务列表中的任务。一个应用可以有一个UIAbility&am…

Kafka生产与消费示例

Kafka生产与消费流程 Kafka是一款消息中间件,消息中间件本质就是收消息与发消息,所以这节课我们会从一条消息开始生产出发,去了解生产端的运行流程,然后简单的了解一下broker的存储流程,最后这条消息是如何被消费者消…

GNU Linux 的退出码规定

参考:https://tldp.org/LDP/abs/html/exitcodes.html 从这张表里来看,小于 128 的是被程序员捕捉的错误,大于等于 128 的是真正的 bugs ?

MySQL卸载干净再重新安装【Windows】

家人们,谁懂啊? 上学期学的数据库,由于上学期不知道为什么抽风,过得十分的迷,上课跟老师步骤安装好了Mysql,但后面在使用的过程中出现了问题,而且还出现了忘记密码这么蠢的操作,后半…

linux设置登录超时自动退出

问题背景 最近登录某台linux服务器,经常遇到超时自动退出现象,如下图: 是因为服务器设置了超时时间,如果某个超时时间段内服务器没有任何操作,则会自动注销 解决方法 查看服务器设置的超时时间(TMOUT 变量的值)&am…