【免费】【智能优化算法】飞蛾扑火优化算法(MFO)

文摘   2024-06-23 21:46   河北  

1主要内容

飞蛾扑火优化算法(Moth-Flame Optimization,MFO)是澳大利亚学者Seyedali Mirjalili于2015年提出的一种受自然生物启发的智能优化算法,该算法的主要灵感来自于飞蛾被称为“横定向”的导航方法。飞蛾在夜间飞行时相对于月亮保持一个固定的角度,这是一种非常有效的远距离直线飞行机制,但是在人造光周围,飞蛾却容易陷入致命的螺旋路径。作者就是模拟了飞蛾的这种特点。(下载链接包括程序文件和原文

  • 原理解析

假设候选解是飞蛾,问题的变量是飞蛾在空间中的位置。因此,飞蛾可以通过改变位置向量在一维、二维、三维或多维空间中飞行。由于MFO算法是一种基于种群的算法,因此飞蛾的集合用如下矩阵表示:

上式中,n是飞蛾的个数,d是变量数量,也叫变量维度。

对于所有的飞蛾,假设存在一个数组用于存储对应的适应度值:

在MFO算法中,另外一个关键因数是火焰,同样存在集合矩阵和适应度矩阵如下:

这里很多同学肯定会产生疑问,两个因素——飞蛾和火焰的作用是什么?其实飞蛾和火焰都是问题的解,它们之间的区别在于每次更新的方式,飞蛾是在搜索空间中移动的真实的搜索代理,而火焰是飞蛾目前的最优位置。换言之,火焰可以认为是飞蛾打下的标签,因此每只飞蛾围绕火焰搜索,并在找到一个更优解时进行更新。

在飞蛾扑火算法中,可采用如下的三元组来表示:

式中,I用于随机生成飞蛾种群及其对应的适应度值,P是主函数,用来搜索空间内移动飞蛾,T是返回终止条件函数,用于判断优化是否满足要求。

  • 亮点内容

1.对数螺旋更新机制

在满足如下三个条件时:

  • 螺旋的起始点应始于飞蛾。

  • 螺旋的最终点应该就是火焰的位置。

  • 螺旋范围波动不应超过搜索空间。

对数螺旋定义可为以下形式:

对数螺旋路径示意图

2.火焰数自适应机制

飞蛾相对于搜索空间中n个不同位置的位置更新可能会降低对最佳有前途的解决方案的开发。为了解决这个问题,我们提出了一种针对火焰数量的自适应机制。图6显示了火焰的数量是如何在迭代过程中自适应地减少的。

显而易见,如果一直以n个不同位置的火焰进行搜索,会降低优化效率,因此,该算法提出火焰数量自适应机制,用于更快速、敏捷找到最优解。

其中,l 为当前迭代次数,N为最大火焰数,T 为最大迭代次数。

火焰数自适应减少示意图

2部分代码

% To run MFO: [Best_score,Best_pos,cg_curve]=MFO(SearchAgents_no,Max_iteration,lb,ub,dim,fobj)%______________________________________________________________________________________________
clear all clc
SearchAgents_no=30; % Number of search agents
Function_name='F1'; % Name of the test function that can be from F1 to F23 (Table 1,2,3 in the paper)
Max_iteration=1000; % Maximum numbef of iterations
% Load details of the selected benchmark function[lb,ub,dim,fobj]=Get_Functions_details(Function_name);
[Best_score,Best_pos,cg_curve]=MFO(SearchAgents_no,Max_iteration,lb,ub,dim,fobj);
figure('Position',[284 214 660 290])%Draw search spacesubplot(1,2,1);func_plot(Function_name);title('Test function')xlabel('x_1');ylabel('x_2');zlabel([Function_name,'( x_1 , x_2 )'])grid off
%Draw objective spacesubplot(1,2,2);semilogy(cg_curve,'Color','b')title('Convergence curve')xlabel('Iteration');ylabel('Best flame (score) obtained so far');
axis tightgrid offbox onlegend('MFO')
display(['The best solution obtained by MFO is : ', num2str(Best_pos)]);display(['The best optimal value of the objective funciton found by MFO is : ', num2str(Best_score)]);

3程序结果

4下载链接

扫码阅读原文即可跳转程序页面:

想了解更多程序?按照下面教程查看程序目录


电力程序
打造电力专业最新原创程序集散地,免费分享基础编程资料,在这里,带着希望而来,带着知识而归~
 最新文章