Srinivas.cpp
Go to the documentation of this file.00001 00009 #include <Srinivas.h> 00010 00016 Srinivas::Srinivas(VariableType variableType) { 00017 problemName_ = "SRINIVAS" ; 00018 00019 numberOfVariables_ = 2 ; 00020 numberOfFunctions_ = 2 ; 00021 numberOfConstraints_ = 2 ; 00022 00023 const double upperLimit[] = {20.0, 20.0} ; 00024 const double lowerLimit[] = {-20.0, -20.0} ; 00025 const int precision[] = {5, 5} ; 00026 00027 upperLimit_ = new double[numberOfVariables_] ; 00028 lowerLimit_ = new double[numberOfVariables_] ; 00029 precision_ = new int[numberOfVariables_] ; 00030 bitsPerVariable_ = new int[numberOfVariables_] ; 00031 00032 memcpy(upperLimit_, upperLimit, numberOfVariables_ * sizeof(double)) ; 00033 memcpy(lowerLimit_, lowerLimit, numberOfVariables_ * sizeof(double)) ; 00034 memcpy(precision_, precision, numberOfVariables_ * sizeof(int)) ; 00035 // memcpy(bitsPerVariable_, bitsPerVariable, numberOfVariables_ * sizeof(int)) ; 00036 00037 variableType_ = new VariableType[numberOfVariables_] ; 00038 00039 initializeVariableType(variableType) ; 00040 cout << "Created a " << problemName_ << " problem" << endl ; 00041 } // Srinivas::Srinivas 00042 00047 void Srinivas::evaluate(Individual *individual) { 00048 double result ; 00049 double x[2] ; 00050 00051 x[0] = (individual->chromosome_->gene_[0])->getRealAllele() ; 00052 x[1] = (individual->chromosome_->gene_[1])->getRealAllele() ; 00053 00054 // First function 00055 result = (x[0]-2.0)*(x[0]-2.0)+(x[1]-1.0)*(x[1]-1.0) + 2.0 ; 00056 individual->fitness_[0] = result ; 00057 00058 // Second function 00059 result = 9.0*x[0] - (x[1] - 1.0)*(x[1] - 1.0) ; 00060 00061 individual->fitness_[1] = result ; 00062 } // Srinivas::evaluateIndividual 00063 00064 00073 void Srinivas::evaluateConstraints(Individual * individual) { 00074 double x[2] ; 00075 double constraintValue[2] ; 00076 00077 individual->numberOfViolatedConstraints_ = 0 ; 00078 individual->overallConstraintViolation_ = 0 ; 00079 00080 x[0] = (individual->chromosome_->gene_[0])->getRealAllele() ; 00081 x[1] = (individual->chromosome_->gene_[1])->getRealAllele() ; 00082 00083 constraintValue[0] = -(x[0]*x[0] + x[1]*x[1] - 225.0) ; 00084 constraintValue[1] = - (x[0] - 3.0 * x[1] + 10.0) ; 00085 00086 int i ; 00087 for (i = 0 ; i < 2; i++) 00088 if (constraintValue[i] < 0) { 00089 individual->overallConstraintViolation_ -= constraintValue[i] ; 00090 individual->numberOfViolatedConstraints_ ++ ; 00091 } // if 00092 } // Srinivas::evaluateConstraints 00093 00094 00095