【智能优化算法】河马优化算法(Hippopotamus optimization algorithm,HO)

河马优化算法(Hippopotamus optimization algorithm,HO)是发表在中科院二区期刊“Scientific Reports”的文章“Hippopotamus Optimization Algorithm: a Novel Nature-Inspired Optimization Algorithm”上的算法。

01.引言

河马优化算法(Hippopotamus optimization algorithm,HO)是通过从河马观察到的固有行为中汲取灵感而构思的,展示了一种创新的元启发式方法。HO在概念上是使用一个三相模型来定义的,该模型结合了它们在河流或池塘中的位置更新,对捕食者的防御策略和逃避方法,这些都是数学公式。在161个基准函数中,它在寻找最优值方面获得了115个最高排名,包括单峰和高维多峰函数,固定维多峰函数,以及CEC 2019测试套件和CEC 2014测试套件的10、30、50和100维度以及Zigzag模式基准函数,这表明HO在开发和探索方面都表现出了显著的熟练程度。此外,它有效地平衡了探索和利用,支持搜索过程。根据解决四个不同的工程设计挑战的结果,HO有效地实现了最有效的解决方案,同时坚持遵守指定的约束条件。HO算法的性能评估涵盖了各个方面,包括与WOA、GWO、SSA、PSO、SCA、FA、GOA、TLBO、MFO和IWO的比较,后者被认为是研究最广泛的元启发式算法,AOA是最近开发的算法,CMA - ES是高性能优化器,因其在IEEE CEC竞赛中取得成功而得到认可。

02.代码流程

HO从河马生活中观察到的三种突出的行为模式中获得灵感:河马群由几只雌性河马、河马幼崽、多只成年雄性河马和一只占统治地位的雄性河马(兽群的领袖)组成。由于它们天生的好奇心,幼河马和幼河马经常表现出离开群体的倾向。因此,它们可能会被孤立,成为捕食者的目标。河马的第二种行为模式本质上是防御性的,当它们受到捕食者的攻击或其他生物侵入它们的领地时,就会被触发。河马表现出一种防御反应,它们将自己旋转向捕食者,并利用它们强大的下颚和发声来阻止和击退攻击者(图1)。狮子和斑点鬣狗等捕食者意识到这一现象,并积极寻求避免直接接触河马强大的下颚,作为一种预防措施,防止潜在的伤害。最后一种行为模式包含了河马的本能反应,即逃离捕食者并积极寻求与潜在危险区域保持距离。在这种情况下,河马努力向最近的水域航行,比如河流或池塘,就像狮子和斑点鬣狗经常表现出对进入水生环境的厌恶一样。

03.部分代码

%% Designed and Developed by Mohammad Hussien Amiri and Nastaran Mehrabi Hashjin
function[Best_score,Best_pos,HO_curve]=HO(SearchAgents,Max_iterations,lowerbound,upperbound,dimension,fitness)
lowerbound=ones(1,dimension).*(lowerbound);                              % Lower limit for variables
upperbound=ones(1,dimension).*(upperbound);                              % Upper limit for variables
%% Initialization
for i=1:dimensionX(:,i) = lowerbound(i)+rand(SearchAgents,1).*(upperbound(i) - lowerbound(i));                          % Initial population
end
for i =1:SearchAgentsL=X(i,:);fit(i)=fitness(L);
end
%% Main Loop
for t=1:Max_iterations%% Update the Best Condidate Solution[best , location]=min(fit);if t==1Xbest=X(location,:);                                  % Optimal locationfbest=best;                                           % The optimization objective functionelseif best<fbestfbest=best;Xbest=X(location,:);endfor i=1:SearchAgents/2%% Phase1: The hippopotamuses position update in the river or pond (Exploration)Dominant_hippopotamus=Xbest;I1=randi([1,2],1,1);I2=randi([1,2],1,1);Ip1=randi([0,1],1,2);RandGroupNumber=randperm(SearchAgents,1);RandGroup=randperm(SearchAgents,RandGroupNumber);% Mean of Random GroupMeanGroup=mean(X(RandGroup,:)).*(length(RandGroup)~=1)+X(RandGroup(1,1),:)*(length(RandGroup)==1);Alfa{1,:}=(I2*rand(1,dimension)+(~Ip1(1)));Alfa{2,:}= 2*rand(1,dimension)-1;Alfa{3,:}= rand(1,dimension);Alfa{4,:}= (I1*rand(1,dimension)+(~Ip1(2)));Alfa{5,:}=rand;A=Alfa{randi([1,5],1,1),:};B=Alfa{randi([1,5],1,1),:};X_P1(i,:)=X(i,:)+rand(1,1).*(Dominant_hippopotamus-I1.*X(i,:));T=exp(-t/Max_iterations);if T>0.6X_P2(i,:)=X(i,:)+A.*(Dominant_hippopotamus-I2.*MeanGroup);elseif rand()>0.5X_P2(i,:)=X(i,:)+B.*(MeanGroup-Dominant_hippopotamus);elseX_P2(i,:)=((upperbound-lowerbound)*rand+lowerbound);endendX_P2(i,:) = min(max(X_P2(i,:),lowerbound),upperbound);L=X_P1(i,:);F_P1(i)=fitness(L);if(F_P1(i)<fit(i))X(i,:) = X_P1(i,:);fit(i) = F_P1(i);endL2=X_P2(i,:);F_P2(i)=fitness(L2);if(F_P2(i)<fit(i))X(i,:) = X_P2(i,:);fit(i) = F_P2(i);endend%% Phase 2: Hippopotamus defense against predators (Exploration)for i=1+SearchAgents/2 :SearchAgentspredator=lowerbound+rand(1,dimension).*(upperbound-lowerbound); L=predator;F_HL=fitness(L);distance2Leader=abs(predator-X(i,:));b=unifrnd(2,4,[1 1]);c=unifrnd(1,1.5,[1 1]);d=unifrnd(2,3,[1 1]);l=unifrnd(-2*pi,2*pi,[1 1]);RL=0.05*levy(SearchAgents,dimension,1.5);if fit(i)> F_HLX_P3(i,:)=RL(i,:).*predator+(b./(c-d*cos(l))).*(1./distance2Leader);elseX_P3(i,:)=RL(i,:).*predator+(b./(c-d*cos(l))).*(1./(2.*distance2Leader+rand(1,dimension)));endX_P3(i,:) = min(max(X_P3(i,:),lowerbound),upperbound);L=X_P3(i,:);F_P3(i)=fitness(L);if(F_P3(i)<fit(i))X(i,:) = X_P3(i,:);fit(i) = F_P3(i);endend%% Phase 3: Hippopotamus Escaping from the Predator (Exploitation)for i=1:SearchAgentsLO_LOCAL=(lowerbound./t);HI_LOCAL=(upperbound./t);Alfa{1,:}= 2*rand(1,dimension)-1;Alfa{2,:}= rand(1,1);Alfa{3,:}=randn;D=Alfa{randi([1,3],1,1),:};X_P4(i,:)=X(i,:)+(rand(1,1)).*(LO_LOCAL+D.* (HI_LOCAL-LO_LOCAL));X_P4(i,:) = min(max(X_P4(i,:),lowerbound),upperbound);L=X_P4(i,:);F_P4(i)=fitness(L);if(F_P4(i)<fit(i))X(i,:) = X_P4(i,:);fit(i) = F_P4(i);endendbest_so_far(t)=fbest;disp(['Iteration ' num2str(t) ': Best Cost = ' num2str(best_so_far(t))]);Best_score=fbest;Best_pos=Xbest;HO_curve=best_so_far;
end
end

04.代码效果图

获取代码请关注MATLAB科研小白的个人公众号(即文章下方二维码),并回复:智能优化算法本公众号致力于解决找代码难,写代码怵。各位有什么急需的代码,欢迎后台留言~不定时更新科研技巧类推文,可以一起探讨科研,写作,文献,代码等诸多学术问题,我们一起进步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/308413.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 1 in Python. Two Sum (两数之和)

两数之和算法思想很简单&#xff0c;即找到nums[i]和nums[j]target-(nums[i])返回[I, j ]即可。问题在于&#xff0c;简单的两层遍历循环时间复杂度为O()&#xff0c;而通过构建一个hash表就可将时间复杂度降至O(n)。本文给出两种方法的代码实现。 示例&#xff1a; 图1 两数之…

【noVNC】使用noVNC实现浏览器网页访问vnc(基于web的远程桌面)

1.VNC本身提供的http连接方式&#xff0c;可传输文件&#xff0c;画面有卡顿&#xff0c;需要安装jre 2.noVNC访问方式&#xff0c;不可传输文件&#xff0c;画面较为流畅&#xff0c;不用安装插件运行环境 一、noVNC 是什么 Web 端的Vnc软件&#xff0c;通过noVNC&#xff0…

[C++]让C++的opencv库支持写出h264格式视频

当我们写下面测试代码时候&#xff1a; #include <opencv2/opencv.hpp>int main() {cv::VideoCapture cap("E:\\car.mp4"); // 打开默认摄像头if (!cap.isOpened()) {std::cout << "读取完毕!" << std::endl;return -1;}double fps ca…

基于FPGA的以太网相关文章导航

首先需要了解以太网的一些接口协议标准&#xff0c;常见的MII、GMII、RGMII时序&#xff0c;便于后续开发。 【必读】从MII到RGMII&#xff0c;一文了解以太网PHY芯片不同传输接口信号时序&#xff01; 介绍一款比较老的以太网PHY芯片88E1518&#xff0c;具有RGMII接口&#xf…

【鸿蒙开发】第二十章 Camera相机服务

1 简介 开发者通过调用Camera Kit(相机服务)提供的接口可以开发相机应用&#xff0c;应用通过访问和操作相机硬件&#xff0c;实现基础操作&#xff0c;如预览、拍照和录像&#xff1b;还可以通过接口组合完成更多操作&#xff0c;如控制闪光灯和曝光时间、对焦或调焦等。 2 …

【C语言基础】:编译和链接(计算机中的翻译官)

文章目录 一、翻译环境和运行环境1. 翻译环境1.1 编译1.1.1 预处理1.1.2 编译1.1.3 汇编 1.2 链接 2. 运行环境 一、翻译环境和运行环境 我们在Visual Studio上写的C语言代码其实都是一些文本信息&#xff0c;计算机是不能够直接执行他们的&#xff0c;计算机只能够执行二进制…

web自动化测试系列-selenium xpath定位方法详解(六)

1.xpath介绍 XPath 是一门在 XML 文档中查找信息的语言。XPath 用于在 XML 文档中通过元素和属性进行导航。而html中也应用了这种语言 &#xff0c;所以 &#xff0c;我们定位html页面元素时也会用到xpath这种方法 。 2.xpath定位方式 xpath主要通过以下四种方法定位 &#…

Windows系统本地部署Jupyter Notebook并实现公网访问编辑笔记

文章目录 1.前言2.Jupyter Notebook的安装2.1 Jupyter Notebook下载安装2.2 Jupyter Notebook的配置2.3 Cpolar下载安装 3.Cpolar端口设置3.1 Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 在数据分析工作中&#xff0c;使用最多的无疑就是各种函数、图表、…

基于深度学习的智能停车场车牌识别计费系统(完整程序+训练数据集+开题报告+论文))

摘要 本篇论文研究的是基于车牌识别技术的智能停车场管理系统&#xff0c;采用基于深度学习的车牌识别算法&#xff0c;通过卷积神经网络对车牌图像进行处理和分析&#xff0c;实现车牌字符的识别和车牌信息的提取。同时&#xff0c;本文还设计了一个智能停车场管理系统&#x…

RTSP/Onvif视频安防监控平台EasyNVR调用接口返回匿名用户名和密码的原因排查

视频安防监控平台EasyNVR可支持设备通过RTSP/Onvif协议接入&#xff0c;并能对接入的视频流进行处理与多端分发&#xff0c;包括RTSP、RTMP、HTTP-FLV、WS-FLV、HLS、WebRTC等多种格式。平台拓展性强、支持二次开发与集成&#xff0c;可应用在景区、校园、水利、社区、工地等场…

[opencv]VideoWriter写出fourcc格式

fourcc支持的格式 fourcc全名Four-Character Codes&#xff0c;四字符代码&#xff0c;该编码由四个字符组成 cv2.VideoWriter_fourcc(O,O,O,O) cv2.VideoWriter_fourcc(*OOOO) 通常写法有上述两种形式&#xff0c;O代表一个字符&#xff0c;通常有 支持avi格式的有&#…

react17+18 中 setState是同步还是异步更新

在类组件中使用setState&#xff0c;在函数式组件中使用hooks的useState。 setstate目录 1. 类组件1.1 react 17版本1.2 react 18版本 2、函数式组件 1. 类组件 1.1 react 17版本 参考内容&#xff1a;第十一篇&#xff1a;setState 到底是同步的&#xff0c;还是异步的&…

Java 集合Collection

集合的体系 Collection的结构体系 List系列集合&#xff1a;添加的元素是有序的、可重复、有索引。Set系列集合&#xff1a;无序、不重复、无索引 HashSet&#xff1a;无序、不重复、无索引LinkedHashSet:有序、不重复、无索引TreeSet&#xff1a;按照大小默认升序排序、不重复…

数据结构--单链表

一.单链表的设计 1.单链表的结构定义: typedef struct Node{ int data;//数据域 struct Node* next;//后继指针 }Node,*List; 2.单链表的设计示意图: 3.注意: 单链表的最后一个节点的next域为NULL; 4.为什么要有一个头节点? 简单方便,不用传二级指针; 二.单链表的实现 …

韩顺平 | 零基础快速学Python(9~11) 排序查找

排序和查找 排序 排序&#xff1a;将多个数据按顺序排列。有冒泡、选择、插入、希尔、归并、快速、堆、计数、捅、基数排序。 冒泡排序 冒泡排序 Bubble Sorting&#xff1a;重复地走访需要排序地元素列表&#xff0c;依次比较相邻的元素&#xff0c;如果顺序错误就交换位置…

SSH穿透ECS访问内网RDS数据库

处于安全考虑&#xff0c;RDS一般只会允许指定的IP进行访问&#xff0c;而我们开发环境的IP往往是动态的&#xff0c;每次IP变动都需要去修改RDS的白名单&#xff0c;为我们的工作带来很大的不便。 那么如何去解决这个问题&#xff1f; 假如我们有一台ESC服务器&#xff0c;E…

简介:基于Web的产品3D

基于 Web 的产品 3D 通过可视化界面获得各种选项来个性化他们的产品&#xff0c;例如颜色、材料、尺寸、文字、徽标、零件等。 在过去几年中&#xff0c;随着 3D 建模和渲染软件的出现&#xff0c;3D 渲染现在更常用于营销和促销目的。设计师、制造商和营销人员使用 3D 产品渲…

【Kafka】Kafka 架构深入

Kafka 工作流程及文件存储机制 Kafka 中消息是以 topic 进行分类的&#xff0c;生产者生产消息&#xff0c;消费者消费消息&#xff0c;都是面向 topic 的。 topic 是逻辑上的概念&#xff0c;而 partition 是物理上的概念&#xff0c;每个 partition 对应于一个 log 文件&am…

11111111

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…

MT3020 任务分配

思路&#xff1a;利用二分找到某个时间是满足“k个人可以完成” &#xff0c;并且时间最小。 因为尽量让后面的人做任务&#xff0c;所以从后往前排任务&#xff08;倒着分配&#xff09;。从后往前遍历任务&#xff0c;如果此人加上这个任务超出之前求得的时间&#xff0c;就…