文章目录
- 【`获取资源`请见文章第5节:资源获取】
- 1. SSA算法
- 2. 改进SSA算法
- 2.1 动态折射反向学习策略
- 2.2 自适应权重策略
- 3. 部分代码展示
- 4. 仿真结果展示
- 5. 资源获取说明
【获取资源
请见文章第5节:资源获取】
1. SSA算法
2. 改进SSA算法
2.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)/2−x=h∗h(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+b−kx(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. 资源获取说明
可以获取完整代码资源。