一种新颖的智能优化算法—飞蛾扑火优化(MFO)算法

news2024/12/24 8:57:46

       飞蛾扑火优化(Moth-Flame Optimization,MFO)算法是Mirjalili于2015年提出的一种新型智能优化算法,其灵感来源于一种特殊的导航机制—横向定位导航,实现了勘探与开发的较好平衡以获得全局优化性能。MFO算法具有并行优化能力强,全局性优且不易落入局部极值的性能特征,因此在多个领域中得到广泛的应用。在MFO算法中,将待优化变量作为飞蛾在空间中的位置,通过改变飞蛾的位置向量,在多维空间中不断迭代寻优进而得到符合要求的全局最优解。‘

一、算法理论基础 

       飞蛾最有趣的事实是它们在夜间的特殊导航,使用月光在夜间飞行,称为横向导航的机制。在这种方法中,飞蛾通过与月球保持固定的角度飞行,这是一种在直线上长距离飞行是非常有效的机制,如图1所示:

图1 飞蛾横向定位

       在城市中,存在很多人工光源,飞蛾会错认为“月光”。月亮距离地球遥远得很,飞蛾只要保持同月亮的固定角度,就可保持飞行。但灯光距离飞蛾很近,其仍使自己同光源保持相同角度,所以只能围着光源作螺旋式飞行。如图2所示:   

图2 靠近光源的螺旋飞行路径

 二、飞蛾扑火算法数学模型

 

       这里应该指出的是,飞蛾和火焰都是解决方案。它们之间的区别在于我们在每次迭代中处理和更新它们的方式。飞蛾是在搜索空间中移动的实际搜索代理,而火焰是飞蛾目前为止获得的最佳位置。换句话说,火焰可以被认为是飞蛾在搜索搜索空间时掉落的旗子或大针。因此,每只蛾子都在一面旗帜(火焰)周围搜索,并在找到更好的解决方案时更新它。有了这个机制,飞蛾永远不会失去它最好的解决方案。

        MFO算法是一个三元组,近似于优化问题的全局最优,定义如下:

MFO=(I,P,T)

        I是产生一个随机的飞蛾种群和相应的适应度值的函数。该函数的系统模型如下:

I:\phi \rightarrow \left \{ M,OM \right \}

       P是使飞蛾在搜索空间里移动的主函数。P接受矩阵,并返回更新后的M

M\rightarrow M 

       如果满足终止准则,T函数返回真;如果不满足,则T函数返回假。 

T:M\rightarrow \left \{ true,false \right \} 

       MFO算法的总体框架定义如下:

       函数I需要生成初始解并计算目标函数值。在这个函数中可以使用任意的随机分布。默认使用以下方法:

       可以看到,还有另外两个数组叫ublb。这些矩阵定义变量的上界和下界:

式中,ub_{i}表示第i个变量的上界,lb_{i}表示第i个变量的下界。

        初始化之后,迭代运行P函数,直到T函数返回trueP函数是在搜索空间中移动飞蛾的主要函数。如上所述,该算法的灵感来自于横向方向。为了建立这种行为的数学模型,每只蛾子的位置都是用下面的公式更新的:

M_{i}=S(M_{i},F_{j})

其中,M_{i}为第i只蛾子,F_{j}为第j只火焰,S为螺旋函数。 

       本文选择对数螺旋作为飞蛾的主要更新机制。但在以下条件下,任何类型的螺旋都可以在这里使用:

  1. 螺旋的起始点应该从飞蛾开始。

  2. 螺旋的最后一点应该是火焰的位置。

  3. 螺旋线的波动范围不应超过搜索空间。

考虑到这些点,MFO算法的对数螺旋线被定义为:

 

 

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

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

相关文章

VS安装中报“应用程序无法启动,因为应用程序的并行配置不正确”的解决办法

1.问题描述 安装应用程序的时候,提示“应用程序无法启动,因为应用程序的并行配置不正确”。 2.解决过程 方法一 开启服务 开始→ 运行(输入services.msc或者服务)→确定后打开服务;找到Windows Modules Installer服务…

Advanced Installer使用指南

PC打包软件有很多 我只推荐一个advanced Installer完全傻瓜式操作,直接点就行了。innoSetUp需要学习它的脚本语言,学习成本太高了,而且网上的学习资料也很少。其它东西 增加依赖 我的程序需要dotNet5.0.13的运行时环境。 但是在AI上面没有…

chatgpt赋能python:Python撤销和回退的完全指南:从基础到高级

Python撤销和回退的完全指南:从基础到高级 Python是一种强大的编程语言,但即使在最好的情况下,错误也会出现。在此时,撤销错误和回退操作会变得非常重要。本指南将介绍Python中的撤销和回退操作,从基础操作到高级操作…

SparkSQL之AstBuilder

Spark SQL是基于ANTLR实现的,前文中有关于ANTLR的介绍文章《ANTLR实战》和《设计模式之访问者模式》,这篇文章主要介绍的内容是AstBuilder类。 Catalyst中提供了直接面向用户的ParseInterface接口,该接口中包含了对SQL语句、Expression表达式…

DDD(领域驱动设计) 核心概念浅析

文章目录 DDD(领域驱动设计) 核心概念浅析前言贫血模型什么是贫血模型贫血模型的优点贫血模型的缺点 充血模型充血模型的优点充血模型的缺点 DP 概念抽象接口简单概念简单概念流程:实现 统一语言和模型价值DP 和 Entity 的区别 Aggregate(聚合&#xff0…

HackTheBox - 学院【CPTS】复习1 - PASSWORD ATTACKS

前言 有一个月时间没发文章了,我在6月11号进入htb学院学习CPTS,在扎实的THM基础的加持下,我学的非常顺利,其实大部分内容都相当于复习,而学到的内容只是一些可能不太常见、又或者非常细节的小技巧,这也是非…

vscode 出现 No such file or directory 的解决办法(python tkinter)

问题 Traceback (most recent call last): File “e:\Github\Python-GUI\PyQt-Fluent-Widgets\examples\navigation\demo.py”, line 202, in w Window() File “e:\Github\Python-GUI\PyQt-Fluent-Widgets\examples\navigation\demo.py”, line 95, in init self.initWindo…

ThreadPoolExecutor源码剖析

ThreadPoolExecutor源码涉及到的内容比较多,需要一点点的去啃和查看… ThreadPoolExecutor的核心属性 ThreadPoolExecutor的核心属性主要就是CTL。基于CTL获取到线程池的状态以及工作线程个数。 ctl是一个int类型的整数,內部基于AtomicInteger&#xff0…

再谈StringBuilder为什么线程不安全以及带来的问题

1 缘起 比较有意思的是,学习锁消除的过程中,有人讲到StringBuffer在方法内构建,不会被其他方法引用时,StringBuffer的锁会被消除, 于是,顺便看了一下同源的StringBuidler为什么线程不安全,以及…

【无标题】TP-LINK XDR5470 WiFi6路由器 简单开箱评测

TL-XDR5470易展版AX5400双频WiFi6路由器 简单开箱测评,上次买的XDR6078覆盖不够,还是得每层再买一个,所以又买了个TL-XDR5470,支持易展mesh。 上次买的XDR6078没有外置FEM功放芯片,所以信号差了一点,得加2…

PE系统盘制作

目录 前言 制作PE盘的步骤如下 前言 PE盘是一个轻量级的系统,类似于Windows系统。当您的计算机无法进入Windows系统时,您可以通过启动PE盘来访问一个独立的操作系统,从而执行各种任务,例如拷贝重要文件或进行系统安装。PE盘通常…

win10查看端口是否被占用,被哪一个程序占用(图文)

window系统中有时候我们会出现需要的端口号被占用,但不知道具体是哪个程序占用的。这时我们需要找到使用此端口的程序。 方法如下: 1)以管理员身份打开命令提示符窗口(开始-运行)。 2)使用命令查看端口使…

R730直通Tesla P40显卡

本次讲述如何在R730的ESXi上,将Tesla P40直通到centos7.7和WinServer2016。使用直通模式,安装普通的驱动即可,不需要vGPU的驱动。 按计划本来后面要自己装一下系统、做RAID的,不过最近需要用到显卡,所以先把显卡安装上…

初探Flink的Java实现流处理和批处理

端午假期,夏日炎炎,温度连续40度以上,在家学习Flink相关知识,记录下来,方便备查。 开发工具:IntelliJ Idea Flink版本:1.13.0 本次主要用Flink实现批处理(DataSet API) 和…

SAM与Prompt的结合

1. SAM介绍 由Meta AI Research开发的Segment anything model(简称SAM)最近引起了广泛的关注。SAM在超过10亿个mask的大型分割数据集上进行了训练,能够在特定的图像上分割任何对象。在最初的SAM工作中,作者们使用了零样本迁移任务…

08- c语言字符串 (C语言)

一 字符串的定义及基本使用 1、什么是字符串 被双引号引用的字符集合!例如:”hello” 、”world”,或者是以 \0 结尾的字符数组!!! 比如:char ch[] {h, e, \0} 注意:”hello” 中…

GB50149-2010电气装置安装工程母线装置施工及验收规范

为了确保强硬钢丝绳金属封闭体绝缘金属封闭母线、绝缘子、硬件、穿墙套管等设备母线的安装质量,加快安装技术的进步,和确保设备的安全运行,使该规范。 本规范适用于总线设备安装了750 kv及以下的T范围施工和验收。 母线的安装应按照批准的设计文件施工。 设备和设备运输、储…

python:并发编程(二十五)

前言 本文将和大家一起探讨python并发编程的实际项目:win图形界面应用(篇七,共八篇),系列文章将会从零开始构建项目,并逐渐完善项目,最终将项目打造成适用于高并发场景的应用。 本文为python并…

postman 文档、导出json脚本 导出响应数据 response ,showdoc导入postman json脚本 导出为文档word或markdown

生成文档 Collections中 选中文件夹 - ... (文件夹 功能小按钮) - view documentation : 保存响应数据 Response:(如果导出接口数据,会同步导出响应数据) 请求接口后,点击下方 Save as Example 可以保存响应数…

机器学习day20(前向传播的向量化代码,矩阵乘法)

前向传播的循环代码与向量化代码的对比 把X、B写作二维数组,即矩阵左边的for循环就可以用右边的np.matmul来实现matmul是numpy执行矩阵乘法的一种方式注意:此时所有的变量(X、W、B、Z、A_out)都是二维数组,即矩阵 向…