Dtlz5.cpp
Go to the documentation of this file.00001 00009 #include <Dtlz5.h> 00010 00016 Dtlz5::Dtlz5(VariableType variableType, int numberOfVariables, int dimension) { 00017 00018 problemName_ = "Dtlz6" ; 00019 00020 numberOfVariables_ = numberOfVariables ; 00021 numberOfFunctions_ = dimension ; 00022 numberOfConstraints_ = 0 ; 00023 00024 upperLimit_ = new double[numberOfVariables_] ; 00025 lowerLimit_ = new double[numberOfVariables_] ; 00026 precision_ = new int[numberOfVariables_] ; 00027 bitsPerVariable_ = new int[numberOfVariables_] ; 00028 00029 for (int i = 0; i < numberOfVariables_; i++) { 00030 upperLimit_[i] = 1.0 ; 00031 lowerLimit_[i] = 0.0 ; 00032 precision_[i] = 6 ; 00033 } // for 00034 00035 variableType_ = new VariableType[numberOfVariables_] ; 00036 00037 initializeVariableType(variableType) ; 00038 cout << "Created a " << problemName_ << " problem" << endl ; 00039 00040 } // Dtlz5::Dtlz5 00041 00046 void Dtlz5::evaluate(Individual * individual) { 00047 int k ; 00048 double g ; 00049 double * x ; 00050 00051 double * theta = new double[numberOfFunctions_] ; 00052 00053 x = new double[numberOfVariables_] ; 00054 for (int i = 0 ; i < numberOfVariables_; i++) 00055 x[i] = (individual->chromosome_->gene_[i])->getRealAllele() ; 00056 00057 k = numberOfVariables_ - numberOfFunctions_ + 1 ; 00058 g = 0.0 ; 00059 for (int i = numberOfVariables_ - k + 1; i <= numberOfVariables_; i++) 00060 g += pow(x[i-1] - 0.5, 2); 00061 00062 double t = DM_PI / (4 * (1 + g)); 00063 00064 theta[0] = x[0] * DM_PI / 2; 00065 for (int i = 2; i <= (numberOfFunctions_-1); i++) 00066 theta[i-1] = t * (1 + 2 * g * x[i-1]); 00067 00068 for (int i = 1; i <= numberOfFunctions_; i++) { 00069 double f = (1 + g); 00070 00071 for (int j = numberOfFunctions_ - i; j >= 1; j--) 00072 f *= cos(theta[j-1]); 00073 00074 if (i > 1) 00075 f *= sin(theta[(numberOfFunctions_ - i + 1) - 1]); 00076 00077 individual->fitness_[i-1] = f ; 00078 } // for 00079 00080 delete [] x ; 00081 delete [] theta ; 00082 } // Dtlz5::evaluate