获取资源
请见文章第4节:资源获取】Pavel等人通过模拟鹈鹕在狩猎过程中的自然行为,于2022年提出了鹈鹕优化算法(Pelican Optimization Algorithm,POA) ,在基准测试函数中展现出了极强的优化性能,较8种典型智能优化算法的性能有了明显的提升。目前,关于该算法的进一步研究,以及其在一些工程实际的应用还未有相关报道。
在POA算法中,通过模拟了鹈鹕在狩猎时的行为和策略,以此来更新候选解。该狩猎过程分为两个阶段:逼近猎物(勘探阶段) ,水面飞行(开发阶段) 。
首先进行进行鹈鹕种群的初始化:
x i j = l j + r a n d ( u j − l j ) i = 1 , 2 , ⋅ ⋅ ⋅ , m (1) x_{ij}=l_{j}+rand(u_{j}-l_{j})\quad\quad i=1,2,···,m\tag1 xij=lj+rand(uj−lj)i=1,2,⋅⋅⋅,m(1)
式中, x i j x_{ij} xij为第 i i i个鹈鹕的第 j j j维的位置; N N N为鹈鹕的种群数量; m m m为求解问题的维度; r a n d rand rand是[0,1]范围内的随机数; u j u_{j} uj和 l j l_{j} lj分别是求解 J J J维问题的上下边界。
在初始化完成之后,鹈鹕进入勘探阶段,在解空间内随机生成猎物位置,鹈鹕向猎物的位置进行移动。其表达式如下:
x i j P 1 = { X i j + r a n d ( p j − I × x i j ) , F p < F i X i j + r a n d ( x i j − p j ) , 其他 (2) x_{ij}^{P1}=\left\{\begin{matrix}X_{ij}+rand(p_{j}-I\times x_{ij}),\quad F_{p}
式中, I I I为1或2的随机整数; p j p_{j} pj为猎物在第 j j j维的位置; F p F_{p} Fp为猎物的目标函数值。
在POA中,如果该位置的目标函数值更好,则鹈鹕接受新位置。这个过程如下:
X i = { X i P 1 , F i P 1 < F i x i , 其他 (3) X_{i}=\left\{\begin{matrix}X_{i}^{P1},\quad F_{i}^{P1}
勘探阶段完成后,鹈鹕进入开发阶段,向更好的狩猎位置收敛。其达式如下:
x i , j P 2 = x i , j + R ( 1 − t T ) × ( 2 × r a n d − 1 ) × x i , j (4) x_{i,j}^{P2}=x_{i,j}+R(1-\frac{t}{T} )\times (2\times rand-1)\times x_{i,j}\tag4 xi,jP2=xi,j+R(1−Tt)×(2×rand−1)×xi,j(4)
式中, R R R为常数,取值为0.2。在开发阶段,当得到最优值更小时,按照下面式(5)进行更新。
X i = { X i P 2 , F i P 2 < F i x i , 其他 (3) X_{i}=\left\{\begin{matrix}X_{i}^{P2},\quad F_{i}^{P2}
%%
clc
clear
close all
%%
%%
Fun_name='F1'; % number of test functions: 'F1' to 'F23'
SearchAgents=30; % number of Pelicans (population members)
Max_iterations=1000; % maximum number of iteration
[lowerbound,upperbound,dimension,fitness]=Get_Functions_details(Fun_name); % Object function information
[Best_score,Best_pos,POA_curve]=POA(SearchAgents,Max_iterations,lowerbound,upperbound,dimension,fitness); % Calculating the solution of the given problem using POA
%%
figure('Position',[454 445 694 297]);
subplot(1,2,1);
func_plot(Fun_name);
title('Parameter space')
xlabel('x_1');
ylabel('x_2');
zlabel([Fun_name,'( x_1 , x_2 )'])
subplot(1,2,2);
semilogy(POA_curve,'Color','b','LineWidth',2)
title(Fun_name)
xlabel('Iteration');
ylabel('Best fitness function');
axis tight
legend('POA')
display(['The best solution obtained by POA for ' [num2str(Fun_name)],' is : ', num2str(Best_pos)]);
display(['The best optimal value of the objective funciton found by POA for ' [num2str(Fun_name)],' is : ', num2str(Best_score)]);
可以获取完整代码资源。