00001 #include <Fonseca.h>
00002
00003 Fonseca::Fonseca(VariableType variableType) {
00004 problemName_ = "FONSECA" ;
00005
00006 numberOfVariables_ = 3 ;
00007 numberOfFunctions_ = 2 ;
00008 numberOfConstraints_ = 0 ;
00009
00010 const double upperLimit[] = {4.0, 4.0, 4.0} ;
00011 const double lowerLimit[] = {-4.0, -4.0, -4.0} ;
00012 const int partitions[] = {80, 80, 80} ;
00013 const int precision[] = {5, 5, 5} ;
00014
00015 upperLimit_ = new double[numberOfVariables_] ;
00016 lowerLimit_ = new double[numberOfVariables_] ;
00017 partitions_ = new int[numberOfVariables_] ;
00018 precision_ = new int[numberOfVariables_] ;
00019 bitsPerVariable_ = new int[numberOfVariables_] ;
00020
00021 memcpy(upperLimit_, upperLimit, numberOfVariables_ * sizeof(double)) ;
00022 memcpy(lowerLimit_, lowerLimit, numberOfVariables_ * sizeof(double)) ;
00023 memcpy(partitions_, partitions_, numberOfVariables_ * sizeof(int)) ;
00024 memcpy(precision_, precision, numberOfVariables_ * sizeof(int)) ;
00025
00026 variable_ = new VariableType[numberOfVariables_] ;
00027
00028 initializeRealVariableType(variableType) ;
00029 cout << "Created a " << problemName_ << " problem" << endl ;
00030 }
00031
00032 void Fonseca::evaluate(Individual *individual) {
00033
00034 double result = 0.0 ;
00035 int i ;
00036
00037 for (i = 0; i < numberOfVariables_; i++) {
00038
00039 result += pow((individual->chromosome_->gene_[i])->getRealAllele() -
00040 (1 /sqrt((double)numberOfVariables_)), 2) ;
00041 }
00042
00043 result = 1 - exp(-result) ;
00044 individual->fitness_[0] = result ;
00045
00046
00047 result = 0.0 ;
00048 for (i = 0; i < numberOfVariables_ ; i++) {
00049
00050 result += pow((individual->chromosome_->gene_[i])->getRealAllele()+
00051 (1 / sqrt((double)numberOfVariables_)), 2) ;
00052 }
00053
00054 result = 1 - exp(-result) ;
00055 individual->fitness_[1] = result ;
00056 }