获取资源
请见文章第4节:资源获取】猎人猎物优化算法(Hunter-Prey Optimization, HPO)是2022年Naruei等人提出的一种新型智能优化算法。该算法的思想来自于对动物狩猎过程的模拟,它具有收敛速度快、寻优能力强等优点。
HPO算法首先会随机初始化种群在解空间中的位置,种群初始化公式如下所示:
其中, x i x_{i} xi表示第 i i i个猎人或者猎物的位置, i = 1 , 2 , . . . , N i=1,2,...,N i=1,2,...,N, N N N表示种群数量; l b lb lb和 u b ub ub分别表示搜索空间的上下限; r a n d ( 1 , d ) rand(1,d) rand(1,d)表示0-1之间的随机数, d = 1 , 2 , . . . , D d=1,2,...,D d=1,2,...,D, D D D表示搜索空间的维数。
猎人通过如下公式来进行位置更新:
其中, x ( t ) x(t) x(t)和 x ( t + 1 ) x(t+1) x(t+1)表示猎人当前迭代和下一次迭代的位置; P p o s P_{pos} Ppos表示猎物的位置; μ \mu μ表示所有位置的平均值; Z Z Z是一个自适应参数,公式如下:
其中, r 1 r_{1} r1和 r 3 r_{3} r3是0-1之间的随机数构成的向量; P P P为0或者1构成的向量; r 2 r_{2} r2表示0-1之间的随机数; I D X IDX IDX表示向量 r 1 r_{1} r1中满足条件 P = = 0 P==0 P==0的索引值构成的向量; C C C为平衡算法开发和探索行为的参数,它的值在迭代过程中由1递减到0.02。
距离平均位置 μ \mu μ最远的个体被视为猎物 P p o s P_{pos} Ppos:
在实际捕猎过程中,如果猎人捕获到了猎物,猎人会移动到新的猎物位置。这种机制可以被描述如下:
n n n表示种群的数量。在算法的初始阶段, k b e s t = N kbest=N kbest=N。在算法的迭代过程中,猎人会选择离平均位置最远的个体作为猎物然后攻击它, k b e s t kbest kbest会逐渐下降。在算法的末了阶段, k b e s t kbest kbest会等于距离最短的第一个个体。
当猎物被攻击时,它会试图逃离局部最优位置,它可能会有较大的逃生机会,此时猎人会选择其他猎物。猎物的更新公式如下:
其中, x ( t ) x(t) x(t)和 x ( t + 1 ) x(t+1) x(t+1)分别表示当前迭代和下一次迭代中猎物的位置; T p o s 是全局最优位置 T_{pos}是全局最优位置 Tpos是全局最优位置; r 4 r_{4} r4是-1到1之间的随机数。
综合上面的公式,猎人或者猎物的更新公式可以被描述为:
其中, r 5 r_{5} r5是0-1之间的随机数。
clear;clc;close all
Search_no=30; % Number of search agent
F_name='F12'; % Name of the test function F1-f23
M_Iter=1000; % Maximum number of iterations
[lb,ub,dim,fobj]=Get_F(F_name); %Give details of the underlying benchmark function
[Best_FF,Best_P,Conv_curve]=HPO(Search_no,M_Iter,lb,ub,dim,fobj); % Call the AOA
figure('Position',[454 445 694 297]);
subplot(1,2,1);
func_plot(F_name);
title('Parameter space')
xlabel('x_1');
ylabel('x_2');
zlabel([F_name,'( x_1 , x_2 )'])
subplot(1,2,2);
semilogy(Conv_curve,'Color','r','LineWidth',2)
title('Convergence curve')
xlabel('Iteration');
ylabel('Best fitness function');
axis tight
legend('HPO')
display(['The best-obtained solution by HPO is : ', num2str(Best_P)]);
display(['The best optimal value of the objective funciton found by HPO is : ', num2str(Best_FF)]);
可以获取完整代码资源。