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 "fitness value for termination (default: none)"); 00010 } 00011 00012 00013 bool TermFitnessValOp::initialize(StateP state) 00014 { 00015 if(!state->getRegistry()->isModified("term.fitnessval")) 00016 return false; 00017 00018 voidP sptr = state->getRegistry()->getEntry("term.fitnessval"); 00019 termValue_ = *((double*) sptr.get()); 00020 00021 return true; 00022 } 00023 00024 00025 bool TermFitnessValOp::operate(StateP state) 00026 { 00027 double minFitness = state->getStats()->getFitnessMin(); 00028 double maxFitness = state->getStats()->getFitnessMax(); 00029 00030 if(termValue_ >= minFitness && termValue_ <= maxFitness) { 00031 state->setTerminateCond(); 00032 ECF_LOG(state, 1, "Termination: fitness value (" + dbl2str(termValue_) + ") reached"); 00033 } 00034 00035 return true; 00036 }