基本果蝇优化算法的Python实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基本果蝇优化算法的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:
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