文章目录
- 【`获取资源`请见文章第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 allSearch_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. 资源获取
可以获取完整代码资源。