基本果蝇优化算法的Python实现测试函数为:f(x)=3−x2
#coding=utf-8
import random
print "这是一个用果蝇优化算法进行测试函数优化的程序"
print "该测试函数的精确最优解为 3"
#随机初始果蝇体位置
x_init=10.0*random.random()
y_init=10.0*random.random()
#print(x_init,y_init)
maxgen=500 #迭代次数
sizepop=20 #种规模
x=range(sizepop+1);y=range(sizepop+1)
D=range(sizepop+1);S=range(sizepop+1)
Smell=range(sizepop+1)
yy=range(maxgen+1)
X_best=range(maxgen+1);Y_best=range(maxgen+1)
#果蝇寻优开始,利用嗅觉寻食物
for i in range(sizepop+1):
x[i]=x_init+2*random.random()-1
y[i]=y_init+2*random.random()-1
#由于无法得知食物位置,因此先估计与原点之距离(Dist)
# ,再计算味道浓度判定值(S),此值为距离之倒数
D[i]=(x[i]**2+y[i]**2)**(0.5)
S[i]=1/D[i];Smell[i]=3-S[i]**2
#出此果蝇体的中味道浓度最高的果蝇(求极大值)
bestSmell=max(Smell)
bestindex=Smell.index(bestSmell)
#保留最佳味道浓度值与x、y坐标,此时果蝇体利用视觉往该位置飞去。
x_init=x[bestindex];y_init=y[bestindex];
Smellbest=bestSmell
#果蝇迭代寻优开始
for g in range(maxgen+1):
#附与果蝇个体利用嗅觉搜寻食物之随机方向与距离
for i in range(sizepop):
x[i]=x_init+2*random.random()-1
y[i]=y_init+2*random.random()-1
#由于无法得知食物位置,因此先估计与原点之距离(Dist),
# 再计算味道浓度判定值(S),此值为距离之倒数
D[i]=(x[i]**2+y[i]**2)**(0.5)
S[i]=1/D[i]
#判定值(S)代入判定函数以求出该果蝇位置的味道浓度(Smelli)
Smell[i]=3-S[i]**2
#出此果蝇体的中味道浓度最高的果蝇(求极大值)
bestSmell=max(Smell)
bestindex=Smell.index(bestSmell)
#判断味道浓度是否优于前一迭代味道浓度,
# 若是则保留最佳味道浓度值与x、y坐标,此时果蝇体利用视觉往该位置飞去。
if bestSmell>Smellbest:
python index函数x_init=x[bestindex];y_init=y[bestindex]
Smellbest=bestSmell
#每代最优Smell值纪录到yy数组中,并记录最优迭代坐标
yy[g]=Smellbest
X_best[g]=x_init;Y_best[g]=y_init
print("")
print "经过果蝇算法优化后的最优结果:"
print Smellbest