• Main Page
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

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

Our Software

orangebox Mallba

orangebox ssGA

orangebox JGDS

orangebox xxGA

orangebox JCell

orangebox MHTB

orangebox DEME

orangebox JMetal

orangebox More...

orangebox Go Back