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 }