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

[复制链接]
发表于 2025-10-12 03:22:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
择要(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 代码实现:
  1. % 灰狼优化算法(Grey Wolf Optimizer, GWO)
  2. % 输入:
  3. %   SearchAgents_no - 种群个体数
  4. %   Max_iter - 最大迭代次数
  5. %   lb - 搜索空间下界
  6. %   ub - 搜索空间上界
  7. %   dim - 变量维度
  8. %   fobj - 目标函数
  9. % 输出:
  10. %   Alpha_score - 全局最优适应度值
  11. %   Alpha_pos - 最优解
  12. %   Convergence_curve - 收敛曲线
  13. function [Alpha_score, Alpha_pos, Convergence_curve] = GWO(SearchAgents_no, Max_iter, lb, ub, dim, fobj)
  14. % 初始化 Alpha(最优解)、Beta(次优解)、Delta(第三优解)
  15. Alpha_pos = zeros(1, dim);
  16. Alpha_score = inf; % 适用于最小化问题
  17. Beta_pos = zeros(1, dim);
  18. Beta_score = inf;
  19. Delta_pos = zeros(1, dim);
  20. Delta_score = inf;
  21. % 初始化种群
  22. Positions = initialization(SearchAgents_no, dim, ub, lb);
  23. % 记录收敛曲线
  24. Convergence_curve = zeros(1, Max_iter);
  25. % 迭代计数器
  26. l = 0;
  27. % 迭代主循环
  28. while l < Max_iter
  29.     % 计算每个个体的适应度
  30.     for i = 1:size(Positions,1)  
  31.         
  32.         % 边界处理,确保搜索个体不超出范围
  33.         Flag4ub = Positions(i,:) > ub;
  34.         Flag4lb = Positions(i,:) < lb;
  35.         Positions(i,:) = (Positions(i,:) .* (~(Flag4ub + Flag4lb))) + ub .* Flag4ub + lb .* Flag4lb;               
  36.         
  37.         % 计算适应度
  38.         fitness = fobj(Positions(i,:));
  39.         
  40.         % 更新 Alpha(最优)、Beta(次优)、Delta(第三优)个体
  41.         if fitness < Alpha_score
  42.             Alpha_score = fitness;
  43.             Alpha_pos = Positions(i,:);
  44.         end
  45.         if fitness > Alpha_score && fitness < Beta_score
  46.             Beta_score = fitness;
  47.             Beta_pos = Positions(i,:);
  48.         end
  49.         if fitness > Beta_score && fitness < Delta_score
  50.             Delta_score = fitness;
  51.             Delta_pos = Positions(i,:);
  52.         end
  53.     end
  54.    
  55.     % 计算参数 a(用于调整 A)
  56.     a = 2 - l * ((2) / Max_iter);
  57.    
  58.     % 更新种群个体位置
  59.     for i = 1:size(Positions,1)
  60.         for j = 1:size(Positions,2)     
  61.                        
  62.             r1 = rand(); % 随机数 [0,1]
  63.             r2 = rand();
  64.             
  65.             A1 = 2 * a * r1 - a;
  66.             C1 = 2 * r2;
  67.             % 计算 Alpha 引导的更新位置
  68.             D_alpha = abs(C1 * Alpha_pos(j) - Positions(i,j));
  69.             X1 = Alpha_pos(j) - A1 * D_alpha;
  70.                        
  71.             r1 = rand();
  72.             r2 = rand();
  73.             
  74.             A2 = 2 * a * r1 - a;
  75.             C2 = 2 * r2;
  76.             % 计算 Beta 引导的更新位置
  77.             D_beta = abs(C2 * Beta_pos(j) - Positions(i,j));
  78.             X2 = Beta_pos(j) - A2 * D_beta;      
  79.             
  80.             r1 = rand();
  81.             r2 = rand();
  82.             
  83.             A3 = 2 * a * r1 - a;
  84.             C3 = 2 * r2;
  85.             % 计算 Delta 引导的更新位置
  86.             D_delta = abs(C3 * Delta_pos(j) - Positions(i,j));
  87.             X3 = Delta_pos(j) - A3 * D_delta;            
  88.            
  89.             % 计算最终更新位置
  90.             Positions(i,j) = (X1 + X2 + X3) / 3;  
  91.             
  92.         end
  93.     end
  94.     % 记录收敛曲线
  95.     l = l + 1;   
  96.     Convergence_curve(l) = Alpha_score;
  97. end
  98. %% 初始化种群
  99. function Positions = initialization(SearchAgents_no, dim, ub, lb)
  100. Boundary_no = size(ub,2); % 变量边界数量
  101. % 若变量边界相同,则进行统一处理
  102. if Boundary_no == 1
  103.     Positions = rand(SearchAgents_no, dim) .* (ub - lb) + lb;
  104. end
  105. % 若每个变量有不同的边界
  106. if Boundary_no > 1
  107.     for i = 1:dim
  108.         ub_i = ub(i);
  109.         lb_i = lb(i);
  110.         Positions(:,i) = rand(SearchAgents_no,1) .* (ub_i - lb_i) + lb_i;
  111.     end
  112. end
复制代码
总结

1. GWO 重要特点


  • 无需梯度信息,实用于复杂的黑箱优化题目。
  • 较少参数(仅有 a, A, C),易于实现和调解。
  • 全局收敛性强,具有良好的搜刮均衡本领。
  • 可用于连续优化题目,如函数优化、参数寻优、特性选择等。
2. GWO 实用场景


  • 函数优化题目(如 Ackley, Rastrigin, Rosenbrock)
  • 神经网络优化(权重、超参数调优)
  • 工业控制优化(PID 控制参数优化)
  • 路径规划(呆板人路径寻优)
  • 数据发掘(特性选择、聚类优化)

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表