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 }