飞蛾扑火优化(Moth-Flame Optimization,MFO)算法是Mirjalili于2015年提出的一种新型智能优化算法,其灵感来源于一种特殊的导航机制—横向定位导航,实现了勘探与开发的较好平衡以获得全局优化性能。MFO算法具有并行优化能力强,全局性优且不易落入局部极值的性能特征,因此在多个领域中得到广泛的应用。在MFO算法中,将待优化变量作为飞蛾在空间中的位置,通过改变飞蛾的位置向量,在多维空间中不断迭代寻优进而得到符合要求的全局最优解。‘
一、算法理论基础
飞蛾最有趣的事实是它们在夜间的特殊导航,使用月光在夜间飞行,称为横向导航的机制。在这种方法中,飞蛾通过与月球保持固定的角度飞行,这是一种在直线上长距离飞行是非常有效的机制,如图1所示:
在城市中,存在很多人工光源,飞蛾会错认为“月光”。月亮距离地球遥远得很,飞蛾只要保持同月亮的固定角度,就可保持飞行。但灯光距离飞蛾很近,其仍使自己同光源保持相同角度,所以只能围着光源作螺旋式飞行。如图2所示:
二、飞蛾扑火算法数学模型
这里应该指出的是,飞蛾和火焰都是解决方案。它们之间的区别在于我们在每次迭代中处理和更新它们的方式。飞蛾是在搜索空间中移动的实际搜索代理,而火焰是飞蛾目前为止获得的最佳位置。换句话说,火焰可以被认为是飞蛾在搜索搜索空间时掉落的旗子或大针。因此,每只蛾子都在一面旗帜(火焰)周围搜索,并在找到更好的解决方案时更新它。有了这个机制,飞蛾永远不会失去它最好的解决方案。
MFO算法是一个三元组,近似于优化问题的全局最优,定义如下:
是产生一个随机的飞蛾种群和相应的适应度值的函数。该函数的系统模型如下:
是使飞蛾在搜索空间里移动的主函数。接受矩阵,并返回更新后的。
如果满足终止准则,函数返回真;如果不满足,则函数返回假。
MFO算法的总体框架定义如下:
函数需要生成初始解并计算目标函数值。在这个函数中可以使用任意的随机分布。默认使用以下方法:
可以看到,还有另外两个数组叫和。这些矩阵定义变量的上界和下界:
式中,表示第个变量的上界,表示第个变量的下界。
初始化之后,迭代运行函数,直到函数返回。函数是在搜索空间中移动飞蛾的主要函数。如上所述,该算法的灵感来自于横向方向。为了建立这种行为的数学模型,每只蛾子的位置都是用下面的公式更新的:
其中,为第只蛾子,为第只火焰,为螺旋函数。
本文选择对数螺旋作为飞蛾的主要更新机制。但在以下条件下,任何类型的螺旋都可以在这里使用:
-
螺旋的起始点应该从飞蛾开始。
-
螺旋的最后一点应该是火焰的位置。
-
螺旋线的波动范围不应超过搜索空间。
考虑到这些点,MFO算法的对数螺旋线被定义为: