00001
00011 #include <Zdt1.h>
00012
00018 Zdt1::Zdt1(VariableType variableType) {
00019
00020 problemName_ = "ZDT1-MOP-G1" ;
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
00040 upperLimit_ = new double[numberOfVariables_] ;
00041 lowerLimit_ = new double[numberOfVariables_] ;
00042 partitions_ = new int[numberOfVariables_] ;
00043 precision_ = new int[numberOfVariables_] ;
00044 bitsPerVariable_ = new int[numberOfVariables_] ;
00045
00046 memcpy(upperLimit_, upperLimit, numberOfVariables_ * sizeof(double)) ;
00047 memcpy(lowerLimit_, lowerLimit, numberOfVariables_ * sizeof(double)) ;
00048 memcpy(partitions_, partitions_, numberOfVariables_ * sizeof(int)) ;
00049 memcpy(precision_, precision, numberOfVariables_ * sizeof(int)) ;
00050
00051 variable_ = new VariableType[numberOfVariables_] ;
00052
00053 initializeRealVariableType(variableType) ;
00054 cout << "Created a " << problemName_ << " problem" << endl ;
00055
00056 }
00057
00058
00059 static double g(MultiobjectiveProblem * problem, Individual * individual) {
00060 int i ;
00061 double sum ;
00062
00063 sum = 0;
00064 for (i = 1; i < problem->numberOfVariables_; i++)
00065 sum += (individual->chromosome_->gene_[i])->getRealAllele() ;
00066
00067 return 1 + 9/(problem->numberOfVariables_ - 1)* sum ;
00068 } ;
00069
00070
00071 void Zdt1::evaluate(Individual * individual) {
00072 int i ;
00073 double x ;
00074
00075 x = (individual->chromosome_->gene_[0])->getRealAllele() ;
00076
00077 individual->fitness_[0] = x;
00078
00079
00080
00081 individual->fitness_[1] = 1 - sqrt(x/g(this, individual)) ;
00082 }
00083
00084