📄 problem.h
字号:
//
//Please find details of the method from
//
// Q. Zhang, A. Zhou and Y. Jin, "RM-MEDA: A Regularity Model Based Multiobjective Estimation of Distribution Algorithm", IEEE Trans. Evolutionary Computation, Vol. 12, no. 1, pp41-63, 2008.
//
//The source codes are free for reserach work. If you have any problem with the source codes, please contact with
// Qingfu Zhang,
// Department of Computing and Electronic Systems,
// University of Essex,
// Colchester, CO4 3SQ, UK
// http://cswww.essex.ac.uk/staff/zhang
// Email: qzhang@essex.ac.uk
// Aimin Zhou
// Department of Computing and Electronic Systems,
// University of Essex,
// Colchester, CO4 3SQ, UK
// http://privatewww.essex.ac.uk/~azhou/
// Email: azhou@essex.ac.uk or amzhou@gmail.com
//Programmer:
// Aimin Zhou
//Last Update:
// Feb. 21, 2008
//
//Problem.h : test instances in ZZJ08
//
#include <cmath>
namespace PROBLEM
{
#define PI 3.1415926536
typedef double (*GF)(const std::vector< double >& X);
double GL(const std::vector< double >& X)
{
double g=0.0;
for(unsigned int i=2; i<X.size(); i++) g += (X[i]-X[0])*(X[i]-X[0]);
return g;
}
double GN(const std::vector< double >& X)
{
double g=0.0;
for(unsigned int i=2; i<X.size(); i++) g += (X[i]*X[i]-X[0])*(X[i]*X[i]-X[0]);
return g;
}
//F2
double F1(const std::vector< double >& X, GF g, double alpha)
{
return (1.0 + (*g)(X))*cos(pow(X[0],alpha)*PI/2.0)*cos(pow(X[1],alpha)*PI/2.0);
}
double F2(const std::vector< double >& X, GF g, double alpha)
{
return (1.0 + (*g)(X))*cos(pow(X[0],alpha)*PI/2.0)*sin(pow(X[1],alpha)*PI/2.0);
}
double F3(const std::vector< double >& X, GF g, double alpha)
{
return (1.0 + (*g)(X))*sin(pow(X[0],alpha)*PI/2.0);
}
// ZDT11 test problem
void ZZJ08_F1(std::vector< double >& F, std::vector< double >& E, std::vector< double >& I, std::vector< double >& X)
{
F[0] = X[0];
double g = 0.0;
for(unsigned int i=1; i<X.size(); i++)
g += (X[i]-X[0])*(X[i]-X[0]);
g = 1.0 + 9.0*g/(X.size() - 1.0);
F[1] = g*(1.0 - sqrt(X[0]/g));
}
// ZDT21 test problem
void ZZJ08_F2(std::vector< double >& F, std::vector< double >& E, std::vector< double >& I, std::vector< double >& X)
{
F[0] = X[0];
double g = 0;
for(unsigned int i=1; i<X.size(); i++)
g += (X[i]-X[0])*(X[i]-X[0]);
g = 1.0 + 9.0*g/(X.size() - 1.0);
F[1] = g*(1.0 - X[0] * X[0] /(g*g));
}
// ZDT61 test problem
void ZZJ08_F3(std::vector< double >& F, std::vector< double >& E, std::vector< double >& I, std::vector< double >& X)
{
F[0] = 1 - exp(- 4.0*X[0])*pow(sin(6.0*PI*X[0]), 6.0);
double g = 0.0;
for(unsigned int i=1; i<X.size(); i++)
g += (X[i]-X[0])*(X[i]-X[0]);
g = 1.0 + 9.0*pow(g/(X.size()-1.0), 0.25);
F[1] = g*(1.0 - F[0]*F[0]/(g*g));
}
// DTLZ21 test problem
void ZZJ08_F4(std::vector< double >& F, std::vector< double >& E, std::vector< double >& I, std::vector< double >& X)
{
F[0] = F1(X, GL, 1.0);
F[1] = F2(X, GL, 1.0);
F[2] = F3(X, GL, 1.0);
}
// ZDT12 test problem
void ZZJ08_F5(std::vector< double >& F, std::vector< double >& E, std::vector< double >& I, std::vector< double >& X)
{
F[0] = X[0];
double g = 0.0;
for(unsigned int i=1; i<X.size(); i++)
g += (X[i]*X[i] - X[0])*(X[i]*X[i] - X[0]);
g = 1.0 + 9.0*g/(X.size() - 1.0);
F[1] = g*(1.0 - sqrt(X[0]/g));
}
// ZDT22 test problem
void ZZJ08_F6(std::vector< double >& F, std::vector< double >& E, std::vector< double >& I, std::vector< double >& X)
{
F[0] = sqrt(X[0]);
double g = 0;
for(unsigned int i=1; i<X.size(); i++)
g += (X[i]*X[i] - X[0])*(X[i]*X[i] - X[0]);
g = 1.0 + 9.0*g/(X.size() - 1.0);
F[1] = g*(1.0-X[0] /(g*g));
}
// ZDT62 test problem
void ZZJ08_F7(std::vector< double >& F, std::vector< double >& E, std::vector< double >& I, std::vector< double >& X)
{
F[0] = 1 - exp(-4.0*X[0])*pow(sin(6.0*PI*X[0]), 6.0);
double g = 0.0;
for(unsigned int i=1; i<X.size(); i++)
g += (X[i]*X[i]-X[0])*(X[i]*X[i]-X[0]);
g = 1.0 + 9.0*pow(g/(X.size()-1.0), 0.25);
F[1] = g*(1.0- F[0]*F[0]/(g*g));
}
// DTLZ22 test problem
void ZZJ08_F8(std::vector< double >& F, std::vector< double >& E, std::vector< double >& I, std::vector< double >& X)
{
F[0] = F1(X, GN, 1.0);
F[1] = F2(X, GN, 1.0);
F[2] = F3(X, GN, 1.0);
}
// ZDT4a2 test problem
void ZZJ08_F9(std::vector< double >& F, std::vector< double >& E, std::vector< double >& I, std::vector< double >& X)
{
F[0] = X[0];
double g = 0.0;
double tmp1 = 0.0;
double tmp2 = 1.0;
for(unsigned int i=1; i<X.size(); i++)
{
tmp1 += (X[i]*X[i]-X[0])*(X[i]*X[i]-X[0]);
tmp2 *= cos((X[i]*X[i]-X[0])/sqrt(double(i)));
}
g = (tmp1/4000.0 - tmp2 + 1.0) + 1.0;
F[1] = g*(1.0-sqrt(X[0]/g));
}
// ZDT4c2 test problem
void ZZJ08_F10(std::vector< double >& F, std::vector< double >& E, std::vector< double >& I, std::vector< double >& X)
{
F[0] = X[0];
double g = 1.0 + 10.0*(X.size() - 1.0);
for(unsigned int i=1; i<X.size(); i++)
g += (X[i]*X[i]-X[0])*(X[i]*X[i]-X[0]) - 10.0*cos(2*PI*(X[i]*X[i]-X[0]));
F[1] = g*fabs(1.0 - sqrt(X[0]/g));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -