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

news2024/12/27 12:49:18

捕食者优化算法(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 Parameters
  MaxIt = 500;     % Maximum Nomber of Iterations
  nPop = 30;         % Population Size
  Convergence_curve = zeros(1,MaxIt);
% Constriction Coefeicient
B = 0.1;
%% Initialization
 HPpos=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 HPO
 TargetScore =HPposFitness(indx);
 Convergence_curve(1)=TargetScore;
%nfe = zeros(1,MaxIt);
%% HPO Main Loop
for it = 2:MaxIt
   c = 1 - it*((0.98)/MaxIt);   % Update C Parameter
    kbest=round(nPop*c);        % Update kbest
     for i = 1:nPop
            r1=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<B
        xi=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,:)));
        else
          for j=1:dim
            rr=-1+2*z(j);
          HPpos(i,j)= 2*z(j)*cos(2*pi*rr)*(Target(j)-HPpos(i,j))+Target(j);
          end
        end  
        HPpos(i,:) = min(max(HPpos(i,:),lb),ub);
        % Evaluation
        HPposFitness(i) = CostFunction(HPpos(i,:));
        % Update Target
        if HPposFitness(i)<TargetScore 
            Target = HPpos(i,:);
            TargetScore = HPposFitness(i);
        end
     end
  Convergence_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.coloradmin.cn/o/1692607.html

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

相关文章

数据结构篇其三---链表分类和双向链表

​ 前言 数据结构篇其二实现了一个简单的单链表&#xff0c;链表的概念&#xff0c;单链表具体实现已经说明&#xff0c;如下&#xff1a; 单链表 事实上&#xff0c;前面的单链表本质上是无头单向不循环链表。此篇说明的双向链表可以说完全反过来了了。无论是之前的单链表还…

Arthas反编译与重新加载class

一、背景 因为其他研发部门同事给的产品jar包存在一个问题&#xff0c;就是http底层的超时时间默认为60s&#xff0c;但是最近调用外部接口同步数据&#xff0c;这个数据量太大导致超时超过60s&#xff0c;每次同步都不成功。但是客户目前对此情况特别不满意&#xff0c;需要紧…

将电脑D盘部分空间划分给C盘的方法

本文介绍在Windows电脑中&#xff0c;将D盘的部分空间分给C盘的方法。 最近&#xff0c;发现电脑中C盘的空间剩余不多了&#xff1b;而D盘由于当初分盘时划分的空间过多&#xff0c;导致其剩余空间很大且大概率以后都不会用上D盘中这些多余的空间了。因此&#xff0c;希望将D盘…

使用Word表格数据快速创建图表

实例需求&#xff1a;Word的表格如下所示&#xff0c;标题行有合并单元格。 现在需要根据上述表格数据&#xff0c;在Word中创建如下柱图。如果数据在Excel之中&#xff0c;那么创建这个图并不复杂&#xff0c;但是Word中就没用那么简单了&#xff0c;虽然Word中可以插入图表&a…

轻松拿捏C语言——【字符串函数】的使用及模拟实现

&#x1f970;欢迎关注 轻松拿捏C语言系列&#xff0c;来和 小哇 一起进步&#xff01;✊ &#x1f389;创作不易&#xff0c;请多多支持&#x1f389; &#x1f308;感谢大家的阅读、点赞、收藏和关注&#x1f495; &#x1f339;如有问题&#xff0c;欢迎指正 感谢 目录 一、…

向npm发布自己写的vue组件,使用vite创建项目

向npm发布自己写的vue组件&#xff0c;使用vite创建项目 创建项目 pnpm create vite输入项目名称 由于我的组件是基于 ant-design-vue和vue的&#xff0c;需要解析.vue文件&#xff0c;我又安装了下面4个。 然后执行 pnpm i安装依赖 vite.config.ts import { defineC…

ES基础概念

本文不介绍如何使用ES&#xff08;使用ES见&#xff1a;&#xff09; 1.ES生态圈 ES&#xff1a; Logstash&#xff1a;数据处理服务程序&#xff0c;解析转换加工数据&#xff1b; Kibana&#xff1a;数据展示、集群管理&#xff0c;数据可视化、ES管理与监控、报表等&#xf…

【QT+VS】如何在现有VS项目中添加Qt界面?【全网最详细】

0. 前置步骤 参考如下链接文章中的 前3个步骤(1:下载Qt;2:安装Qt;3:安装Qt插件),完成环境的配置和安装。 深耕AI:如何联合Qt,VS,C++,来开发一个电脑版软件(简单有趣,详细) 本文的基础项目链接为: c++工程+图像分割预测+mmdet+实例分割+最新工程+简洁易懂+新手…

方正畅享全媒体新闻采编系统 binary.do SQL注入漏洞复现

0x01 产品简介 方正畅享全媒体新闻生产系统是以内容资产为核心的智能化融合媒体业务平台,融合了报、网、端、微、自媒体分发平台等全渠道内容。该平台由协调指挥调度、数据资源聚合、融合生产、全渠道发布、智能传播分析、融合考核等多个平台组成,贯穿新闻生产策、采、编、发…

Mysql 备份恢复 mysqldump与xtrabackup备份

1.1 备份的原因 备份是数据安全的最后一道防线&#xff0c;对于任何数据丢失的场景&#xff0c;备份虽然不一定能恢复百分之百的数据 (取决于备份周期)&#xff0c;但至少能将损失降到最低。衡量备份恢复有两个重要的指标&#xff1a;恢复点目标(RPO) 和恢复时间目标(RTO)&…

1.freertos基础知识

1.freertos最核心的概念就是多线程&#xff0c;就是可以让两段代码同时进行。 2.针对不同的用户场景&#xff0c;freertos提供了4种交互方式&#xff1a;消息队列&#xff0c;任务通知&#xff0c;信号量&#xff0c;互斥锁 3.什么是API&#xff1f;API是应用程序编程接口&…

【退役之重学Java】关于B+树索引

一、为什么使用索引 一条数据可能有很多字段&#xff0c;数据量比较大&#xff0c;挨个查询效率极差故使用索引&#xff0c;提高查询性能和加快数据检索速度。同时还可以帮助优化排序、分组和连接操作&#xff0c;提高数据库系统的整体性能和响应速度。 二、为什么要用 B 树 B树…

HarmonyOS 鸿蒙应用开发 - 创建自定义组件

开发者定义的称为自定义组件。在进行 UI 界面开发时&#xff0c;通常不是简单的将系统组件进行组合使用&#xff0c;而是需要考虑代码可复用性、业务逻辑与UI分离&#xff0c;后续版本演进等因素。因此&#xff0c;将UI和部分业务逻辑封装成自定义组件是不可或缺的能力。 1、创…

Stable Diffusion简单食用方法

1.下载 1.1打开B站 哔哩哔哩 (゜-゜)つロ 干杯~-bilibili哔哩哔哩&#xff08;bilibili.com)是国内知名的视频弹幕网站&#xff0c;这里有及时的动漫新番&#xff0c;活跃的ACG氛围&#xff0c;有创意的Up主。大家可以在这里找到许多欢乐。https://www.bilibili.com/ 1.2搜索…

【CSS】input宽度根据内容自适应

目标&#xff1a;纯css实现以下功能 input 设置width:min-content | max-content&#xff1b;//无效 ∵ 文本输入框通常会被浏览器渲染为具有固定宽度的控件。 解决方法&#xff1a;设置input的宽高都为100%&#xff0c;让它随着父元素的宽高改变。 父元素如何改变呢&#xf…

可视化在医疗健康领域的巨大价值,该如何设计呢。

可视化设计在医疗健康领域具有以下价值&#xff1a; 数据展示与分析&#xff1a;可视化设计可以将医疗健康领域的大量数据以图表、图形等形式进行展示和分析&#xff0c;帮助医生、研究人员和决策者更直观地理解和解读数据&#xff0c;发现规律和趋势&#xff0c;从而做出科学决…

HTTP 错误 404.3 - Not Found 问题处理

问题描述 HTTP 错误 404.3 - Not Found 由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本&#xff0c;请添加处理程序。如果应下载文件&#xff0c;请添加 MIME 映射。 解决对策

MATLAB构建一些简单的人工数据集

1. 构建一个2维3类的数据集 %高斯二维三类 1 3 mul[0,0]; % 均值 S1[.1 0;0 .1]; % 协方差 data1mvnrnd(mul, S1, 100); % 产生高斯分布数据 % 第二组数据 mu2[1.25 1.25]; S2[.1 0;0 .1]; data2mvnrnd(mu2,S2,100); % % 第三组数据 mu3[-1.25;1.25] S3[.1 0;0 .1] data3mvn…

企业级架构及本体论最新进展

本文主要探讨了企业级架构和本体论的新兴趋势&#xff0c;特别是DoDAF、IDEAS、UAF和NAF的发展历程、理论基础、模型构建以及与ArchiMate和语义网技术的关联。原文: The emerging landscape of Enterprise Architecture and Ontology 导言 动机和采用的方法 关注我的人都知道我…

ROCm上运行预训练BERT

14.10. 预训练BERT — 动手学深度学习 2.0.0 documentation (d2l.ai) 下载数据集 在d2l-zh/pytorch/data目录解压&#xff1a; ~/d2l-zh/pytorch/data$ unzip wikitext-2-v1.zip Archive: wikitext-2-v1.zipcreating: wikitext-2/inflating: wikitext-2/wiki.test.tokens …