1.Matlab实现改进黑猩猩优化算法SLWCHOA与多个基准函数对比与秩和检验 (完整源码)
2.利用Sobol序列初始化种群,增加种群的随机性和多样性,为算法全局寻优奠定基础;
3.其次,引入基于凸透镜成像的反向学习策略,将其应用到当前最优个体上产生新的个体,提高算法的收敛精度和速度;
4.最后,将水波动态自适应因子添加到攻击者位置更新处,增强算法跳出局部最优的能力。
提供与原始CHOA、鲸鱼算法WOA、麻雀搜索算法SSA、灰狼算法GWO等算法的对比。
5.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。
%% 清除环境变量
clear
clc
close all
%% 参数设置
N = 30; % 种群规模
Function_name = 'F4'; % 从F1到F23的测试函数的名称(本文中的表1、2、3)
Max_iteration = 500; % 最大迭代次数
% 加载所选基准函数的详细信息
[lb, ub, dim, fobj] = Get_Functions_details(Function_name);
% 初始化种群位置
X = initialization(N, dim, ub, lb);
cnt_max =5;
%% 画图
% 画图迭代曲线图
figure
semilogy(SLWChoA_Curve,'r-','linewidth',1.5);
hold on
semilogy(SSA_Curve,'b--','linewidth',1.5);
hold on
semilogy(GWO_Curve,'y--','linewidth',1.5);
hold on
semilogy(PSO_Curve,'b-','linewidth',1.5);
hold on
semilogy(WOA_Curve,'k-','linewidth',1.5);
hold on
semilogy(CHOA_Curve,'m-','linewidth',1.5);
hold on
semilogy(MPA_Curve,'r-','linewidth',1.5);
hold on
title('Objective space')
xlabel('Iteration');
ylabel('Best score obtained so far');
set(gca,'fontname','Times New Roman')
axis tight
grid on
box on
legend('SLWChoA','SSA','GWO','PSO','WOA','CHOA','MPA')
% 画出所选基准函数的三维立体图形
figure;
func_plot(Function_name);
title(Function_name)
xlabel('x_1');
ylabel('x_2');
zlabel([Function_name,'( x_1 , x_2 )'])
set(gca,'fontname','Times New Roman')
% 2、画出目标函数值变化曲线图
figure;
t = 1:Max_iteration;
semilogy(t, SLWChoA_Curve, 'ro-',t, SSA_Curve, 'ko-', t, GWO_Curve, 'cs-', ...
t, PSO_Curve, 'k*-', t, WOA_Curve, 'gh-', t, CHOA_Curve, 'b^-', t, MPA_Curve, 'r*-', ...
'linewidth', 1.5, 'MarkerSize', 8, 'MarkerIndices', 1:50:Max_iteration);
title(Function_name)
xlabel('迭代次数');
ylabel('适应度值');
axis fill
grid on
box on
legend('SLWChoA','SSA','GWO','PSO','WOA','CHOA','MPA');
%% 显示结果
disp(['SSA得到的最佳位置为 : ', num2str(SSA_Best_pos)]);
disp(['SSA得到的目标函数的最佳值为 : ', num2str(SSA_Best_score)]);
disp(['WOA得到的最佳位置为 : ', num2str(WOA_Best_pos)]);
disp(['WOA得到的目标函数的最佳值为 : ', num2str(WOA_Best_score)]);
disp(['GWO得到的最佳位置为 : ', num2str(GWO_Best_pos)]);
disp(['GWO得到的目标函数的最佳值为 : ', num2str(GWO_Best_score)]);
disp(['PSO得到的最佳位置为 : ', num2str(PSO_Best_pos)]);
disp(['PSO得到的目标函数的最佳值为 : ', num2str(PSO_Best_score)]);
disp(['CHOA得到的最佳位置为 : ', num2str(CHOA_Best_pos)]);
disp(['CHOA得到的目标函数的最佳值为 : ', num2str(CHOA_Best_score)]);
disp(['MPA得到的最佳位置为 : ', num2str(MPA_Best_pos)]);
disp(['MPA得到的目标函数的最佳值为 : ', num2str(MPA_Best_score)]);
disp(['SLWChoA得到的最佳位置为 : ', num2str(SLWChoA_Best_pos)]);
disp(['SLWChoA得到的目标函数的最佳值为 : ', num2str(SLWChoA_Best_score)]);
[1] https://blog.csdn.net/kjm13182345320/article/details/129036772?spm=1001.2014.3001.5502
[2] https://blog.csdn.net/kjm13182345320/article/details/128690229