智能优化算法:果蝇优化算法-附代码

智能优化算法:果蝇优化算法


摘要:Pan 于 2011 年受果蝇觅食行为启发,提出了果蝇优化算法 (FOA)。虽然其出现时间不长,但因其具有清晰的生物机制、可塑性强、易编程、较快的搜索速度等优点,所以已经越来越受到人们的重视。

1.算法原理

果蝇优化算法(FOA)是基于群体的演化算法,其基本思想来源于果蝇觅食行为。果蝇在嗅觉和视觉能力上优于其他物种。果蝇首先通过嗅觉搜索食物(可达 40 km 远),当离食物较近时,通过敏锐的视觉继续进行搜索,并最终找到食物源。图 1 为果蝇觅食过程。

智能优化算法:果蝇优化算法-附代码

图1. 果蝇觅食过程

根据果蝇群体觅食行为特点,可将标准果蝇优化算法分为以下几个步骤。

(1) 初始化果蝇群体位置:
{intX_axisintY_axis(1) \begin{cases} int\,X\_{axis}\\ int\,Y\_{axis}\end{cases}\tag{1}
(2) 给出果蝇个体利用嗅觉搜寻食物的随机方向与距离:
{Xi=X_axis+RandomValueYi=Y_axis+RandomValue(2) \begin{cases} X_i = X\_{axis} + RandomValue\\ Y_i = Y\_{axis}+RandomValue\end{cases}\tag{2}
(3) 由于开始无法获知食物的具体位置,所以先计算果蝇个体与原点之间的距离 DistiDist_i ,再计算味道浓度判定值 SiS_i :
Disti=Xi2+Yi2(3) Dist_i=\sqrt{X_i^2+Y_i^2}\tag{3}

Si=1/Disti(4) S_i=1/Dist_i \tag{4}

(4) 味道浓度判定值(SiS_i )代入味道浓度判定函数(或称为 Fitness function)以求出该果蝇个体位置的味道浓度SmelliSmell_i :
Smelli=Fitness(Si)(5) Smell_i=Fitness(S_i)\tag{5}
(5) 找出此果蝇群体中味道浓度最高的果蝇(求极大值):
[bestSmell,bestIndex]=min(Smell)(6) [bestSmell,bestIndex]=min(Smell)\tag{6}
(6) 保留最佳味道浓度值与 xx、$y4 坐标,此时果蝇群体利用视觉往该位置飞去:
SmellBest=bestSmell(7) SmellBest = bestSmell \tag{7}

{X_axis=X(bestIndex)Y_axis=Y(bestIndex)(8) \begin{cases} X\_{axis} = X(bestIndex)\\ Y\_{axis}=Y(bestIndex)\end{cases}\tag{8}

(7) 进入迭代寻优,重复执行步骤(2) ~ 步骤(5),并判断味道浓度是否优于前一迭代味道浓度,若是则执行步骤(6)。

2.算法结果

智能优化算法:果蝇优化算法-附代码

4.参考文献

[1]李少波,赵辉,张成龙,郑凯.果蝇优化算法研究综述[J].科学技术与工程,2018,18(01):163-171.

5.Matlab代码

https://mianbaoduo.com/o/bread/aJWcm58=