超详细!CEC2017测试函数最全公式图像介绍与调用方法 Matlab代码免费获取
声明:文章是从本人公众号中复制而来,因此,想最新最快了解各类智能优化算法及其改进的朋友,可关注我的公众号:强盛机器学习,不定期会有很多免费代码分享~
目录
函数目录
调用方法
公式介绍
完整代码
今天给大家带来一期CEC2017测试函数的代码与公式介绍。CEC是国际进化大会(IEEE Congress on Evolutionary Computation)的简称,后面的数据代表年份。CEC2017则是2017年的出炉的测试函数,这些函数加入了旋转、偏移等操作,防止了过拟合问题,因此很多SCI论文都用到了CEC2017函数。
本期代码免费赠送,需要代码的小伙伴可直接拉到最后!!!
CEC2017共有29个函数(其余网上版本说30个的都是错误版本!其中F2已被官方删除),其中F1-F2为单峰函数、F3-F9为简单多峰函数、F10-F19为混合函数,F20-29为组合函数。维度可选10维、30维、50维、100维。随着维度的增加,该系列函数的求解将变得极其困难,运行速度也将非常缓慢。
函数目录
以下为CEC2017函数的目录:
这里也列举官方生成的部分函数图像供大家参考与感受(F1-F6),首先是以2维度为例的3D函数图:
还有等高线图(F3-F8):
调用方法
这里以PSO算法为例,给小伙伴讲解一下如何使用CEC2017函数,首先,下载文末提供的文件夹,注意一定要全部下载!!
其他cpp、mex文件都属于CEC2017函数内部文件,无需移动。您只需将自己的算法放入文件夹中,我这里以PSO算法为例演示调用。
随后,打开main文件,将所有出现PSO的地方查找替换为自己的算法名称即可,注意需要函数输入输出一致即可调用,这里展示一下部分代码:
%% 清除环境变量
clear
clc
close all
addpath input_data
%% 参数设置
Max_iteration = 500; % 最大迭代次数
N = 30; % 种群规模
Function_name = 'F10'; % CEC2017测试函数: 29个测试函数(F1、F3~F30) (F2有问题多余,不要测试它)
% 加载所选基准函数的详细信息
[lb, ub, dim, fobj] = CEC2017(Function_name);
%% 优化
% 初始化种群位置
X = initialization(N, dim, ub, lb);
[Best_score, Best_pos, PSO_Curve] = PSO(X, N, Max_iteration, lb, ub, dim, fobj);
%% 绘图
% 画出目标函数值变化曲线图
figure;
t = 1:Max_iteration;
semilogy(t, PSO_Curve, 'r-', 'linewidth', 2);
title(Function_name);
xlabel('Iteration');
ylabel('Best score');
axis fill
% grid on
box on
legend('PSO');
set(gcf,'color','w')
%% 显示结果
display(['The optimal solution of ', Function_name, ' is: ', num2str(Best_pos)]);
display(['The optimal value of ', Function_name, ' is : ', num2str(Best_score)]);
可以看到,代码注释非常清晰,函数也改成了大家输入的调用格式,同时,可自行更改函数、最大迭代次数与种群规模,方便大家测试不同的函数。
这里以函数F10,种群规模为30,迭代500次为例,最后,输出迭代曲线图与最优结果:
PSO算法大概在160次达到收敛,命令行窗口也会显示取得的最优值为5805,非常方便,适合新手小白。
公式介绍
很多小伙伴奇怪为啥很多论文里没有CEC2017的公式介绍,那是因为CEC2017的各个函数均由各个基础函数构成。举个例子,单峰和简单多峰函数F1-F9,就是由9个基础函数经过偏移和旋转组成:
而混合函数和组合函数,则是由多个基础函数构成,构成方式如下:
刚刚这张表的N,则代表基础函数的数量:
如果N=4,就表示由4个基础函数组合而成,这也是为什么CEC2017里需要用到mex等复杂文件等原因。
所以,CEC2017通常很难写出确切的表达式。但是,基准函数的公式在CEC2017官方的文件内是提供的,我这边也提供给大家,一共19个:
完整代码
如果需要免费获得文中的完整测试代码,只需点击下方小卡片,再后台回复关键字,不区分大小写:
CEC2017
其他更多免费代码链接:更多免费代码链接