Merge branch 'master' of ssh://eodev.git.sourceforge.net/gitroot/eodev/eodev

This commit is contained in:
Caner Candan 2012-05-01 20:49:54 +02:00
commit d25dc3833b
7 changed files with 139 additions and 25 deletions

View file

@ -19,6 +19,11 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Contact: todos@geneura.ugr.es, http://geneura.ugr.es Contact: todos@geneura.ugr.es, http://geneura.ugr.es
Authors :
todos@geneura.ugr.es
Marc Schoenauer
Ramón Casero Cañas
Johann Dréo
*/ */
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@ -40,7 +45,7 @@
@ingroup Combination @ingroup Combination
*/ */
template< class EOT> template< class EOT>
class eoCombinedContinue: public eoContinue<EOT> { class eoCombinedContinue: public eoContinue<EOT>, public std::vector<eoContinue<EOT>* > {
public: public:
/// Define Fitness /// Define Fitness
@ -48,45 +53,45 @@ public:
/// Ctor, make sure that at least on continuator is present /// Ctor, make sure that at least on continuator is present
eoCombinedContinue( eoContinue<EOT>& _cont) eoCombinedContinue( eoContinue<EOT>& _cont)
: eoContinue<EOT> () : eoContinue<EOT>(), std::vector<eoContinue<EOT>* >(1, &_cont)
{ {
continuators.push_back(&_cont);
} }
/// Ctor - for historical reasons ... should disspear some day /// Ctor - for historical reasons ... should disspear some day
eoCombinedContinue( eoContinue<EOT>& _cont1, eoContinue<EOT>& _cont2) eoCombinedContinue( eoContinue<EOT>& _cont1, eoContinue<EOT>& _cont2)
: eoContinue<EOT> () : eoContinue<EOT>(), std::vector<eoContinue<EOT>* >()
{ {
continuators.push_back(&_cont1); #pragma message "The double continuators constructor of eocombinedContinue is deprecated and will be removed in the next release."
continuators.push_back(&_cont2);
this->push_back(&_cont1);
this->push_back(&_cont2);
} }
void add(eoContinue<EOT> & _cont) void add(eoContinue<EOT> & _cont)
{ {
continuators.push_back(&_cont); this->push_back(&_cont);
} }
///////////// RAMON'S CODE ///////////////
void removeLast(void) void removeLast(void)
{ {
continuators.pop_back(); #pragma message "The removeLast method of eocombinedContinue is deprecated and will be removed in the next release, use pop_back instead."
this->pop_back();
} }
///////////// RAMON'S CODE (end) ///////////////
/** Returns false when one of the embedded continuators say so (logical and) /** Returns false when one of the embedded continuators say so (logical and)
*/ */
virtual bool operator() ( const eoPop<EOT>& _pop ) virtual bool operator() ( const eoPop<EOT>& _pop )
{ {
for (unsigned i = 0; i < continuators.size(); ++i) for (unsigned i = 0; i < this->size(); ++i)
if ( !(*continuators[i])(_pop) ) return false; if ( ! (*this->at(i))(_pop) ) return false;
return true; return true;
} }
virtual std::string className(void) const { return "eoCombinedContinue"; } virtual std::string className(void) const { return "eoCombinedContinue"; }
private: //private:
std::vector<eoContinue<EOT>*> continuators; // std::vector<eoContinue<EOT>*> continuators;
}; };
#endif #endif

View file

@ -103,6 +103,17 @@ public:
_is_feasible(dual.second) _is_feasible(dual.second)
{} {}
// FIXME is it a good idea to include implicit conversion here?
/** Conversion operator: it permits to use a fitness instance as its scalar
* type, if needed. For example, this is possible:
* eoDualFitness<double,std::less<double> > fit;
* double val = 1.0;
* fit = val;
* val = fit;
*/
operator BaseType(void) const { return _value; }
inline bool is_feasible() const inline bool is_feasible() const
{ {
return _is_feasible; return _is_feasible;

View file

@ -55,7 +55,6 @@ private:
}; };
/*! /*!
An error that signals that a maximum number of evaluations has been reached. An error that signals that a maximum number of evaluations has been reached.
@ -80,4 +79,54 @@ private:
}; };
/*!
* An error that signals a missing parameter
*
* Thrown by eoParser::getParam
*
* @ingroup Parameters
*/
class eoMissingParamException : public std::exception
{
public:
eoMissingParamException(std::string name) : _name(name){}
virtual const char* what() const throw()
{
std::ostringstream ss;
ss << "The command parameter " << _name << " has not been declared";
return ss.str().c_str();
}
~eoMissingParamException() throw() {}
private:
std::string _name;
};
/*!
* An error that signals a bad parameter type
*
* Thrown by eoParser::valueOf
*
* @ingroup Parameters
*/
class eoWrongParamTypeException : public std::exception
{
public:
eoWrongParamTypeException(std::string name) : _name(name){}
virtual const char* what() const throw()
{
std::ostringstream ss;
ss << "You asked for the parameter " << _name << " but it has not been declared under this type";
return ss.str().c_str();
}
~eoWrongParamTypeException() throw() {}
private:
std::string _name;
};
#endif // __eoExceptions_h__ #endif // __eoExceptions_h__

View file

@ -188,6 +188,7 @@ public:
virtual void add(eoQuadOp<EOT> & _op, const double _rate, bool _verbose) virtual void add(eoQuadOp<EOT> & _op, const double _rate, bool _verbose)
{ {
#pragma message "The use of the verbose parameter in eoPropCombinedQuadOp::add is deprecated and will be removed in the next release."
eo::log << eo::warnings << "WARNING: the use of the verbose parameter in eoPropCombinedQuadOp::add is deprecated and will be removed in the next release." << std::endl; eo::log << eo::warnings << "WARNING: the use of the verbose parameter in eoPropCombinedQuadOp::add is deprecated and will be removed in the next release." << std::endl;
add(_op,_rate); add(_op,_rate);
} }

View file

@ -49,6 +49,7 @@ public :
{ {
(void)_verbose; (void)_verbose;
eo::log << eo::warnings << "WARNING: the use of the verbose parameter in eoOStreamMonitor constructor is deprecated and will be removed in the next release" << std::endl; eo::log << eo::warnings << "WARNING: the use of the verbose parameter in eoOStreamMonitor constructor is deprecated and will be removed in the next release" << std::endl;
#pragma message "WARNING: the use of the verbose parameter in eoOStreamMonitor constructor is deprecated and will be removed in the next release"
} }
eoOStreamMonitor( std::ostream & _out, std::string _delim = "\t", unsigned int _width=20, char _fill=' ' ) : eoOStreamMonitor( std::ostream & _out, std::string _delim = "\t", unsigned int _width=20, char _fill=' ' ) :

View file

@ -18,9 +18,12 @@
License along with this library; if not, write to the Free Software License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Contact: todos@geneura.ugr.es, http://geneura.ugr.es Contact: http://eodev.sourceforge.net
Marc.Schoenauer@inria.fr Authors:
mkeijzer@dhi.dk todos@geneura.ugr.es, http://geneura.ugr.es
Marc.Schoenauer@polytechnique.fr
mkeijzer@dhi.dk
Johann Dréo <johann.dreo@thalesgroup.com>
*/ */
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@ -38,6 +41,7 @@
#include <utils/eoParser.h> #include <utils/eoParser.h>
#include <utils/eoLogger.h> #include <utils/eoLogger.h>
using namespace std; using namespace std;
std::ostream& printSectionHeader(std::ostream& os, std::string section) std::ostream& printSectionHeader(std::ostream& os, std::string section)
@ -129,6 +133,15 @@ eoParam * eoParser::getParamWithLongName(const std::string& _name) const
return 0; return 0;
} }
eoParam * eoParser::getParam(const std::string& _name) const
{
eoParam * p = getParamWithLongName( _name );
if( p == NULL ) {
throw eoMissingParamException(_name );
} else {
return p;
}
}
void eoParser::processParam(eoParam& param, std::string section) void eoParser::processParam(eoParam& param, std::string section)
{ {

View file

@ -1,4 +1,4 @@
/* (c) Marc Schoenauer, Maarten Keijzer and GeNeura Team, 2000 /* (c) Marc Schoenauer, Maarten Keijzer, GeNeura Team, Thales group
This library is free software; you can redistribute it and/or modify it under This library is free software; you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License as published by the Free the terms of the GNU Lesser General Public License as published by the Free
@ -14,9 +14,11 @@ with this library; if not, write to the Free Software Foundation, Inc., 59
Temple Place, Suite 330, Boston, MA 02111-1307 USA Temple Place, Suite 330, Boston, MA 02111-1307 USA
Contact: http://eodev.sourceforge.net Contact: http://eodev.sourceforge.net
todos@geneura.ugr.es, http://geneura.ugr.es Authors:
Marc.Schoenauer@polytechnique.fr todos@geneura.ugr.es, http://geneura.ugr.es
mkeijzer@dhi.dk Marc.Schoenauer@polytechnique.fr
mkeijzer@dhi.dk
Johann Dréo <johann.dreo@thalesgroup.com>
*/ */
@ -30,6 +32,7 @@ Contact: http://eodev.sourceforge.net
#include "eoParam.h" #include "eoParam.h"
#include "eoObject.h" #include "eoObject.h"
#include "eoPersistent.h" #include "eoPersistent.h"
#include "eoExceptions.h"
/** Parameter saving and loading /** Parameter saving and loading
@ -176,15 +179,46 @@ public:
eoParam * getParamWithLongName(const std::string& _name) const; eoParam * getParamWithLongName(const std::string& _name) const;
/**
* Get a handle on a param from its long name
* If not found, raise an eoMissingParamException
*/
eoParam * getParam(const std::string& _name) const;
/**
* Get the value of a param from its long name
* If not found, raise an eoMissingParamException
*
* Remember to specify the expected return type with a templated call:
* unsigned int popSize = eoparser.value<unsigned int>("popSize");
*
* If the template type is not the good one, an eoWrongParamTypeException is raised.
*/
template<class ValueType>
ValueType valueOf(const std::string& _name) const
{
eoParam* param = getParam(_name);
// Note: eoParam is the polymorphic base class of eoValueParam, thus we can do a dynamix cast
eoValueParam<ValueType>* vparam = dynamic_cast< eoValueParam<ValueType>* >(param);
if( vparam == NULL ) {
// if the dynamic cast has failed, chances are that ValueType
// is not the same than the one used at declaration.
throw eoWrongParamTypeException( _name );
} else {
return vparam->value();
}
}
/** Get or create parameter /** Get or create parameter
It seems finally that the easiest use of the above method is It seems finally that the easiest use of the above method is
through the following, whose interface is similar to that of the through the following, whose interface is similar to that of the
widely-used createParam. widely-used createParam.
For some (probably very stupid) reason, I failed to put it in the
.cpp. Any hint???
*/ */
template <class ValueType> template <class ValueType>
eoValueParam<ValueType>& getORcreateParam(ValueType _defaultValue, eoValueParam<ValueType>& getORcreateParam(ValueType _defaultValue,