REMOVE eoEvalFuncCounterBounder duplicate of eoEvalCounterThrowException
This commit is contained in:
parent
08bbf69f44
commit
c99ed01dc6
2 changed files with 5 additions and 68 deletions
|
|
@ -37,6 +37,10 @@ algorithm have reached a maximum number of evaluations.
|
||||||
This may be useful if you want to check this kind of stopping criterion
|
This may be useful if you want to check this kind of stopping criterion
|
||||||
at each _evaluation_, instead of using continuators at each _iteration_.
|
at each _evaluation_, instead of using continuators at each _iteration_.
|
||||||
|
|
||||||
|
This eval counter permits to stop a search during a generation, without waiting for a continue to be
|
||||||
|
checked at the end of the loop. Useful if you have 10 individuals and 10 generations,
|
||||||
|
but want to stop after 95 evaluations.
|
||||||
|
|
||||||
The class first call the evaluation function, then check the number of
|
The class first call the evaluation function, then check the number of
|
||||||
times it has been called. If the maximum number of evaluation has been
|
times it has been called. If the maximum number of evaluation has been
|
||||||
reached, it throw an eoMaxEvalException. You can catch this exception
|
reached, it throw an eoMaxEvalException. You can catch this exception
|
||||||
|
|
@ -72,7 +76,7 @@ public :
|
||||||
}
|
}
|
||||||
|
|
||||||
// evaluate
|
// evaluate
|
||||||
func(eo);
|
this->eoEvalFuncCounter<EOT>::operator()(eo);
|
||||||
|
|
||||||
} // if invalid
|
} // if invalid
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,67 +0,0 @@
|
||||||
#ifndef eoEvalFuncCounterBounder_H
|
|
||||||
#define eoEvalFuncCounterBounder_H
|
|
||||||
|
|
||||||
#include "eoEvalFunc.h"
|
|
||||||
#include "utils/eoParam.h"
|
|
||||||
|
|
||||||
/** @addtogroup Evaluation
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
/** The exception raised by eoEvalFuncCounterBounder
|
|
||||||
* when the maximum number of allowed evaluations is reached.
|
|
||||||
*/
|
|
||||||
class eoEvalFuncCounterBounderException : public std::exception
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
eoEvalFuncCounterBounderException(unsigned long threshold) : _threshold(threshold){}
|
|
||||||
|
|
||||||
const char* what() const throw()
|
|
||||||
{
|
|
||||||
std::ostringstream ss;
|
|
||||||
ss << "STOP in eoEvalFuncCounterBounderException: the maximum number of evaluation has been reached (" << _threshold << ").";
|
|
||||||
return ss.str().c_str();
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
unsigned long _threshold;
|
|
||||||
};
|
|
||||||
|
|
||||||
/** Counts the number of evaluations actually performed and throw an eoEvalFuncCounterBounderException
|
|
||||||
* when the maximum number of allowed evaluations is reached.
|
|
||||||
*
|
|
||||||
* This eval counter permits to stop a search during a generation, without waiting for a continue to be
|
|
||||||
* checked at the end of the loop. Useful if you have 10 individuals and 10 generations,
|
|
||||||
* but want to stop after 95 evaluations.
|
|
||||||
*/
|
|
||||||
template < typename EOT >
|
|
||||||
class eoEvalFuncCounterBounder : public eoEvalFuncCounter< EOT >
|
|
||||||
{
|
|
||||||
public :
|
|
||||||
eoEvalFuncCounterBounder(eoEvalFunc<EOT>& func, unsigned long threshold, std::string name = "Eval. ")
|
|
||||||
: eoEvalFuncCounter< EOT >( func, name ), _threshold( threshold )
|
|
||||||
{}
|
|
||||||
|
|
||||||
using eoEvalFuncCounter< EOT >::value;
|
|
||||||
|
|
||||||
virtual void operator()(EOT& eo)
|
|
||||||
{
|
|
||||||
if (eo.invalid())
|
|
||||||
{
|
|
||||||
value()++;
|
|
||||||
|
|
||||||
if (_threshold > 0 && value() >= _threshold)
|
|
||||||
{
|
|
||||||
throw eoEvalFuncCounterBounderException(_threshold);
|
|
||||||
}
|
|
||||||
|
|
||||||
this->func(eo);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private :
|
|
||||||
unsigned long _threshold;
|
|
||||||
};
|
|
||||||
|
|
||||||
/** @} */
|
|
||||||
#endif
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue