00001
00010 #include <Viennet3.h>
00011
00012
00013
00019 Viennet3::Viennet3(VariableType variableType) {
00020
00021 problemName_ = "Viennet3-MOP5" ;
00022
00023 numberOfVariables_ = 2 ;
00024 numberOfFunctions_ = 3 ;
00025 numberOfConstraints_ = 0 ;
00026
00027 const double upperLimit[] = {3.0, 3.0} ;
00028 const double lowerLimit[] = {-3.0, -3.0} ;
00029 const int partitions[] = {100, 100} ;
00030 const int precision[] = {5, 5} ;
00031
00032 upperLimit_ = new double[numberOfVariables_] ;
00033 lowerLimit_ = new double[numberOfVariables_] ;
00034 partitions_ = new int[numberOfVariables_] ;
00035 precision_ = new int[numberOfVariables_] ;
00036 bitsPerVariable_ = new int[numberOfVariables_] ;
00037
00038 memcpy(upperLimit_, upperLimit, numberOfVariables_ * sizeof(double)) ;
00039 memcpy(lowerLimit_, lowerLimit, numberOfVariables_ * sizeof(double)) ;
00040 memcpy(partitions_, partitions_, numberOfVariables_ * sizeof(int)) ;
00041 memcpy(precision_, precision, numberOfVariables_ * sizeof(int)) ;
00042
00043 variable_ = new VariableType[numberOfVariables_] ;
00044
00045 initializeRealVariableType(variableType) ;
00046 cout << "Created a " << problemName_ << " problem" << endl ;
00047
00048 }
00049
00050 void Viennet3::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
00057 individual->fitness_[0] = 0.5 * (x[0]*x[0] + x[1]*x[1]) +
00058 sin(x[0]*x[0] + x[1]*x[1]) ;
00059
00060
00061 double value1 = 3 * x[0] - 2 * x[1] + 4 ;
00062 double value2 = x[0] - x[1] + 1 ;
00063 individual->fitness_[1] = (value1 * value1)/8 + (value2 * value2)/27 + 15 ;
00064
00065
00066 individual->fitness_[2] = 1 / (x[0]*x[0] + x[1]*x[1]+1) -
00067 1.1 * exp(-(x[0]*x[0])-(x[1]*x[1])) ;
00068 }
00069