00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef EOREALBOUNDMODIFIER_H
00012 #define EOREALBOUNDMODIFIER_H
00013
00014
00015 #include <eoFunctor.h>
00016 #include <utils/eoRealVectorBounds.h>
00017
00018
00023 class eoRealBoundModifier: public eoBF < eoRealBaseVectorBounds &,unsigned,void > {};
00024
00025
00029 class eoDummyRealBoundModifier: public eoRealBoundModifier
00030 {
00031 public:
00032
00033 eoDummyRealBoundModifier (){}
00034
00035 void operator() (eoRealBaseVectorBounds & _bnds,unsigned _i){}
00036 };
00037
00038
00039
00049 class eoExpDecayingBoundModifier: public eoRealBoundModifier
00050 {
00051 public:
00052
00059 eoExpDecayingBoundModifier (unsigned _stopCriteria,
00060 double _alpha,
00061 eoValueParam<unsigned> & _genCounter):
00062 stopCriteria(_stopCriteria),
00063 alpha(_alpha),
00064 genCounter(_genCounter){}
00065
00066
00067 void operator() (eoRealBaseVectorBounds & _bnds,unsigned _i)
00068 {
00069 double newMaxBound=(1-pow((double)genCounter.value()/stopCriteria,alpha))*_bnds.maximum(_i);
00070
00071
00072 _bnds[_i]=new eoRealInterval(_bnds.minimum(_i),std::max(_bnds.minimum(_i),newMaxBound));
00073 }
00074
00075
00076 protected:
00077 unsigned stopCriteria;
00078 double alpha;
00079 eoValueParam<unsigned> & genCounter;
00080
00081 };
00082
00083 #endif