捕食者优化算法,原理详解,MATLAB代码免费获取

捕食者优化算法(Hunter–prey optimization,HPO)是一种受自然启发的群智能优化算法。该算法的灵感来自于捕食动物(如狮子、豹和狼)以及猎物(如雄鹿和瞪羚)的行为。动物狩猎行为有很多场景,其中一些场景已经转化为优化算法。本文使用的场景不同于以往算法的场景。在提出的方法中,猎物和捕食者种群,捕食者攻击远离猎物种群的猎物。猎人调整他的位置朝向远处的猎物,猎物也调整他的位置朝向安全的地方。搜索代理的位置是适应度函数的最佳值,被认为是安全的地方。

cc9ed5f566a24f145f275f6f80c25a9c.png

该成果于2022年发表在计算机领域三区期刊Algorithm and applications上,目前在谷歌学术上被引率134次。

6027993049db054e98b47569e6f90075.png

狩猎-猎物循环是种群生物学中最引人注目的观察之一,本文所考虑的场景不同于其他场景。本文的场景是猎人寻找猎物,因为猎物通常是成群的,猎人选择一个远离群体的猎物。当猎人找到猎物后,他会追逐猎物。与此同时,猎物在捕食者的攻击中寻找食物和逃脱,并到达一个安全的地方。

1、算法原理

(1)种群初始化

首先,将初始种群随机设置为 ,然后将目标函数计算为 。种群的控制和指导在搜索空间中使用一系列的规则和策略所提出的算法的启发。重复该过程,直到算法停止。在每一次迭代中,种群中的每个成员的位置根据所提出的算法的规则进行更新,并与目标函数的新的位置进行评估。这个过程使得解决方案在每次迭代中得到改进。初始种群的每个成员的位置是在搜索空间中随机生成的,公式如下

其中Xi是猎人位置或猎物,lb是问题变量的最小值(下边界),ub是问题变量的最大值(上边界),d是问题的变量数(维数)。以下公式定义了搜索空间的下边界和上边界。

(2)目标函数定义

在生成初始种群并确定每个智能体的位置之后,使用目标函数 来计算每个解决方案的适应度。F(x)可以是最大值(效率、性能等)或最小值(成本、时间等)。计算适应度函数决定了哪个解决方案是好的还是坏的。在发现有希望的区域之后,必须减少随机行为,以便算法能够在有希望的区域周围搜索,这涉及到开发。对于猎人搜索机制,本文提出以下公式

方程更新了猎人的位置,其中x(t)是当前猎人的位置,x(t +1)为猎人的下一个位置,Ppos为猎物的位置,Z为由下式计算的自适应参数。

88a0f3067fe71d1e3e3d7b9e37a82caa.png

式中,R1、R3为[0,1]范围内的随机向量,P为0、1等于问题变量个数的随机向量,R2为[0,1]范围内的随机数, IDX为满足条件(P = 0)的向量R1的索引号。

C是勘探和开发之间的平衡参数,其值在迭代过程中从1减小到0.02。C的计算公式如下:

其中,它是当前迭代值,MaxIt是迭代的最大次数。如图所示,计算猎物的位置(Ppos),因此首先根据以下公式计算所有位置(l)的平均值,然后计算每个搜索代理与该平均位置的距离

根据以下公式计算基于欧几里得距离的距离。

根据以下公式,将距离位置均值距离最大的搜索代理称为猎物(Ppos)。

如果每次迭代中总是考虑与平均位置距离最大的搜索代理,则算法收敛较晚。根据狩猎场景,当猎人捕获猎物时,猎物会死亡,下一次,猎人会转向新的猎物。为了解决这个问题,本文考虑一个递减机制,公式如下

其中N为搜索代理的数量。

现在,本文将猎物位置计算为以下公式

下图显示了在算法运行期间如何计算Kbest和选择猎物(Ppos)。在算法开始时,Kbest的值等于N(搜索代理数)。因此,最后一个距离搜索agent平均位置(l)最远的搜索agent被选择为猎物,并被猎人攻击。如图所示,Kbest值逐渐减小,以至于在算法结束时,Kbest值等于第一个搜索代理。需要说明的是,在每次迭代中,搜索代理是根据到搜索代理平均位置的距离来排序的。

c246fc3bed5b34778b27d17ec3c21192.png

当猎物受到攻击时,它会试图逃离并到达安全的地方。

本文假设最安全的位置是全局最优的位置,因为它会给猎物更大的生存机会,猎人可能会选择其他猎物。提出下式来更新猎物位置

其中x(t)是猎物的当前位置,x (t+1)为猎物的下一个位置,Tpos为全局最优位置,Z为自适应参数,R4为[- 1,1]范围内的随机数。C是探索和开发之间的平衡参数,其值随着算法的迭代而减小。COS函数及其输入参数允许下一个猎物位置定位在全局最优的不同径向和角度,从而提高捕食阶段的性能。

这里出现的问题是如何在这个算法中选择猎人和猎物。为了回答这个问题,本文将等式结合起来。

其中R5是范围[0,1]内的随机数,b是调节参数,其在本研究中的值设定为0.1。如果R5值小于B,则搜索代理被认为是猎人,并且搜索代理的下一个位置用等式更新。

HPO对应的算法流程图如下所示。

b07ce37ab89671ce2680d7df23817fa9.png

2、结果展示

b9d34f6df809372da41893bec4659f66.png

65516b6e2a2adf3fd7c9c03c39fd22c8.png

1fb7da165de9b06acb09ef3f0076ab56.png

3、MATLAB核心代码

%% 淘个代码 %%
% 微信公众号搜索:淘个代码,获取更多代码
% 捕食者优化算法(HPO)%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc;
clear;
close all;
tic
function_name='F1';
[dim,CostFunction,ub, lb]  = Select_Functions(function_name);
%% HPO ParametersMaxIt = 500;     % Maximum Nomber of IterationsnPop = 30;         % Population SizeConvergence_curve = zeros(1,MaxIt);
% Constriction Coefeicient
B = 0.1;
%% InitializationHPpos=rand(nPop,dim).*(ub-lb)+lb;
% for i=1:nPop
%     HPposFitness(i)=inf;
% end% Evaluate
for i=1:size(HPpos,1)
HPposFitness(i)=CostFunction(HPpos(i,:));       
end
% NFE = nPop;[~,indx] = min(HPposFitness);
% Target = HPpos(indx,:);   % Target HPOTargetScore =HPposFitness(indx);Convergence_curve(1)=TargetScore;
%nfe = zeros(1,MaxIt);
%% HPO Main Loop
for it = 2:MaxItc = 1 - it*((0.98)/MaxIt);   % Update C Parameterkbest=round(nPop*c);        % Update kbestfor i = 1:nPopr1=rand(1,dim)<c;r2=rand;r3=rand(1,dim);idx=(r1==0);z=r2.*idx+r3.*~idx;
%             r11=rand(1,dim)<c;
%             r22=rand;
%             r33=rand(1,dim);
%             idx=(r11==0);
%             z2=r22.*idx+r33.*~idx;if rand<Bxi=mean(HPpos);dist = pdist2(xi,HPpos);[~,idxsortdist]=sort(dist);SI=HPpos(idxsortdist(kbest),:);HPpos(i,:) =HPpos(i,:)+0.5*((2*(c)*z.*SI-HPpos(i,:))+(2*(1-c)*z.*xi-HPpos(i,:)));elsefor j=1:dimrr=-1+2*z(j);HPpos(i,j)= 2*z(j)*cos(2*pi*rr)*(Target(j)-HPpos(i,j))+Target(j);endend  HPpos(i,:) = min(max(HPpos(i,:),lb),ub);% EvaluationHPposFitness(i) = CostFunction(HPpos(i,:));% Update Targetif HPposFitness(i)<TargetScore Target = HPpos(i,:);TargetScore = HPposFitness(i);endendConvergence_curve(it)=TargetScore;disp(['Iteration: ',num2str(it),' Best Cost = ',num2str(TargetScore)]);end
toc

参考文献

[1]Naruei I, Keynia F, Sabbagh Molahosseini A. Hunter–prey optimization: Algorithm and applications[J]. Soft Computing, 2022, 26(3): 1279-1314.

完整代码获取

后台回复关键词:

TGDM166

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

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

相关文章

如何选择一款安全高效的数据自动同步工具?

随着科技的不断发展&#xff0c;企业处理的数据量愈发庞大。数字化浪潮的涌现使得数据在业务活动和决策中的角色变得日益重要&#xff0c;然而这些数据往往分布在不同的位置&#xff0c;需要进行同步和分类&#xff0c;以便更有效地利用。以下是一些常见的数据自动同步场景&…

UE5 像素流web 交互2

进来点个关注不迷路谢谢&#xff01; ue 像素流交互多参数匹配 主要运用像素流的解析json 状态&#xff1a; 测试结果&#xff1a; 浏览器控制台&#xff1a; 接下来编写事件传递 关注下吧&#xff01;

模板编译之入口分析

Vue 是一个渐进式 JavaScript 框架&#xff0c;提供了简单易用的模板语法&#xff0c;帮助开发者以声明式的方式构建用户界面。Vue 的模板编译原理是其核心之一&#xff0c;它将模板字符串编译成渲染函数&#xff0c;并在运行时高效地更新 DOM。本文将深入探讨 Vue 模板编译的原…

【机器学习300问】96、怎么理解卷积神经网络CNN中的卷积操作?

卷积操作是卷积神经网络&#xff08;CNN&#xff09;中的一种核心组件。要讲清楚卷积操作&#xff0c;我们只需要回答以下四个问题&#xff1a;什么是卷积核&#xff1f;卷积运算的规则是什么&#xff1f;padding是什么&#xff1f;stride是什么&#xff1f; 下面让我以图像处理…

27寸2K显示器 - HKC G27H2

HKC G27H2是一款面向电竞市场的高性能显示器&#xff0c;以其2K分辨率和180Hz的刷新率作为主要卖点&#xff0c;旨在为玩家提供流畅而清晰的视觉体验。配备HDR 400技术和95% DCI-P3色域覆盖&#xff0c;这款显示器还支持升降旋转支架&#xff0c;为用户提供了高度的人体工程学适…

阿尔杰姆·卢金采访

近年来&#xff0c;在中俄两国元首亲自擘画、战略引领下&#xff0c;两国新时代全面战略协作伙伴关系成熟坚韧、稳如泰山&#xff0c;树立了新型大国关系的新范式。中俄关系走出了一条大国战略互信、邻里友好的相处之道&#xff0c;给两国人民带来了实实在在的好处&#xff0c;…

Python爬虫:爬取B站视频(最新、能用且讲解详细)【01】

&#x1f4da;博客主页&#xff1a;knighthood2001 ✨公众号&#xff1a;认知up吧 &#xff08;目前正在带领大家一起提升认知&#xff0c;感兴趣可以来围观一下&#xff09; &#x1f383;知识星球&#xff1a;【认知up吧|成长|副业】介绍 ❤️如遇文章付费&#xff0c;可先看…

Android Notes

maven 版本发布 1、小于 AGP7 使用 maven 插件 apply plugin: maven uploadArchives {repositories {mavenDeployer {pom.groupId GROUP_IDpom.artifactId ARTIFACT_IDpom.version VERSION//正式版本repository(url: RELEASE_URL) {authentication(userName: userName, p…

世界上首位AI程序员诞生,AI将成为人类的对手吗?

3月13日&#xff0c;世界上第一位AI程序员Devin诞生&#xff0c;不仅能自主学习新技术&#xff0c;自己改Bug&#xff0c;甚至还能训练和微调自己的AI模型&#xff0c;表现已然远超GPT-4等“顶流选手”。 AI的学习速度如此之快&#xff0c;人类的教育能否跟上“机器学习”的速…

SQLServer表变量

表变量是本地变量的一种特殊类型&#xff0c;它有助于临时存储数据; 要声明表变量&#xff0c;使用declare,而局部变量的名称必须以符号开头&#xff1b; TABLE关键字指定此变量是表变量&#xff0c;然后还要定义列名和数据类型&#xff1b; 下面定义一个表变量&#xff0c…

嵌入式全栈开发学习笔记---C语言笔试复习大全21(编程题25~30)

目录 25、实现字符串的排序。&#xff08;输入hello world good&#xff0c;输出good hello world&#xff0c;其中字符串个数任意&#xff09; 26、输入两个有序的字符串&#xff08;从小到大&#xff09;&#xff0c;合并成一个有序的字符串。&#xff08;输入cdhxyz fjln …

1076: 判断给定有向图是否存在回路

解法&#xff1a; 直观的方法用邻接矩阵dfs,这是错误的代码 #include<iostream> #include<vector> using namespace std; int arr[100][100]; int f 0; void dfs(vector<int>& a, int u) {a[u] 1;for (int i 0; i < a.size(); i) {if (arr[u][i]…

2024 一键批量下载微博内容/图片/视频/评论/转发数据,导出excel和pdf

以李健的微博为例&#xff0c;抓取2010-2024年所有的微博数据excel&#xff0c;包含微博链接&#xff0c;微博内容&#xff0c;发布时间&#xff0c;点赞数&#xff0c;转发数&#xff0c;评论数&#xff0c;话题等。 每个月的微博转评赞总数曲线&#xff0c;2015年是高峰。 微…

Centos7静态路由和动态路由

路由&#xff0c;即路由选择&#xff08;Routing&#xff09;&#xff0c;是指在计算机网络中选择数据传输路径的过程。路由器&#xff08;Router&#xff09;是执行路由选择功能的网络设备。路由的主要目的是在复杂的网络结构中&#xff0c;选择最佳路径将数据包从源节点传递到…

自回归模型(二):具有自回归误差的回归

让我们考虑一个问题&#xff0c;其中我们有一个y变量和多个x变量&#xff0c;它们都被测量为时间序列。举个例子&#xff0c;我们可以将y设定为高速公路上每月的事故数量&#xff0c;而x则表示每月在高速公路上的交通量&#xff0c;观测时间为连续的120个月。一个多元&#xff…

使用 MPI 做 3D 带状矩阵的转置

目的&#xff1a;整个大矩阵从 [Nx, Ny, Nz] 转到 [Nz, Nx, Ny] 每个进程的输入&#xff1a;大矩阵的 [Nx / total_proc_num, Ny, Nz] 的部分 每个进程的输出&#xff1a;大矩阵的 [Nz / total_proc_num, Nx, Ny] 的部分 一开始我大概有一个想法&#xff0c;假设两个进程的话…

HTTP 请求的完整过程

HTTP 请求的完整过程 当用户在浏览器输入网址回车之后&#xff0c;网络协议都做了哪些工作呢? 首先工作的是 浏览器应用程序&#xff0c;他要解析出 URL中的域名 根据域名获取对应的ip地址&#xff0c;首先从浏览器缓存中査看&#xff0c;如下可以査看浏览器中域名对应ip的解…

想当安卓开发工程师?学习路线分享!

安卓开发学习路线 在前几篇文章中,对安卓开发岗位的岗位要求做了一些科普,本节文章将介绍安卓开发岗位的学习路线。 目前,网络上有很多面经、算法题解、算法课等学习资料,如何合理利用这些资料成为技术求职者的一大困惑。笔者整理了一份安卓开发岗位学习路线供大家参考,…

两篇文章讲透数据结构之堆(一)!

目录 1.堆的概念 2.堆的实现方式 3.堆的功能 4.堆的声明 5.堆的实现 5.1堆的初始化 5.2堆的插入 5.2.1向上调整算法 5.2.2堆的插入 5.3堆的删除 5.3.1向下调整算法 5.3.2堆的删除 5.4获取堆顶元素 5.5获取堆的元素个数 5.6判断堆是否为空 5.7打印堆 5.8建堆 …

亚马逊自养号测评环境搭建技巧:打造防关联底层环境的关键步骤

今天我们要聊的是完全由人工操作的自养号方法&#xff0c;相信有过相关经验的朋友们都清楚&#xff0c;在实现自养号的过程中&#xff0c;所使用的 IP 和浏览器究竟有哪些选择&#xff0c;以及可能会遇到哪些问题。 首先&#xff0c;我们来看看市场上现有的 IP 类型以及可能出现…