飞蛾扑火算法Moth Flame Optimization
MFO算法2015年诞生,就是固定数量的Moth(飞蛾)在解空间内游荡(游荡路线见更新公式)寻找更合适的位置(更符合目标函数的解),而Flame(火)就是目前最优秀的解(Flame数量处于变化)。
理解粒子群PSO的同学就比较好理解这类算法,相对粒子群算法,这个算法区别在:
1、更新公式中,新Moth的解变化范围更大,让MFO比传统粒子群的开发能力更强;
2、Flame个数随迭代变化。PSO始终追逐一个最优解,而MFO最初拥有n个Flame(同时n个moths),在迭代中逐步淘汰最次Flame,最终剩1个最优秀Flame。如此,迭代之初Moths(PSO的粒子)不会迅速集中,有利于MFO的开发能力;
3、更新公式中r取值的变化也是为了加强迭代末期的探索能力。后期可以让新Moth更加接近Flame,提高了探索能力。
这个算法求解优势在不需要求导,Hessian 矩阵,可以应付更多类型的函数。
但是在单峰函数unimodal中探索能力exploration不如最速下降法,牛顿法,换言之,精度不够,可以选择非常高的迭代次数来弥补。
在多峰函数multimodal中开发能力强,善于发现全局极值global minimum,避开局部极值local minimum。
本人初学,目前认为如果使用时发现每次运行结果都差别很大(精度也不够),直接加大迭代次数就可以应付。
1、 初始n个moth&#x