【获取资源
请见文章第4节:资源获取】
1. 鹈鹕优化算法(POA)
Pavel等人通过模拟鹈鹕在狩猎过程中的自然行为,于2022年提出了鹈鹕优化算法(Pelican Optimization Algorithm,POA) ,在基准测试函数中展现出了极强的优化性能,较8种典型智能优化算法的性能有了明显的提升。目前,关于该算法的进一步研究,以及其在一些工程实际的应用还未有相关报道。
在POA算法中,通过模拟了鹈鹕在狩猎时的行为和策略,以此来更新候选解。该狩猎过程分为两个阶段:逼近猎物(勘探阶段) ,水面飞行(开发阶段) 。
1.1 种群初始化
首先进行进行鹈鹕种群的初始化:
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维问题的上下边界。
1.2 勘探阶段
在初始化完成之后,鹈鹕进入勘探阶段,在解空间内随机生成猎物位置,鹈鹕向猎物的位置进行移动。其表达式如下:
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}<F_{i} \\X_{ij}+rand(x_{ij}-p_{j}), \quad \quad\quad其他 \end{matrix}\right.\tag2
xijP1={Xij+rand(pj−I×xij),Fp<FiXij+rand(xij−pj),其他(2)
式中,
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}<F_{i} \\x_{i}, \quad \quad\quad其他 \end{matrix}\right.\tag3
Xi={XiP1,FiP1<Fixi,其他(3)
1.3 开发阶段
勘探阶段完成后,鹈鹕进入开发阶段,向更好的狩猎位置收敛。其达式如下:
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}<F_{i} \\x_{i}, \quad \quad\quad其他 \end{matrix}\right.\tag3
Xi={XiP2,FiP2<Fixi,其他(3)
2. 部分代码展示
%%
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)]);
3. 仿真结果展示
4. 资源获取说明
可以获取完整代码资源。👇👇👇👀名片