Main Page | Namespace List | Class Hierarchy | Compound List | File List | Compound Members | File Members

Osyczka2.cpp

Go to the documentation of this file.
00001 
00010 #include <Osyczka2.h>
00011 
00017 Osyczka2::Osyczka2(VariableType variableType) {
00018   problemName_ = "OSYCZKA2-MOP-C2" ;
00019 
00020   numberOfVariables_   = 6 ;
00021   numberOfFunctions_   = 2 ;
00022   numberOfConstraints_ = 6 ;
00023 
00024   const double upperLimit[] = {10.0, 10.0, 5.0, 6.0, 5.0, 10.0} ;
00025   const double lowerLimit[] = {0.0, 0.0, 1.0, 0.0, 1.0, 0.0} ;
00026   const int partitions[]    = {30, 30, 30, 30, 30, 30} ;
00027   const int precision[]     = {5, 5, 5, 5, 5} ;
00028 
00029   upperLimit_      = new double[numberOfVariables_] ;
00030   lowerLimit_      = new double[numberOfVariables_] ;
00031   partitions_      = new int[numberOfVariables_]    ;
00032   precision_       = new int[numberOfVariables_]    ;
00033   bitsPerVariable_ = new int[numberOfVariables_]    ;
00034 
00035 // int bitsPerBinaryVariable[] = {10, 10, 10} ;
00036 
00037   memcpy(upperLimit_, upperLimit, numberOfVariables_ * sizeof(double)) ;
00038   memcpy(lowerLimit_, lowerLimit, numberOfVariables_ * sizeof(double)) ;
00039   memcpy(partitions_, partitions_, numberOfVariables_ * sizeof(int)) ;
00040   memcpy(precision_, precision, numberOfVariables_ * sizeof(int)) ;
00041 //  memcpy(bitsPerVariable_, bitsPerVariable, numberOfVariables_ * sizeof(int)) ;
00042 
00043   variable_ = new VariableType[numberOfVariables_] ;
00044   int i ;
00045 
00046   initializeRealVariableType(variableType) ;
00047   cout << "Created a " << problemName_ << " problem" << endl ;
00048 } // Osyczka2::Osyczka2
00049 
00050 void Osyczka2::evaluate(Individual *individual) {
00051   // First function
00052   double result ;
00053   double x[6]   ;
00054   
00055   x[0] = (individual->chromosome_->gene_[0])->getRealAllele() ;
00056   x[1] = (individual->chromosome_->gene_[1])->getRealAllele() ;
00057   x[2] = (individual->chromosome_->gene_[2])->getRealAllele() ;
00058   x[3] = (individual->chromosome_->gene_[3])->getRealAllele() ;
00059   x[4] = (individual->chromosome_->gene_[4])->getRealAllele() ;
00060   x[5] = (individual->chromosome_->gene_[5])->getRealAllele() ;
00061 
00062   result =  -(25 * (x[0] - 2) * (x[0] - 2) +
00063                    (x[1] - 2) * (x[1] - 2) +
00064                    (x[2] - 1) * (x[2] - 1) +
00065                    (x[3] - 4) * (x[3] - 4) +
00066                    (x[4] - 1) * (x[4] - 1)) ;
00067 
00068   individual->fitness_[0] = result ;
00069 
00070   // Second function
00071   result = x[0]*x[0] +
00072            x[1]*x[1] +
00073            x[2]*x[2] +
00074            x[3]*x[3] +
00075            x[4]*x[4] +
00076            x[5]*x[5] ; 
00077 
00078   individual->fitness_[1] = result ;
00079 } // Osyczka2::evaluateIndividual
00080 
00081 
00082 bool Osyczka2::constraintsAreSatisfied(Individual * individual) {
00083   double x[6] ;
00084 
00085   x[0] = (individual->chromosome_->gene_[0])->getRealAllele() ;
00086   x[1] = (individual->chromosome_->gene_[1])->getRealAllele() ;
00087   x[2] = (individual->chromosome_->gene_[2])->getRealAllele() ;
00088   x[3] = (individual->chromosome_->gene_[3])->getRealAllele() ;
00089   x[4] = (individual->chromosome_->gene_[4])->getRealAllele() ;
00090   x[5] = (individual->chromosome_->gene_[5])->getRealAllele() ;
00091   
00092   if ((0 <= (x[0]+x[1] - 2))     &&
00093       (0 <= (6 - x[0] - x[1]))   &&
00094       (0 <= (2 + x[0] + x[1]))   &&
00095       (0 <= (2 - x[0] + 3*x[1])) &&
00096       (0 <= (4 - (x[2]-3)*(x[2]-3)- x[3])) &&
00097       (0 <= ((x[4]-3)*(x[4]-3)+x[5]-4)))
00098         return true ;
00099   else
00100     return false ;
00101 } // Osyczka2::constraintsAreSafisfied
00102 
00103 int Osyczka2::numberOfNonSatisfiedConstraints(Individual * individual) {
00104   int    counter ;
00105   double x[6]    ;
00106 
00107   x[0] = (individual->chromosome_->gene_[0])->getRealAllele() ;
00108   x[1] = (individual->chromosome_->gene_[1])->getRealAllele() ;
00109   x[2] = (individual->chromosome_->gene_[2])->getRealAllele() ;
00110   x[3] = (individual->chromosome_->gene_[3])->getRealAllele() ;
00111   x[4] = (individual->chromosome_->gene_[4])->getRealAllele() ;
00112   x[5] = (individual->chromosome_->gene_[5])->getRealAllele() ;
00113   
00114   counter = 0 ;  
00115 
00116   if (0 > (x[0]+x[1] - 2))
00117     counter ++ ;
00118   if (0 > (6 - x[0] - x[1]))
00119     counter ++ ;
00120   if (0 > (2 + x[0] + x[1]))
00121     counter ++ ;
00122   if (0 > (2 - x[0] + 3*x[1]))
00123     counter ++ ;
00124   if (0 > (4 - (x[2]-3)*(x[2]-3)- x[3]))
00125     counter ++ ;
00126   if (0 > ((x[4]-3)*(x[4]-3)+x[5]-4))
00127     counter ++ ;
00128     
00129   return counter ;  
00130 } // Osyczka2::numberOfNonSatisfiedConstraints

Generated on Wed Feb 11 10:38:01 2004 for Paes by doxygen 1.3.3