哈里斯鹰优化(HHO)算法(含MATLAB代码)

先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法,经典的,或者是近几年提出的新型智能优化算法,并附带MATLAB代码。

这篇文章在这里:点一下

哈里斯鹰优化(HHO)算法:

哈里斯鹰优化(Harris Hawk Optimization, HHO)算法是2019年提出的一种群智能优化算法,由德黑兰大学的Heidari等人提出。HHO算法的寻优能力强,并且没有繁琐的调参环节。它的原始参考文献如下:

Heidari A A, Mirjalili S, Faris H, et al. Harris hawks optimization: Algorithm and applications[J]. Future generation computer systems, 2019, 97: 849-872.

这里先分享一个WOS上的数据,HHO算法在提出的3年时间里,被广泛引用和研究。如图1所示,HHO算法是一个被高引的工作,具有广泛的认可度。所以,这一期的推送,还是值得大家看一下~

图1 HHO算法在WOS上的引用数据
 

01
灵感来源

哈里斯鹰捕捉猎物的主要战术是突袭。在这种策略中,几只鹰试图从不同的方向合作攻击。捕杀可能会在几秒钟内迅速完成,但考虑到猎物的逃跑能力,捕杀也可能会持续几分钟。哈里斯鹰会在猎物附近进行多次短距离的俯冲,如图1所示。哈里斯鹰可以根据环境的动态性质和猎物的逃跑模式,展示出各种各样的追逐方式。

图1 哈里斯鹰短距离俯冲

当最好的鹰(首领)俯冲捕食猎物时,往往会出现转换策略,追逐将由另一名成员继续进行。这种转换有利于迷惑逃跑的猎物。这种战术的主要优势是,哈里斯鹰可以将猎物追到筋疲力尽,最后,其中一只鹰(通常是最强大和最有经验的鹰)毫不费力地抓住了疲惫的猎物,并与其他成员分享。

因此,HHO算法是基于哈里斯鹰捕食猎物的过程而提出的智能优化算法,通过对哈里斯鹰不同捕食策略的数学建模,实现种群的进化。算法设计相对复杂,计算公式较多,但大部分公式是相似的。

02
算法设计

HHO算法主要分为三部分:勘探、勘探与开发的转换、开发。与往期推送一样,目前我还不会在公众号里编辑数学公式。因此,这部分内容在Word文档里先写好,然后做成图片,最后导入。

图2 HHO算法勘探与开发的转换方式

由此,作者便通过模拟哈里斯鹰捕食猎物的行为设计出了HHO算法。HHO算法的计算公式较多,但并没有涉及参数的选取,也就是说,HHO算法的性能基本不受参数的影响,参数灵敏度低。此外,HHO算法的位置更新公式较多,实际上都是高度相似的,看起来确实有点恐怖,但也有效地平衡了算法的勘探与开发。
 

03
计算流程

HHO算法虽然计算公式多,但并没有增加额外的循坏,只是存在更多的判断步骤。只要理清楚每个判断下的具体位置更新方式就能弄清它的计算流程了。这里我用visio绘制了HHO算法的计算流程图,如图3所示。大家跟着我的流程图进行编码,就很容易了~

图3 HHO算法的计算流程

04
实验仿真

HHO算法的设计相对来说,比较复杂,计算公式较多,计算流程也比较繁琐。这里就来检验一下作者通过牺牲一定的计算量是否换来了算法的先进性能。HHO算法的MATLAB程序是严格按照它的原始参考文献进行编码的。此外,种群规模N我取的50,最大迭代次数T为500,问题维度D为50,基准函数采用的是CEC2005。

这里以多峰函数Ackley、Levy和单峰函数Zakharov为例,展示HHO算法在50维环境下的收敛效果,如图4所示。这里就不再进一步做分析了。

(a) Ackley

(b) Levy

(c) Zakharov

图4 HHO算法的收敛曲线

05
MATLAB代码

HHO算法的MATLAB代码可关注公众号获取。代码严格按照原始参考文献编写,附有详细注释。我个人建议是自己动手编,在理清算法计算流程后,编码是非常容易的!

关于其他智能优化算法的介绍,可关注我的个人公众号:启发式算法讨论

  • 17
    点赞
  • 79
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
哈里斯鹰优化算法(Harris Hawks Optimization, HHO)是一种基于鹰群行为的优化算法,用于解决优化问题。下面是一个简单的HHO算法的Python代码示例: ```python import random import numpy as np def hho_algorithm(objective_function, lb, ub, dim, max_iter, num_hawks): # 初始化鹰的位置和速度 hawks_position = np.zeros((num_hawks, dim)) hawks_velocity = np.zeros((num_hawks, dim)) hawks_fitness = np.zeros(num_hawks) # 初始化最优解和最优适应度 best_solution = np.zeros(dim) best_fitness = float("inf") # 随机初始化鹰的位置 for i in range(num_hawks): hawks_position[i] = lb + (ub - lb) * np.random.rand(dim) hawks_fitness[i] = objective_function(hawks_position[i]) # 更新最优解和最优适应度 if hawks_fitness[i] < best_fitness: best_solution = hawks_position[i] best_fitness = hawks_fitness[i] # 主循环 for t in range(max_iter): # 更新每只鹰的速度和位置 for i in range(num_hawks): # 随机选择两只鹰作为“追逐者”和“被追逐者” r1 = random.randint(0, num_hawks - 1) r2 = random.randint(0, num_hawks - 1) while r1 == i or r2 == i or r1 == r2: r1 = random.randint(0, num_hawks - 1) r2 = random.randint(0, num_hawks - 1) # 更新速度和位置 hawks_velocity[i] = hawks_velocity[i] + (hawks_position[r1] - hawks_position[i]) + (hawks_position[r2] - hawks_position[i]) hawks_position[i] = hawks_position[i] + hawks_velocity[i] # 边界处理 hawks_position[i] = np.clip(hawks_position[i], lb, ub) # 更新适应度 hawks_fitness[i] = objective_function(hawks_position[i]) # 更新最优解和最优适应度 if hawks_fitness[i] < best_fitness: best_solution = hawks_position[i] best_fitness = hawks_fitness[i] return best_solution, best_fitness ``` 在上述代码中,`objective_function`是待优化的目标函数,`lb`和`ub`是变量的上下界,`dim`是变量的维度,`max_iter`是最大迭代次数,`num_hawks`是鹰的数量。算法通过不断更新鹰的速度和位置来寻找最优解。 请注意,这只是一个简单的示例代码,实际使用时可能需要根据具体问题进行适当的修改和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

algorithmzzy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值