00001
00010 #include <Viennet2.h>
00011
00017 Viennet2::Viennet2(VariableType variableType) {
00018
00019 problemName_ = "Viennet2-MOP7" ;
00020
00021 numberOfVariables_ = 2 ;
00022 numberOfFunctions_ = 3 ;
00023 numberOfConstraints_ = 0 ;
00024
00025 const double upperLimit[] = {4.0, 4.0} ;
00026 const double lowerLimit[] = {-4.0, -4.0} ;
00027 const int partitions[] = {500, 500, 500} ;
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 }
00047
00048
00049 void Viennet2::evaluate(Individual * individual) {
00050 double x[2] ;
00051
00052 x[0] = (individual->chromosome_->gene_[0])->getRealAllele() ;
00053 x[1] = (individual->chromosome_->gene_[1])->getRealAllele() ;
00054
00055
00056 individual->fitness_[0] = (x[0]-2)*(x[0]-2)/2.0 +
00057 (x[1]+1)*(x[1]+1)/13.0 + 3.0 ;
00058
00059
00060
00061 individual->fitness_[1] = (x[0]+x[1]-3)*(x[0]+x[1]-3)/36.0 +
00062 (-x[0]+x[1]+2)*(-x[0]+x[1]+2)/8.0 - 17 ;
00063
00064
00065 individual->fitness_[2] = (x[0]+2*x[1]-1)*(x[0]+2*x[1]-1)/175.0 +
00066 (2*x[1]-x[0])*(2*x[1]-x[0])/17.0 - 13 ;
00067 }