引言
通常需要用cec测试函数对一个新方法的性能进行多方位的验证。各大公众号和博主将开源的cec测试函数和群智能优化算法系列进行高价售卖,给小伙伴们带来一些获取难度。鉴于此,本号前几期已分享了多个cec测试函数(cec2017、cec2018、cec2019、cec2020、cec2022)测试函数的快捷用法及matlab代码下载压缩包。
那么,本期在前期的基础上,继续照猫画虎推出cec2021测试函数的使用及matlab代码,1分钟让你学会。
该cec2021测试函数共有10个单目标测试函数,基本上是cec2017和cec2014的里挑选的函数。分别是:单峰函数(F1)、基础函数(F2-F4)、混合函数(F5-F7)和组合函数(F8-F10)。测试维度有2维,10维,20维。所有的测试函数都是解决最小化问题。如下形式:
其中,D为维数。为方便起见,cec2021测试函数定义了相同的搜索范围,即区间[-100, 100]。
首先需下载cec2021函数。函数的格式为cpp文件,cec21_basic_func.cpp。在matlab里需要编译。在matlab的命令行输入
mex cec21_basic_func.cpp
提示MEX 已成功完成,编译生成了cec21_basic_func.mexw64文件即可。这里我们已经为各位下载并编译好了,文末可直接享用。
其次,加载cec2021测试函数。cec2021测试函数有10个,输入x的数据格式需为列向量,即N*1,调用方式为:
fobj = @(x) cec21_basic_func(x,1);
数字1表示cec2021的第一个函数。当然,可以在1-10中任意选择一个数,就选择了对应的测试函数。
如果你的输入数据x是一个行向量,即1*N,调用方式为:
fobj = @(x) cec21_basic_func(x',1);
考虑到大部分优化算法中x的格式为(nPop种群数,Dim维度),因此,我们采用了第二种fobj的调用方式。如果遇到的x是(Dim维度,nPop种群数),还小伙伴需要自行改写。
最后,测试应用。
-
鲸鱼优化算法(WOA获取地址:优化算法-鲸鱼优化算法Whale Optimization Algorithm(附Matlab代码))
-
哈里斯鹰优化算法(HHO,见:优化算法-哈里斯鹰优化算法Harris hawks optimization(附Matlab代码))
-
灰狼优化算法(GWO,见:优化算法-灰狼优化算法 Grey Wolf Optimizer(附Matlab代码))
我们以上述三个算法为例进行测试。算法的参数设置如下:
clc
clear
close all
%%
nPop=50; % 种群数
Max_iter=500; % 最大迭代次数
dim = 20; % 维度,可选 2, 10, 20
%% 选择函数
Function_name=10; % 函数名:1 - 10
% lb->下限,ub->上限,fobj->目标函数
[lb,ub,dim,fobj] = Get_Functions_cec2021(Function_name,dim);
%% 调用算法
Optimal_results={}; % 保存Optimal results
index = 1;
% WOA
tic
[Best_score,Best_x,cg_curve]=WOA(nPop,Max_iter,lb,ub,dim,fobj);
Optimal_results{1,index}="WOA"; % 算法名字
Optimal_results{2,index}=cg_curve; % 收敛曲线
Optimal_results{3,index}=Best_score; % 最优函数值
Optimal_results{4,index}=Best_x; % 最优变量
Optimal_results{5,index}=toc; % 运行时间
index = index +1;
% HHO
tic
[Best_score,Best_x,cg_curve]=HHO(nPop,Max_iter,lb,ub,dim,fobj);
Optimal_results{1,index}="HHO";
Optimal_results{2,index}=cg_curve;
Optimal_results{3,index}=Best_score;
Optimal_results{4,index}=Best_x;
Optimal_results{5,index}=toc;
index = index +1;
% GWO
tic
[Best_score,Best_x,cg_curve]=GWO(nPop,Max_iter,lb,ub,dim,fobj);
Optimal_results{1,index}="GWO";
Optimal_results{2,index}=cg_curve;
Optimal_results{3,index}=Best_score;
Optimal_results{4,index}=Best_x;
Optimal_results{5,index}=toc;
index = index +1;
%% plot
figure
for i = 1:size(Optimal_results, 2)
% plot(Optimal_results{2, i},'Linewidth',2)
semilogy(Optimal_results{2, i},'Linewidth',2)
hold on
end
title(['Convergence curve, Dim=' num2str(dim)])
xlabel('Iteration');
ylabel(['Best score F' num2str(Function_name) ]);
axis tight
grid on
box on
set(gcf,'Position',[400 200 400 250])
legend(Optimal_results{1, :})
接下来,简单试验一下
dim = 2结果:
dim = 10结果:
dim = 20结果:
完整Matlab代码下载
该代码一举歼灭所有群智能优化算法在cec2021测试函数的应用
该代码一举歼灭所有群智能优化算法在cec2021测试函数的应用
该代码一举歼灭所有群智能优化算法在cec2021测试函数的应用