Python实现蝗虫优化算法(Grasshopper Optimization Algorithm, GOA)(附完整代码)
1.蝗虫优化算法介绍
蝗虫优化算法(Grasshopper Optimization Algorithm, GOA)是一种受自然界蝗虫群行为启发的新型群体智能优化算法,由Shahrzad等人于2017年提出。该算法模拟了蝗虫幼虫和成虫在觅食过程中表现出的独特群体运动模式:幼虫阶段表现为缓慢的局部移动(局部搜索),而成虫阶段则进行长距离、快速的迁徙(全局探索)。GOA的核心思想正是通过数学模型来平衡这两种行为,从而高效地寻找麻烦优化问题的最优解。
GOA的数学模型主要包含三个关键组成部分,它们共同决定了蝗虫个体在搜索空间中的位置更新:
社会相互作用(S_i):这是算法的核心驱动力,代表了蝗虫个体之间存在的引力和斥力。当两只蝗虫距离较远时,它们相互吸引以形成群体;当距离过近时,则相互排斥以避免碰撞。这种力依据一个特定的函数实现,能够自然地平衡探索与开发。
重力(G_i):该分量模拟重力对蝗虫飞行方向的影响,使个体有向地面(即当前找到的较优解区域)靠近的趋势,有助于算法的收敛。
风 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 回归预测 | 梯度提升决策树 | 大规模回归 |