/* 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. Scapy的使用

    0.前言 最近现场测试项目时,突如其来需要伪造IGMP报文,骗取交换机相关组播流量,慌忙之下学习了Scapy的使用,以及相关快速学习的方法,在这里分享下. 1.Scapy库安装 github地址:ht ...

  2. HDOJ1287_破译密码

    一道正常简单题 曲折解题 做这题的时候看了很久没有看懂是什么意思,最后以为是一道单独的数学题把B这个大写字母猜出来进行异或运算,还不知道C里面异或运算可以直接有符号的:),导致又去学习了一下十进制转换 ...

  3. QA

    QA:Quality Assurance,品质保证 IDQA:Individual Document Quality Assurance 设计品质保证 QE:Quantitative Easing 质 ...

  4. mysql学习笔记二 —— 权限体系

    要点: 1.MySQL的API2.MySQL的相关文件3.MySQL的权限体系 1.MySQL的API 应用程序接口 (application program interface) 1.1 命令行中的 ...

  5. Django-website 程序案例系列-1 最简单的web服务器

    templates:html模板文件夹下面建立文件login.html <!DOCTYPE html> <html lang="en"> <head& ...

  6. BZOJ4259 残缺的字符串(FFT)

    两个串匹配时相匹配的位置位置差是相同的,那么翻转一个串就变成位置和相同,卷积的形式. 考虑如何使用卷积体现两个位置能否匹配.一个暴力的思路是每次只考虑一种字符,将其在一个串中设为1,并在另一个串中将不 ...

  7. BZOJ2821 作诗(分块)

    和区间众数几乎一模一样的套路. // luogu-judger-enable-o2 #include<iostream> #include<cstdio> #include&l ...

  8. Spring IOC和Spring AOP的实现原理(源码主线流程)

    写在前面 正本文参考了<spring技术内幕>和spring 4.0.5源码.本文只描述原理流程的主线部分,其他比如验证,缓存什么可以具体参考源码理解. Spring IOC 一.容器初始 ...

  9. 逆向---01.Nop、中文字符串搜索、保存修改后程序

    基础知识:(Nop:删除跳转) gcc编译链接命令: gcc -o 生成文件名 源文件名  gcc编译成汇编代码:gcc -o 生成文件名 -S 源文件名 VS查看汇编代码:(调试模式下,Ctrl+F ...

  10. eclipse index 不工作 F3 不能找到头文件

    To add paths containing code to parse, follow these steps :1. Right click on the project2. Select Pr ...