文章目录
- 【`获取资源`请见文章第5节:资源获取】
- 1. 原始HPO算法
- 2. 改进后的IHPO算法
- 2.1 Cubic映射初始化
- 2.2 透镜成像折射反向学习
- 2.3 强制切换策略
- 3. 部分代码展示
- 4. 仿真结果展示
- 5. 资源获取
【获取资源
请见文章第5节:资源获取】
1. 原始HPO算法
此算法详细介绍请参考HPO算法介绍
2. 改进后的IHPO算法
2.1 Cubic映射初始化
标准的Cubic映射函数可以表示为下式所示:
x
n
+
1
=
b
x
n
3
−
c
x
n
x_{n+1}=bx_{n}^{3}-cx_{n}
xn+1=bxn3−cxn
其中,b,c为混沌影响因子,不同的b,c值Cubic映射的范围也不同。一般在
c
∈
(
2.3
,
3
)
c\in (2.3,3)
c∈(2.3,3)时,Cubic映射产生的序列为混沌状态。此外,当b = 1时,
x
n
∈
(
−
2
,
2
)
x_{n}\in (-2,2)
xn∈(−2,2);当b = 4时,
x
n
∈
(
−
1
,
1
)
x_{n}\in (-1,1)
xn∈(−1,1)。
经过对Cubic映射进行最大Lyapunov指数的计算分析,可以得到如下常用的Cubic映射表达式:
x
n
+
1
=
ρ
x
n
(
1
−
x
n
2
)
x_{n+1}=\rho x_{n}(1-x_{n}^{2})
xn+1=ρxn(1−xn2)
其中,
x
n
∈
(
0
,
1
)
x_{n}\in (0,1)
xn∈(0,1);
ρ
\rho
ρ为控制参数,Cubic映射的混沌性与参数
ρ
\rho
ρ的取值有着很大的关系。
本文中,参数
ρ
\rho
ρ的取值为
(
1.5
,
3
)
(1.5,3)
(1.5,3)。经过实验,取
x
0
=
0.3
,
ρ
=
2.595
x_{0}= 0.3, \rho=2.595
x0=0.3,ρ=2.595时,Cubic映射具有较好的混沌遍历性,仿真结果如下图所示:
2.2 透镜成像折射反向学习
透镜成像折射反向学习策略的思想来自于凸透镜成像的原理。通过基于当前坐标生成一个反向位置来扩展搜索范围,如图所示。
在二维坐标中,x轴的搜索范围为(a, b), y轴表示一个凸透镜。假设物体A在x轴上的投影为x,高度为h,通过透镜成像,另一侧的图像为A*, A* 在x轴上的投影为x*,高度为h*。通过以上分析,我们可以得到如下公式:
(
a
+
b
)
/
2
−
x
x
∗
−
(
a
+
b
)
/
2
=
h
h
∗
\frac{(a+b)/2-x}{x^{*}-(a+b)/2 }=\frac{h}{h^{*}}
x∗−(a+b)/2(a+b)/2−x=h∗h
对上面公式进行转换,即可得到反向解x*的表达式为:
x
∗
=
a
+
b
2
+
a
+
b
2
k
−
x
k
x^{*} =\frac{a+b}{2}+\frac{a+b}{2k}-\frac{x}{k}
x∗=2a+b+2ka+b−kx
其中,
k
=
h
/
h
∗
k=h/h^{*}
k=h/h∗,
a
a
a和
b
b
b可以视为某维度的上下限。本文中的
k
k
k是一个与迭代次数相关的动态自适应值。
2.3 强制切换策略
在原始HPO算法中,B参数扮演着十分重要的角色,它用于平衡算法的探索和开发能力。在原始HPO算法中,B取值固定为0.1,此值并不能反映算法目前适用于哪种更新公式,因此将其与随机数rand来比较从而决策出进行开发还是探索的方式并不妥。
本文提出了一种改进的B参数来替代原先的B参数,公式如下:
B
=
t
a
n
h
∣
r
a
n
d
×
(
F
(
i
)
−
b
F
F
(
i
)
+
b
F
)
∣
B=tanh\left | rand\times (\frac{F(i)-bF}{F(i)+bF} ) \right |
B=tanh
rand×(F(i)+bFF(i)−bF)
同时,考虑到这样的方式仍然可能陷入局部最优,所以为每个个体配置了一个计数器,如果连续迭代多次,都未能找到更优的解,就100%执行探索行为,而不执行开发行为。
3. 部分代码展示
clear;clc;close all
Search_no=30; % Number of search agent
F_name='F14'; % Name of the test function F1-f23
M_Iter=500; % Maximum number of iterations
[lb,ub,dim,fobj]=Get_F(F_name); %Give details of the underlying benchmark function
[Best_FF,Best_P,HPO_Curve]=HPO(Search_no,M_Iter,lb,ub,dim,fobj); [Best_FF_IHPO,Best_P_IHPO,IHPO_Curve]=IHPO(Search_no,M_Iter,lb,ub,dim,fobj);
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(HPO_Curve,'Color','k','LineWidth',2)
hold on
semilogy(IHPO_Curve,'Color','r','LineWidth',2)
title('Convergence curve')
xlabel('Iteration');
ylabel('Best fitness function');
axis tight
legend('HPO','IHPO')
4. 仿真结果展示
5. 资源获取
可以获取完整代码资源。