猎食者优化算法 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值