【群智能算法改进】一种改进的光学显微镜算法 IOMA算法[1]【Matlab代码#60】

news2025/2/26 8:42:13

文章目录

    • 【`获取资源`请见文章第5节:资源获取】
    • 1. 光学显微镜算法(OMA)
      • 1.1 物镜放大倍数
      • 1.2 目镜放大倍数
    • 2. 改进后的IOMA算法
      • 2.1 透镜成像折射方向学习
    • 3. 部分代码展示
    • 4. 仿真结果展示
    • 5. 资源获取说明


获取资源请见文章第5节:资源获取】


1. 光学显微镜算法(OMA)

光学显微镜算法(Optical Microscope Algorithm,OMA)是受显微镜放大倍数启发的一种新的元启发式算法,可用于解决工程优化问题。

新颖的 OMA 具有鲁棒性、易于实现且使用较少控制参数的特点,可用于解决各种数值优化问题。

OMA 是一种基于物理的算法,它模拟观察者放大物体的过程,从观察者的眼睛开始,然后通过显微镜镜头。OMA用于获得最佳目标对象的四步过程如下图所示。
在这里插入图片描述

1.1 物镜放大倍数

该算法中目标物体的放大倍数遵循复合显微镜使用的放大原理,并使用公式(1)进行建模。
M t o t a l = M O ∗ M E (1) M_{total}=M_{O}*M_{E}\tag1 Mtotal=MOME(1)
其中, M t o t a l M_{total} Mtotal代表显微镜的总视觉放大倍数, M O M_{O} MO是物镜的放大倍数, M E M_{E} ME并且是目镜的放大倍数。物镜的放大倍率方程一般用用公式(2)表示:
M O = L f 0 (2) M_{O}=\frac{L}{f_{0}}\tag2 MO=f0L(2)
其中, L L L是显微镜的镜筒长度, f 0 f_{0} f0是物镜的焦距。要计算这两个值,需要从最佳目标对象的位置进行参考( M b e s t M_{best} Mbest),用物镜放大。
修改后的目标对象 M i , n e w M_{i,new} Mi,new的数学表达式为:
M i , n e w = M i + m r ∗ 1.40 ∗ M b e s t (3) M_{i,new}=M_{i}+m^{r}*1.40*M_{best}\tag3 Mi,new=Mi+mr1.40Mbest(3)
修改后的目标对象( M i , n e w M_{i,new} Mi,new)然后与当前物体进行比较,选择两者中较好的一个作为最佳放大倍数。

1.2 目镜放大倍数

显微镜的第二个透镜是目镜,它是继物镜之后用来放大物体的。目镜的放大倍率方程一般用公式(4)表示:
M O = D f e (4) M_{O}=\frac{D}{f_{e}}\tag4 MO=feD(4)
其中, D D D是最短视觉距离, f e f_{e} fe并且是目镜的焦距。目镜阶段是高级放大倍率的更具体的阶段。因此,为了确定两者的长度,需要从用目镜放大的局部搜索空间的距离作为参考。
为了模拟目镜的放大效果,根据所选目标物体之间的距离确定放大空间( i i i)和群体中的另一个目标对象( j j j)。目标对象( i i i)被随机选择来计算局部搜索空间。

这种修改后的放大倍数被认为是对本地搜索空间的有效利用。公式(5)和(6)分别用于模拟目标物体的放大和修改模式。
s p a c e = { M j − M i , i f f ( M i ) > = f ( M j ) M i − M j , i f f ( M i ) < f ( M j ) (5) space=\left\{\begin{matrix}M_{j}-M_{i},\quad if \quad f(M_{i})>=f(M_{j}) \\M_{i}-M_{j},\quad if \quad f(M_{i})<f(M_{j}) \end{matrix}\right.\tag5 space={MjMi,iff(Mi)>=f(Mj)MiMj,iff(Mi)<f(Mj)(5)
M i , n e w = M i + m r ∗ 0.55 ∗ s p a c e (6) M_{i,new}=M_{i}+m^{r}*0.55*space\tag6 Mi,new=Mi+mr0.55space(6)

2. 改进后的IOMA算法

2.1 透镜成像折射方向学习

透镜成像折射反向学习策略的思想来自于凸透镜成像的原理。通过基于当前坐标生成一个反向位置来扩展搜索范围,如图1所示。
在这里插入图片描述

图1 透镜成像折射反向学习原理图

在二维坐标中,x轴的搜索范围为(a, b), y轴表示一个凸透镜。假设物体A在x轴上的投影为x,高度为h,通过透镜成像,另一侧的图像为A*, A在x轴上的投影为x,高度为h*。通过以上分析,我们可以得到如下公式:
( a + b ) / 2 − x x ∗ − ( a + b ) / 2 = h h ∗ (7) \frac{(a+b)/2-x}{x^{*}-(a+b)/2 }=\frac{h}{h^{*}} \tag7 x(a+b)/2(a+b)/2x=hh(7)
对公式(7)进行转换,即可得到反向解x*的表达式为:
x ∗ = a + b 2 + a + b 2 k − x k (8) x^{*} =\frac{a+b}{2}+\frac{a+b}{2k}-\frac{x}{k} \tag8 x=2a+b+2ka+bkx(8)
其中, k = h / h ∗ k=h/h^{*} k=h/h a a a b b b可以视为某维度的上下限。本文中的 k k k是一个与迭代次数相关的动态自适应值。

3. 部分代码展示

close all
clear 
clc

SearchAgents_no=30; % Number of search agents

Function_name='F4'; % Name of the test function that can be from F1 to F23 (Table 1,2,3 in the paper)

Max_iteration=500; % Maximum numbef of iterations

% Load details of the selected benchmark function
[lb,ub,dim,fobj]=Get_Functions_details(Function_name);

[OMA_Best_score,OMA_Best_pos,OMA_cg_curve]=OMA(SearchAgents_no,Max_iteration,lb,ub,dim,fobj);
[IOMA_Best_score,IOMA_Best_pos,IOMA_cg_curve]=IOMA(SearchAgents_no,Max_iteration,lb,ub,dim,fobj);

figure('Position',[500 500 660 290])
% Draw search space
subplot(1,2,1);
func_plot(Function_name);
title('Parameter space')
xlabel('x_1');
ylabel('x_2');
zlabel([Function_name,'( x_1 , x_2 )'])

% Draw objective space
subplot(1,2,2);
semilogy(OMA_cg_curve,'Color','k','Linewidth',1.5)
hold on
semilogy(IOMA_cg_curve,'Color','r','Linewidth',1.5)
title('寻优过程')
xlabel('迭代次数');
ylabel('适应度值曲线');

axis tight
grid on
box on
legend('OMA','IOMA')

display(['The best solution obtained by OMA is : ', num2str(OMA_Best_pos)]);
display(['The best optimal value of the objective funciton found by OMA is : ', num2str(OMA_Best_score)]);
display(['The best solution obtained by IOMA is : ', num2str(IOMA_Best_pos)]);
display(['The best optimal value of the objective funciton found by IOMA is : ', num2str(IOMA_Best_score)]);

4. 仿真结果展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5. 资源获取说明

可以获取完整代码资源。

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

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

相关文章

MQ - 36 云原生:业界MQ的计算存储分离的设计与实现

文章目录 导图概述什么是存算分离架构必须是存算分离架构吗实现存算分离架构的技术思考如何选择合适的存储层引擎存储层:分区存储模型的设计计算层:弹性无状态的写入业界主流存算分离架构分析RocketMQ 5.0 架构分析Pulsar 存算架构分析总结导图 概述 结合云原生、Serverless…

阿里云轻量应用服务器有月流量限制吗?

阿里云轻量应用服务器限制流量吗&#xff1f;部分限制&#xff0c;2核2G3M和2核4G4M这两款轻量应用服务器不限制月流量&#xff0c;其他的轻量服务器套餐有月流量限制。 腾讯云轻量应用服务器价格便宜&#xff0c;活动页面&#xff1a;aliyunbaike.com/go/tencent 细心的同学看…

JavaWeb:上传文件

1.建普通maven项目&#xff0c;或者maven项目&#xff0c;这里以普通maven为例&#xff0c;区别的jar包的导入方式啦 到中央仓库下载哦 2.结构 3.写fileservlet public class FileServlet extends HttpServlet {Overrideprotected void doPost(HttpServletRequest req, HttpSe…

Elasticsearch:使用 ELSER 文本扩展进行语义搜索

在今天的文章里&#xff0c;我来详细地介绍如何使用 ELSER 进行文本扩展驱动的语义搜索。 安装 Elasticsearch 及 Kibana 如果你还没有安装好自己的 Elasticsearch 及 Kibana&#xff0c;请参考如下的链接来进行安装&#xff1a; 如何在 Linux&#xff0c;MacOS 及 Windows 上…

3.primitive主数据类型和引用 认识变量

3.1 声明变量 Java注重类型。它不会让你做出把长颈鹿类型变量装进兔子类型变量中这种诡异又危险的举动——如果有人对长颈鹿调用“跳跃”这个方法会发生什么样的悲剧&#xff1f;并且它也不会让你将浮点数类型变量放进整数类型的变量中&#xff0c;除非你先跟编译器确认过数字…

自动驾驶传感器技术

自动驾驶传感器技术是自动驾驶系统的关键组成部分&#xff0c;它使车辆能够感知并理解周围环境。本文将深入探讨自动驾驶传感器技术&#xff0c;包括常见类型、工作原理以及它们在自动驾驶中的作用。 1. 摄像头 摄像头的工作原理 摄像头是基于光学原理的传感器&#xff0c;其…

知识图谱1_2——下载neo4j客户端

客户端下载 这里展现一种通过客户端进行操作的方法 https://neo4j.com/download/ 下载desktop客户端 填写完成后开始下载 下载完成后&#xff0c;在命令行输入 chmod x <文件名> #给予文件权限 sudo add-apt-repository universe #安装.appimage所需的包fuse&#x…

Gooxi国鑫搭载第四代英特尔至强可扩展处理器系列服务器焕新登场

由算力驱动的数字经济渗透到了百行千业&#xff0c;在驱动传统经济转型升级和效能优化的同时&#xff0c;也大幅度增加了各行业数据处理能力的需求 。 面对千行百业加速创新应用和AIGC时代像潮水一样奔涌算力需求&#xff0c;得益于第四代英特尔至强可扩展处理器以及基于Gooxi最…

功率谱密度估计 - welch方法的实现

因本人知识欠缺&#xff0c;后续再对下述展开讲述。 clc;clear;close all; fs 44100; t 0:1/fs:1-1/fs; x randn(size(t));load("myfir64.mat"); filtercoe myfir64; y filter(filtercoe, 1, x);[Hx, w] freqz(filtercoe, 1, fs); fx w*fs/2/pi; subplot(211…

RK3568平台开发系列讲解(驱动篇)rk3568 的 pinctrl 子系统驱动

🚀返回专栏总目录 文章目录 一、pinctrl 子系统简介二、rk3568 的 pinctrl 子系统驱动2.1、PIN_BANK2.2、PIN_BANK_IDX2.3、MUX2.4、phandle沉淀、分享、成长,让自己和他人都能有所收获!😄 📢Linux 是一个庞大而完善的系统,尤其是驱动框架,像 GPIO 这种最基本的驱动不…

MySQL8 间隙锁在11种情况下的锁持有情况分析

测试环境及相关必要知识 测试环境为mysql 8 版本 间隙锁&#xff08;Gap Lock&#xff09;&#xff1a;用于锁定索引范围之间的间隙&#xff0c;防止其他事务在此间隙中插入新记录。间隙锁主要用于防止幻读问题。 在可重复读的隔离级别下默认打开该锁机制&#xff0c;解决幻…

Hadoop设置hdfs全局指令

在终端进入用户个人环境变量配置文件 vim ~/.bashrc 然后添加如下内容 export PATH$PATH:/usr/local/hadoop/bin 添加到你的hadoop下载目录的bin目录为止就可以了 重新激活一下配置文件 source ~/.bashrc hdfs有专属于自己的文件存储目录,加上特殊的指令就可以箱终端一…

windows redis 自启动 Redis服务无法启动报错1067问题

如果你的系统服务里面已经有redis服务并且无法启动&#xff0c;则使用下面的命令卸载此服务 ! 1、停止Redis服务&#xff1a; redis-server --service-uninstall 2、删除系统服务 sc delete redis 进入到你的Redis安装目录&#xff0c;我的在以下目录&#xff0c;谨记此时不…

Pikachu靶场——XSS漏洞(Cross-Site Scripting)

文章目录 1. XSS&#xff08;Cross-Site Scripting&#xff09;1.1 反射型XSS(get)1.2 反射型XSS(post)1.3 存储型XSS1.4 DOM型XSS1.5 DOM型XSS-X1.6 XSS盲打1.7 XSS之过滤1.8 XSS之htmlspecialcharss1.9 XSS之href输出1.10 XSS之JS输出1.11 XSS 漏洞防御 1. XSS&#xff08;Cr…

计算机毕设 招聘网站爬取与大数据分析可视化 - python 分析 可视化 flask

文章目录 0 前言1 课题背景2 实现效果3 Flask框架4 Echarts5 爬虫6 最后 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要求&#xff0c;这两年不断有学弟学妹告诉学长自…

SpringTask ----定时任务框架 ----苍穹外卖day10

目录 SpringTask 需求分析 快速入门 使用步骤 ​编辑业务开发 SpringTask 定时任务场景特化的框架 需求分析 快速入门 使用cron表达式来使用该框架 使用步骤 添加注解 自定义定时任务类 重点在于以下cron表达式的书写,精确表达触发的间隔 业务开发 主task方法 time使用(-…

No168.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

JUC第十七讲:JUC集合: ConcurrentLinkedQueue详解

JUC第十七讲&#xff1a;JUC集合: ConcurrentLinkedQueue详解 本文是JUC第十七讲&#xff1a;JUC集合 - ConcurrentLinkedQueue详解。ConcurerntLinkedQueue一个基于链接节点的无界线程安全队列。此队列按照 FIFO(先进先出)原则对元素进行排序。队列的头部是在队列中时间最长的…

【Java】微服务——Feign远程调用

目录 1.Feign替代RestTemplate1&#xff09;引入依赖2&#xff09;添加注解3&#xff09;编写Feign的客户端4&#xff09;测试5&#xff09;总结 2.自定义配置2.1.配置文件方式2.2.Java代码方式 3.Feign使用优化4.最佳实践4.1.继承方式4.2.抽取方式4.3.实现基于抽取的最佳实践1…

老鼠走迷宫java ---递归

题目 有一个八行七列的数组&#xff0c;红色的格子代表墙&#xff0c;白色格子代表可以走的格子&#xff1b; 假定老鼠起点在map【1】【1】&#xff0c;设计算法帮老鼠找到到达终点map【6】【5】的路线。 思路 1.findWay方法就是专门来找出迷宫的路径 2.如果找到&#xff…