fixes for gcc-4 compilation -- still have a linker problem

This commit is contained in:
kuepper 2005-12-07 15:40:23 +00:00
commit adbc5dd461
4 changed files with 66 additions and 57 deletions

View file

@ -4,24 +4,24 @@
// eoFunctorStore.h // eoFunctorStore.h
// (c) Maarten Keijzer 2000, GeNeura Team, 2000 // (c) Maarten Keijzer 2000, GeNeura Team, 2000
/* /*
This library is free software; you can redistribute it and/or This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version. version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful, This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details. Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public You should have received a copy of the GNU Lesser General Public
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: todos@geneura.ugr.es, http://geneura.ugr.es
Marc.Schoenauer@polytechnique.fr Marc.Schoenauer@polytechnique.fr
mak@dhi.dk mak@dhi.dk
*/ */
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
#ifndef _eoFunctorStore_h #ifndef _eoFunctorStore_h
@ -32,9 +32,9 @@
class eoFunctorBase; class eoFunctorBase;
/** /**
eoFunctorStore is a class that stores functors that are allocated on the eoFunctorStore is a class that stores functors that are allocated on the
heap. This class can be used in factories to store allocated memory for heap. This class can be used in factories to store allocated memory for
dynamically created functors. dynamically created functors.
*/ */
class eoFunctorStore class eoFunctorStore
{ {
@ -46,23 +46,25 @@ public:
// virtual destructor so we don't need to define it in derived classes // virtual destructor so we don't need to define it in derived classes
virtual ~eoFunctorStore(); virtual ~eoFunctorStore();
/// Add an eoFunctorBase to the store /// Add an eoFunctorBase to the store
template <class Functor> template <class Functor>
Functor& storeFunctor(Functor* r) Functor& storeFunctor(Functor* r)
{ {
// If the compiler complains about the following line, check if you really are giving it a pointer to an eoFunctorBase derived object // If the compiler complains about the following line,
vec.push_back(r); // check if you really are giving it a pointer to an
return *r; // eoFunctorBase derived object
vec.push_back(r);
return *r;
} }
private : private :
/// no copying allowed /// no copying allowed
eoFunctorStore(const eoFunctorStore&); eoFunctorStore(const eoFunctorStore&);
/// no copying allowed /// no copying allowed
eoFunctorStore operator=(const eoFunctorStore&); eoFunctorStore operator=(const eoFunctorStore&);
std::vector<eoFunctorBase*> vec; std::vector<eoFunctorBase*> vec;
}; };
#endif #endif

View file

@ -3,7 +3,7 @@
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// eoRealOp.h // eoRealOp.h
// (c) Maarten Keijzer 2000 - Marc Schoenauer 2001 // (c) Maarten Keijzer 2000 - Marc Schoenauer 2001
/* /*
This library is free software; you can redistribute it and/or This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either License as published by the Free Software Foundation; either
@ -54,7 +54,7 @@ template<class EOT> class eoUniformMutation: public eoMonOp<EOT>
* @param _p_change the probability to change a given coordinate * @param _p_change the probability to change a given coordinate
*/ */
eoUniformMutation(const double& _epsilon, const double& _p_change = 1.0): eoUniformMutation(const double& _epsilon, const double& _p_change = 1.0):
homogeneous(true), bounds(eoDummyVectorNoBounds), epsilon(1, _epsilon), homogeneous(true), bounds(eoDummyVectorNoBounds), epsilon(1, _epsilon),
p_change(1, _p_change) {} p_change(1, _p_change) {}
/** /**
@ -65,8 +65,8 @@ template<class EOT> class eoUniformMutation: public eoMonOp<EOT>
*/ */
eoUniformMutation(eoRealVectorBounds & _bounds, eoUniformMutation(eoRealVectorBounds & _bounds,
const double& _epsilon, const double& _p_change = 1.0): const double& _epsilon, const double& _p_change = 1.0):
homogeneous(false), bounds(_bounds), epsilon(_bounds.size(), _epsilon), homogeneous(false), bounds(_bounds), epsilon(_bounds.size(), _epsilon),
p_change(_bounds.size(), _p_change) p_change(_bounds.size(), _p_change)
{ {
// scale to the range - if any // scale to the range - if any
for (unsigned i=0; i<bounds.size(); i++) for (unsigned i=0; i<bounds.size(); i++)
@ -81,9 +81,9 @@ template<class EOT> class eoUniformMutation: public eoMonOp<EOT>
* @param _p_change the VECTOR of probabilities for each coordinates * @param _p_change the VECTOR of probabilities for each coordinates
*/ */
eoUniformMutation(eoRealVectorBounds & _bounds, eoUniformMutation(eoRealVectorBounds & _bounds,
const std::vector<double>& _epsilon, const std::vector<double>& _epsilon,
const std::vector<double>& _p_change): const std::vector<double>& _p_change):
homogeneous(false), bounds(_bounds), epsilon(_epsilon), homogeneous(false), bounds(_bounds), epsilon(_epsilon),
p_change(_p_change) {} p_change(_p_change) {}
/// The class name. /// The class name.
@ -152,7 +152,7 @@ template<class EOT> class eoDetUniformMutation: public eoMonOp<EOT>
* @param number of coordinate to modify * @param number of coordinate to modify
*/ */
eoDetUniformMutation(const double& _epsilon, const unsigned& _no = 1): eoDetUniformMutation(const double& _epsilon, const unsigned& _no = 1):
homogeneous(true), bounds(eoDummyVectorNoBounds), homogeneous(true), bounds(eoDummyVectorNoBounds),
epsilon(1, _epsilon), no(_no) {} epsilon(1, _epsilon), no(_no) {}
/** /**
@ -161,10 +161,10 @@ template<class EOT> class eoDetUniformMutation: public eoMonOp<EOT>
* @param _epsilon the range for uniform nutation (to be scaled if necessary) * @param _epsilon the range for uniform nutation (to be scaled if necessary)
* @param number of coordinate to modify * @param number of coordinate to modify
*/ */
eoDetUniformMutation(eoRealVectorBounds & _bounds, eoDetUniformMutation(eoRealVectorBounds & _bounds,
const double& _epsilon, const unsigned& _no = 1): const double& _epsilon, const unsigned& _no = 1):
homogeneous(false), bounds(_bounds), homogeneous(false), bounds(_bounds),
epsilon(_bounds.size(), _epsilon), no(_no) epsilon(_bounds.size(), _epsilon), no(_no)
{ {
// scale to the range - if any // scale to the range - if any
for (unsigned i=0; i<bounds.size(); i++) for (unsigned i=0; i<bounds.size(); i++)
@ -178,20 +178,20 @@ template<class EOT> class eoDetUniformMutation: public eoMonOp<EOT>
* @param _epsilon the VECTOR of ranges for uniform mutation * @param _epsilon the VECTOR of ranges for uniform mutation
* @param number of coordinate to modify * @param number of coordinate to modify
*/ */
eoDetUniformMutation(eoRealVectorBounds & _bounds, eoDetUniformMutation(eoRealVectorBounds & _bounds,
const std::vector<double>& _epsilon, const std::vector<double>& _epsilon,
const unsigned& _no = 1): const unsigned& _no = 1):
homogeneous(false), bounds(_bounds), epsilon(_epsilon), no(_no) homogeneous(false), bounds(_bounds), epsilon(_epsilon), no(_no)
{ {
// scale to the range - if any // scale to the range - if any
for (unsigned i=0; i<bounds.size(); i++) for (unsigned i=0; i<bounds.size(); i++)
if (bounds.isBounded(i)) if (bounds.isBounded(i))
epsilon[i] *= _epsilon*bounds.range(i); epsilon[i] *= _epsilon[i]*bounds.range(i);
} }
/// The class name. /// The class name.
virtual std::string className() const { return "eoDetUniformMutation"; } virtual std::string className() const { return "eoDetUniformMutation"; }
/** /**
* Do it! * Do it!
* @param _eo The indi undergoing the mutation * @param _eo The indi undergoing the mutation
@ -262,13 +262,13 @@ template<class EOT> class eoSegmentCrossover: public eoQuadOp<EOT>
/** /**
* Constructor with bounds * Constructor with bounds
* @param _bounds an eoRealVectorBounds that contains the bounds * @param _bounds an eoRealVectorBounds that contains the bounds
* @param _alphaMin the amount of exploration OUTSIDE the parents * @param _alphaMin the amount of exploration OUTSIDE the parents
* as in BLX-alpha notation (Eshelman and Schaffer) * as in BLX-alpha notation (Eshelman and Schaffer)
* 0 == contractive application * 0 == contractive application
* Must be positive * Must be positive
*/ */
eoSegmentCrossover(eoRealVectorBounds & _bounds, eoSegmentCrossover(eoRealVectorBounds & _bounds,
const double& _alpha = 0.0) : const double& _alpha = 0.0) :
bounds(_bounds), alpha(_alpha), range(1+2*_alpha) {} bounds(_bounds), alpha(_alpha), range(1+2*_alpha) {}
/// The class name. /// The class name.
@ -356,14 +356,14 @@ template<class EOT> class eoHypercubeCrossover: public eoQuadOp<EOT>
/** /**
* Constructor with bounds * Constructor with bounds
* @param _bounds an eoRealVectorBounds that contains the bounds * @param _bounds an eoRealVectorBounds that contains the bounds
* @param _alphaMin the amount of exploration OUTSIDE the parents * @param _alphaMin the amount of exploration OUTSIDE the parents
* as in BLX-alpha notation (Eshelman and Schaffer) * as in BLX-alpha notation (Eshelman and Schaffer)
* 0 == contractive application * 0 == contractive application
* Must be positive * Must be positive
*/ */
eoHypercubeCrossover(eoRealVectorBounds & _bounds, eoHypercubeCrossover(eoRealVectorBounds & _bounds,
const double& _alpha = 0.0): const double& _alpha = 0.0):
bounds(_bounds), alpha(_alpha), range(1+2*_alpha) bounds(_bounds), alpha(_alpha), range(1+2*_alpha)
{ {
if (_alpha < 0) if (_alpha < 0)
throw std::runtime_error("BLX coefficient should be positive"); throw std::runtime_error("BLX coefficient should be positive");
@ -395,7 +395,7 @@ template<class EOT> class eoHypercubeCrossover: public eoQuadOp<EOT>
} }
} }
else // check the bounds else // check the bounds
// do not try to get a bound on the linear factor, but rather // do not try to get a bound on the linear factor, but rather
// on the object variables themselves // on the object variables themselves
for (i=0; i<_eo1.size(); i++) for (i=0; i<_eo1.size(); i++)
{ {
@ -462,7 +462,7 @@ template<class EOT> class eoRealUXover: public eoQuadOp<EOT>
* @param _preference bias in the choice (usually, no bias == 0.5) * @param _preference bias in the choice (usually, no bias == 0.5)
*/ */
eoRealUXover(const float& _preference = 0.5): preference(_preference) eoRealUXover(const float& _preference = 0.5): preference(_preference)
{ {
if ( (_preference <= 0.0) || (_preference >= 1.0) ) if ( (_preference <= 0.0) || (_preference >= 1.0) )
std::runtime_error("UxOver --> invalid preference"); std::runtime_error("UxOver --> invalid preference");
} }
@ -497,7 +497,7 @@ template<class EOT> class eoRealUXover: public eoQuadOp<EOT>
private: private:
float preference; float preference;
}; };
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
//@} //@}

View file

@ -75,6 +75,12 @@ eoEsChromInit<EOT> & do_make_genotype(eoParser& _parser, eoState& _state, EOT)
"initBounds", "initBounds",
"Bounds for initialization (MUST be bounded)", "Bounds for initialization (MUST be bounded)",
'B', "Genotype Initialization"); 'B', "Genotype Initialization");
// now some initial value for sigmas - even if useless?
// should be used in Normal mutation
eoValueParam<std::string>& sigmaParam
= _parser.getORcreateParam(std::string("0.3"), "sigmaInit",
"Initial value for Sigmas (with a '%' -> scaled by the range of each variable)",
's',"Genotype Initialization");
// check if there is a vecSigmaInit // check if there is a vecSigmaInit
eoParam *vecSigmaParam = _parser.getParamWithLongName("vecSigmaInit"); eoParam *vecSigmaParam = _parser.getParamWithLongName("vecSigmaInit");
if(vecSigmaParam) { if(vecSigmaParam) {

View file

@ -59,6 +59,7 @@ public:
using eoVector< FitT, bool >::begin; using eoVector< FitT, bool >::begin;
using eoVector< FitT, bool >::end; using eoVector< FitT, bool >::end;
using eoVector< FitT, bool >::resize;
using eoVector< FitT, bool >::size; using eoVector< FitT, bool >::size;
/** /**