利用python实现果蝇优化算法

本方法适合调整单参数

# 该方法可以运行,适用于只调一个参数的方法
import numpy as np
import matplotlib.pyplot as plt
#定义需要解的函数(名称为fun1)
def fun1(arr):
    y = 2*arr**2-1
    return y
#######果蝇算法######
##初始化果蝇参数
popsize = 30  #果蝇种群规模
maxgen = 100  #果蝇最大迭代次数
R = 1        #果蝇飞行半径
D = 1        #优化变量个数
X = np.zeros([popsize,D])
Dist = np.zeros([popsize,D])
S = np.zeros([popsize,D])
Smell = np.zeros([popsize,1])
X = np.zeros([popsize,D])
Y = np.zeros([popsize,D])
fitness = np.zeros([maxgen,1])
#赋予果蝇群体初始位置
X_axis = np.random.rand(1,D)
print(X_axis)
Y_axis = np.random.rand(1,D)
#赋予果蝇种群飞行半径
for i in range(popsize):
    X[i,:] = X_axis + R*(2*np.random.rand(1,D)-1)
    Y[i,:] = Y_axis + R*(2*np.random.rand(1,D)-1)
    #计算距离Dist
    Dist[i,:] = np.sqrt(X[i,:]**2+Y[i,:]**2)
    #计算味道浓度的倒数作为味道浓度判定值
    S[i,:] = 1/Dist[i,:]
    #带入味道浓度函数中求出味道浓度值
    Smell[i] = fun1(S[i,:])
#找出味道浓度最大值
Smellbest,index = np.min(Smell),np.argmin(Smell)
bestSmell = Smellbest
#保留最佳味道浓度处的果蝇
X_axis = X[int(index),:]
Y_axis = Y[int(index),:]
#果蝇种群进入迭代寻优
for j in range(maxgen):
    for i in range(popsize):
        X[i,:] = X_axis + R*(-20*np.random.rand(1,D)-1)
        Y[i,:] = Y_axis + R*(-20*np.random.rand(1,D)-1)
        #计算距离Dist
        Dist[i,:] = np.sqrt(X[i,:]**2+Y[i,:]**2)
        #计算味道浓度的倒数作为味道浓度判定值
        S[i,:] = 1/Dist[i,:]
        #带入味道浓度函数中求出味道浓度值
        Smell[i] = fun1(S[i,:])
    Smellbest,index = np.min(Smell),np.argmin(Smell)
    if Smellbest < bestSmell:
        bestSmell = Smellbest
        X_axis = X[int(index),:]
        Y_axis = Y[int(index),:]
    fitness[j] = bestSmell
plt.figure(1)
plt.plot(range(maxgen),fitness)
plt.show()
plt.xlabel('迭代次数')
plt.ylabel('味道浓度值')

参考链接:
https://blog.csdn.net/moshanghuali/article/details/82990127

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值