news 2026/5/11 10:53:19

优化算法总能让工程师们又爱又恨——既要收敛快又要防早熟,哈里斯鹰优化HHO倒是给了个野性十足的解法。这算法把猛禽捕猎过程拆得明明白白,咱们直接看代码实现最实在

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
优化算法总能让工程师们又爱又恨——既要收敛快又要防早熟,哈里斯鹰优化HHO倒是给了个野性十足的解法。这算法把猛禽捕猎过程拆得明明白白,咱们直接看代码实现最实在

哈里斯鹰优化算法 HHO (matlab代码,包含23个常用的基准测试函数)可直接运行效果如图所示

先看主函数骨架,参数设置够直白:

function [Rabbit_Energy,Rabbit_Location]=HHO(nfe_max,N,lb,ub,dim,fobj) % 输入参数: % nfe_max - 最大评估次数 % N - 种群数量 % lb/ub - 变量上下界 % dim - 维度 % fobj - 目标函数句柄 % 初始化种群 X=initialization(N,dim,ub,lb); Fitness=zeros(1,N); for i=1:N Fitness(i)=fobj(X(i,:)); end [Rabbit_Energy,idx]=min(Fitness); Rabbit_Location=X(idx,:); nfe = N;

这里初始化阶段就带着点小技巧:每个个体随机撒网,立刻计算适应度。注意nfe这个计数器,后面每次评估都要更新,控制算法停止的关键。

核心迭代部分才是重头戏:

while nfe < nfe_max E1=2*(1-(nfe/nfe_max)); % 逃逸能量线性递减 for i=1:size(X,1) E0=2*rand()-1; E=E1*E0; if abs(E) >= 1 % 探索阶段 q = rand(); if q >= 0.5 X(i,:) = (ub-lb)*rand()+lb; % 全局随机游走 else X(i,:)=Rabbit_Location - rand().*abs(Rabbit_Location - 2*rand().*X(i,:)); end else % 开发阶段 r=rand(); if r>=0.5 && abs(E)<0.5 % 软围攻 Jump_strength=2*(1-rand()); X(i,:)= Rabbit_Location - E*abs(Jump_strength*Rabbit_Location - X(i,:)); else % 硬围攻 X(i,:)= (Rabbit_Location - mean(X)) - E*rand().*... (ub-lb)*rand()+lb; end end % 边界处理 Flag4ub=X(i,:)>ub; Flag4lb=X(i,:)<lb; X(i,:)=(X(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb; % 更新最优 Fnew=fobj(X(i,:)); nfe=nfe+1; if Fnew<Rabbit_Energy Rabbit_Energy=Fnew; Rabbit_Location=X(i,:); end end end

这段把猛禽捕猎的四个阶段浓缩在条件判断里:当|E|≥1时全局搜索,否则进入局部开发。特别留意E的计算方式——随着迭代次数增加,E1线性减小,导致算法后期更倾向于精细搜索。

测试函数咱们准备了23个经典基准函数,拿Rastrigin函数举个栗子:

function o = F1(x) o=sum(x.^2 - 10*cos(2*pi*x) + 10); end

跑分的时候要注意维度变化对结果的影响,通常测试需要跑30次取平均值。调用方式也简单:

fhandle=@F1; dim=30; [bestX,bestF]=HHO(10000,50,-5.12,5.12,dim,fhandle);

实际运行会发现,HHO在前期收敛速度极快,但后期容易在最优解附近震荡。这时候可以调整逃逸能量公式,比如把线性递减改成指数形式:

E1=2*(exp(-0.05*nfe/nfe_max)); % 修改能量递减方式

这么一改,后期震荡明显减弱,适应度值还能再降个数量级。

最后说个实战技巧——处理高维问题时,在边界检查后加个扰动操作,能有效防止早熟:

if rand()>0.8 X(i,:)=X(i,:).*(1+0.01*randn(size(X(i,:)))); % 高斯扰动 end

这招在100维以上的测试中效果拔群,谁用谁知道。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/9 18:19:00

JSMpeg代码压缩与性能优化终极指南

JSMpeg代码压缩与性能优化终极指南 【免费下载链接】jsmpeg MPEG1 Video Decoder in JavaScript 项目地址: https://gitcode.com/gh_mirrors/js/jsmpeg 作为纯JavaScript实现的MPEG1视频解码器&#xff0c;JSMpeg通过精密的代码压缩和性能优化技术&#xff0c;在保持功能…

作者头像 李华
网站建设 2026/5/9 19:04:19

从深度学习基础到Stable Diffusion算法实践

今天&#xff0c;我们发布了名为《从深度学习基础到Stable Diffusion》的新课程&#xff0c;这是《程序员实用深度学习》课程的第二部分。 这个课程包含了超过30小时的视频内容&#xff0c;我们将从零开始实现令人惊叹的Stable Diffusion算法&#xff01;正是这款杀手级应用让互…

作者头像 李华
网站建设 2026/5/10 12:37:57

在浏览器中重温经典:Emupedia网页复古游戏模拟器终极体验

在浏览器中重温经典&#xff1a;Emupedia网页复古游戏模拟器终极体验 【免费下载链接】emupedia.github.io The purpose of Emupedia is to serve as a nonprofit meta-resource, hub and community for those interested mainly in video game preservation which aims to dig…

作者头像 李华
网站建设 2026/5/10 14:49:45

HTML+CSS美化PyTorch实验报告页面设计

HTMLCSS美化PyTorch实验报告页面设计 在深度学习项目中&#xff0c;跑通一个模型只是第一步。真正决定研究价值能否被认可、成果能否高效传播的&#xff0c;往往是那份“看得见”的实验报告。你有没有遇到过这样的场景&#xff1a;组会上展示的Jupyter Notebook满屏代码与原始输…

作者头像 李华
网站建设 2026/5/10 5:34:48

PyTorch安装踩坑总结:常见错误及解决方案大全(附Miniconda镜像)

PyTorch安装踩坑总结&#xff1a;常见错误及解决方案大全&#xff08;附Miniconda镜像&#xff09; 在深度学习项目启动的第一天&#xff0c;你兴致勃勃地打开终端&#xff0c;准备安装PyTorch——结果却卡在了第一步&#xff1a;包冲突、CUDA不识别、Jupyter找不到环境……这…

作者头像 李华
网站建设 2026/5/10 1:01:27

如何通过Conda快速安装TensorFlow和PyTorch双框架?

如何通过 Conda 快速安装 TensorFlow 和 PyTorch 双框架 在深度学习项目开发中&#xff0c;一个常见但令人头疼的问题是&#xff1a;如何让 TensorFlow 和 PyTorch 在同一台机器上和谐共存&#xff1f;更进一步地&#xff0c;如何确保这个环境不仅能在本地跑通&#xff0c;还能…

作者头像 李华