【群智能算法改进】基于动态折射反向学习和自适应权重的改进麻雀搜索算法[4]【Matlab代码#39】


获取资源请见文章第5节:资源获取】


1. SSA算法

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

2. 改进SSA算法

2.1 动态折射反向学习策略

透镜成像折射反向学习策略的思想来自于凸透镜成像的原理。通过基于当前坐标生成一个反向位置来扩展搜索范围,如图1所示。
在这里插入图片描述

图1 透镜成像折射反向学习原理图

在二维坐标中,x轴的搜索范围为(a, b), y轴表示一个凸透镜。假设物体A在x轴上的投影为x,高度为h,通过透镜成像,另一侧的图像为A*, A在x轴上的投影为x,高度为h*。通过以上分析,我们可以得到如下公式:
( a + b ) / 2 − x x ∗ − ( a + b ) / 2 = h h ∗ (1) \frac{(a+b)/2-x}{x^{*}-(a+b)/2 }=\frac{h}{h^{*}} \tag1 x(a+b)/2(a+b)/2x=hh(1)
对公式(1)进行转换,即可得到反向解x*的表达式为:
x ∗ = a + b 2 + a + b 2 k − x k (2) x^{*} =\frac{a+b}{2}+\frac{a+b}{2k}-\frac{x}{k} \tag2 x=2a+b+2ka+bkx(2)
其中, k = h / h ∗ k=h/h^{*} k=h/h a a a b b b可以视为某维度的上下限,在本文的算法中, k k k值并非定值,而是与迭代次数相关的动态值。

2.2 自适应权重策略

基本麻雀搜索算法的发现者位置更新阶段,在迭代初期就向全局最优解逼近,会导致搜索范围不足,陷入局部最优,使搜索失败。为克服这一弊端,再在其位置更新公式中加入自适应权重系数 ω,让它在迭代初期具有较大值,促进全局搜索,迭代后期自适应变小,促进局部搜索并加快收敛速度。

3. 部分代码展示

%% 画图
% 1、画出所选基准函数的三维立体图形
figure;
func_plot(Function_name);
title(Function_name)
xlabel('x_1');
ylabel('x_2');
zlabel([Function_name,'( x_1 , x_2 )'])

% 2、画出目标函数值变化曲线图
figure;
t = 1:Max_iteration;
semilogy(t, Curve_ISSA, 'r-',t, Curve_GWO, 'b-',t, Curve_SSA, 'k-',t, Curve_WOA, 'g-', t, Curve_PSO, 'y-','linewidth', 1.5);
title(Function_name);
xlabel('Iteration');
ylabel('Mean of objective function values');
axis fill
grid on
box on
legend('ISSA','GWO','SSA','WOA','PSO');


%% 显示结果
disp(['函数:', num2str(Function_name)]);
disp(['GWO:最差值: ', num2str(worst_GWO), ', 最优值: ', num2str(best_GWO), ', 平均值: ', num2str(mean_GWO), ', 标准差: ', num2str(std_GWO)]);
disp(['SSA:最差值: ', num2str(worst_SSA), ', 最优值: ', num2str(best_SSA), ', 平均值: ', num2str(mean_SSA), ', 标准差: ', num2str(std_SSA)]);
disp(['WOA:最差值: ', num2str(worst_WOA), ', 最优值: ', num2str(best_WOA), ', 平均值: ', num2str(mean_WOA), ', 标准差: ', num2str(std_WOA)]);
disp(['PSO:最差值: ', num2str(worst_PSO), ', 最优值: ', num2str(best_PSO), ', 平均值: ', num2str(mean_PSO), ', 标准差: ', num2str(std_PSO)]);

4. 仿真结果展示

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

5. 资源获取说明

可以获取完整代码资源。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天`南

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值