前言
FOA算法 为 优化算法 ,求 最优解 的问题 ,最大值 最小值 问题
FOA - python代码
import numpy as np
import matplotlib.pyplot as plt
############## 果蝇 优化 算法 ; 寻找 最值 问题
class FOA():
def __init__(self,popsize,maxgen,R,D):
self.popsize = popsize # 果蝇种群规模
self.maxgen = maxgen #果蝇最大迭代次数
self.R = R # 果蝇飞行半径
self.D = D # 优化变量个数
# 初始化 创建
self.X = np.zeros([self.popsize,self.D])
self.Dist = np.zeros([self.popsize,self.D])
self.S = np.zeros([self.popsize,self.D])
self.Smell = np.zeros([self.popsize,1])
self.Y = np.zeros([self.popsize,D])
self.fitness = np.zeros([maxgen,1])
# 赋予 果蝇 初始 位置
self.X_axis = np.random.rand(1,D)
self.Y_axis = np.random.rand(1, D)
def fun1(self,x1,x2): # 定义 目标 函数
y = x1 ** 2 + x2 ** 2
return y
def init_R(self):
for i in range(self.popsize):
self.X[i, :] = self.X_axis + self.R * (2 * np.random.rand(1, self.D) - 1)
self.Y[i, :] = self.Y_axis + self.R * (2 * np.random.rand(1, self.D) - 1)
# 计算距离Dist
self.Dist[i, :] = np.sqrt(self.X[i, :] ** 2 + self.Y[i, :] ** 2)
# 计算味道浓度的倒数作为味道浓度判定值
self.S[i, :] = 1 / self.Dist[i, :]
# break
# 带入味道浓度函数中求出味道浓度值
self.Smell[i] = self.fun1(self.S[i, 0],self.S[i,1])
def main(self):
self.init_R()
# 找出味道浓度最大值
Smellbest, index = np.min(self.Smell), np.argmin(self.Smell)
bestSmell = Smellbest
# 保留最佳味道浓度处的果蝇
X_axis = self.X[int(index), :]
Y_axis = self.Y[int(index), :]
# 果蝇种群进入迭代寻优
for j in range(self.maxgen):
for i in range(self.popsize):
self.X[i, :] = X_axis + self.R * (2 * np.random.rand(1, self.D) - 1)
self.Y[i, :] = Y_axis + self.R * (2 * np.random.rand(1, self.D) - 1)
# 计算距离Dist
self.Dist[i, :] = np.sqrt(self.X[i, :] ** 2 + self.Y[i, :] ** 2)
# 计算味道浓度的倒数作为味道浓度判定值
self.S[i, :] = 1 / self.Dist[i, :]
# 带入味道浓度函数中求出味道浓度值
self.Smell[i] = self.fun1(self.S[i, 0], self.S[i, 1])
Smellbest, index = np.min(self.Smell), np.argmin(self.Smell)
if Smellbest < bestSmell:
bestSmell = Smellbest
self.X_axis = self.X[int(index), :]
self.Y_axis = self.Y[int(index), :]
S_min = self.S[int(index), :]
self.fitness[j] = bestSmell
#绘图
plt.figure(1)
plt.plot(range(self.maxgen), self.fitness)
plt.xlabel('diedai-cishu')
plt.ylabel('nongdu')
plt.show()
a = FOA(40,100,1,2)
a.main()
总结
不是很理解 各个初始化的 矩阵 的 作用 和意思,欢迎来传授传授 ,讲解讲解。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)