00001
00011 #include <Zdt2.h>
00012
00018 Zdt2::Zdt2(VariableType variableType) {
00019
00020 problemName_ = "ZDT2-MOP-G2" ;
00021
00022 numberOfVariables_ = 30 ;
00023 numberOfFunctions_ = 2 ;
00024 numberOfConstraints_ = 0 ;
00025
00026 const double upperLimit[] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
00027 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
00028 1, 1, 1, 1, 1, 1, 1, 1, 1, 1} ;
00029 const double lowerLimit[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
00030 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
00031 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} ;
00032 const int partitions[] = {5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
00033 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
00034 5, 5, 5, 5, 5, 5, 5, 5, 5, 5} ;
00035 const int precision[] = {5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
00036 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
00037 5, 5, 5, 5, 5, 5, 5, 5, 5, 5} ;
00038
00039 upperLimit_ = new double[numberOfVariables_] ;
00040 lowerLimit_ = new double[numberOfVariables_] ;
00041 partitions_ = new int[numberOfVariables_] ;
00042 precision_ = new int[numberOfVariables_] ;
00043 bitsPerVariable_ = new int[numberOfVariables_] ;
00044
00045 memcpy(upperLimit_, upperLimit, numberOfVariables_ * sizeof(double)) ;
00046 memcpy(lowerLimit_, lowerLimit, numberOfVariables_ * sizeof(double)) ;
00047 memcpy(partitions_, partitions_, numberOfVariables_ * sizeof(int)) ;
00048 memcpy(precision_, precision, numberOfVariables_ * sizeof(int)) ;
00049
00050 variable_ = new VariableType[numberOfVariables_] ;
00051
00052 initializeRealVariableType(variableType) ;
00053 cout << "Created a " << problemName_ << " problem" << endl ;
00054
00055 }
00056
00057
00058 static double g(MultiobjectiveProblem * problem, Individual * individual) {
00059 int i ;
00060 double sum ;
00061
00062 sum = 0;
00063 for (i = 1; i < problem->numberOfVariables_; i++)
00064 sum += (individual->chromosome_->gene_[i])->getRealAllele() ;
00065
00066 return 1 + 9/(problem->numberOfVariables_ - 1)* sum ;
00067 } ;
00068
00069
00070 void Zdt2::evaluate(Individual * individual) {
00071 int i ;
00072 double x ;
00073
00074 x = (individual->chromosome_->gene_[0])->getRealAllele() ;
00075
00076 individual->fitness_[0] = x;
00077
00078
00079 double tmp = x/g(this, individual) ;
00080 individual->fitness_[1] = 1 - tmp * tmp ;
00081 }
00082
00083
00084