灰狼优化算法(GWO)文章复现:从理论到实践

灰狼优化算法(GWO)文章复现 复现内容包括:改进算法实现、23个基准测试函数、改进策略画图分析、与GWO等对比等。 代码基本上每一步都有注释,非常易懂,代码质量极高,便于新手学习和理解。

嘿,各位小伙伴们!今天来聊聊灰狼优化算法(GWO)文章的复现,这可是个很有趣的话题,尤其是对于想深入了解优化算法的新手们,绝对是一次超有价值的学习之旅。

一、改进算法实现

灰狼优化算法模拟了灰狼群体的狩猎行为。在自然界中,灰狼群体有着严格的等级制度,分别是α、β、δ 和 ω 狼。α 狼是领导者,负责决策;β 狼辅助 α 狼;δ 狼听从 α 和 β 的指挥;ω 狼则是群体中地位最低的。

下面咱来看下基础 GWO 算法的核心代码框架(以 Python 为例):

import numpy as np # 目标函数,这里以一个简单的单峰函数为例 def objective_function(x): return np.sum(x ** 2) # GWO 算法实现 def gwo(pop_size, dim, max_iter, lb, ub): # 初始化灰狼位置 wolves = np.random.uniform(lb, ub, (pop_size, dim)) fitness = np.array([objective_function(w) for w in wolves]) # 初始化最优解 alpha_wolf = wolves[np.argmin(fitness)] alpha_fitness = np.min(fitness) beta_wolf = alpha_wolf.copy() beta_fitness = alpha_fitness delta_wolf = alpha_wolf.copy() delta_fitness = alpha_fitness a = 2 for t in range(max_iter): a = 2 - t * (2 / max_iter) # 线性递减的收敛因子 for i in range(pop_size): r1 = np.random.rand() r2 = np.random.rand() A1 = 2 * a * r1 - a C1 = 2 * r2 D_alpha = np.abs(C1 * alpha_wolf - wolves[i]) X1 = alpha_wolf - A1 * D_alpha r1 = np.random.rand() r2 = np.random.rand() A2 = 2 * a * r1 - a C2 = 2 * r2 D_beta = np.abs(C2 * beta_wolf - wolves[i]) X2 = beta_wolf - A2 * D_beta r1 = np.random.rand() r2 = np.random.rand() A3 = 2 * a * r1 - a C3 = 2 * r2 D_delta = np.abs(C3 * delta_wolf - wolves[i]) X3 = delta_wolf - A3 * D_delta wolves[i] = (X1 + X2 + X3) / 3 fitness = np.array([objective_function(w) for w in wolves]) for i in range(pop_size): if fitness[i] < alpha_fitness: alpha_fitness = fitness[i] alpha_wolf = wolves[i] elif fitness[i] < beta_fitness: beta_fitness = fitness[i] beta_wolf = wolves[i] elif fitness[i] < delta_fitness: delta_fitness = fitness[i] delta_wolf = wolves[i] return alpha_wolf, alpha_fitness

在这段代码里,objective_function定义了我们要优化的目标函数,这里是一个简单的平方和函数。gwo函数则实现了 GWO 算法的主体。一开始随机初始化灰狼的位置,然后在每次迭代中,根据收敛因子a和随机数r1r2来更新灰狼的位置,不断向最优解靠近。

灰狼优化算法(GWO)文章复现 复现内容包括:改进算法实现、23个基准测试函数、改进策略画图分析、与GWO等对比等。 代码基本上每一步都有注释,非常易懂,代码质量极高,便于新手学习和理解。

而改进算法可能会从多个方面入手,比如改变收敛因子的更新方式,或者引入新的机制避免算法陷入局部最优。假设我们对收敛因子进行非线性调整,代码可能会这样改:

# 改进的 GWO 算法实现 def improved_gwo(pop_size, dim, max_iter, lb, ub): # 初始化灰狼位置 wolves = np.random.uniform(lb, ub, (pop_size, dim)) fitness = np.array([objective_function(w) for w in wolves]) # 初始化最优解 alpha_wolf = wolves[np.argmin(fitness)] alpha_fitness = np.min(fitness) beta_wolf = alpha_wolf.copy() beta_fitness = alpha_fitness delta_wolf = alpha_wolf.copy() delta_fitness = alpha_fitness for t in range(max_iter): a = 2 * np.exp(-(4 * t / max_iter) ** 2) # 非线性收敛因子 for i in range(pop_size): r1 = np.random.rand() r2 = np.random.rand() A1 = 2 * a * r1 - a C1 = 2 * r2 D_alpha = np.abs(C1 * alpha_wolf - wolves[i]) X1 = alpha_wolf - A1 * D_alpha r1 = np.random.rand() r2 = np.random.rand() A2 = 2 * a * r1 - a C2 = 2 * r2 D_beta = np.abs(C2 * beta_wolf - wolves[i]) X2 = beta_wolf - A2 * D_beta r1 = np.random.rand() r2 = np.random.rand() A3 = 2 * a * r1 - a C3 = 2 * r2 D_delta = np.abs(C3 * delta_wolf - wolves[i]) X3 = delta_wolf - A3 * D_delta wolves[i] = (X1 + X2 + X3) / 3 fitness = np.array([objective_function(w) for w in wolves]) for i in range(pop_size): if fitness[i] < alpha_fitness: alpha_fitness = fitness[i] alpha_wolf = wolves[i] elif fitness[i] < beta_fitness: beta_fitness = fitness[i] beta_wolf = wolves[i] elif fitness[i] < delta_fitness: delta_fitness = fitness[i] delta_wolf = wolves[i] return alpha_wolf, alpha_fitness

这里我们把收敛因子a改成了一个非线性递减的形式,这样可能会让算法在前期有更好的全局搜索能力,后期有更好的局部搜索能力。

二、23 个基准测试函数

基准测试函数是检验优化算法性能的重要工具。这 23 个函数涵盖了单峰、多峰等不同特性的函数。以Sphere函数为例,它是一个简单的单峰函数,用于测试算法的基本收敛能力。

def sphere(x): return np.sum(x ** 2)

还有像Rastrigin函数,这是一个典型的多峰函数,具有许多局部最优解,对算法跳出局部最优的能力是个挑战。

def rastrigin(x): A = 10 n = len(x) return A * n + np.sum(x ** 2 - A * np.cos(2 * np.pi * x))

在实际复现中,我们会把改进后的 GWO 算法应用到这些基准测试函数上,通过记录每次运行的结果,来评估算法在不同特性函数上的性能。

三、改进策略画图分析

画图分析能让我们更直观地看到改进策略的效果。我们可以绘制算法在每次迭代中的最优适应度值变化曲线。比如用matplotlib库来绘制改进前后 GWO 算法在Sphere函数上的收敛曲线。

import matplotlib.pyplot as plt # 运行基础 GWO 算法 pop_size = 50 dim = 2 max_iter = 100 lb = -100 ub = 100 alpha_wolf, alpha_fitness = gwo(pop_size, dim, max_iter, lb, ub) gwo_fitness_trace = [alpha_fitness] # 运行改进的 GWO 算法 alpha_wolf_improved, alpha_fitness_improved = improved_gwo(pop_size, dim, max_iter, lb, ub) improved_gwo_fitness_trace = [alpha_fitness_improved] for t in range(1, max_iter): alpha_wolf, alpha_fitness = gwo(pop_size, dim, t, lb, ub) gwo_fitness_trace.append(alpha_fitness) alpha_wolf_improved, alpha_fitness_improved = improved_gwo(pop_size, dim, t, lb, ub) improved_gwo_fitness_trace.append(alpha_fitness_improved) plt.plot(range(max_iter), gwo_fitness_trace, label='GWO') plt.plot(range(max_iter), improved_gwo_fitness_trace, label='Improved GWO') plt.xlabel('Iteration') plt.ylabel('Best Fitness') plt.title('Convergence Comparison on Sphere Function') plt.legend() plt.show()

从这个图中,我们可以清晰地看到改进后的 GWO 算法是否收敛得更快,或者是否能达到更好的最优解。如果改进后的曲线下降得更快,且最终的最优解更好,那就说明我们的改进策略是有效的。

四、与 GWO 等对比

除了和自身改进前对比,我们还会和其他优化算法进行对比,比如粒子群优化算法(PSO)。

# 粒子群优化算法(PSO) def pso(pop_size, dim, max_iter, lb, ub, w, c1, c2): particles = np.random.uniform(lb, ub, (pop_size, dim)) velocities = np.zeros((pop_size, dim)) pbest = particles.copy() pbest_fitness = np.array([objective_function(p) for p in particles]) gbest_index = np.argmin(pbest_fitness) gbest = pbest[gbest_index] gbest_fitness = pbest_fitness[gbest_index] for t in range(max_iter): for i in range(pop_size): r1 = np.random.rand(dim) r2 = np.random.rand(dim) velocities[i] = w * velocities[i] + c1 * r1 * (pbest[i] - particles[i]) + c2 * r2 * (gbest - particles[i]) particles[i] = particles[i] + velocities[i] particles[i] = np.clip(particles[i], lb, ub) fitness = np.array([objective_function(p) for p in particles]) for i in range(pop_size): if fitness[i] < pbest_fitness[i]: pbest_fitness[i] = fitness[i] pbest[i] = particles[i] if pbest_fitness[i] < gbest_fitness: gbest_fitness = pbest_fitness[i] gbest = pbest[i] return gbest, gbest_fitness

然后我们把 GWO、改进后的 GWO 和 PSO 都应用到一系列基准测试函数上,统计它们的最优解、平均解、收敛速度等指标,进行全面对比。通过这样的对比,能更清楚地看到改进后的 GWO 算法在性能上的优势和不足。

好啦,以上就是关于灰狼优化算法(GWO)文章复现的主要内容啦,希望对大家理解和学习优化算法有所帮助!大家可以自己动手实践下,说不定还能想出更厉害的改进策略呢!

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

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

相关文章

基于单片机的红外检测及语音响应系统:车站温度检测好帮手

基于单片机的红外检测及语音响应系统 本设计是基于单片机的红外检测及语音响应系统&#xff0c;主要是为了应用于车站出入站口的温度测量。 选择STC89C52单片机作为中间的核心处理器、搭配DS18B20温度检测电路、语音播报电路、LCD显示电路。 设计的目的是&#xff1a;能够对密集…

Sentinel 网关流控实现原理

网关流量控制 Sentinel 支持对 Spring Cloud Gateway、Zuul 等主流的 API Gateway 进行限流。 Sentinel 1.6.0 引入了 Sentinel API Gateway Adapter Common 模块&#xff0c;此模块中包含网关限流的规则和自定义 API 的实体和管理逻辑&#xff1a; GatewayFlowRule&#xff…

探索 IEEE33 节点配电网模型:MATLAB 中的潮流与故障仿真之旅

IEEE33节点配电网模型&#xff0c;附带有详细节点数据以及文献出处来源&#xff0c;MATLAB&#xff0c;simulink各个版本均可运行&#xff0c;可以进行潮流计算以及四种常见故障波形仿真&#xff0c;可以更换线路模型&#xff0c;分布参数模型用于故障仿真&#xff08;50km线路…

探索 S7 - 200 组态王构建全自动洗衣机控制系统

S7-200组态王基于PLC的全自动洗衣机工业家用变频洗衣机控制系统 带解释的梯形图程序&#xff0c;接线图原理图图纸&#xff0c;io分配&#xff0c;组态画面在工业与家用领域&#xff0c;基于 PLC 的全自动洗衣机控制系统越来越受到关注。今天咱们就来聊聊利用 S7 - 200 与组态王…

中间层省略

基于条件生成对抗网络的风光联合场景生成 处理风光不确定性 复现《基于深度卷积生成对抗网络场景生成的间歇式分布式电源优化配置》中的场景生成方法 通过改进的条件深度卷积生成对抗网络模型对 DG 出力的不确定性进行建模&#xff0c;并在模型中加入月份标签信息以生成面向规划…

从“夯基”到“跃升”:2025-2026年职业教育政策核心转向与从业者应对

站在2026年的起点回望&#xff0c;职业教育正经历从“规模扩张”到“内涵跃升”的关键转型。随着《关于深化现代职业教育体系建设改革的意见》《职业教育产教融合赋能提升行动实施方案&#xff08;2023—2025年&#xff09;》等政策的落地&#xff0c;2025-2026年将成为职业教育…

强烈安利MBA必看!10个AI论文网站深度测评

强烈安利MBA必看&#xff01;10个AI论文网站深度测评 AI论文工具测评&#xff1a;为何值得一看&#xff1f; 在MBA学习与研究过程中&#xff0c;撰写高质量的论文是必不可少的一环。然而&#xff0c;面对繁重的写作任务、复杂的文献检索流程以及对AI生成内容的合规性担忧&#…

Ubuntu 24 通关 MySQL:从本地安装到 root 远程登录的一站式实操指南

本文针对 Ubuntu 24.04 LTS 系统,整理了一套从 MySQL 安装到 root 用户远程登录授权的完整有序步骤,所有代码均可直接复制执行,解决新手常见的安装配置与远程连接痛点。 步骤 1:前置准备 - 更新系统包索引 安装前先更新本地包列表,避免因依赖版本过旧导致安装失败。 su…

KP口语备考不用愁!飞象说口语真题更新:双AI陪练+官方评分,效率翻倍

一、海量真题更新&#xff1a;41套KET72套PET&#xff0c;练的都是考点题库全面&#xff0c;不用再四处搜集有些家庭在备考时&#xff0c;为了找真题翻遍各大平台&#xff0c;要么是付费资源&#xff0c;要么是残缺不全的题型&#xff0c;浪费了大量时间。飞象说口语此次更新直…

高速列车驾驶员情境意识动态建模及生理反应机制研究

简介 随着高速列车智能化水平的提升&#xff0c;驾驶安全与驾驶员认知状态成为关键研究焦点。 本文基于ErgoLAB人机环境同步平台V3.0&#xff0c;构建了高速列车驾驶模拟环境&#xff0c;采集多模态生理信号&#xff08;包括脑电、心电与眼动&#xff09;以研究驾驶员情景意识…

2026年 粉碎机厂家推荐排行榜:万能/超微/快速/粗/高速/涡轮粉碎机,专业实力与高效粉碎技术深度解析

2026年粉碎机厂家推荐排行榜:万能/超微/快速/粗/高速/涡轮粉碎机,专业实力与高效粉碎技术深度解析 在现代化工业生产中,粉碎工序作为物料预处理的关键环节,其效率与品质直接影响着后续工艺的流畅性与最终产品的质量…

异构网络垂直切换算法MATLAB仿真实现

一、仿真框架设计 基于多属性决策判决算法实现异构网络垂直切换&#xff0c;支持TD-SCDMA/LTE/WiFi等网络类型&#xff0c;包含以下核心模块&#xff1a; 网络拓扑建模&#xff1a;定义基站位置、覆盖范围及用户移动路径 信号强度计算&#xff1a;基于距离衰减模型计算接收功…

OpenCV的Mat类操作详解

参考链接: 1、OpenCV C++ 核心:Mat 与像素操作全解析 2、OpenCV Mat的基本操作

产业指挥棒下的重塑:职业教育政策解读与应对策略

> 一张专业清单、一份拨款系数表&#xff0c;正悄然重塑中国职业教育的基因&#xff0c;从“我能教什么”到“产业需要什么”的时代已经到来。--- 近两年&#xff0c;教育部及各地密集出台一系列职业教育新政&#xff0c;从专业设置到资金分配&#xff0c;从培养模式到评价体…

LabVIEW Excel工具包:高效读写EXCEL样式模板,快速生成测试报告

LabVIEW Excel工具包快速读写EXCEL样式模板生成测试报告制作 LabVIEW工程师最头疼的Excel报告生成终于有解了&#xff01;最近项目里被要求每天生成格式统一的测试报告&#xff0c;手动操作Excel差点把我逼疯。直到发现LabVIEW自带的Excel工具包&#xff0c;真香警告来了——原…

别再只比报价了:采购定价常用的四种方法

很多采购都有过这种场景。老板问&#xff1a;“这个物料&#xff0c;为什么比去年贵这么多&#xff1f;”你心里一紧&#xff0c;嘴上只能说&#xff1a;“已经找了三家供应商比价了&#xff0c;这家最便宜。”说实话&#xff0c;这句话在十年前可能还管用&#xff0c;现在越来…

C++红黑树 - 教程

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

2026年 工业超声波清洗机厂家推荐排行榜,单槽/实验室/全自动/投入式/网纹辊/眼镜首饰/除油除锈清洗机及振子振板配件选购指南

2026年工业超声波清洗机厂家推荐排行榜,单槽/实验室/全自动/投入式/网纹辊/眼镜首饰/除油除锈清洗机及振子振板配件选购指南随着制造业向精密化、智能化方向深度演进,以及实验室、医疗、珠宝首饰等行业对清洁工艺要求…

2026 年 1 月原油脱水仪/破乳仪厂家推荐排行榜:高效分离、精准破乳,油田采出液处理核心设备源头实力解析

2026 年 1 月原油脱水仪/破乳仪厂家推荐排行榜:高效分离、精准破乳,油田采出液处理核心设备源头实力解析 在石油开采与炼化工业中,采出液的高效处理是保障生产连续性、提升原油品质、降低运输与加工成本的关键环节。…

火语言 RPA:英数图形验证码自动化处理案例

一、案例说明 本案例基于火语言 RPA 实现英数图形验证码的自动校验登录&#xff0c;通过脚本替代人工操作&#xff0c;完成 “打开浏览器→ 访问登录页→ 输入手机号→ 触发英数验证码→ 截图识别→ 回填验证码” 的全流程自动化。 二、案例逻辑 点击 “获取验证码” 按钮触发…