00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef EOREALBOUNDMODIFIER_H
00026 #define EOREALBOUNDMODIFIER_H
00027
00028
00029 #include <eoFunctor.h>
00030 #include <utils/eoRealVectorBounds.h>
00031
00032
00037 class eoRealBoundModifier: public eoBF < eoRealBaseVectorBounds &,unsigned,void > {};
00038
00039
00043 class eoDummyRealBoundModifier: public eoRealBoundModifier
00044 {
00045 public:
00046
00047 eoDummyRealBoundModifier (){}
00048
00049 void operator() (eoRealBaseVectorBounds & _bnds,unsigned _i){}
00050 };
00051
00052
00053
00063 class eoExpDecayingBoundModifier: public eoRealBoundModifier
00064 {
00065 public:
00066
00073 eoExpDecayingBoundModifier (unsigned _stopCriteria,
00074 double _alpha,
00075 eoValueParam<unsigned> & _genCounter):
00076 stopCriteria(_stopCriteria),
00077 alpha(_alpha),
00078 genCounter(_genCounter){}
00079
00080
00081 void operator() (eoRealBaseVectorBounds & _bnds,unsigned _i)
00082 {
00083 double newMaxBound=(1-pow((double)genCounter.value()/stopCriteria,alpha))*_bnds.maximum(_i);
00084
00085
00086 _bnds[_i]=new eoRealInterval(_bnds.minimum(_i),std::max(_bnds.minimum(_i),newMaxBound));
00087 }
00088
00089
00090 protected:
00091 unsigned stopCriteria;
00092 double alpha;
00093 eoValueParam<unsigned> & genCounter;
00094
00095 };
00096
00097 #endif