猎食者优化算法 Python代码免费获取

声明:文章是从本人公众号中复制而来,因此,想最新最快了解各类算法的家人,可关注我的VX公众号:python算法小当家,不定期会有很多免费代码分享~

猎食者优化算法 Python代码免费获取

猎食者优化算法(hunter–prey optimizer,HPO)是于2022年提出的一种新型智能优化算法。该算法的灵感来自于捕食动物(如狮子、豹和狼)以及猎物(如雄鹿和瞪羚)的行为。HPO具有收敛速度快,寻优能力强的特点。免费python代码获取见文末。

猎食者优化算法原理解析

算法初始化

每个初始种群成员在搜索空间中随机生成,如公式(1)所示:

x i = r a n d ( 1 , d ) ⋅ ( u b − l b ) + l b x_i = rand(1,d) \cdot (ub - lb) + lb xi=rand(1,d)(ublb)+lb

其中,$ X_i 是猎人位置或猎物位置, 是猎人位置或猎物位置, 是猎人位置或猎物位置, lb $ 是问题变量的最小值(下边界),$ ub $ 是问题变量的最大值(上边界),$ d$ 是问题的变量(维度)数。公式(2)定义了搜索空间的下边界和上边界。需要注意的是,一个问题的所有变量可以有相同或不同的上下边界。

l b = [ l b 1 , l b 2 , . . . , l b d ] , u b = [ u b 1 , u b 2 , . . . , u b d ] lb = [lb_1, lb_2, ..., lb_d], \quad ub = [ub_1, ub_2, ..., ub_d] lb=[lb1,lb2,...,lbd],ub=[ub1,ub2,...,ubd]

猎食者搜索策略

在生成初始种群并确定每个代理的位置后,使用目标函数计算每个解决方案的适应度 O i = f ( x ⃗ ) O_i = f(\vec{x}) Oi=f(x )。目标函数 F ( x ) F(x) F(x) 可以是最大化(效率、性能等)或最小化(成本、时间等)。计算适应度函数确定了解决方案的好坏,但我们不能通过一次运行获得最优解。需要定义并重复多次的搜索机制以引导搜索代理到最优位置。搜索机制通常包括两个步骤:探索和开发。探索指算法倾向于高度随机行为,使解决方案显著变化。解决方案的显著变化导致进一步探索搜索空间并发现有希望的区域。在找到有希望的区域后,必须减少随机行为,以便算法可以在这些有希望的区域进行搜索,这称为开发。对于猎人搜索机制,我们提出公式(3)。

x i , j ( t + 1 ) = x i , j ( t ) + 0.5 [ 2 C Z P p o s ( j ) − x i , j ( t ) ] + [ 2 ( 1 − C ) Z μ ( i ) − x i , j ( t ) ] x_{i,j}(t + 1) = x_{i,j}(t) + 0.5 \left[2CZP_{pos(j)} - x_{i,j}(t)\right] + \left[2(1 - C)Z\mu(i) - x_{i,j}(t)\right] xi,j(t+1)=xi,j(t)+0.5[2CZPpos(j)xi,j(t)]+[2(1C)Zμ(i)xi,j(t)]

公式(3)更新了猎人位置,其中 $ x(t) $ 是当前猎人位置,$ x(t + 1) $ 是猎人的下一位置,$Ppos 是猎物位置, 是猎物位置, 是猎物位置, mu 是所有位置的平均值, 是所有位置的平均值, 是所有位置的平均值, Z $ 是通过公式(4)计算的自适应参数。
P = R 1 ⃗ < C ; I D X = ( P = = 0 ) P = \vec{R_1} < C; \quad IDX = (P == 0) P=R1 <C;IDX=(P==0)

Z = R 2 ⊗ I D X + R 3 ⃗ ⊗ ( ∼ I D X ) Z = R_2 \otimes IDX + \vec{R_3} \otimes (\sim IDX) Z=R2IDX+R3 (IDX)

其中, v e c R 1 vec{R_1} vecR1 R 3 ⃗ \vec{R_3} R3 是范围在 [ 0 , 1 ] [0,1] [0,1] 的随机向量, P P P 是一个取值为0和1的随机向量,值等于问题变量的数量,$ R_2 $是范围在 [ 0 , 1 ] [0,1] [0,1] 的随机数, I D X IDX IDX 是满足条件 ( P = = 0 ) (P == 0) (P==0) 的向量 R 1 ⃗ \vec{R_1} R1 的索引号。参数$ Z 的结构及其与参数 的结构及其与参数 的结构及其与参数 C $的关系如下图所示。

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

C = 1 − i t ( 0.98 M a x I t ) C = 1 - it \left( \frac{0.98}{MaxIt} \right) C=1it(MaxIt0.98)

其中 $it 是当前迭代值 是当前迭代值 是当前迭代值MaxIt$ 是最大迭代次数。首先根据公式(6)计算所有位置的平均值$ \mu $,然后计算每个搜索代理与该平均位置的距离

μ = 1 n ∑ i = 1 n x i ⃗ \mu = \frac{1}{n} \sum_{i=1}^{n} \vec{x_i} μ=n1i=1nxi

我们根据公式(7)计算基于欧几里得距离的距离

D e u c ( i ) = ( ∑ j = 1 d ( x i , j − μ j ) 2 ) 1 2 D_{euc}(i) = \left( \sum_{j=1}^{d} (x_{i,j} - \mu_j)^2 \right)^{\frac{1}{2}} Deuc(i)=(j=1d(xi,jμj)2)21

根据公式(8),距离所有位置平均值最远的搜索代理被视为猎物位置$ P_{pos} $

P p o s ⃗ = x i ⃗ ∣ i = i n d e x o f M a x ( e n d ) s o r t ( D e u c ) \vec{P_{pos}} = \vec{x_i}|_{i = index \ of \ Max(end)sort(D_{euc})} Ppos =xi i=index of Max(end)sort(Deuc)

如果我们在每次迭代中总是选择与平均位置$\mu $距离最远的搜索代理作为猎物位置,算法会出现后期收敛问题。根据猎食场景,当猎人捕获猎物时,猎物死亡,下一次猎人移动到新猎物位置。为解决此问题,我们考虑使用递减机制,如公式(9)所示。

k b e s t = r o u n d ( C × N ) k_{best} = round(C \times N) kbest=round(C×N)

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

现在,我们改变公式(8),并根据公式(10)计算猎物位置

P p o s ⃗ = x i ⃗ ∣ i = s o r t e d D e u c ( k b e s t ) \vec{P_{pos}} = \vec{x_i}|_{i = sorted \ D_{euc}(k_{best})} Ppos =xi i=sorted Deuc(kbest)
我们假设最佳安全位置是全局最优位置,因为这将使猎物有更好的生存机会,而猎人可能会选择其他猎物。

x i , j ( t + 1 ) = T p o s ( j ) + C Z cos ⁡ ( 2 π R 4 ) × ( T p o s ( j ) − x i , j ( t ) ) x_{i,j}(t + 1) = T_{pos(j)} + CZ \cos(2\pi R_4) \times (T_{pos(j)} - x_{i,j}(t)) xi,j(t+1)=Tpos(j)+CZcos(2πR4)×(Tpos(j)xi,j(t))

其中,$ x(t) $ 是当前猎物位置,$x(t + 1) $ 是猎物的下一位置,$ T_{pos} $ 是最优全局位置,$Z $ 是通过公式(4)计算的自适应参数,$ R_4$ 是范围在$ [-1, 1] 的随机数。 的随机数。 的随机数。C$ 是探索和开发之间的平衡参数,其值在迭代过程中递减,计算如公式(5)所示。

这里出现的问题是如何在该算法中选择猎人和猎物。为回答这个问题,我们结合公式(3)和(11)得到公式(12)

其中,$ R_5 $ 是范围在$ [0, 1]$ 的随机数,$\beta $是一个调节参数,在本研究中设定为 0.1。如果 $R_5 $ 的值小于 $ \beta $,搜索代理被认为是猎人,搜索代理的下一个位置更新为公式(12a);如果 $ R_5 $的值大于 β \beta β,搜索代理被认为是猎物,搜索代理的下一个位置更新为公式(12b)。

猎食者算法流程图

作者所提算法的流程图如下图所示。

猎食者优化算法性能测试

下面我们用猎食者优化算法进行部分标准函数测试。






代码获取

关注VX公众号 Python算法小当家 回复关键词 HPO

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

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

相关文章

基于GTX的64B66B编码IP生成(高速收发器二十)

点击进入高速收发器系列文章导航界面 1、配置GTX IP 相关参数 前文讲解了64B66B编码解码原理&#xff0c;以及GTX IP实现64B66B编解码的相关信号组成&#xff0c;本文生成64B66B编码的GTX IP。 首先如下图所示&#xff0c;需要对GTX共享逻辑进行设置&#xff0c;为了便于扩展&a…

什么是微前端

什么是微前端&#xff1f; 微前端 这个名词&#xff0c;第一次被提出还是在2016年底&#xff0c;那是在 ThoughtWorks Technology Radar。这个概念将微服务这个被广泛应用于服务端的技术范式扩展到前端领域。现代的前端应用的发展趋势正在变得越来越富功能化&#xff0c;富交互…

RPG游戏完整指南

环境&#xff1a;unity2021urp 本教程教大家如何使用Unity创建一个RPG游戏&#xff0c;玩家可以在城镇场景中进行导航并寻找战斗&#xff0c;并在战斗中遇到不同类型的敌人。玩家可以向敌人施加不同的动作&#xff0c;如&#xff1a;常规攻击和撤离。这会是一个十分有趣的体验。…

[next.js] svgr/webpack

nextjs如何配置svg文件&#xff0c;使其像react组件一样导入? 当前next.js 开发环境我使用了--turbo 来开启turbopack加速文件构建&#xff0c;所以之前的一些webpack loader之类的无法正常工作。通过搜索发现一般都是使用svgr/webpack来处理svg&#xff0c;打开svgr官网发现…

Linux初识地址空间

前言 上一期我们对进程优先级、命令行参数以及环境和变量做了介绍&#xff01;以前我们就提到过一个问题有了运行队列为什么还要有优先级&#xff1f;本期将带你揭晓&#xff01; 本期内容介绍 虚拟地址空间的引入 虚拟地址空间的介绍 如何理解地址空间 为什么要有地址空间 如…

docker和docker compose 部署

一. 将微服务运行在docker上&#xff1a; 1.新建一个空文件夹docker-demo&#xff0c;在里面再新建文件夹app&#xff0c;在app目录下新建一个名为Dockerfile的文件。 2.编写Dockerfile文件 3.构建镜像 4.启动镜像 5.可以访问了。 二使用Dockerfile构建微服务镜像 1.将j…

数据库系统概念(第八周 第一堂)(规范化关系数据库设计)(强推学习!!!)

目录 前言 E-R模型质量低的深层原因 数据依赖 函数依赖 主属性/非主属性 逻辑蕴含与闭包 Armstrongs Axiom 求解F闭包算法 求解属性集闭包算法 属性集闭包的作用 候选码求解理论和算法 候选码求解理论 无关属性 检验方法 正则覆盖 关系模式的设计 关系…

Spark常见的可以优化的点

Shuffle 复用 # 1.以下操作会复用的shuffle结果&#xff0c;只会读一遍数据源 val rdd1 sc.textFile("hdfs://zjyprc-hadoop/tmp/hive-site.xml").flatMap(_.split(" ")).map(x > (x,1)).reduceByKey(_ _).filter(_._2 > 1) rdd1.count() rdd1.fil…

Python高级用法:路径与文件操作(os与pathlib)

路径与文件 前言导入包判断路径存在判断路径类型&#xff08;判断文件还是文件夹&#xff09;获取父路径写入读出文件获得路径中所有子文件/子文件夹获取文件扩展名获取多个文件扩展名获取路径的组件创建目录删除文件或空目录 前言 在Python中&#xff0c;os模块提供了与操作系…

美国裸机云站群服务器使用指南

在当今数字化时代&#xff0c;网站和应用程序的稳定运行对于企业和个人都至关重要。为了满足日益增长的业务需求&#xff0c;裸机云站群服务器成为了一个理想的选择。以下是美国裸机云站群服务器的使用指南&#xff0c;帮助您更好地利用这一强大的云服务。 一、选择信誉良好的云…

AI大模型在运动项目的深度融合和在穿戴设备的实践及未来运动健康技术发展

文章目录 1. 技术架构2. 模型选择2.1 LSTM&#xff08;长短期记忆网络&#xff09;2.2 CNN&#xff08;卷积神经网络&#xff09;2.3 Transformer 3. 数据处理数据预处理 4. 实时性要求4.1 边缘计算4.2 模型优化 5. 数据隐私与安全6. 深入分析AI大模型在穿戴设备的应用和未来发…

k8s中的pod域名解析失败定位案例

问题描述 我在k8s中启动了一个Host网络模式的pod&#xff0c;这个pod的域名解析失败了。 定位步骤 敲kubectl exec -it [pod_name] -- bash进入pod后台&#xff0c;查看/etc/resolv.conf&#xff0c;发现nameserver配的有问题。这里我预期的nameserver应该使用宿主机的&…

动态 SQL

动态 SQL 是 MyBatis 的强大特性之一&#xff0c;能够完成不同条件下不同的 sql 拼接。也就是说执行的 SQL 语句并不是固定的&#xff0c;而是不同人的不同操作执行的语句会有所差异。MyBatis 通过使用 标签 的方式来实现这种灵活性的。 <if>标签 例如在有一些网站进行…

【linux网络(四)】传输层协议详解(上)

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; Linux网络 1. 前言2. UDP协议…

CPN Tools学习——从平面网构建分层 PN

1.先创建平面petri网 创建如下petri网&#xff1a; CPN ide创建petri网真的舒服很多&#xff0c;但是教程又是CPN Tools的&#xff0c;我的想法是看两个版本能不能互通&#xff0c;在前者创建&#xff0c;在后者运行学习。 新增定义&#xff1a; colset E unit with e; 但…

Go模板页面浏览器显示HTML源码问题

<!--* Title: This is a file for ……* Author: JackieZheng* Date: 2024-06-09 17:00:01* LastEditTime: 2024-06-09 17:01:12* LastEditors: Please set LastEditors* Description:* FilePath: \\GoCode\\templates\\index.html --> <!DOCTYPE html> <html …

高并发ping多台主机IP

简介 社区或者是大型公司往往有成千上万或者几百台设备&#xff0c;保持设备始终在线对网络运维人员来说至关重要&#xff0c;然而一个一个登录检查&#xff0c;或者一个一个ping并不明智&#xff0c;累人且效率极低&#xff0c;并出错率高。花钱买检测服务当我没说。 shell编…

acwing 5575. 改变数值 | c++题解及解释

acwing 5575. 改变数值 题目 代码及解释 #include <iostream> #include <cstring> #include <algorithm> #include <unordered_map> using namespace std;const int N305; int a[N],b[N]; unordered_map<int,int>f[N]; const int INF1e9;int gc…

Dev C++ 安装及使用方法教程-干活多超详细

Dev C 是一款非常好用&#xff0c;简约的C/C开发工具。可以减少很多创建工程的繁琐步骤&#xff0c;很快的进行开发。对于只用于来写代码的人来说&#xff0c;是比较轻量以及极速的。 Dev C 是一个windows下的c和c程序的集成开发环境。它使用mingw32/gcc编译器&#xff0c;遵循…

Docker部署常见应用之大数据基础框架Hadoop

文章目录 Hadoop简介主要特点核心组件生态系统 Docker Compose 部署集群参考文章 Hadoop简介 Hadoop是一个开源框架&#xff0c;由Apache软件基金会开发&#xff0c;用于在普通硬件构建的集群中存储和处理大量数据。它最初由Doug Cutting和Mike Cafarella创建&#xff0c;并受…