1 简介
针对蝗虫优化算法(GOA)全局寻优能力不足,易陷入局部最优,寻优精度较低等问题,提出融合正弦余弦和变异选择的蝗虫优化算法(SC-MGOA).首先,在位置更新处根据转换概率选择不同的位置更新方式来增加种群的多样性,同时弥补GOA算法全局搜索能力不足的缺陷;其次,为更好的协调算法的全局探索和局部开发,对引入的正弦余弦机制进行改进;最后,在一定概率下针对最优解进行变异,并利用贪婪法则择优保留,使算法能够跳出局部最优,提高算法的收敛精度.选取10个测试函数进行3组测试,结果表明了不同改进策略的有效性,还证明了SC-MGOA算法相对于其他比较算法在寻优精度,寻优速度和鲁棒性等方面的优越性.
2 部分代码
%% 清除环境变量
clear
clc
%% 参数设置
N = 30; % 种群规模
Function_name = 'F3'; % 从F1到F23的测试函数的名称(本文中的表1、2、3)
Max_iteration = 500; % 最大迭代次数
cnt_max = 30;
% 加载所选基准函数的详细信息
[lb, ub, dim, fobj] = Get_Functions_details(Function_name);
Curve_SSA = zeros(1, Max_iteration);
Curve_ALO = zeros(1, Max_iteration);
Curve_SCA = zeros(1, Max_iteration);
Curve_SC_MGOA = zeros(1, Max_iteration);
for cnt = 1:cnt_max
% 初始化种群位置
X = initialization(N, dim, ub, lb);
[SSA_Best_score(cnt), SSA_Best_pos(cnt, :), SSA_Curve] = SSA(X, N, Max_iteration, lb, ub, dim, fobj);
[ALO_Best_score(cnt), ALO_Best_pos(cnt, :), ALO_Curve] = ALO(N, Max_iteration, lb, ub, dim, fobj);
[SCA_Best_score(cnt), SCA_Best_pos(cnt, :), SCA_Curve] = SCA(X, N, Max_iteration, lb, ub, dim, fobj);
[SC_MGOA_Best_score(cnt), SC_MGOA_Best_pos(cnt, :), SC_MGOA_Curve] = SC_MGOA(N, Max_iteration, lb, ub, dim, fobj);
Curve_SSA = Curve_SSA+SSA_Curve;
Curve_ALO = Curve_ALO+ALO_Curve;
Curve_SCA = Curve_SCA+SCA_Curve;
Curve_SC_MGOA = Curve_SC_MGOA+SC_MGOA_Curve;
end
Curve_SSA = Curve_SSA/cnt_max;
Curve_ALO = Curve_ALO/cnt_max;
Curve_SCA = Curve_SCA/cnt_max;
Curve_SC_MGOA = Curve_SC_MGOA/cnt_max;
std_SSA = std(SSA_Best_score);
std_ALO = std(ALO_Best_score);
std_SCA = std(SCA_Best_score);
std_SC_MGOA = std(SC_MGOA_Best_score);
best_SSA = max(SSA_Best_score);
best_ALO = max(ALO_Best_score);
best_SCA = max(SCA_Best_score);
best_SC_MGOA = max(SC_MGOA_Best_score);
worst_SSA = min(SSA_Best_score);
worst_ALO = min(ALO_Best_score);
worst_SCA = min(SCA_Best_score);
worst_SC_MGOA = min(SC_MGOA_Best_score);
mean_SSA = mean(SSA_Best_score);
mean_ALO = mean(ALO_Best_score);
mean_SCA = mean(SCA_Best_score);
mean_SC_MGOA = mean(SC_MGOA_Best_score);
%% 画图
% 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_SSA, 'gs-', t, Curve_ALO, 'm^-', t, Curve_SCA, 'bo-', t, Curve_SC_MGOA, 'rd-', ...
'linewidth', 1.5, 'MarkerSize', 8, 'MarkerIndices', 1:50:Max_iteration);
title(Function_name)
xlabel('Iteration');
ylabel('Fitness');
axis fill
grid on
box on
legend('SSA', 'ALO', 'SCA', 'SC-MGOA');
%% 显示结果
disp(['函数:', num2str(Function_name)]);
disp(['SSA:最大值: ', num2str(best_SSA), ',最小值:', num2str(worst_SSA), ',平均值:', num2str(mean_SSA), ',标准差:', num2str(std_SSA)]);
disp(['ALO:最大值: ', num2str(best_ALO), ',最小值:', num2str(worst_ALO), ',平均值:', num2str(mean_ALO), ',标准差:', num2str(std_ALO)]);
disp(['SCA:最大值: ', num2str(best_SCA), ',最小值:', num2str(worst_SCA), ',平均值:', num2str(mean_SCA), ',标准差:', num2str(std_SCA)]);
disp(['SC_MGOA:最大值: ', num2str(best_SC_MGOA), ',最小值:', num2str(worst_SC_MGOA), ',平均值:', num2str(mean_SC_MGOA), ',标准差:', num2str(std_SC_MGOA)]);
3 仿真结果
4 参考文献
[1]林杰, and 何庆. "融合正弦余弦和变异选择的蝗虫优化算法." 小型微型计算机系统 42.4(2021):8.