00001
00010 #include <Kursawe.h>
00011
00015 Kursawe::Kursawe(VariableType variableType) {
00016
00017 problemName_ = "KURSAWE" ;
00018
00019 numberOfVariables_ = 3 ;
00020 numberOfFunctions_ = 2 ;
00021 numberOfConstraints_ = 0 ;
00022
00023 const double upperLimit[] = {5.0, 5.0, 5.0} ;
00024 const double lowerLimit[] = {-5.0, -5.0, -5.0} ;
00025 const int partitions[] = {100, 100, 100} ;
00026 const int precision[] = {5, 5, 5} ;
00027
00028 upperLimit_ = new double[numberOfVariables_] ;
00029 lowerLimit_ = new double[numberOfVariables_] ;
00030 partitions_ = new int[numberOfVariables_] ;
00031 precision_ = new int[numberOfVariables_] ;
00032 bitsPerVariable_ = new int[numberOfVariables_] ;
00033
00034
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
00042 variable_ = new VariableType[numberOfVariables_] ;
00043 int i ;
00044
00045 initializeRealVariableType(variableType) ;
00046 cout << "Created a " << problemName_ << " problem" << endl ;
00047 }
00048
00049
00050 void Kursawe::evaluate(Individual *individual) {
00051 double result ;
00052 double xi ;
00053 double xj ;
00054 int i ;
00055
00056
00057 result = 0.0 ;
00058 for (i = 0; i < numberOfVariables_ - 1 ; i++) {
00059 xi = (individual->chromosome_->gene_[i])->getRealAllele() ;
00060 xj = (individual->chromosome_->gene_[i+1])->getRealAllele() ;
00061 result += -10.0 * exp((-0.2)*sqrt(pow(xi,2)+pow(xj,2))) ;
00062 }
00063 individual->fitness_[0] = result ;
00064
00065
00066 const double a = 0.8 ;
00067 const double b = 3 ;
00068 result = 0.0 ;
00069 for (i = 0; i < numberOfVariables_ ; i++) {
00070 xi = (individual->chromosome_->gene_[i])->getRealAllele() ;
00071 result += pow(fabs(xi), a) + 5 * sin(pow(xi, b)) ;
00072 }
00073 individual->fitness_[1] = result ;
00074 }
00075
00076