00001 #include "ECF_base.h" 00002 #include "TermFitnessValOp.h" 00003 00004 00005 void TermFitnessValOp::registerParameters(StateP state) 00006 { 00007 double *value = new double(0); 00008 state->getRegistry()->registerEntry("term.fitnessval", (voidP) value, ECF::DOUBLE); 00009 } 00010 00011 00012 bool TermFitnessValOp::initialize(StateP state) 00013 { 00014 if(!state->getRegistry()->isModified("term.fitnessval")) 00015 return false; 00016 00017 voidP sptr = state->getRegistry()->getEntry("term.fitnessval"); 00018 termValue_ = *((double*) sptr.get()); 00019 00020 return true; 00021 } 00022 00023 00024 bool TermFitnessValOp::operate(StateP state) 00025 { 00026 double minFitness = state->getStats()->getFitnessMin(); 00027 double maxFitness = state->getStats()->getFitnessMax(); 00028 00029 if(termValue_ >= minFitness && termValue_ <= maxFitness) { 00030 state->setTerminateCond(); 00031 ECF_LOG(state, 1, "Termination: fitness value (" + dbl2str(termValue_) + ") reached"); 00032 } 00033 00034 return true; 00035 }