深入解析:Python实现蝗虫优化算法(Grasshopper Optimization Algorithm, GOA)(附完整代码)

news/2025/9/27 8:49:27/文章来源:https://www.cnblogs.com/wzzkaifa/p/19114728

Python实现蝗虫优化算法(Grasshopper Optimization Algorithm, GOA)(附完整代码)

1.蝗虫优化算法介绍

蝗虫优化算法(Grasshopper Optimization Algorithm, GOA)是一种受自然界蝗虫群行为启发的新型群体智能优化算法,由Shahrzad等人于2017年提出。该算法模拟了蝗虫幼虫和成虫在觅食过程中表现出的独特群体运动模式:幼虫阶段表现为缓慢的局部移动(局部搜索),而成虫阶段则进行长距离、快速的迁徙(全局探索)。GOA的核心思想正是通过数学模型来平衡这两种行为,从而高效地寻找麻烦优化问题的最优解。

GOA的数学模型主要包含三个关键组成部分,它们共同决定了蝗虫个体在搜索空间中的位置更新:

  1. 社会相互作用(S_i):这是算法的核心驱动力,代表了蝗虫个体之间存在的引力和斥力。当两只蝗虫距离较远时,它们相互吸引以形成群体;当距离过近时,则相互排斥以避免碰撞。这种力依据一个特定的函数实现,能够自然地平衡探索与开发。

  2. 重力(G_i):该分量模拟重力对蝗虫飞行方向的影响,使个体有向地面(即当前找到的较优解区域)靠近的趋势,有助于算法的收敛。

  3. 风 advection(W_i):该分量代表风对蝗虫群运动方向的影响,在算法中通常被引导朝向当前全局最优解的方向,进一步强化了开发能力。

蝗虫的位置更新公式为:X_i = S_i + G_i + W_i。其中,一个关键的设计是引入了一个自适应递减的参数 c。参数 c 在迭代过程中从最大值减小到接近零,其作用类似于优化算法中的惯性权重或温度参数。在迭代初期,c 值较大,社会相互作用力占主导,鼓励蝗虫个体进行大范围的随机探索,避免早熟收敛。随着迭代的进行,c 值逐渐减小,重力和风的影响力相对增强,算法逐渐从全局探索转向在最优解附近的精细开发,最终稳定收敛。

GOA的优势在于其原理方便、参数少、易于实现,并且凭借其内在的自适应机制,在探索和开发之间取得了良好的平衡。它已被成功应用于多个领域,如工程设计、机器学习参数调优、电力系统调度和图像处理等,展现出强大的全局搜索能力和不错的收敛性能。然而,GOA也存在一些改进空间,例如在处理高维复杂问题时可能收敛速度较慢,因此后续也出现了许多与混沌映射、莱维飞行等机制结合的改进版本,以进一步提升其性能。

2.Python代码

import numpy as np
import matplotlib.pyplot as plt
import math  # 导入 math 库用于 gamma 函数
# 设置中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']  # 指定中文字体
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题
# 目标函数:y = sum((x - 0.5)²)
def objective_function(x):
"""计算目标函数值"""
return np.sum((x - 0.5) ** 2)
def goa_optimize(objective_func, dim, bounds, population_size, max_iter):
"""
蝗虫优化算法实现
"""
lower_bound = np.array([bounds[i][0] for i in range(dim)])
upper_bound = np.array([bounds[i][1] for i in range(dim)])
# 初始化种群
population = np.zeros((population_size, dim))
for i in range(dim):
population[:, i] = np.random.uniform(lower_bound[i], upper_bound[i], population_size)
# 计算初始适应度
fitness = np.array([objective_func(ind) for ind in population])
# 找到初始最优解
best_index = np.argmin(fitness)
best_solution = population[best_index].copy()
best_fitness = fitness[best_index]
# 收敛曲线
convergence_curve = np.zeros(max_iter)
# 主循环
for t in range(max_iter):
c_max = 1.0
c_min = 0.00004
c = c_max - t * ((c_max - c_min) / max_iter)
for i in range(population_size):
S_i = np.zeros(dim)
for j in range(population_size):
if i != j:
distance = np.linalg.norm(population[i] - population[j])
r_ij_vector = (population[j] - population[i]) / (distance + 1e-15)
s = ((upper_bound - lower_bound) / 2) * Levy(dim)
S_i += s * (func(distance) * r_ij_vector)
population[i] = c * (S_i + best_solution)
# 边界处理
for k in range(dim):
if population[i, k]  upper_bound[k]:
population[i, k] = upper_bound[k]
# 更新适应度
fitness = np.array([objective_func(ind) for ind in population])
# 更新最优解
current_best_index = np.argmin(fitness)
if fitness[current_best_index] < best_fitness:
best_solution = population[current_best_index].copy()
best_fitness = fitness[current_best_index]
convergence_curve[t] = best_fitness
if (t + 1) % 10 == 0:
print(f"迭代次数: {t + 1}, 最优适应度: {best_fitness:.6f}")
return best_solution, best_fitness, convergence_curve
def func(r):
"""社会力函数"""
f = 0.5
l = 1.5
return f * np.exp(-r / l) - np.exp(-r)
def Levy(dim):
"""生成Levy飞行步长"""
beta = 1.5
# 使用 math.gamma 替代 np.gamma
sigma = (math.gamma(1 + beta) * np.sin(np.pi * beta / 2) /
(math.gamma((1 + beta) / 2) * beta * 2 ** ((beta - 1) / 2))) ** (1 / beta)
u = np.random.randn(dim) * sigma
v = np.random.randn(dim)
step = u / np.abs(v) ** (1 / beta)
return step
# 参数设置
dim = 10
bounds = [(-10, 10)] * dim
population_size = 30
max_iter = 100
# 运行GOA
best_solution, best_fitness, convergence_curve = goa_optimize(
objective_function, dim, bounds, population_size, max_iter
)
# 显示结果
print("\n优化结果:")
print(f"最优解: {best_solution}")
print(f"最优适应度值: {best_fitness:.6f}")
# 绘制收敛曲线
plt.figure(figsize=(10, 6))
plt.plot(range(1, max_iter + 1), convergence_curve)
plt.title("蝗虫优化算法收敛曲线")
plt.xlabel("迭代次数")
plt.ylabel("最优适应度值")
plt.grid(True)
plt.show()

3.软件结果

迭代次数: 10, 最优适应度: 21.347098
迭代次数: 20, 最优适应度: 1.976937
迭代次数: 30, 最优适应度: 1.105284
迭代次数: 40, 最优适应度: 1.105284
迭代次数: 50, 最优适应度: 1.105284
迭代次数: 60, 最优适应度: 1.105284
迭代次数: 70, 最优适应度: 0.923286
迭代次数: 80, 最优适应度: 0.923286
迭代次数: 90, 最优适应度: 0.923286
迭代次数: 100, 最优适应度: 0.923286

优化结果:
最优解: [0.31851986 0.35262297 0.17494314 0.21658502 0.20297013 0.33677132
0.00786101 0.27145812 0.20565883 0.06790509]
最优适应度值: 0.923286

4.代码、工具订制(MATLAB、Python) →QQ:1579325979

4.1 各类智能算法

中文名称

英文全称

缩写

出现年份

遗传算法

Genetic Algorithm

GA

1975

粒子群优化算法

Particle Swarm Optimization

PSO

1995

蚁群优化算法

Ant Colony Optimization

ACO

1992

模拟退火算法

Simulated Annealing

SA

1983

免疫优化算法

Immune Optimization Algorithm

IA

1986

贪婪算法

Greedy Algorithm

-

1970

差分进化算法

Differential Evolution

DE

1997

混合蛙跳算法

Shuffled Frog Leaping Algorithm

SFLA

2003

人工蜂群算法

Artificial Bee Colony

ABC

2005

人工鱼群算法

Artificial Fish Swarm Algorithm

AFSA

2002

萤火虫算法

Glowworm Swarm Optimization

GSO

2005

果蝇优化算法

Fruit Fly Optimization Algorithm

FOA

2011

布谷鸟搜索算法

Cuckoo Search

CS

2009

猴群算法

Monkey Algorithm

MA

2008

免疫网络算法

Immune Network Algorithm

aiNet

2000

水滴算法

Intelligent Water Drops Algorithm

IWD

2007

和声搜索算法

Harmony Search

HS

2001

克隆选择算法

Clonal Selection Algorithm

CLONALG

2000

禁忌搜索算法

Tabu Search

TS

1986

爬山算法

Hill Climbing

HC

1940

引力搜索算法

Gravitational Search Algorithm

GSA

2009

细菌觅食优化算法

Bacterial Foraging Optimization

BFO

2002

蝙蝠算法

Bat Algorithm

BA

2010

邻域搜索算法

Neighborhood Search

NS

1960

变邻域搜索算法

Variable Neighborhood Search

VNS

1997

蜜蜂交配优化算法

Honey Bees Mating Optimization

HBMO

2001

文化基因算法

Memetic Algorithm

MA

1989

烟花算法

Fireworks Algorithm

FWA

2010

思维进化算法

Mind Evolutionary Algorithm

MEA

1998

蜻蜓算法

Dragonfly Algorithm

DA

2016

虚拟力场算法

Virtual Force Field Algorithm

VFF

1989

遗传规划

Genetic Programming

GP

1992

鲸鱼优化算法

Whale Optimization Algorithm

WOA

2016

灰狼优化算法

Grey Wolf Optimizer

GWO

2014

狼群算法

Wolf Pack Algorithm

WPA

2007

鸡群优化算法

Chicken Swarm Optimization

CSO

2014

生物地理学优化算法

Biogeography-Based Optimization

BBO

2008

分布估计算法

Estimation of Distribution Algorithm

EDA

1996

帝国竞争算法

Imperialist Competitive Algorithm

ICA

2007

天牛须搜索算法

Beetle Antennae Search Algorithm

BAS

2017

头脑风暴优化算法

Brain Storm Optimization

BSO

2011

人工势场法

Artificial Potential Field

APF

1986

猫群算法

Cat Swarm Optimization

CSO

2006

蚁狮优化算法

Ant Lion Optimizer

ALO

2015

飞蛾火焰优化算法

Moth-Flame Optimization

MFO

2015

蘑菇繁殖优化算法

Mushroom Reproduction Optimization

MRO

2020

麻雀搜索算法

Sparrow Search Algorithm

SSA

2020

水波优化算法

Water Wave Optimization

WWO

2015

斑鬣狗优化算法

Spotted Hyena Optimizer

SHO

2017

雪融优化算法

Snow Ablation Optimization

SAO

2022

蝴蝶优化算法

Butterfly Optimization Algorithm

BOA

2019

磷虾群算法

Krill Herd Algorithm

KHA

2012

黏菌算法

Slime Mould Algorithm

SMA

2020

人类学习优化算法

Human Learning Optimization

HLO

2014

母亲优化算法

Mother Optimization Algorithm

MOA

2023

4.2各类优化问题

各种优化课题

各种优化课题

车间调度

路由路网优化

机场调度

顺序约束工程调度

工程项目调度

双层规划

港口调度

零件拆卸装配问题优化

生产线平衡问题

水资源调度

用电调度

库位优化

公交车发车调度

库位路线优化

车辆路径物流配送优化

武器分配优化

选址配送优化

覆盖问题优化

物流公铁水问题优化

管网问题优化

供应链、生产计划、库存优化

PID优化

库位优化、货位优化

VMD优化

4.3各类神经网络、深度学习、机器学习

序号

模型名称

核心特点

适用场景

1

BiLSTM 双向长短时记忆神经网络分类

双向捕捉序列上下文信息

自然语言处理、语音识别

2

BP 神经网络分类

误差反向传播训练

通用分类任务

3

CNN 卷积神经网络分类

自动提取空间特征

图像、视频分类

4

DBN 深度置信网络分类

多层受限玻尔兹曼机堆叠

特征学习、降维

5

DELM 深度学习极限学习机分类

结合 ELM 与深度架构

艰难分类任务

6

ELMAN 递归神经网络分类

含反馈连接的递归结构

时间序列、语音

7

ELM 极限学习机分类

随机生成隐藏层,快速训练

小样本学习

8

GRNN 广义回归神经网络分类

基于径向基函数回归

函数逼近、时间序列

9

GRU 门控循环单元分类

门控机制简化 LSTM

序列建模

10

KELM 混合核极限学习机分类

结合多核 ELM

高维复杂信息

11

KNN 分类

基于距离的分类方法

模式识别

12

LSSVM 最小二乘法支撑向量机分类

最小二乘优化 SVM

小样本分类

13

LSTM 长短时记忆网络分类

门控机制处理长期依赖

语言建模

14

MLP 全连接神经网络分类

多层感知机

通用分类

15

PNN 概率神经网络分类

基于贝叶斯原理

模式识别

16

RELM 鲁棒极限学习机分类

增强鲁棒性的 ELM

噪声数据

17

RF 随机森林分类

多棵决策树集成

高维、非线性数据

18

SCN 随机配置网络模型分类

随机生成网络结构

快速训练

19

SVM 支持向量机分类

寻找最优分类超平面

二分类、多分类

20

XGBOOST 分类

梯度提升决策树

大规模结构化数据

21

ANFIS 自适应模糊神经网络预测

融合模糊逻辑与神经网络

复杂非线性系统建模

22

ANN 人工神经网络预测

多层神经元网络

通用预测任务

23

ARMA 自回归滑动平均模型预测

线性时间序列建模

时间序列预测

24

BF 粒子滤波预测

基于蒙特卡洛采样

动态框架状态估计

25

BiLSTM 双向长短时记忆神经网络预测

双向捕捉序列信息

时间序列、文本预测

26

BLS 宽度学习神经网络预测

增量学习结构

在线学习

27

BP 神经网络预测

误差反向传播训练

通用预测

28

CNN 卷积神经网络预测

自动特征提取

图像、视频预测

29

DBN 深度置信网络预测

多层无监督预训练

特征学习预测

30

DELM 深度学习极限学习机预测

结合 ELM 与深度结构

复杂预测任务

31

DKELM 回归预测

动态核 ELM 回归

时间序列回归

32

ELMAN 递归神经网络预测

递归结构处理时序

时间序列

33

ELM 极限学习机预测

快速训练

小样本回归

34

ESN 回声状态网络预测

储备池计算

时间序列预测

35

FNN 前馈神经网络预测

前向传播

通用预测

36

GMDN 预测

基因表达数据网络建模

生物信息学预测

37

GMM 高斯混合模型预测

多高斯分布建模

密度估计、聚类

38

GRNN 广义回归神经网络预测

径向基函数回归

函数逼近

39

GRU 门控循环单元预测

门控机制简化 LSTM

时间序列预测

40

KELM 混合核极限学习机预测

多核 ELM 回归

高维回归

41

LMS 最小均方算法预测

线性回归的迭代优化

自适应滤波

42

LSSVM 最小二乘法支持向量机预测

最小二乘优化 SVM

回归预测

43

LSTM 长短时记忆网络预测

门控处理长期依赖

时间序列预测

44

RBF 径向基函数神经网络预测

径向基函数逼近

函数拟合

45

RELM 鲁棒极限学习机预测

增强鲁棒性的 ELM

噪声信息回归

46

RF 随机森林预测

决策树集成

回归预测

47

RNN 循环神经网络预测

循环连接处理序列

时间序列预测

48

RVM 相关向量机预测

稀疏贝叶斯学习

回归、分类

49

SVM 承受向量机预测

寻找最优超平面

回归预测

50

TCN 时间卷积神经网络预测

一维卷积处理时序

时间序列预测

51

XGBoost 回归预测

梯度提升决策树

大规模回归

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/919263.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

提升网站转化率西海岸新区城市建设局公示网站

1、Stream 概述 Java 8 引入了 Stream API,它是一种用于简化集合和数组操作的强大工具。Stream API 允许我们将集合或数组视为流,并在流上进行各种操作,如筛选、排序、聚合等。 Stream API 的核心概念是 Stream 流,它代表了一个数据流,其中包含了一系列的元素。这些元素…

知名网站定制报价网页前端设计包括哪些内容

一、计算机简介&#xff1a; 1、计算机系统组成&#xff1a;软件和硬件&#xff0c;二者紧密相关&#xff0c;缺一不可 1.1硬件&#xff1a;计算机系统的物质基础&#xff0c;软件的载体 1.1.1硬件系统&#xff1a;主机&#xff08;中央处理器(CPU&#xff0c;一般CPU由计算器和…

哪个网站可以做设计赚钱汽车门户网站开发

前言 最近发现有挺多人喜欢径向基函数(Radial Basis Function,RBF)神经网络&#xff0c;其实它就是将RBF作为神经网络层间的一种连接方式而已。这里做一个简单的描述和找了个代码解读。 之前也写过一篇&#xff0c;不过排版不好看&#xff0c;可以戳这里跳转 国际惯例&#x…

在Java 12环境中配置和部署Apache Tomcat

在Linux系统中,远程服务器的文件夹可以通过多种协议进行挂载,如NFS、SSHFS、CIFS等。要使这个过程像一场有趣的旅行一样,我们会“打包”(准备必要的工具),“规划路线”(确定连接的细节),然后“出发”(执行挂…

android pdf框架-14,mupdf重排 - 详解

android pdf框架-14,mupdf重排 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mona…

深入解析:UE5GAS GameAbility源码解析 CommitAbility

深入解析:UE5GAS GameAbility源码解析 CommitAbility2025-09-27 08:43 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; di…

详细介绍:基于物联网的智能衣柜系统的设计(论文+源码)

详细介绍:基于物联网的智能衣柜系统的设计(论文+源码)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas…

电子商务平台 网站 建设方式博达网站建设怎么建立下载

成员函数和成员变量是分开存储的 1. 非静态成员变量&#xff0c;属于类的一部分&#xff0c;sizeof(类名)的时候会包括进去 2. 静态成员变量&#xff0c;不属于类的一部分&#xff0c;不会影响类的大小 3. 成员函数&#xff0c;都不属于类的一部分 4. 空类大小为1B

上海做网站好的公司有哪些安卓优化大师旧版本

Acrobat Pro DC 2023是一款功能强大的PDF编辑和管理软件&#xff0c;它可以帮助用户在创建、编辑、转换和共享PDF文档方面达到前所未有的高度。这款软件提供了丰富的编辑功能&#xff0c;使用户能够轻松添加注释、高亮、下划线、插入文本等&#xff0c;自由地编辑PDF文档。除了…

确定Ceph集群中OSD组件与具体物理磁盘的关联

在Ceph分布式存储系统中,Object Storage Daemons(OSDs)是主要的存储守护进程,负责存储数据、数据复制、恢复、再平衡以及提供信息给集群的监控模块以便于其他组件的决策。为了维护数据的完整性和高可用性,Ceph自动…

深入解析:Jenkins+Tomcat持续集成教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

JavaScript加解密实践

加密算法设计 首先,我们选用对称加密,其中加密和解密使用同一把密钥。考虑到执行效率和实现复杂度,本例使用修改版的凯撒密码作为基础。凯撒密码是最简单的替换密码类型之一,通过将字母表中的每个字母移动固定数目…

维护一个网站难吗制作视频的网站软件

即时编译&#xff08;Just-In-Time Compilation&#xff0c;JIT&#xff09;是一种将程序在运行时动态地编译成机器代码的编译技术。相对于传统的静态编译&#xff0c;即时编译将编译过程延迟到程序执行的时候进行&#xff0c;而不是在程序执行之前。这种方法允许编译器根据程序…

手表网站建设策划新乡网站建设求职简历

直方图 何为直方图&#xff1f;没那么高大上&#xff0c;其实就是二维统计图。每个照片都是有像素点所组成&#xff0c;当然也是[0,255]&#xff0c;直方图就是统计每个值所对应的像素点有几个。 直方图横坐标表示0-255这些像素点值&#xff1b;纵坐标表示对应像素点值的个数有…

重庆定制网站建设地址深圳松岗最新消息今天

https://vijos.org/p/1629 描述 八是个很有趣的数字啊。八发&#xff0c;八八爸爸&#xff0c;88拜拜。当然最有趣的还是8用二进制表示是1000。怎么样&#xff0c;有趣吧。当然题目和这些都没有关系。 某个人很无聊&#xff0c;他想找出[a,b]中能被8整除却不能被其他一些数整除…

Linux系统中使用df命令详解磁盘使用情况

df(disk free)是一款Linux系统中用于检查文件系统磁盘空间占用情况的命令行工具。通过这个命令,用户能够查看已挂载的磁盘分区的总空间、已使用空间、可用空间以及挂载点。以下是对 df命令功能的详细阐述。 基本用法…

读人形机器人24岗位替代

读人形机器人24岗位替代1. 评估失业风险 1.1. 人形机器人的兴起给全球社会带来了兴奋感和担忧 1.2. 机器具有无与伦比的机动性、灵活性和适应性,它们能够执行各行各业的复杂任务 1.3. 最容易受自动化影响的行业1.3.1.…

Palantir解密:从企业数字化能力构成说起,“本体”如何破解现代企业数据应用难题? - 指南

Palantir解密:从企业数字化能力构成说起,“本体”如何破解现代企业数据应用难题? - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !import…

在Ubuntu 18.04/20.04 LTS设置静态DNS服务器

要在Ubuntu 18.04/20.04 LTS上设置静态DNS服务器,需遵循特定的配置过程,这个过程因为Ubuntu系统中网络管理组件的不同而有所区别。 Ubuntu 18.04 (使用netplan) Ubuntu 18.04 默认使用netplan来代替之前的 /etc/netw…

做旅行网站好网络建设与运维初级

队列概念队列(Queue)是限定只能在一端插入、另一端删除的线性表。允许删除的一端叫做队头(front),允许插入的一端叫做队尾(rear)&#xff0c;没有元素的队列称为“空队列”。队列具有先进先出(FIFO)的特性。普通顺序队列存在的问题在普通顺序队列中,入队的操作就是先将尾指针re…