/* Test problem definitions */

# include <stdio.h>
# include <stdlib.h>
# include <math.h> # include "global.h"
# include "rand.h" # define sch1
/* # define sch2 */
/* # define fon */
/* # define kur */
/* # define pol */
/* # define vnt */
/* # define zdt1 */
/* # define zdt2 */
/* # define zdt3 */
/* # define zdt4 */
/* # define zdt5 */
/* # define zdt6 */
/* # define bnh */
/* # define osy */
/* # define srn */
/* # define tnk */
/* # define ctp1 */
/* # define ctp2 */
/* # define ctp3 */
/* # define ctp4 */
/* # define ctp5 */
/* # define ctp6 */
/* # define ctp7 */
/* # define ctp8 */ /* Test problem SCH1
# of real variables = 1
# of bin variables = 0
# of objectives = 2
# of constraints = 0
*/ #ifdef sch1
void test_problem (double *xreal, double *xbin, int **gene, double *obj, double *constr)
{
obj[] = pow(xreal[],2.0);
obj[] = pow((xreal[]-2.0),2.0);
return;
}
#endif /* Test problem SCH2
# of real variables = 1
# of bin variables = 0
# of objectives = 2
# of constraints = 0
*/ #ifdef sch2
void test_problem (double *xreal, double *xbin, int **gene, double *obj, double *constr)
{
if (xreal[]<=1.0)
{
obj[] = -xreal[];
obj[] = pow((xreal[]-5.0),2.0);
return;
}
if (xreal[]<=3.0)
{
obj[] = xreal[]-2.0;
obj[] = pow((xreal[]-5.0),2.0);
return;
}
if (xreal[]<=4.0)
{
obj[] = 4.0-xreal[];
obj[] = pow((xreal[]-5.0),2.0);
return;
}
obj[] = xreal[]-4.0;
obj[] = pow((xreal[]-5.0),2.0);
return;
}
#endif /* Test problem FON
# of real variables = n
# of bin variables = 0
# of objectives = 2
# of constraints = 0
*/ #ifdef fon
void test_problem (double *xreal, double *xbin, int **gene, double *obj, double *constr)
{
double s1, s2;
int i;
s1 = s2 = 0.0;
for (i=; i<nreal; i++)
{
s1 += pow((xreal[i]-(1.0/sqrt((double)nreal))),2.0);
s2 += pow((xreal[i]+(1.0/sqrt((double)nreal))),2.0);
}
obj[] = 1.0 - exp(-s1);
obj[] = 1.0 - exp(-s2);
return;
}
#endif /* Test problem KUR
# of real variables = 3
# of bin variables = 0
# of objectives = 2
# of constraints = 0
*/ #ifdef kur
void test_problem (double *xreal, double *xbin, int **gene, double *obj, double *constr)
{
int i;
double res1, res2;
res1 = -0.2*sqrt((xreal[]*xreal[]) + (xreal[]*xreal[]));
res2 = -0.2*sqrt((xreal[]*xreal[]) + (xreal[]*xreal[]));
obj[] = -10.0*( exp(res1) + exp(res2));
obj[] = 0.0;
for (i=; i<; i++)
{
obj[] += pow(fabs(xreal[i]),0.8) + 5.0*sin(pow(xreal[i],3.0));
}
return;
}
#endif /* Test problem POL
# of real variables = 2
# of bin variables = 0
# of objectives = 2
# of constraints = 0
*/ #ifdef pol
void test_problem (double *xreal, double *xbin, int **gene, double *obj, double *constr)
{
double a1, a2, b1, b2;
a1 = 0.5*sin(1.0) - 2.0*cos(1.0) + sin(2.0) - 1.5*cos(2.0);
a2 = 1.5*sin(1.0) - cos(1.0) + 2.0*sin(2.0) - 0.5*cos(2.0);
b1 = 0.5*sin(xreal[]) - 2.0*cos(xreal[]) + sin(xreal[]) - 1.5*cos(xreal[]);
b2 = 1.5*sin(xreal[]) - cos(xreal[]) + 2.0*sin(xreal[]) - 0.5*cos(xreal[]);
obj[] = 1.0 + pow((a1-b1),2.0) + pow((a2-b2),2.0);
obj[] = pow((xreal[]+3.0),2.0) + pow((xreal[]+1.0),2.0);
return;
}
#endif /* Test problem VNT
# of real variables = 2
# of bin variables = 0
# of objectives = 3
# of constraints = 0
*/ #ifdef vnt
void test_problem (double *xreal, double *xbin, int **gene, double *obj, double *constr)
{
obj[] = 0.5*(xreal[]*xreal[] + xreal[]*xreal[]) + sin(xreal[]*xreal[] + xreal[]*xreal[]);
obj[] = (pow((3.0*xreal[] - 2.0*xreal[] + 4.0),2.0))/8.0 + (pow((xreal[]-xreal[]+1.0),2.0))/27.0 + 15.0;
obj[] = 1.0/(xreal[]*xreal[] + xreal[]*xreal[] + 1.0) - 1.1*exp(-(xreal[]*xreal[] + xreal[]*xreal[]));
return;
}
#endif /* Test problem ZDT1
# of real variables = 30
# of bin variables = 0
# of objectives = 2
# of constraints = 0
*/ #ifdef zdt1
void test_problem (double *xreal, double *xbin, int **gene, double *obj, double *constr)
{
double f1, f2, g, h;
int i;
f1 = xreal[];
g = 0.0;
for (i=; i<; i++)
{
g += xreal[i];
}
g = 9.0*g/29.0;
g += 1.0;
h = 1.0 - sqrt(f1/g);
f2 = g*h;
obj[] = f1;
obj[] = f2;
return;
}
#endif /* Test problem ZDT2
# of real variables = 30
# of bin variables = 0
# of objectives = 2
# of constraints = 0
*/ #ifdef zdt2
void test_problem (double *xreal, double *xbin, int **gene, double *obj, double *constr)
{
double f1, f2, g, h;
int i;
f1 = xreal[];
g = 0.0;
for (i=; i<; i++)
{
g += xreal[i];
}
g = 9.0*g/29.0;
g += 1.0;
h = 1.0 - pow((f1/g),2.0);
f2 = g*h;
obj[] = f1;
obj[] = f2;
return;
}
#endif /* Test problem ZDT3
# of real variables = 30
# of bin variables = 0
# of objectives = 2
# of constraints = 0
*/ #ifdef zdt3
void test_problem (double *xreal, double *xbin, int **gene, double *obj, double *constr)
{
double f1, f2, g, h;
int i;
f1 = xreal[];
g = 0.0;
for (i=; i<; i++)
{
g += xreal[i];
}
g = 9.0*g/29.0;
g += 1.0;
h = 1.0 - sqrt(f1/g) - (f1/g)*sin(10.0*PI*f1);
f2 = g*h;
obj[] = f1;
obj[] = f2;
return;
}
#endif /* Test problem ZDT4
# of real variables = 10
# of bin variables = 0
# of objectives = 2
# of constraints = 0
*/ #ifdef zdt4
void test_problem (double *xreal, double *xbin, int **gene, double *obj, double *constr)
{
double f1, f2, g, h;
int i;
f1 = xreal[];
g = 0.0;
for (i=; i<; i++)
{
g += xreal[i]*xreal[i] - 10.0*cos(4.0*PI*xreal[i]);
}
g += 91.0;
h = 1.0 - sqrt(f1/g);
f2 = g*h;
obj[] = f1;
obj[] = f2;
return;
}
#endif /* Test problem ZDT5
# of real variables = 0
# of bin variables = 11
# of bits for binvar1 = 30
# of bits for binvar2-11 = 5
# of objectives = 2
# of constraints = 0
*/ #ifdef zdt5
void test_problem (double *xreal, double *xbin, int **gene, double *obj, double *constr)
{
int i, j;
int u[];
int v[];
double f1, f2, g, h;
for (i=; i<; i++)
{
u[i] = ;
}
for (j=; j<; j++)
{
if (gene[][j] == )
{
u[]++;
}
}
for (i=; i<; i++)
{
for (j=; j<; j++)
{
if (gene[i][j] == )
{
u[i]++;
}
}
}
f1 = 1.0 + u[];
for (i=; i<; i++)
{
if (u[i] < )
{
v[i] = + u[i];
}
else
{
v[i] = ;
}
}
g = ;
for (i=; i<; i++)
{
g += v[i];
}
h = 1.0/f1;
f2 = g*h;
obj[] = f1;
obj[] = f2;
return;
}
#endif /* Test problem ZDT6
# of real variables = 10
# of bin variables = 0
# of objectives = 2
# of constraints = 0
*/ #ifdef zdt6
void test_problem (double *xreal, double *xbin, int **gene, double *obj, double *constr)
{
double f1, f2, g, h;
int i;
f1 = 1.0 - (exp(-4.0*xreal[]))*pow((sin(4.0*PI*xreal[])),6.0);
g = 0.0;
for (i=; i<; i++)
{
g += xreal[i];
}
g = g/9.0;
g = pow(g,0.25);
g = 1.0 + 9.0*g;
h = 1.0 - pow((f1/g),2.0);
f2 = g*h;
obj[] = f1;
obj[] = f2;
return;
}
#endif /* Test problem BNH
# of real variables = 2
# of bin variables = 0
# of objectives = 2
# of constraints = 2
*/ #ifdef bnh
void test_problem (double *xreal, double *xbin, int **gene, double *obj, double *constr)
{
obj[] = 4.0*(xreal[]*xreal[] + xreal[]*xreal[]);
obj[] = pow((xreal[]-5.0),2.0) + pow((xreal[]-5.0),2.0);
constr[] = 1.0 - (pow((xreal[]-5.0),2.0) + xreal[]*xreal[])/25.0;
constr[] = (pow((xreal[]-8.0),2.0) + pow((xreal[]+3.0),2.0))/7.7 - 1.0;
return;
}
#endif /* Test problem OSY
# of real variables = 6
# of bin variables = 0
# of objectives = 2
# of constraints = 6
*/ #ifdef osy
void test_problem (double *xreal, double *xbin, int **gene, double *obj, double *constr)
{
obj[] = -(25.0*pow((xreal[]-2.0),2.0) + pow((xreal[]-2.0),2.0) + pow((xreal[]-1.0),2.0) + pow((xreal[]-4.0),2.0) + pow((xreal[]-1.0),2.0));
obj[] = xreal[]*xreal[] + xreal[]*xreal[] + xreal[]*xreal[] + xreal[]*xreal[] + xreal[]*xreal[] + xreal[]*xreal[];
constr[] = (xreal[]+xreal[])/2.0 - 1.0;
constr[] = 1.0 - (xreal[]+xreal[])/6.0;
constr[] = 1.0 - xreal[]/2.0 + xreal[]/2.0;
constr[] = 1.0 - xreal[]/2.0 + 3.0*xreal[]/2.0;
constr[] = 1.0 - (pow((xreal[]-3.0),2.0))/4.0 - xreal[]/4.0;
constr[] = (pow((xreal[]-3.0),2.0))/4.0 + xreal[]/4.0 - 1.0;
return;
}
#endif /* Test problem SRN
# of real variables = 2
# of bin variables = 0
# of objectives = 2
# of constraints = 2
*/ #ifdef srn
void test_problem (double *xreal, double *xbin, int **gene, double *obj, double *constr)
{
obj[] = 2.0 + pow((xreal[]-2.0),2.0) + pow((xreal[]-1.0),2.0);
obj[] = 9.0*xreal[] - pow((xreal[]-1.0),2.0);
constr[] = 1.0 - (pow(xreal[],2.0) + pow(xreal[],2.0))/225.0;
constr[] = 3.0*xreal[]/10.0 - xreal[]/10.0 - 1.0;
return;
}
#endif /* Test problem TNK
# of real variables = 2
# of bin variables = 0
# of objectives = 2
# of constraints = 2
*/ #ifdef tnk
void test_problem (double *xreal, double *xbin, int **gene, double *obj, double *constr)
{
obj[] = xreal[];
obj[] = xreal[];
if (xreal[] == 0.0)
{
constr[] = -1.0;
}
else
{
constr[] = xreal[]*xreal[] + xreal[]*xreal[] - 0.1*cos(16.0*atan(xreal[]/xreal[])) - 1.0;
}
constr[] = 1.0 - 2.0*pow((xreal[]-0.5),2.0) + 2.0*pow((xreal[]-0.5),2.0);
return;
}
#endif /* Test problem CTP1
# of real variables = 2
# of bin variables = 0
# of objectives = 2
# of constraints = 2
*/ #ifdef ctp1
void test_problem (double *xreal, double *xbin, int **gene, double *obj, double *constr)
{
double g;
g = 1.0 + xreal[];
obj[] = xreal[];
obj[] = g*exp(-obj[]/g);
constr[] = obj[]/(0.858*exp(-0.541*obj[]))-1.0;
constr[] = obj[]/(0.728*exp(-0.295*obj[]))-1.0;
return;
}
#endif /* Test problem CTP2
# of real variables = 2
# of bin variables = 0
# of objectives = 2
# of constraints = 1
*/ #ifdef ctp2
void test_problem (double *xreal, double *xbin, int **gene, double *obj, double *constr)
{
double g;
double theta, a, b, c, d, e;
double exp1, exp2;
theta = -0.2*PI;
a = 0.2;
b = 10.0;
c = 1.0;
d = 6.0;
e = 1.0;
g = 1.0 + xreal[];
obj[] = xreal[];
obj[] = g*(1.0 - sqrt(obj[]/g));
exp1 = (obj[]-e)*cos(theta) - obj[]*sin(theta);
exp2 = (obj[]-e)*sin(theta) + obj[]*cos(theta);
exp2 = b*PI*pow(exp2,c);
exp2 = fabs(sin(exp2));
exp2 = a*pow(exp2,d);
constr[] = exp1/exp2 - 1.0;
return;
}
#endif /* Test problem CTP3
# of real variables = 2
# of bin variables = 0
# of objectives = 2
# of constraints = 1
*/ #ifdef ctp3
void test_problem (double *xreal, double *xbin, int **gene, double *obj, double *constr)
{
double g;
double theta, a, b, c, d, e;
double exp1, exp2;
theta = -0.2*PI;
a = 0.1;
b = 10.0;
c = 1.0;
d = 0.5;
e = 1.0;
g = 1.0 + xreal[];
obj[] = xreal[];
obj[] = g*(1.0 - sqrt(obj[]/g));
exp1 = (obj[]-e)*cos(theta) - obj[]*sin(theta);
exp2 = (obj[]-e)*sin(theta) + obj[]*cos(theta);
exp2 = b*PI*pow(exp2,c);
exp2 = fabs(sin(exp2));
exp2 = a*pow(exp2,d);
constr[] = exp1/exp2 - 1.0;
return;
}
#endif /* Test problem CTP4
# of real variables = 2
# of bin variables = 0
# of objectives = 2
# of constraints = 1
*/ #ifdef ctp4
void test_problem (double *xreal, double *xbin, int **gene, double *obj, double *constr)
{
double g;
double theta, a, b, c, d, e;
double exp1, exp2;
theta = -0.2*PI;
a = 0.75;
b = 10.0;
c = 1.0;
d = 0.5;
e = 1.0;
g = 1.0 + xreal[];
obj[] = xreal[];
obj[] = g*(1.0 - sqrt(obj[]/g));
exp1 = (obj[]-e)*cos(theta) - obj[]*sin(theta);
exp2 = (obj[]-e)*sin(theta) + obj[]*cos(theta);
exp2 = b*PI*pow(exp2,c);
exp2 = fabs(sin(exp2));
exp2 = a*pow(exp2,d);
constr[] = exp1/exp2 - 1.0;
return;
}
#endif /* Test problem CTP5
# of real variables = 2
# of bin variables = 0
# of objectives = 2
# of constraints = 1
*/ #ifdef ctp5
void test_problem (double *xreal, double *xbin, int **gene, double *obj, double *constr)
{
double g;
double theta, a, b, c, d, e;
double exp1, exp2;
theta = -0.2*PI;
a = 0.1;
b = 10.0;
c = 2.0;
d = 0.5;
e = 1.0;
g = 1.0 + xreal[];
obj[] = xreal[];
obj[] = g*(1.0 - sqrt(obj[]/g));
exp1 = (obj[]-e)*cos(theta) - obj[]*sin(theta);
exp2 = (obj[]-e)*sin(theta) + obj[]*cos(theta);
exp2 = b*PI*pow(exp2,c);
exp2 = fabs(sin(exp2));
exp2 = a*pow(exp2,d);
constr[] = exp1/exp2 - 1.0;
return;
}
#endif /* Test problem CTP6
# of real variables = 2
# of bin variables = 0
# of objectives = 2
# of constraints = 1
*/ #ifdef ctp6
void test_problem (double *xreal, double *xbin, int **gene, double *obj, double *constr)
{
double g;
double theta, a, b, c, d, e;
double exp1, exp2;
theta = 0.1*PI;
a = 40.0;
b = 0.5;
c = 1.0;
d = 2.0;
e = -2.0;
g = 1.0 + xreal[];
obj[] = xreal[];
obj[] = g*(1.0 - sqrt(obj[]/g));
exp1 = (obj[]-e)*cos(theta) - obj[]*sin(theta);
exp2 = (obj[]-e)*sin(theta) + obj[]*cos(theta);
exp2 = b*PI*pow(exp2,c);
exp2 = fabs(sin(exp2));
exp2 = a*pow(exp2,d);
constr[] = exp1/exp2 - 1.0;
return;
}
#endif /* Test problem CTP7
# of real variables = 2
# of bin variables = 0
# of objectives = 2
# of constraints = 1
*/ #ifdef ctp7
void test_problem (double *xreal, double *xbin, int **gene, double *obj, double *constr)
{
double g;
double theta, a, b, c, d, e;
double exp1, exp2;
theta = -0.05*PI;
a = 40.0;
b = 5.0;
c = 1.0;
d = 6.0;
e = 0.0;
g = 1.0 + xreal[];
obj[] = xreal[];
obj[] = g*(1.0 - sqrt(obj[]/g));
exp1 = (obj[]-e)*cos(theta) - obj[]*sin(theta);
exp2 = (obj[]-e)*sin(theta) + obj[]*cos(theta);
exp2 = b*PI*pow(exp2,c);
exp2 = fabs(sin(exp2));
exp2 = a*pow(exp2,d);
constr[] = exp1/exp2 - 1.0;
return;
}
#endif /* Test problem CTP8
# of real variables = 2
# of bin variables = 0
# of objectives = 2
# of constraints = 2
*/ #ifdef ctp8
void test_problem (double *xreal, double *xbin, int **gene, double *obj, double *constr)
{
double g;
double theta, a, b, c, d, e;
double exp1, exp2;
g = 1.0 + xreal[];
obj[] = xreal[];
obj[] = g*(1.0 - sqrt(obj[]/g));
theta = 0.1*PI;
a = 40.0;
b = 0.5;
c = 1.0;
d = 2.0;
e = -2.0;
exp1 = (obj[]-e)*cos(theta) - obj[]*sin(theta);
exp2 = (obj[]-e)*sin(theta) + obj[]*cos(theta);
exp2 = b*PI*pow(exp2,c);
exp2 = fabs(sin(exp2));
exp2 = a*pow(exp2,d);
constr[] = exp1/exp2 - 1.0;
theta = -0.05*PI;
a = 40.0;
b = 2.0;
c = 1.0;
d = 6.0;
e = 0.0;
exp1 = (obj[]-e)*cos(theta) - obj[]*sin(theta);
exp2 = (obj[]-e)*sin(theta) + obj[]*cos(theta);
exp2 = b*PI*pow(exp2,c);
exp2 = fabs(sin(exp2));
exp2 = a*pow(exp2,d);
constr[] = exp1/exp2 - 1.0;
return;
}
#endif

以上, 为NSGA-II 源码中给出的几个测试函数, 其中无限制条件的测试函数不需解释, 对有限制条件的做一定说明。

根据比对, 可以直到算法中, 将所有的约束条件都转换为  >=0  。

所以, 违反限制条件的 约束函数值  均小于 0  。

TNK 测试函数有一定特殊性,  因为其中存在  无意义的个体, 即 X2 为0  ,   这里对该情况下的  约束 函数1   直接赋值为  -1  。

代码,如下:

    if (xreal[] == 0.0)
{
constr[] = -1.0;
}

多目标遗传算法 ------ NSGA-II (部分源码解析)目标函数 problemdef.c的更多相关文章

  1. 多目标遗传算法 ------ NSGA-II (部分源码解析)介绍

    NSGA(非支配排序遗传算法).NSGA-II(带精英策略的快速非支配排序遗传算法),都是基于遗传算法的多目标优化算法,是基于pareto最优解讨论的多目标优化. 在官网: http://www.ii ...

  2. 多目标遗传算法 ------ NSGA-II (部分源码解析) 交叉操作 crossover.c

    遗传算法中的交叉操作是 对NSGA-II  源码分析的  最后一部分, 这一部分也是我 从读该算法源代码和看该算法论文理解偏差最大的  函数模块. 这里,首先提一下,遗传算法的  交叉操作.变异操作都 ...

  3. 多目标遗传算法 ------ NSGA-II (部分源码解析)状态报告 打印 report.c

    /* Routines for storing population data into files */ # include <stdio.h> # include <stdlib ...

  4. 多目标遗传算法 ------ NSGA-II (部分源码解析) 拥挤距离计算 crowddist.c

    /* Crowding distance computation routines */ # include <stdio.h> # include <stdlib.h> # ...

  5. 多目标遗传算法 ------ NSGA-II (部分源码解析)README 算法的部分英文解释

    This is the Readme file for NSGA-II code. About the Algorithm--------------------------------------- ...

  6. 多目标遗传算法 ------ NSGA-II (部分源码解析) 实数、二进制编码的变异操作 mutation.c

    遗传算法的变异操作 /* Mutation routines */ # include <stdio.h> # include <stdlib.h> # include < ...

  7. 多目标遗传算法 ------ NSGA-II (部分源码解析)两个个体支配判断 dominance.c

    /* Domination checking routines */ # include <stdio.h> # include <stdlib.h> # include &l ...

  8. 多目标遗传算法 ------ NSGA-II (部分源码解析)二元锦标赛选择 tourselect.c

    tourselect.c  文件中共有两个函数: selection (population *old_pop, population *new_pop) individual* tournament ...

  9. 多目标遗传算法 ------ NSGA-II (部分源码解析) 临时种群生成新父代种群 fillnds.c

    /* Nond-domination based selection routines */ # include <stdio.h> # include <stdlib.h> ...

随机推荐

  1. docker网络调试过程

    #1: 添加永久网桥 vi /etc/sysconfig/network-scripts/ifcfg-br0 DEVICE=br0 TYPE=Bridge BOOTROTO=static IPADDR ...

  2. Glace:generator-jhipster, adding User entity enhancement management

    https://github.com/jhipster/generator-jhipster/issues/2538 jhipster,很好用的开发工具.国外知名度高,国内未普及,国外大公司在用. j ...

  3. Activiti流程编辑器针对自定义用户角色表优化改造

    本文目的: 针对自定义的用户.角色表,对Activiti的在线流程设计器进行优化改造,使之能直接在图形界面上完成对节点办理人.候选人.候选组的配置,不需要先去查数据库中的用户ID.角色ID等信息再填入 ...

  4. [转帖] iptables之四表五链

    iptables之四表五链 http://www.cnblogs.com/clouders/p/6544584.html mark 学习一下 对防火墙一无所知.. iptables可谓是SA的看家本领 ...

  5. const修饰符限定的常量

    类型前加const修饰符限定变量为只读,称为常量,定义时必须初始化,且初始化后编译器不允许再修改常量的值. 一.常量的定义 const在类型前面 const int value: //value是co ...

  6. OneZero——Review会议(2013.5.20)

    1. 时间: 2016年5月20日. 2. 成员: X 夏一鸣 * 组长 (博客:http://www.cnblogs.com/xiaym896/), G 郭又铭 (博客:http://www.cnb ...

  7. Python装饰器的深入理解

    装饰器 #装饰器:本质上是函数,(装饰其他函数)就是为其他函数添加附加功能 #原则: 1.不能修改被装饰的函数的源代码 # 2.不能修改被装饰的函数的调用方式 #实现装饰器知识储备 #1.函数即变量 ...

  8. 初学者学习C++的50条忠告

    1.把C++当成一门新的语言学习(和C没啥关系!真的.); 2.看<Thinking In C++>,不要看<C++变成死相>; 3.看<The C++ Programm ...

  9. python之文件系统操作(os模块)

    文件系统操作(os模块) import os file_name = "D:\\test_data\\1.txt" file_name_2 = "D:\\test_dat ...

  10. instanceof判断的对象可以是接口

    instanceof是Java的一个二元操作符(运算符) 用法 boolean result = object instanceof class instanceof通过返回一个布尔值来指出,这个对象 ...