算法研究和学习-果蝇算法FOA

算法研究和学习-果蝇算法FOA,第1张

算法研究和学习-果蝇算法FOA
前言

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()

总结
不是很理解  各个初始化的 矩阵 的 作用 和意思,欢迎来传授传授 ,讲解讲解。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/799509.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-06
下一篇 2022-05-06

发表评论

登录后才能评论

评论列表(0条)

保存