打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
1分钟学会使用cec2019测试函数(附Matlab代码)



01

引言

前几期已推出了cec2017、cec2021、cec2022测试函数的快捷用法:

初步积累了相关测试函数实操技能。那么,本期照猫画虎推出cec2019测试函数的使用,1分钟让你学会。

本期所有代码+数据在文末下载

该cec2019测试函数共有10个单目标测试函数。cec2017、cec2021、cec2022每个函数的变量维数是一样的,搜索区间也一样都在[-100,100]之间而与其他测试函数不同的是,cec2019中每个函数的变量维数不一样,搜索区间也不一样所有的测试函数都是解决最小化问题,D为维数,如下形式:

02

实操

首先需下载cec2019函数。函数的格式为cpp文件,cec19_func.cpp。在matlab里需要编译。在matlab的命令行输入:

mex cec19_func.cpp

提示MEX 已成功完成,编译生成了cec19_func.mexw64文件即可。这里我们已经为各位小伙伴下载并编译好了,文末可直接享用

其次,加载cec2019测试函数cec2019测试函数有10个,输入x的数据格式需为列向量即N*1,调用方式为:

fobj = @(x) cec19_func(x,1);

数字1表示cec2019的第一个函数。当然,可以在1-10中任意选择一个数,就选择了对应的测试函数

如果你的输入数据x是一个行向量,即1*N,调用方式为:

fobj = @(x) cec19_func(x',1);

考虑到大部分优化算法中x的格式为(nPop种群数,Dim维度),因此,我们采用了第二种fobj的调用方式。如果遇到的x是Dim维度,nPop种群数),还需要小伙伴自行改写成第一种方式。

我们将所有cec2019函数的信息(上限ub,下限lb,维度dim,cec测试目标函数fobj)封装成了一个名为Get_Functions_cec2019.m的文件中,便于使用。

Function_name=2; % 函数名:1 - 10% lb->下限,ub->上限,fobj->目标函数,dim-> 维度[lb,ub,dim,fobj] = Get_Functions_cec2019(Function_name);

最后,调用算法测试应用用以下7个算法简单试验一下:经典算法子群优化算法PSO;高被引算法,鲸鱼优化算法WOA,灰狼优化算法GWO,哈里斯鹰优化算法HHO;最近发表的算法,蜣螂优化算法DBO(2022),长鼻浣熊优化算法COA(2022),杨氏双缝实验优化器YDSE(2022)。

  1. 粒子群优化算法(PSO下载地址优化算法-20种动物园优化算法(附Matlab代码)

  2. 鲸鱼优化算法(WOA下载地址:优化算法-鲸鱼优化算法Whale Optimization Algorithm(附Matlab代码)

  3. 哈里斯鹰优化算法(HHO下载地址:优化算法-哈里斯鹰优化算法Harris hawks optimization(附Matlab代码)

  4. 灰狼优化算法(GWO下载地址:优化算法-灰狼优化算法 Grey Wolf Optimizer(附Matlab代码)

  5. 蜣螂优化算法(DBO下载地址:优化算法-蜣螂优化器 Dung beetle optimizer(附Matlab代码)

  6. 长鼻浣熊优化算法(COA下载地址:优化算法-长鼻浣熊优化算法Coati Optimization Algorithm(附Matlab代码))

  7. 杨氏双缝实验优化器(YDSE下载地址:优化算法-杨氏双缝实验优化器Young’s double-slit experiment (附Matlab代码)

整体的代码如下

% 微信公众号:优化算法侠,Swarm-Opticlc;clear;close all%%nPop=50; % 种群数Max_iter=500; % 最大迭代次数
%% 选择函数Function_name=2; % 函数名:1 - 10% lb->下限,ub->上限,fobj->目标函数,dim-> 维度[lb,ub,dim,fobj] = Get_Functions_cec2019(Function_name);
%% 调用算法Optimal_results={}; % 保存Optimal resultsindex = 1;% WOAtic[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;% HHOtic[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;% GWOtic[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;% DBOtic[Best_score,Best_x,cg_curve]=DBO(nPop,Max_iter,lb,ub,dim,fobj);Optimal_results{1,index}='DBO';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;% COAtic[Best_score,Best_x,cg_curve]=COA(nPop,Max_iter,lb,ub,dim,fobj);Optimal_results{1,index}='COA';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;% PSOtic[Best_score,Best_x,cg_curve]=PSO(nPop,Max_iter,lb,ub,dim,fobj);Optimal_results{1,index}='PSO';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;% YDSEtic[Best_score,Best_x,cg_curve]=YDSE(nPop,Max_iter,lb,ub,dim,fobj);Optimal_results{1,index}='YDSE';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 onendtitle(['Convergence curve, Dim=' num2str(dim)])xlabel('Iteration');ylabel(['Best score F' num2str(Function_name) ]);ax = gca;set(ax,'Tag',char([100,105,115,112,40,39,20316,32773,58,... 83,119,97,114,109,45,79,112,116,105,39,41]));axis tightgrid onbox oneval(ax.Tag)set(gcf,'Position',[400 200 400 250])legend(Optimal_results{1, :})

测试结果展示:

F1结果:

F2结果:

F3结果:

F10结果:

当然,如果你想一次性跑完cec2019所有10个函数,可以针对Function_name自写一个for循环解决。

可以发现:只定义了一个函数([lb,ub,dim,fobj] = Get_Functions_cec2019(Function_name))以获取cec函数信息,算法调用部分并未对PSO等等优化算法做任何改动,保留了算法的内在结构,保证算法的纯粹性。

本推文抛砖引玉仅展示了多种(7种)算法的对比方式。相信在此基础上,各位小伙伴可以利270多种算法跑完cec2019测试函数。速看!突破270种!-Matlab版(截至2023.7.29)

03


Matlab代码下载

声明:

1.对优化算法的理解受限于个人学术能力,必然有未尽之处,如有疑义请随时交流;
2.代码健壮度、效率和精准度等受限于个人编程能力,如有问题请随时交流;
3.文中有一些内容引自网络,会注明出处或引为参考文献,难免有未尽之处,如有不妥,请随时联系删改。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
人工蜂群(ABC)算法的群体智能优化问题方法(Python完整实现)
VB.NET基本函数内容概述
帕累托最优
基于猫群算法的渠道断面优化及设计参数分析
【ICML2018】63篇强化学习论文全解读
【风宇冲】Unity3D教程宝典之Shader篇:特别讲CG函数
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服