一、果蝇优化算法的实现思路
果蝇优化算法(Fruit Fly Optimization Algorithm,FOA)是潘文超于2011年提出的一种群智能优化算法,它模拟自然界中的果蝇进行觅食时的方式,将食物的位置信息类比于优化问题的最优解,将果蝇的当前位置类比于随机解,通过果蝇位置的不断移动最终获得食物即最优解。果蝇算法的实现思路较为简单,主要以果蝇的捕食方式作为算法迭代训练过程中的个体位置移动方式,该方式原理如下:
捕食方式
果蝇具有较强的嗅觉,它可以通过气味向同伴聚集或食物的方向进行移动,果蝇优化算法将此移动方式类比于受到种群中最优个体的位置影响,同时由于飞行的不确定性,增加一定的随机值进行干扰,具体计算公式如下:
其中x_new表示移动后的位置,x_best表示种群个体最优位置,rand()表示0到1之间的随机值。
二、算法步骤
使用果蝇优化算法对优化问题进行求解时的具体步骤可以归纳如下:
- 以种群个体的位置信息作为待优化问题的解,根据待优化问题的解的范围,随机初始化种群所有个体的位置信息;
- 根据待优化问题,计算每个种群个体的适应度值,通过比较获得当前最优的位置信息并保存;
- 使用位置更新方式依次对种群中每个个体的位置信息进行更新;
- 针对每个个体更新后的位置信息,重新进行适应度值的计算,通过比较获得当前最优的位置信息并保存;
- 根据迭代的次数重复步骤3到步骤4,当达到最大迭代次数时停止迭代过程,输出历史最优的位置信息,该位置信息即为算法优化后获得的最优解。
三、实例
待求解问题:
Schwefels P2.22,取值范围为[-10,10],取值范围内的理想最优解为0,将其搜索的空间维度设为20。
实现源码:
import numpy as np
import matplotlib.pyplot as plt
#待求解问题,求最小值
def function(x):
y1 = 0
y2 = 1
for i in range(len(x)):
y1 = y1 + abs(x[i])
y2 = y2 * abs(x[i])
y = abs(0 - y1 - y2)
return y
sizepop = 30 #种群数量