00001
00010 #include <Constr_Ex.h>
00011
00017 Constr_Ex::Constr_Ex(VariableType variableType) {
00018
00019 problemName_ = "Constr_Ex" ;
00020
00021 numberOfVariables_ = 2 ;
00022 numberOfFunctions_ = 2 ;
00023 numberOfConstraints_ = 2 ;
00024
00025 const double upperLimit[] = {1, 5} ;
00026 const double lowerLimit[] = {0.1, 0} ;
00027 const int partitions[] = {100, 100, 100} ;
00028 const int precision[] = {5, 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
00047
00048 void Constr_Ex::evaluate(Individual * individual) {
00049 double x[2] ;
00050
00051 x[0] = (individual->chromosome_->gene_[0])->getRealAllele() ;
00052 x[1] = (individual->chromosome_->gene_[1])->getRealAllele() ;
00053
00054
00055 individual->fitness_[0] = x[0] ;
00056
00057
00058 individual->fitness_[1] = (1.0 + x[1]) / x[0] ;
00059
00060 }
00061
00062 bool Constr_Ex::constraintsAreSafisfied(Individual * individual) {
00063 double x[2] ;
00064 bool result ;
00065
00066 x[0] = (individual->chromosome_->gene_[0])->getRealAllele() ;
00067 x[1] = (individual->chromosome_->gene_[1])->getRealAllele() ;
00068
00069 if ( ((x[1] + 9*x[0]) >= 6) &&
00070 ((-x[1] + 9*x[0]) >= 1) )
00071 return true ;
00072 else
00073 return false ;
00074 }
00075
00076 int Constr_Ex::numberOfNonSatisfiedConstraints(Individual * individual) {
00077 int counter ;
00078 double x[2] ;
00079
00080 counter = 0 ;
00081 x[0] = (individual->chromosome_->gene_[0])->getRealAllele() ;
00082 x[1] = (individual->chromosome_->gene_[1])->getRealAllele() ;
00083
00084 if ((x[1] + 9*x[0]) < 6)
00085 counter ++ ;
00086 if ((-x[1] + 9*x[0]) < 1)
00087 counter ++ ;
00088
00089 return counter ;
00090 }