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

Viennet4.cpp

Go to the documentation of this file.
00001 
00010 #include <Viennet4.h>
00011 
00017 Viennet4::Viennet4(VariableType variableType) {
00018 
00019   problemName_ = "Viennet4-MOP-C3" ;
00020 
00021   numberOfVariables_   = 2 ;
00022   numberOfFunctions_   = 3 ;
00023   numberOfConstraints_ = 3 ;
00024 
00025   const double upperLimit[] = {4.0, 4.0} ;
00026   const double lowerLimit[] = {-4.0, -4.0} ;
00027   const int    partitions[] = {200, 200} ;
00028   const int    precision[]     = {5, 5} ;
00029 
00030   upperLimit_      = new double[numberOfVariables_] ;
00031   lowerLimit_      = new double[numberOfVariables_] ;
00032   partitions_      = new int[numberOfVariables_]    ;
00033   precision_       = new int[numberOfVariables_]    ;
00034   bitsPerVariable_ = new int[numberOfVariables_]    ;
00035   
00036   memcpy(upperLimit_, upperLimit, numberOfVariables_ * sizeof(double)) ;
00037   memcpy(lowerLimit_, lowerLimit, numberOfVariables_ * sizeof(double)) ;
00038   memcpy(partitions_, partitions_, numberOfVariables_ * sizeof(int)) ;
00039   memcpy(precision_, precision, numberOfVariables_ * sizeof(int)) ;
00040 
00041   variable_ = new VariableType[numberOfVariables_] ;
00042 
00043   initializeRealVariableType(variableType) ;
00044   cout << "Created a " << problemName_ << " problem" << endl ;
00045 
00046 } // Viennet4::Viennet4
00047 
00048 
00049 
00050 void Viennet4::evaluate(Individual * individual) {
00051   double x[2] ;
00052 
00053   x[0] = (individual->chromosome_->gene_[0])->getRealAllele() ;
00054   x[1] = (individual->chromosome_->gene_[1])->getRealAllele() ;
00055 
00056   // First function
00057   individual->fitness_[0] = (x[0]-2)*(x[0]-2)/2.0 + 
00058                             (x[1]+1)*(x[1]+1)/13.0 + 3.0 ;
00059 
00060   // Second function
00061 
00062   individual->fitness_[1] = (x[0]+x[1]-3)*(x[0]+x[1]-3)/175.0 +
00063                             (2*x[1]-x[0])*(2*x[1]-x[0])/17.0 - 13.0 ;
00064 
00065   // Third function
00066   individual->fitness_[2] = (3*x[0]-2*x[1]+4)*(3*x[0]-2*x[1]+4)/8.0 +
00067                             (x[0]-x[1]+1)*(x[0]-x[1]+1)/27.0 + 15 ;
00068 } // Viennet4::evaluate
00069 
00070 
00071 bool Viennet4::constraintsAreSatisfied(Individual * individual) {
00072   double x[2];
00073   
00074   x[0] = (individual->chromosome_->gene_[0])->getRealAllele() ;
00075   x[1] = (individual->chromosome_->gene_[1])->getRealAllele() ;
00076   
00077    if ((x[1] < (-4*x[0] +4)) &&
00078       (x[0] > -1)           &&
00079       (x[1] > (x[0]-2)))
00080     return true ;
00081   else
00082     return false ;
00083 } // Viennet4::constraintsAreSafisfied
00084 
00085 int Viennet4::numberOfNonSatisfiedConstraints(Individual * individual) {
00086   int    counter ;
00087   double x[2]    ;
00088 
00089   counter = 0 ;
00090   x[0] = (individual->chromosome_->gene_[0])->getRealAllele() ;
00091   x[1] = (individual->chromosome_->gene_[1])->getRealAllele() ;
00092  
00093   if (x[1] < (-4*x[0] +4)) 
00094     counter ++ ;
00095   if (x[0] > -1)          
00096     counter ++ ;
00097   if (x[1] > (x[0]-2))
00098     counter ++ ;
00099 
00100   return counter ;
00101 } // Viennet4::numberOfNonSatisfiedConstraints

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