基本果蝇优化算法的Python实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档