当前位置:   article > 正文

【群智能算法改进】一种改进的猎人猎物优化算法 IHPO算法[1]【Matlab代码#49】

ihpo算法


获取资源请见文章第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=bxn3cxn
其中,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(1xn2)
其中, 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)/2x=hh
对上面公式进行转换,即可得到反向解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+bkx
其中, 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')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

4. 仿真结果展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5. 资源获取

可以获取完整代码资源。 本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】

推荐阅读
相关标签