【PSO】CEC2013中每个函数的作用


CEC2013对CEC2010的改进

  • 非均匀函数的大小;
在CEC 2010基准测试套件的所有非可分离组件的大小是相等的。这只允许问题有代表性的均匀子大小的功能。而真实的优化问题的很可能有不同尺寸。为了更好地体现这一特点,此测试套件中包含一个功能组件不同尺寸范围。
  • 函数贡献的非均匀性;
在CEC2010中相同基函数的使用的子函数的结果平等的贡献大小相等。这种配置不能代表现实世界的各种组件的贡献之间的平衡问题。通过引入非均匀的子组件的大小,不同的子组件的贡献将自动不同。子分量的值乘以系数来表示分量的贡献。
  • 函数功能重叠的部分;
在CEC 2010基准测试套件,子函数不共享任何决策变量。然而,当实际问题中,遇到有一定程度重叠的决策变量,则可能不会有唯一的最优分组。CEC2013设计了一种优化这种部分相互依赖的策略。
  • 对基函数的新转换:病态、对称缺失、不规则;
一些用于CEC 2010基准测试套件的基本功能是很有规律的对称。包括球体、椭圆、Rastrigin、和Ackley函数。为了更好地与现实世界问题拟合,CEC2013引入一些非线性变换,打破了这些对称性。

病态:病态指的是最大的方向和最小的等高线之间的比率的平方。在椭球体的情况下,如果它是在其一个轴的方向伸展超过其他的轴,然后我们说这个函数是病态的。

对称缺失:一些产生遗传变异的算子,特别是基于高斯分布的遗传变异是对称的,而对称函数则偏向于对称算子。为了消除这种偏向,CEC2013采用对称缺失变换。

不规则:大多数基准函数都有规则模式。用某种变换引入某种程度的不规则.

CEC2013的函数定义









发布了392 篇原创文章 · 获赞 492 · 访问量 241万+
展开阅读全文

Matlab之Cec13测试函数入口参数的定义

01-29

1.今天在做优化算法的代码分析时,需要调用CEC13测试函数,按照官方给定 做法,需要输入种群大小矩阵以及func_num,对于后者这个参数实在摸不着头脑, 已百度,仍然无解,求教!急急急! 2.附上代码: ``` /* CEC13 Test Function Suite Jane Jing Liang (email: liangjing@zzu.edu.cn) 14th Feb. 2013 1. Run the following command in Matlab window: mex cec13_func.cpp -DWINDOWS 2. Then you can use the test functions as the following example: f = cec13_func(x,func_num); Here x is a D*pop_size matrix. */ #include <WINDOWS.H> #include <stdio.h> #include <math.h> #include <malloc.h> #include <mex.h> double *OShift,*M,*y,*z,*x_bound; int ini_flag=0,n_flag,func_flag; #define INF 1.0e99 #define EPS 1.0e-14 #define E 2.7182818284590452353602874713526625 #define PI 3.1415926535897932384626433832795029 // Brief:这部分申明了mex文件中需要用到的函数。其中包括:差值函数、 void sphere_func (double *, double *, int , double *,double *, int); /* Sphere */ void ellips_func(double *, double *, int , double *,double *, int); /* Ellipsoidal */ void bent_cigar_func(double *, double *, int , double *,double *, int); /* Discus */ void discus_func(double *, double *, int , double *,double *, int); /* Bent_Cigar */ void dif_powers_func(double *, double *, int , double *,double *, int); /* Different Powers */ void rosenbrock_func (double *, double *, int , double *,double *, int); /* Rosenbrock's */ void schaffer_F7_func (double *, double *, int , double *,double *, int); /* Schwefel's F7 */ void ackley_func (double *, double *, int , double *,double *, int); /* Ackley's */ void rastrigin_func (double *, double *, int , double *,double *, int); /* Rastrigin's */ void step_rastrigin_func (double *, double *, int , double *,double *, int); /* Noncontinuous Rastrigin's */ void weierstrass_func (double *, double *, int , double *,double *, int); /* Weierstrass's */ void griewank_func (double *, double *, int , double *,double *, int); /* Griewank's */ void schwefel_func (double *, double *, int , double *,double *, int); /* Schwefel's */ void katsuura_func (double *, double *, int , double *,double *, int); /* Katsuura */ void bi_rastrigin_func (double *, double *, int , double *,double *, int); /* Lunacek Bi_rastrigin Function */ void grie_rosen_func (double *, double *, int , double *,double *, int); /* Griewank-Rosenbrock */ void escaffer6_func (double *, double *, int , double *,double *, int); /* Expanded Scaffer’s F6 */ void cf01 (double *, double *, int , double *,double *, int); /* Composition Function 1 */ void cf02 (double *, double *, int , double *,double *, int); /* Composition Function 2 */ void cf03 (double *, double *, int , double *,double *, int); /* Composition Function 3 */ void cf04 (double *, double *, int , double *,double *, int); /* Composition Function 4 */ void cf05 (double *, double *, int , double *,double *, int); /* Composition Function 5 */ void cf06 (double *, double *, int , double *,double *, int); /* Composition Function 6 */ void cf07 (double *, double *, int , double *,double *, int); /* Composition Function 7 */ void cf08 (double *, double *, int , double *,double *, int); /* Composition Function 8 */ void shiftfunc (double*,double*,int,double*); void rotatefunc (double*,double*,int, double*); void asyfunc (double *, double *x, int, double); void oszfunc (double *, double *, int); void cf_cal(double *, double *, int, double *,double *,double *,double *,int); void test_func(double *, double *,int,int,int); *******%此处省略大概800行均为函数描写 ``` 3.有做这方面的大佬还望不吝赐教,万分感谢!需要代码分享的也可以在楼下评论。 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览