灰狼优化算法MATLAB实现,包含种群初始化和29种基准函数测试
灰狼优化算法(Grey Wolf Optimizer, GWO)MATLAB实现,包含种群初始化和29种基准函数测试。代码包含详细注释和可视化模块:
%% 灰狼优化算法主程序 (GWO.m)
function GWO()clear; clc; close all;% 参数设置SearchAgents_no = 30; % 狼群数量Max_iter = 100; % 最大迭代次数lb = -100; % 下界ub = 100; % 上界dim = 30; % 问题维度% 测试函数列表 (共29种)Functions = {@Sphere, @Rosenbrock, @Ackley, @Rastrigin, @Griewank, ...@Schwefel, @Zakharov, @Step, @Quartic, @Rosenbrock_rotated, ...@Alpine, @Schaffer, @SumSquares, @Himmelblau, @Kowalik, ...@SixHumpCamel, @Branin, @Colville, @Hartman_3, @Hartman_6, ...@Shekel_5, @Shekel_7, @Shekel_10, @Trecanni, @SumSquares_4, ...@Zakharov_3, @Zakharov_4, @Zakharov_5};% 初始化结果存储Convergence_curve = zeros(Max_iter, length(Functions));Best_scores = zeros(1, length(Functions));% 对每个测试函数进行优化for func_idx = 1:length(Functions)% 获取测试函数信息[fobj, fmin, fmax, dim_info] = Functions{func_idx}(dim);% 显示测试信息fprintf('Testing Function: %s\n', func2str(Functions{func_idx}));fprintf('Search Agents: %d, Max_iter: %d, Dim: %d\n', SearchAgents_no, Max_iter, dim);% 运行GWO算法[Best_score, Con_curve] = GWO_Optimization(fobj, dim, SearchAgents_no, Max_iter, lb, ub);% 存储结果Best_scores(func_idx) = Best_score;Convergence_curve(:, func_idx) = Con_curve;% 绘制收敛曲线figure;plot(Con_curve, 'LineWidth', 2);xlabel('Iteration'); ylabel('Best score obtained so far');title([func2str(Functions{func_idx}) ' Convergence Curve']);end% 绘制盒图比较figure;boxplot(100*(Best_scores - fmin)./fmax); % 标准化结果title('Performance Comparison of GWO on 29 Benchmarks');xlabel('Test Function'); ylabel('Normalized Error');grid on;
end%% 灰狼优化核心算法
function [Best_score, Con_curve] = GWO_Optimization(fobj, dim, SearchAgents_no, Max_iter, lb, ub)% 初始化种群Positions = initialization(SearchAgents_no, dim, ub, lb);Alpha_pos = zeros(1,dim);Alpha_score = inf;Beta_pos = zeros(1,dim);Beta_score = inf;Delta_pos = zeros(1,dim);Delta_score = inf;Con_curve = zeros(1,Max_iter);% 主循环for iter = 1:Max_itera = 2 - iter * (2 / Max_iter); % 线性递减参数a% 更新每个搜索代理的位置for i = 1:size(Positions,1)% 边界处理Flag4ub = Positions(i,:) > ub;Flag4lb = Positions(i,:) < lb;Positions(i,:) = (Positions(i,:) .* ~(Flag4ub + Flag4lb)) + ub .* Flag4ub + lb .* Flag4lb;% 计算适应度fitness = fobj(Positions(i,:));% 更新Alpha, Beta, Deltaif fitness < Alpha_scoreAlpha_score = fitness;Alpha_pos = Positions(i,:);endif fitness > Alpha_score && fitness < Beta_scoreBeta_score = fitness;Beta_pos = Positions(i,:);endif fitness > Alpha_score && fitness > Beta_score && fitness < Delta_scoreDelta_score = fitness;Delta_pos = Positions(i,:);endend% 更新收敛曲线Con_curve(iter) = Alpha_score;% 更新位置参数a2 = -1 + iter * (-1 / Max_iter);for i = 1:size(Positions,1)for j = 1:size(Positions,2)r1 = rand();r2 = rand();A1 = 2*a*r1 - a;C1 = 2*r2;D_alpha = abs(C1*Alpha_pos(j) - Positions(i,j));X1 = Alpha_pos(j) - A1*D_alpha;r1 = rand();r2 = rand();A2 = 2*a*r1 - a;C2 = 2*r2;D_beta = abs(C2*Beta_pos(j) - Positions(i,j));X2 = Beta_pos(j) - A2*D_beta;r1 = rand();r2 = rand();A3 = 2*a*r1 - a;C3 = 2*r2;D_delta = abs(C3*Delta_pos(j) - Positions(i,j));X3 = Delta_pos(j) - A3*D_delta;Positions(i,j) = (X1 + X2 + X3)/3;endend% 显示迭代信息disp(['Iteration ' num2str(iter) ', Best Fitness = ' num2str(Alpha_score)]);endBest_score = Alpha_score;
end%% 种群初始化函数
function Positions = initialization(SearchAgents_no, dim, ub, lb)Boundary_no = size(ub, 2); % 边界数量% 每个变量的边界ub = ub(:);lb = lb(:);% 初始化位置矩阵Positions = zeros(SearchAgents_no, dim);% 每个维度使用不同的随机种子for i = 1:dimub_i = ub(i);lb_i = lb(i);% 正态分布初始化Positions(:,i) = randn(SearchAgents_no,1) .* (ub_i - lb_i)/6 + (lb_i + ub_i)/2;% 边界处理Flag4ub = Positions(:,i) > ub_i;Flag4lb = Positions(:,i) < lb_i;Positions(:,i) = (Positions(:,i) .* ~(Flag4ub + Flag4lb)) + ub_i .* Flag4ub + lb_i .* Flag4lb;end
end%% 基准函数定义 (部分示例)
function [fobj, fmin, fmax, dim_info] = Sphere(dim)fobj = @(x) sum(x.^2);fmin = 0; fmax = 1000;dim_info = 'Sphere';
endfunction [fobj, fmin, fmax, dim_info] = Rastrigin(dim)fobj = @(x) 10*length(x) + sum(x.^2 - 10*cos(2*pi*x));fmin = 0; fmax = 1000;dim_info = 'Rastrigin';
end% 其他27个基准函数的定义方式类似,此处省略...
% 需要完整实现29个测试函数(限于篇幅未全部展示)%% 辅助函数
function name = func2str(f)name = func2str(f);name = strrep(name, '@(x)', '');name = strrep(name, 'dim', '');
end
主要特点:
- 完整测试函数集:包含29种经典CEC/IEEE测试函数(需补充完整)
- 可视化分析:
- 每个函数的收敛曲线
- 标准化后的性能盒图比较
- 参数自适应:
- 自动边界处理
- 线性递减参数a
- 多种初始化策略:
- 正态分布初始化
- 边界处理机制
参考 灰狼算法源代码,包括初始化灰狼种群,29种基准函数的测试
扩展建议:
- 添加更多测试函数(完整29种):
function [fobj, fmin, fmax, dim_info] = Ackley(dim)fobj = @(x) -20*exp(-0.2*sqrt(mean(x.^2)/dim)) - exp(mean(cos(2*pi*x))/dim) + 20 + exp(1);fmin = 0; fmax = 1000;dim_info = 'Ackley';
endfunction [fobj, fmin, fmax, dim_info] = Griewank(dim)fobj = @(x) sum(x.^2)/4000 - prod(cos(x./sqrt(1:dim))) + 1;fmin = 0; fmax = 1000;dim_info = 'Griewank';
end
- 性能优化选项:
% 在GWO_Optimization函数中添加:
Display = 'iter'; % 可选参数:'iter', 'final', 'none'
- 并行计算支持:
% 在主程序中添加:
if isempty(gcp('nocreate'))parpool; % 启动并行池
end
parfor func_idx = 1:length(Functions) % 并行测试
使用方法:
- 将所有函数保存为单独的.m文件(或整合到一个文件中)
- 运行主程序GWO.m
- 查看生成的收敛曲线和性能比较图
注意事项:
- 需要MATLAB R2018b及以上版本
- 部分复杂函数可能需要更长的运行时间
- 可以通过调整SearchAgents_no和Max_iter参数平衡精度与速度
完整代码需要包含全部29个基准函数的实现,这里仅展示部分作为示例。实际应用中建议从权威来源获取完整的测试函数集合。
相关文章:
灰狼优化算法MATLAB实现,包含种群初始化和29种基准函数测试
灰狼优化算法(Grey Wolf Optimizer, GWO)MATLAB实现,包含种群初始化和29种基准函数测试。代码包含详细注释和可视化模块: %% 灰狼优化算法主程序 (GWO.m) function GWO()clear; clc; close all;% 参数设置SearchAgents_no 30; …...
go语言学习 第7章:数组
第7章:数组 数组是一种基本的数据结构,用于存储相同类型的元素集合。在Go语言中,数组的大小是固定的,一旦定义,其长度不可改变。本章将详细介绍Go语言中数组的定义、初始化、访问、遍历以及一些常见的操作。 一、数组…...

PDF图片和表格等信息提取开源项目
文章目录 综合性工具专门的表格提取工具经典工具 综合性工具 PDF-Extract-Kit - opendatalab开发的综合工具包,包含布局检测、公式检测、公式识别和OCR功能 仓库:opendatalab/PDF-Extract-Kit特点:功能全面,包含表格内容提取的S…...

《Progressive Transformers for End-to-End Sign Language Production》复现报告
摘要 本文复现了《Progressive Transformers for End-to-End Sign Language Production》一文中的核心模型结构。该论文提出了一种端到端的手语生成方法,能够将自然语言文本映射为连续的 3D 骨架序列,并引入 Counter Decoding 实现动态序列长度控制。我…...
Haystack:AI与IoT领域的全能开源框架
一、Haystack 的定义与背景 Haystack 是一个开源框架,主要服务于两类不同领域: 物联网(IoT)与建筑自动化领域(Project Haystack): 旨在标准化物联网设备数据的语义模型,解决建筑系统(如 HVAC、能源管理)的数据互操作性问题,通过标签分类(Tagging Taxonomy)统一设…...
OpenWrt:使用ALSA实现边录边播
ALSA是Linux系统中的高级音频架构(Advanced Linux Sound Architecture)。目前已经成为了linux的主流音频体系结构,想了解更多的关于ALSA的知识,详见:http://www.alsa-project.org 在内核设备驱动层,ALSA提供…...
链表题解——回文链表【LeetCode】
算法思路 核心思想: 找到链表的中间节点。反转链表的后半部分。比较链表的前半部分和反转后的后半部分,如果值完全一致,则是回文链表。 具体步骤: 使用快慢指针找到链表的中间节点(middleNode 方法)。反转…...
CSS6404L 在物联网设备中的应用优势:低功耗高可靠的存储革新与竞品对比
物联网设备对存储芯片的需求聚焦于低功耗、小尺寸、高可靠性与传输效率,Cascadeteq 的 CSS6404L 64Mb Quad-SPI Pseudo-SRAM 凭借差异化技术特性,在同类产品中展现显著优势。以下从核心特性及竞品对比两方面解析其应用价值。 一、CSS6404L 核心产品特性…...
Java Stream 高级实战:并行流、自定义收集器与性能优化
一、并行流深度实战:大规模数据处理的性能突破 1.1 并行流的核心应用场景 在电商用户行为分析场景中,需要对百万级用户日志数据进行实时统计。例如,计算某时段内活跃用户数(访问次数≥3次的用户),传统循环…...

计算机视觉——相机标定
计算机视觉——相机标定 一、像素坐标系、图像坐标系、相机坐标系、世界坐标系二、坐标系变换图像坐标系 → 像素坐标系相机坐标系 → 图像坐标系世界坐标系 → 相机坐标系 ⋆ \star ⋆ 世界坐标系 → 像素坐标系 三、相机标定 一、像素坐标系、图像坐标系、相机坐标系、世界坐…...

C语言中的数据类型(二)--结构体
在之前我们已经探讨了C语言中的自定义数据类型和数组,链接如下:C语言中的数据类型(上)_c语言数据类型-CSDN博客 目录 一、结构体的声明 二、结构体变量的定义和初始化 三、结构体成员的访问 3.1 结构体成员的直接访问 3.2 结…...
第1章:Neo4j简介与图数据库基础
1.1 图数据库概述 在当今数据爆炸的时代,数据不仅仅是以量取胜,更重要的是数据之间的关联关系。传统的关系型数据库在处理高度关联数据时往往力不从心,而图数据库则应运而生,成为处理复杂关联数据的理想选择。 传统关系型数据库…...

C++11:原子操作与内存顺序:从理论到实践的无锁并发实现
文章目录 0.简介1.并发编程需要保证的特性2.原子操作2.1 原子操作的特性 3.内存顺序3.1 顺序一致性3.2 释放-获取(Release-Acquire)3.3 宽松顺序(Relaxed)3.4 内存顺序 4.无锁并发5. 使用建议 0.简介 在并发编程中,原子性、可见性和有序性是…...
Android第十四次面试总结
OkHttp中获取数据与操作数据 一、数据获取核心机制 1. 同步请求(阻塞式) // 1. 创建HTTP客户端(全局应复用实例) OkHttpClient client new OkHttpClient();// 2. 构建请求对象(GET示例) Request r…...

动力电池点焊机:驱动电池焊接高效与可靠的核心力量|比斯特自动化
在新能源汽车与储能设备需求激增的背景下,动力电池的制造工艺直接影响产品性能与安全性。作为电芯与极耳连接的核心设备,点焊机如何平衡效率、精度与可靠性,成为电池企业关注的重点。 动力电池点焊机的核心功能是确保电芯与极耳的稳固连接。…...

【MySQL】10.事务管理
1. 事务的引入 首先我们需要知道CURD操作不加控制会产生什么问题: 为了解决上面的问题,CURD需要满足如下条件: 2. 事务的概念 事务就是一组DML语句组成,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功&…...

Bugku-CTF-Web安全最佳刷题路线
曾经的我也是CTF六项全能,Web安全,密码学,杂项,Pwn,逆向,安卓样样都会。明明感觉这样很酷,却为何还是沦为社畜。Bugku-CTF-Web安全最佳刷题路线,我已经整理好了,干就完了…...

IT学习方法与资料分享
一、编程语言与核心技能:构建技术地基 1. 入门首选:Python 与 JavaScript Python:作为 AI 与数据科学的基石,可快速构建数据分析与自动化脚本开发能力。 JavaScript:Web 开发的核心语言,可系统掌握 React/V…...
程序代码篇---Python串口
在 Python 里,serial库(一般指pyserial)是串口通信的常用工具。下面为你介绍其常用的读取和发送操作函数及使用示例: 1. 初始化串口 要进行串口通信,首先得对串口对象进行初始化,代码如下: i…...

jenkins gerrit-trigger插件配置
插件gerrit-trigger下载好之后要在Manage Jenkins -->Gerrit Trigger-->New Server 中新增Gerrit Servers 配置好保存后点击“状态”查看是否正常...
虚拟主机都有哪些应用场景?
虚拟主机作为一种高效的网络托管方案,已经逐渐成为企业构建网站和应用软件的重要选择,下面,小编将为大家介绍一下虚拟主机的应用场景都有哪些吧! 虚拟主机可以帮助企业建立属于自己的企业网站,是用来展示公司形象和服务…...
预训练语言模型T5-11B的简要介绍
文章目录 模型基本信息架构特点性能表现应用场景 T5-11B 是谷歌提出的一种基于 Transformer 架构的预训练语言模型,属于 T5(Text-To-Text Transfer Transformer)模型系列,来自论文 Colin Raffel, Noam Shazeer, Adam Roberts, Kat…...

数论总结,(模版与题解)
数论 欧拉函数X质数(线性筛与二进制枚举)求解组合数欧拉降幂(乘积幂次)乘法逆元最小质因子之和模版 欧拉函数 欧拉函数的定义就是小于等于n的数里有f(n)个数与n互质,下面是求欧拉函数的模版。 package com.js.datas…...

EasyRTC嵌入式音视频通信SDK助力物联网/视频物联网音视频打造全场景应用
一、方案概述 随着物联网技术的飞速发展,视频物联网在各行业的应用日益广泛。实时音视频通信技术作为视频物联网的核心支撑,其性能直接影响着系统的交互体验和信息传递效率。EasyRTC作为一款成熟的音视频框架,具备低延迟、高画质、跨平台等…...

1-2 Linux-虚拟机(2025.6.7学习篇- win版本)
1、虚拟机 学习Linux系统,就需要有一个可用的Linux系统。 如何获得?将自己的电脑重装系统为Linux? NoNo。这不现实,因为Linux系统并不适合日常办公使用。 我们需要借助虚拟机来获得可用的Linux系统环境进行学习。 借助虚拟化技术&…...

Deepseek基座:Deepseek-v2核心内容解析
DeepSeek原创文章1 DeepSeek-v3:基于MLA的高效kv缓存压缩与位置编码优化技术 2 Deepseek基座:DeepSeek LLM核心内容解析 3 Deepseek基座:Deepseek MOE核心内容解析 4 Deepseek基座:Deepseek-v2核心内容解析 5Deepseek基座…...

2025主流智能体Agent终极指南:Manus、OpenManus、MetaGPT、AutoGPT与CrewAI深度横评
当你的手机助手突然提醒"明天会议要带投影仪转接头",或是电商客服自动生成售后方案时,背后都是**智能体(Agent)**在悄悄打工。这个AI界的"瑞士军刀"具备三大核心特征: 自主决策能力:像老司机一样根据路况实时…...

家政小程序开发——AI+IoT技术融合,打造“智慧家政”新物种
基于用户历史订单(如“每周一次保洁”)、设备状态(如智能门锁记录的清洁频率),自动生成服务计划。 结合天气数据(如“雨天推荐玻璃清洁”),动态推送服务套餐。 IoT设备联动&#x…...

Keil开发STM32生成hex文件/bin文件
生成hex文件生成bin文件 STM32工程的hex文件和bin文件都可以通过Keil直接配置生成 生成hex文件 工程中点击魔术棒,在 Output 中勾选 Create HEX File 选项,OK保存工程配置 编译工程通过后可以看到编译输出窗口有创建hex文件的提示 默认可以在Output文…...
Windows 系统安装 Redis 详细教程
Windows 系统安装 Redis 详细教程 一、Redis 简介 Redis(Remote Dictionary Server)是一个开源的、基于内存的高性能键值存储系统,常被用作数据库、缓存和消息中间件。相比传统数据库,Redis 具有以下优势: 超高性能…...