群体智能优化算法-灰狼优化算法(Grey Wolf Optimizer, GWO,含Matlab源代码)

摘要(Abstract)

灰狼优化算法(GWO)是一种模拟灰狼群体捕猎行为的智能优化算法。GWO 通过模仿灰狼的领导等级(Alpha、Beta、Delta 和 Omega)以及围猎、追踪、包围和进攻猎物的策略来进行优化搜索。该算法具有简单、参数少、计算效率高的特点,广泛应用于函数优化、机器学习、图像处理等领域。本文提供 GWO 的 MATLAB 实现,并详细解析其算法逻辑。

算法介绍

1. 主要思想

灰狼优化算法(GWO)基于灰狼的群体社会行为,主要包括以下四种角色:

  • Alpha(α):首领,负责决策,指引狩猎方向(当前最优解)。
  • Beta(β):第二梯队,协助 Alpha 领导群体(次优解)。
  • Delta(δ):第三梯队,辅助 Alpha 和 Beta,并监督 Omega(第三优解)。
  • Omega(ω):普通个体,服从其他等级狼的指令(其余搜索个体)。

GWO 主要包含 包围、狩猎、攻击猎物 三个核心阶段,通过 Alpha、Beta 和 Delta 共同引导搜索过程。

2. 公式解析

(1) 包围猎物
(2) 狩猎

通过 Alpha、Beta 和 Delta 共同指导更新个体位置:

(3) 攻击猎物

随着迭代进行,控制参数 AAA 逐渐减小,使狼群收缩围捕:

MATLAB 代码实现:

Matlab 复制代码
% 灰狼优化算法(Grey Wolf Optimizer, GWO)
% 输入:
%   SearchAgents_no - 种群个体数
%   Max_iter - 最大迭代次数
%   lb - 搜索空间下界
%   ub - 搜索空间上界
%   dim - 变量维度
%   fobj - 目标函数
% 输出:
%   Alpha_score - 全局最优适应度值
%   Alpha_pos - 最优解
%   Convergence_curve - 收敛曲线

function [Alpha_score, Alpha_pos, Convergence_curve] = GWO(SearchAgents_no, Max_iter, lb, ub, dim, fobj)

% 初始化 Alpha(最优解)、Beta(次优解)、Delta(第三优解)
Alpha_pos = zeros(1, dim);
Alpha_score = inf; % 适用于最小化问题

Beta_pos = zeros(1, dim);
Beta_score = inf;

Delta_pos = zeros(1, dim);
Delta_score = inf;

% 初始化种群
Positions = initialization(SearchAgents_no, dim, ub, lb);

% 记录收敛曲线
Convergence_curve = zeros(1, Max_iter);

% 迭代计数器
l = 0; 

% 迭代主循环
while l < Max_iter
    % 计算每个个体的适应度
    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(次优)、Delta(第三优)个体
        if fitness < Alpha_score 
            Alpha_score = fitness;
            Alpha_pos = Positions(i,:);
        end
        if fitness > Alpha_score && fitness < Beta_score 
            Beta_score = fitness;
            Beta_pos = Positions(i,:);
        end
        if fitness > Beta_score && fitness < Delta_score 
            Delta_score = fitness;
            Delta_pos = Positions(i,:);
        end
    end
    
    % 计算参数 a(用于调整 A)
    a = 2 - l * ((2) / Max_iter);
    
    % 更新种群个体位置
    for i = 1:size(Positions,1)
        for j = 1:size(Positions,2)     
                       
            r1 = rand(); % 随机数 [0,1]
            r2 = rand(); 
            
            A1 = 2 * a * r1 - a; 
            C1 = 2 * r2; 

            % 计算 Alpha 引导的更新位置
            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; 

            % 计算 Beta 引导的更新位置
            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; 

            % 计算 Delta 引导的更新位置
            D_delta = abs(C3 * Delta_pos(j) - Positions(i,j));
            X3 = Delta_pos(j) - A3 * D_delta;             
           
            % 计算最终更新位置
            Positions(i,j) = (X1 + X2 + X3) / 3;  
            
        end
    end

    % 记录收敛曲线
    l = l + 1;    
    Convergence_curve(l) = Alpha_score;
end

%% 初始化种群
function Positions = initialization(SearchAgents_no, dim, ub, lb)

Boundary_no = size(ub,2); % 变量边界数量

% 若变量边界相同,则进行统一处理
if Boundary_no == 1
    Positions = rand(SearchAgents_no, dim) .* (ub - lb) + lb;
end

% 若每个变量有不同的边界
if Boundary_no > 1
    for i = 1:dim
        ub_i = ub(i);
        lb_i = lb(i);
        Positions(:,i) = rand(SearchAgents_no,1) .* (ub_i - lb_i) + lb_i;
    end
end

总结

1. GWO 主要特点

  • 无需梯度信息,适用于复杂的黑箱优化问题。
  • 较少参数(仅有 a, A, C),易于实现和调整。
  • 全局收敛性强,具有良好的搜索均衡能力。
  • 可用于连续优化问题,如函数优化、参数寻优、特征选择等。

2. GWO 适用场景

  • 函数优化问题(如 Ackley, Rastrigin, Rosenbrock)
  • 神经网络优化(权重、超参数调优)
  • 工业控制优化(PID 控制参数优化)
  • 路径规划(机器人路径寻优)
  • 数据挖掘(特征选择、聚类优化)
相关推荐
Rocky Ding*14 分钟前
【三年面试五年模拟】2026-09-06 拼多多 AI Agent研发岗秋招笔试4道算法题完整题解
论文阅读·人工智能·深度学习·机器学习·aigc·ai-native·拼多多
小柯南敲键盘21 分钟前
跨马翻译:AI批量图片翻译工具,跨境电商视频字幕翻译与智能抠图一体搞定
人工智能·python·音视频
2601_9677607834 分钟前
2026年PDF压缩与页码添加工具技术实测:性能、算法与本地化适配深度对比
算法·pdf
luckystar513~37 分钟前
Geo + AI:【时空智能体】技术剖析
人工智能·ai·gis·geoai·空间智能体·时空智能体
吨吨ai1 小时前
2026年9月8日|GPT‑6 Astra + Codex:Pro 开发者的 AI Agent 工具链
人工智能·gpt
leoZ2311 小时前
2026-09-09-springboot-cloud-deploy-pitfalls
java·前端·javascript·vue.js·人工智能·spring boot·后端
不会就选b1 小时前
算法日常・每日刷题--<贪心>7
数据结构·算法·leetcode
dozenyaoyida1 小时前
AI与大模型新闻日报 | 2026-09-09
人工智能·ai·chatgpt·大模型·新闻
xqqxqxxq2 小时前
AI Agent学习:主动工具发现(李博杰《深入理解 AI Agent》4.8观后总结)
人工智能·学习
moonrailgun2 小时前
用 Node.js 复刻 Codex Astra 的终端星光
前端·javascript·算法