一、获取代码方式

获取代码方式1:
完整代码已上传我的资源:【优化算法】哈里斯鹰算法(HHO)【含Matlab源码 1309期】

获取代码方式2:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。

备注:
订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效);

二、哈里斯鹰算法简介

HHO算法用数学公式来模拟现实中哈里斯鹰在不同机制下捕捉猎物的策略.在HHO中,哈里斯鹰是候选解,猎物随迭代逼近最优解.HHO算法包括两个阶段:全局探索阶段、局部开采阶段。
1 全局探索阶段
在这一阶段中,哈里斯鹰处于等待状态,仔细检查和监控搜索空间[lb,ub]以发现猎物.它根据两种策略在随机的地方寻找猎物,迭代时以概率q进行位置更新,数学表达式为:

式中,Xt+1和Xt分别为哈里斯鹰第t+1次和第t次迭代时的位置,Xrabbit, t表示猎物第t次迭代时的位置,q和r1,r2,r3,r4是区间(0,1)内的随机数字,lb是搜索空间的下界,ub是搜索空间的上界,Xrand, t表示第t次迭代时哈里斯鹰的随机位置,Xm,t表示第t次迭代时哈里斯鹰的平均位置,公式如下:

2 过渡阶段
任何群智能算法的精确运行,需要保持探索和开采之间适当的平衡.HHO通过猎物的能量方程实现从探索到开采的过渡,其模型如下:

式中,E表示猎物逃跑的能量,E0是猎物能量的初始状态,公式为E0=2*rand-1,rand是(0,1)之间的随机数字,T为最大迭代次数,t为当前迭代次数.当|E|≥1时,哈里斯鹰算法将执行全局探索;否则,HHO算法进入局部开采.

3 局部开采阶段

在这一阶段,哈里斯鹰根据前一阶段的检测执行突袭攻击预期猎物,而猎物试图逃离危险.根据猎物的逃跑行为和哈里斯鹰的追逐策略,HHO算法提出了四种可能的策略来模拟攻击行为.用λ表示猎物成功逃脱的概率,当λ<0.5时,猎物逃脱成功;当λ≥0.5时,猎物逃脱失败.用参数E模拟哈里斯鹰软或硬的围攻策略.当|E|≥0.5时,执行软围攻;否则,执行硬围攻.
Case1:软围攻.当|E|≥0.5,λ≥0.5时,猎物有足够的能量且以跳跃的方式逃脱围捕,而哈里斯鹰会逐渐消耗猎物的能量,然后选择最佳的位置突袭俯冲逮捕猎物.更新位置的方程如下:

式中,Xt是迭代时猎物与哈里斯鹰的位置之差,J=2(1-r5)表示猎物逃跑过程中的随机跳跃,r5是介于0到1之间的随机数字.

Case2:硬围攻.当|E|<0.5,λ≥0.5时,猎物筋疲力尽,哈里斯鹰选择迅速突袭.位置更新如下:

Case3:累速俯冲式软围攻.当|E|≥0.5,λ<0.5时,猎物有足够的能量E逃跑,哈里斯鹰在突袭之前会建立一个软围攻.为了模拟猎物的逃跑模式和跳跃动作,将levy函数LF集成在HHO算法中.更新位置的策略为:

式中,D为问题维度,S为D维随机行向量.

Case4:累速俯冲式硬围攻.当|E|<0.5,λ<0.5时,猎物能量E低,哈里斯鹰在突袭前构建硬围攻捕捉猎物,位置更新如下:

HHO算法用猎物能量E和因子λ调节哈里斯鹰和猎物(兔子)之间的四种围捕机制,来实现优化求解问题。

三、部分源代码


clear all %#ok<CLALL>
close all
clcN=30; % Number of search agentsFunction_name='F1'; % Name of the test function T=500; % Maximum number of iterations% Load details of the selected benchmark function
[lb,ub,dim,fobj]=Get_Functions_details(Function_name);[Rabbit_Energy,Rabbit_Location,CNVG]=HHO(N,T,lb,ub,dim,fobj);%Draw objective space
figure,
hold on
semilogy(CNVG,'Color','b','LineWidth',4);
title('Convergence curve')
xlabel('Iteration');
ylabel('Best fitness obtained so far');
axis tight
grid off
box on
legend('HHO')display(['The best location of HHO is: ', num2str(Rabbit_Location)]);
display(['The best fitness of HHO is: ', num2str(Rabbit_Energy)]);function [Rabbit_Energy,Rabbit_Location,CNVG]=HHO(N,T,lb,ub,dim,fobj)disp('HHO is now tackling your problem')
tic
% initialize the location and Energy of the rabbit
Rabbit_Location=zeros(1,dim);
Rabbit_Energy=inf;%Initialize the locations of Harris' hawks
X=initialization(N,dim,ub,lb);CNVG=zeros(1,T);t=0; % Loop counterwhile t<Tfor i=1:size(X,1)% Check boundriesFU=X(i,:)>ub;FL=X(i,:)<lb;X(i,:)=(X(i,:).*(~(FU+FL)))+ub.*FU+lb.*FL;% fitness of locationsfitness=fobj(X(i,:));% Update the location of Rabbitif fitness<Rabbit_EnergyRabbit_Energy=fitness;Rabbit_Location=X(i,:);endendE1=2*(1-(t/T)); % factor to show the decreaing energy of rabbit% Update the location of Harris' hawksfor i=1:size(X,1)E0=2*rand()-1; %-1<E0<1Escaping_Energy=E1*(E0);  % escaping energy of rabbitif abs(Escaping_Energy)>=1%% Exploration:% Harris' hawks perch randomly based on 2 strategy:q=rand();rand_Hawk_index = floor(N*rand()+1);X_rand = X(rand_Hawk_index, :);if q<0.5% perch based on other family membersX(i,:)=X_rand-rand()*abs(X_rand-2*rand()*X(i,:));elseif q>=0.5% perch on a random tall tree (random site inside group's home range)X(i,:)=(Rabbit_Location(1,:)-mean(X))-rand()*((ub-lb)*rand+lb);endelseif abs(Escaping_Energy)<1%% Exploitation:% Attacking the rabbit using 4 strategies regarding the behavior of the rabbit%% phase 1: surprise pounce (seven kills)% surprise pounce (seven kills): multiple, short rapid dives by different hawksr=rand(); % probablity of each eventif r>=0.5 && abs(Escaping_Energy)<0.5 % Hard besiegeX(i,:)=(Rabbit_Location)-Escaping_Energy*abs(Rabbit_Location-X(i,:));endif r>=0.5 && abs(Escaping_Energy)>=0.5  % Soft besiegeJump_strength=2*(1-rand()); % random jump strength of the rabbitX(i,:)=(Rabbit_Location-X(i,:))-Escaping_Energy*abs(Jump_strength*Rabbit_Location-X(i,:));end%% phase 2: performing team rapid dives (leapfrog movements)if r<0.5 && abs(Escaping_Energy)>=0.5, % Soft besiege % rabbit try to escape by many zigzag deceptive motionsJump_strength=2*(1-rand());X1=Rabbit_Location-Escaping_Energy*abs(Jump_strength*Rabbit_Location-X(i,:));if fobj(X1)<fobj(X(i,:)) % improved move?X(i,:)=X1;else % hawks perform levy-based short rapid dives around the rabbitX2=Rabbit_Location-Escaping_Energy*abs(Jump_strength*Rabbit_Location-X(i,:))+rand(1,dim).*Levy(dim);if (fobj(X2)<fobj(X(i,:))), % improved move?X(i,:)=X2;endendendif r<0.5 && abs(Escaping_Energy)<0.5, % Hard besiege % rabbit try to escape by many zigzag deceptive motions% hawks try to decrease their average location with the rabbitJump_strength=2*(1-rand());X1=Rabbit_Location-Escaping_Energy*abs(Jump_strength*Rabbit_Location-mean(X));if fobj(X1)<fobj(X(i,:)) % improved move?X(i,:)=X1;else % Perform levy-based short rapid dives around the rabbitX2=Rabbit_Location-Escaping_Energy*abs(Jump_strength*Rabbit_Location-mean(X))+rand(1,dim).*Levy(dim);if (fobj(X2)<fobj(X(i,:))), % improved move?X(i,:)=X2;endendend%%endendt=t+1;CNVG(t)=Rabbit_Energy;
%    Print the progress every 100 iterations
%    if mod(t,100)==0
%        display(['At iteration ', num2str(t), ' the best fitness is ', num2str(Rabbit_Energy)]);
%    end
end
toc
end

四、运行结果

五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.

【优化算法】哈里斯鹰算法(HHO)【含Matlab源码 1309期】相关推荐

  1. 【优化算法】灰狼优化算法(GWO)【含Matlab源码 1305期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[优化算法]灰狼优化算法(GWO)[含Matlab源码 1305期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: 付费专栏优化 ...

  2. 【优化算法】改进的灰狼优化算法(IGWO)【含Matlab源码 1349期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[优化算法]改进的灰狼优化算法(IGWO)[含Matlab源码 1349期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: 付费 ...

  3. 【优化算法】多目标灰狼优化算法(MOGWO)【含Matlab源码 099期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[优化算法]多目标灰狼优化算法(MOGWO)[含Matlab源码 099期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: 付费 ...

  4. 【优化算法】改进的侏儒猫鼬优化算法(IDMO)【含Matlab源码 2314期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[优化算法]改进的侏儒猫鼬优化算法(IDMO)[含Matlab源码 2314期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...

  5. 【优化算法】象群游牧优化算法(EHO)【含Matlab源码 1080期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[优化算法]象群游牧优化算法(EHO)[含Matlab源码 1080期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: 付费专 ...

  6. 【优化算法】猫群优化算法(CSO)【含Matlab源码 1071期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[优化算法]猫群优化算法(CSO)[含Matlab源码 1071期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: 付费专栏M ...

  7. 【优化算法】黑洞模拟算法(MVO)【含Matlab源码 479期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[优化算法]黑洞模拟算法(MVO)[含Matlab源码 479期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: 付费专栏Ma ...

  8. 【优化算法】多目标蚁狮优化算法(MOALO)【含Matlab源码 1598期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[优化算法]多目标蚁狮优化算法(MOALO)[含Matlab源码 1598期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...

  9. 【故障检测问题】基于matlab免疫算法求解故障检测问题【含Matlab源码 196期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[故障检测问题]基于matlab免疫算法求解故障检测问题[含Matlab源码 196期] 获取代码方式2: 通过订阅紫极神光博客付费专栏,凭 ...

  10. 【图像增强】基于matlab萤火虫算法图像对比度增强【含Matlab源码 2142期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[图像增强]基于matlab萤火虫算法图像对比度增强[含Matlab源码 2142期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方 ...

最新文章

  1. 思必驰发布AI芯片,透视智能语音企业的商业化历程
  2. 斯洛文尼亚接受BCH支付的商家达343家,日本和北昆士兰州对BCH接受度增长迅速
  3. Java大数一些个人的见解
  4. 使用Jmeter 创建Post请求
  5. 在线安装TIDB集群
  6. typora公式zuo对齐_Markdown编辑神器-Typora
  7. python 百分比数据_如何使用python计算数据列相对于另一列的百分比排名
  8. 云财经服务器维护,云财经服务器维护
  9. Building A New Barn(POJ-3269)
  10. MySQL-based databases CVE-2016-6664 本地提权
  11. 以太坊2.0合约余额新增3872 ETH
  12. DSP2812开发板学习
  13. xshell查看hdfs文件目录路径_hdfs的shell操作
  14. 微信小程序开发者工具平台+Hbuilder开发平台下载
  15. aplay 源码分析
  16. WEB前端开发实践 仿Apple官网首页 HTML+CSS+JS
  17. 春节晚报 | 2月1日 星期二 | 快手推出首届“新春招工会”;罗永浩称“不做VR和元宇宙”;戴姆勒正式更名为梅赛德斯-奔驰...
  18. string之取子串
  19. 万元怎样保留小数点_如何让数字以万元为单位显示并保留2位小数,且有千位分隔符...
  20. 【转发】晶圆到底是什么?台积电为什么被称为晶圆厂?

热门文章

  1. Express4.x API (一):application (译)
  2. MyEclipse使用总结——在MyEclipse中新建Maven框架的web项目[转]
  3. ASP.NET中的TextBox下划线
  4. 我要看的学习网站——php
  5. 第二讲 JavaScript基本数据结构
  6. 妙用javascript
  7. 第9章 逻辑回归 学习笔记 上
  8. ARKit 和 ARCore剖析、结构、原理介绍
  9. 深度学习CNN, R-CNN
  10. Leapmotion 找到那双手和一些交互案例