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

文章目录

    • 【`获取资源`请见文章第5节:资源获取】
    • 1. SSA算法
    • 2. 改进SSA算法
      • 2.1 动态折射反向学习策略
      • 2.2 自适应权重策略
    • 3. 部分代码展示
    • 4. 仿真结果展示
    • 5. 资源获取说明


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


1. SSA算法

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

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)
对公式(2)进行转换,即可得到反向解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. 仿真结果展示

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

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

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

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

5. 资源获取说明

可以获取完整代码资源。

你可能感兴趣的:(Matlab,#群智能算法改进,matlab,数学建模,算法,人工智能)