From 89b76ab2618d1d8779aa5c602fc23021f819e278 Mon Sep 17 00:00:00 2001 From: kuepper Date: Mon, 10 Oct 2005 21:59:57 +0000 Subject: [PATCH] prepare vecInitSize --- eo/src/es/eoEsChromInit.h | 254 ++++++++++++++++++++------------- eo/src/es/make_genotype_es.cpp | 159 +++++++++++++-------- eo/src/es/make_genotype_real.h | 157 +++++++++++--------- eo/src/es/make_op_es.h | 62 ++++---- 4 files changed, 375 insertions(+), 257 deletions(-) diff --git a/eo/src/es/eoEsChromInit.h b/eo/src/es/eoEsChromInit.h index bac0d552..a90e81b7 100644 --- a/eo/src/es/eoEsChromInit.h +++ b/eo/src/es/eoEsChromInit.h @@ -1,33 +1,32 @@ -// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- +// +/* (c) Maarten Keijzer 2000, GeNeura Team, 1998 - EEAAX 1999 -//----------------------------------------------------------------------------- -// eoEsChromInit.h -// (c) Maarten Keijzer 2000, GeNeura Team, 1998 - EEAAX 1999 -/* - 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 Software Foundation; either - version 2 of the License, or (at your option) any later version. +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 +Software Foundation; either version 2 of the License, or (at your option) any +later version. - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. +This library is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +You should have received a copy of the GNU Lesser General Public License along +with this library; if not, write to the Free Software Foundation, Inc., 59 +Temple Place, Suite 330, Boston, MA 02111-1307 USA - Contact: todos@geneura.ugr.es, http://geneura.ugr.es - Marc.Schoenauer@polytechnique.fr - mak@dhi.dk +Contact: http://eodev.sourceforge.net + todos@geneura.ugr.es, http://geneura.ugr.es + Marc.Schoenauer@polytechnique.fr + mak@dhi.dk */ -//----------------------------------------------------------------------------- + #ifndef _eoEsChromInit_H #define _eoEsChromInit_H #include +#include + #include #include #include @@ -37,116 +36,167 @@ #define M_PI 3.1415926535897932384626433832795 #endif -/** -\ingroup EvolutionStrategies +/** Random Es-chromosome initializer (therefore derived from eoInit) - Random Es-chromosome initializer (therefore derived from eoInit) +@ingroup EvolutionStrategies - This class can initialize four types of real-valued genotypes - thanks to tempate specialization of private method create - eoReal just an eoVector - eoEsSimple + one self-adapting single sigma for all variables - eoEsStdev a whole std::vector of self-adapting sigmas - eoEsFull a full self-adapting correlation matrix +This class can initialize four types of real-valued genotypes thanks +to tempate specialization of private method create: - @see eoReal eoEsSimple eoEsStdev eoEsFull eoInit +- eoReal just an eoVector +- eoEsSimple + one self-adapting single sigma for all variables +- eoEsStdev a whole std::vector of self-adapting sigmas +- eoEsFull a full self-adapting correlation matrix + +@see eoReal eoEsSimple eoEsStdev eoEsFull eoInit */ - template class eoEsChromInit : public eoRealInitBounded { public: - using eoEsChromInit< EOT >::size; - using eoEsChromInit< EOT >::theBounds; + using eoEsChromInit::size; + using eoEsChromInit::theBounds; typedef typename EOT::Fitness FitT; - /** Ctor: + /** Constructor - @param eoRealVectorBounds& _bounds : bounds for uniform initialization - @param _sigma : initial value for the stddev - @param _to_scale : wether sigma should be multiplied by the range of each variable - added December 2004 - MS (together with the whole comment :-) + @param _bounds bounds for uniform initialization + @param _sigma initial value for the stddev + @param _to_scale wether sigma should be multiplied by the range of each variable + added December 2004 - MS (together with the whole comment :-) */ eoEsChromInit(eoRealVectorBounds& _bounds, double _sigma = 0.3, bool _to_scale=false) : eoRealInitBounded(_bounds) - { - // a bit of pre-computations, to save time later (even if some are useless) + { + // a bit of pre-computations, to save time later (even if some are useless) + // + // first, in the case of one unique sigma + // sigma is scaled by the average range (if that means anything!) + if (_to_scale) + { + double scaleUnique = 0; + for (unsigned i=0; i::operator()(_eo); - create_self_adapt(_eo); - _eo.invalidate(); // was MISSING!!!! - } + Specify individual initial sigmas for each variable. - // accessor to sigma - // double sigmaInit() {return sigma;} + @param _bounds bounds for uniform initialization + @param _sigma initial value for the stddev + */ + eoEsChromInit(eoRealVectorBounds& _bounds, std::vector _vecSigma) + : eoRealInitBounded(_bounds), uniqueSigma(_vecSigma[0]), vecSigma(_vecSigma) + {} -private : - // No adaptive mutation at all - void create_self_adapt(eoReal&)// nothing to do here ... - { } + void operator()(EOT& _eo) + { + eoRealInitBounded::operator()(_eo); + create_self_adapt(_eo); + _eo.invalidate(); + } - // Adaptive mutation through a unique sigma - void create_self_adapt(eoEsSimple& result) - { - // pre-computed in the Ctor - result.stdev = uniqueSigma; - } - // Adaptive mutation through a std::vector of sigmas - void create_self_adapt(eoEsStdev& result) - { - result.stdevs = lesSigmas; - } +private: - // Adaptive mutation through a whole correlation matrix - void create_self_adapt(eoEsFull& result) - { - // first the stdevs (pre-computed in the Ctor) - result.stdevs = lesSigmas; - unsigned int theSize = size(); - // nb of rotation angles: N*(N-1)/2 (in general!) - result.correlations.resize(theSize*(theSize - 1) / 2); - for (unsigned i=0; i lesSigmas; // initial values in case of a vector fo sigmas + No adaptive mutation at all + */ + void create_self_adapt(eoReal&) + {} + + + + /** Create intializer + + @overload + + Adaptive mutation through a unique sigma + */ + void create_self_adapt(eoEsSimple& result) + { + // pre-computed in the Ctor + result.stdev = uniqueSigma; + } + + + + /** Create intializer + + @overload + + Adaptive mutation through a std::vector of sigmas + + @todo Should we scale sigmas to the corresponding object variable range? + */ + void create_self_adapt(eoEsStdev& result) + { + // pre-computed in the constructor + result.stdevs = vecSigma; + } + + + + /** Create intializer + + @overload + + Adaptive mutation through a whole correlation matrix + */ + void create_self_adapt(eoEsFull& result) + { + // first the stdevs (pre-computed in the Ctor) + result.stdevs = vecSigma; + unsigned int theSize = size(); + // nb of rotation angles: N*(N-1)/2 (in general!) + result.correlations.resize(theSize*(theSize - 1) / 2); + for (unsigned i=0; i vecSigma; }; #endif + + + +// Local Variables: +// coding: iso-8859-1 +// mode:C++ +// c-file-style: "Stroustrup" +// comment-column: 35 +// fill-column: 80 +// End: diff --git a/eo/src/es/make_genotype_es.cpp b/eo/src/es/make_genotype_es.cpp index 42006f61..41f764cd 100644 --- a/eo/src/es/make_genotype_es.cpp +++ b/eo/src/es/make_genotype_es.cpp @@ -1,86 +1,121 @@ -// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- +/* (c) Maarten Keijzer, Marc Schoenauer and GeNeura Team, 2001 -//----------------------------------------------------------------------------- -// make_genotype_real.cpp -// (c) Maarten Keijzer, Marc Schoenauer and GeNeura Team, 2001 -/* - 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 Software Foundation; either - version 2 of the License, or (at your option) any later version. +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 +Software Foundation; either version 2 of the License, or (at your option) any +later version. - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. +This library is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +You should have received a copy of the GNU Lesser General Public License along +with this library; if not, write to the Free Software Foundation, Inc., 59 +Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Contact: http://eodev.sourceforge.net + todos@geneura.ugr.es, http://geneura.ugr.es + Marc.Schoenauer@polytechnique.fr + mkeijzer@dhi.dk +*/ - Contact: todos@geneura.ugr.es, http://geneura.ugr.es - Marc.Schoenauer@polytechnique.fr - mkeijzer@dhi.dk - */ -//----------------------------------------------------------------------------- #ifdef _MSC_VER // to avoid long name warnings #pragma warning(disable:4786) -#endif +#endif -/** This file contains ***INSTANCIATED DEFINITIONS*** of eoReal Init fns - * It should be included in the file that calls any of the corresponding fns - * Compiling this file allows one to generate part of the library (i.e. object - * files that you just need to link with your own main and fitness code). - * - * The corresponding ***INSTANCIATED DECLARATIONS*** are contained - * in src/es/make_real.h - * while the TEMPLATIZED code is define in make_genotype_real.h - * - * It is instanciated in src/es/make_genotype_real.cpp - - * and incorporated in the ga/libga.a - * - * It returns an eoInit that can later be used to initialize - * the population (see make_pop.h). - * - * It uses a parser (to get user parameters) and a state (to store the memory) - * the last argument is to disambiguate the call upon different instanciations. - * - * WARNING: that last argument will generally be the result of calling - * the default ctor of EOT, resulting in most cases in an EOT - * that is ***not properly initialized*** + +/** Init functions + +This file contains ***INSTANCIATED DEFINITIONS*** of eoReal Init fns +It should be included in the file that calls any of the corresponding +fns Compiling this file allows one to generate part of the library +(i.e. object files that you just need to link with your own main and +fitness code). + +The corresponding ***INSTANCIATED DECLARATIONS*** are contained in +src/es/make_real.h while the TEMPLATIZED code is define in +make_genotype_real.h + +It is instanciated in src/es/make_genotype_real.cpp - and incorporated +in the ga/libga.a + +It returns an eoInit that can later be used to initialize the +population (see make_pop.h). + +It uses a parser (to get user parameters) and a state (to store the +memory) the last argument is to disambiguate the call upon different +instanciations. + +WARNING: that last argument will generally be the result of calling +the default ctor of EOT, resulting in most cases in an EOT that is +***not properly initialized*** */ // the templatized code (same for real and es here) #include -/// The following function merely call the templatized do_* functions -eoRealInitBounded > & make_genotype(eoParser& _parser, eoState& _state, eoEsSimple _eo) +/// The following function merely call the templatized do_* functions +eoRealInitBounded >& make_genotype(eoParser& _parser, + eoState& _state, + eoEsSimple _eo) { - return do_make_genotype(_parser, _state, _eo); -} -eoRealInitBounded > & make_genotype(eoParser& _parser, eoState& _state, eoEsSimple _eo) -{ - return do_make_genotype(_parser, _state, _eo); + return do_make_genotype(_parser, _state, _eo); } -eoRealInitBounded > & make_genotype(eoParser& _parser, eoState& _state, eoEsStdev _eo) + + +eoRealInitBounded >& make_genotype(eoParser& _parser, + eoState& _state, + eoEsSimple _eo) { - return do_make_genotype(_parser, _state, _eo); -} -eoRealInitBounded > & make_genotype(eoParser& _parser, eoState& _state, eoEsStdev _eo) -{ - return do_make_genotype(_parser, _state, _eo); + return do_make_genotype(_parser, _state, _eo); } -eoRealInitBounded > & make_genotype(eoParser& _parser, eoState& _state, eoEsFull _eo) + + +eoRealInitBounded >& make_genotype(eoParser& _parser, + eoState& _state, + eoEsStdev _eo) { - return do_make_genotype(_parser, _state, _eo); -} -eoRealInitBounded > & make_genotype(eoParser& _parser, eoState& _state, eoEsFull _eo) -{ - return do_make_genotype(_parser, _state, _eo); + return do_make_genotype(_parser, _state, _eo); } + + +eoRealInitBounded >& make_genotype(eoParser& _parser, + eoState& _state, + eoEsStdev _eo) +{ + return do_make_genotype(_parser, _state, _eo); +} + + + +eoRealInitBounded > & make_genotype(eoParser& _parser, + eoState& _state, + eoEsFull _eo) +{ + return do_make_genotype(_parser, _state, _eo); +} + + + +eoRealInitBounded >& make_genotype(eoParser& _parser, + eoState& _state, + eoEsFull _eo) +{ + return do_make_genotype(_parser, _state, _eo); +} + + + + +// Local Variables: +// coding: iso-8859-1 +// c-file-style: "Stroustrup" +// comment-column: 35 +// fill-column: 80 +// End: diff --git a/eo/src/es/make_genotype_real.h b/eo/src/es/make_genotype_real.h index 5d766808..1967fae4 100644 --- a/eo/src/es/make_genotype_real.h +++ b/eo/src/es/make_genotype_real.h @@ -1,34 +1,32 @@ -// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- - //----------------------------------------------------------------------------- -// make_genotype.h -// (c) Maarten Keijzer, Marc Schoenauer and GeNeura Team, 2001 -/* - 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 Software Foundation; either - version 2 of the License, or (at your option) any later version. +/** (c) Maarten Keijzer, Marc Schoenauer and GeNeura Team, 2001 - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. +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 +Software Foundation; either version 2 of the License, or (at your option) any +later version. - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +This library is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. - Contact: todos@geneura.ugr.es, http://geneura.ugr.es - Marc.Schoenauer@polytechnique.fr - mkeijzer@dhi.dk - */ -//----------------------------------------------------------------------------- +You should have received a copy of the GNU Lesser General Public License along +with this library; if not, write to the Free Software Foundation, Inc., 59 +Temple Place, Suite 330, Boston, MA 02111-1307 USA -#ifndef _make_genotype_h -#define _make_genotype_h +Contact: http://eodev.sourceforge.net + todos@geneura.ugr.es, http://geneura.ugr.es + Marc.Schoenauer@polytechnique.fr + mkeijzer@dhi.dk +*/ + + +#ifndef EO_make_genotype_h +#define EO_make_genotype_h #include #include +#include #include "es/eoReal.h" #include "es/eoEsChromInit.h" @@ -37,34 +35,34 @@ #include "utils/eoState.h" -/* - * This fuction does the initialization of what's needed for a particular - * genotype (here, std::vector == eoReal). - * It could be here tempatied only on the fitness, as it can be used to evolve - * bitstrings with any fitness. - * However, for consistency reasons, it was finally chosen, as in - * the rest of EO, to templatize by the full EOT, as this eventually - * allows to choose the type of genotype at run time (see in es dir) - * - * It is instanciated in src/es/make_genotyupe_real.cpp - * and incorporated in the src/es/libes.a - * - * It returns an eoInit tha can later be used to initialize - * the population (see make_pop.h). - * - * It uses a parser (to get user parameters) and a state (to store the memory) - * the last argument is to disambiguate the call upon different instanciations. - * - * WARNING: that last argument will generally be the result of calling - * the default ctor of EOT, resulting in most cases in an EOT - * that is ***not properly initialized*** -*/ +/** Initialize genotype +This fuction does the initialization of what's needed for a particular genotype +(here, std::vector == eoReal). It could be here tempatied only on the +fitness, as it can be used to evolve bitstrings with any fitness. However, for +consistency reasons, it was finally chosen, as in the rest of EO, to templatize +by the full EOT, as this eventually allows to choose the type of genotype at run +time (see in es dir) + +It is instanciated in src/es/make_genotyupe_real.cpp and incorporated in the +src/es/libes.a + +It returns an eoInit tha can later be used to initialize the population +(see make_pop.h). + +It uses a parser (to get user parameters) and a state (to store the memory) the +last argument is to disambiguate the call upon different instanciations. + +WARNING: that last argument will generally be the result of calling the default +ctor of EOT, resulting in most cases in an EOT that is ***not properly +initialized*** +*/ template eoEsChromInit & do_make_genotype(eoParser& _parser, eoState& _state, EOT) { // the fitness type typedef typename EOT::Fitness FitT; + eoEsChromInit *init; // for eoReal, only thing needed is the size - but might have been created elswhere ... eoValueParam& vecSize @@ -77,31 +75,56 @@ eoEsChromInit & do_make_genotype(eoParser& _parser, eoState& _state, EOT) "initBounds", "Bounds for initialization (MUST be bounded)", 'B', "Genotype Initialization"); - // now some initial value for sigmas - even if useless? - // shoudl be used in Normal mutation - std::string& sigmaString - = _parser.getORcreateParam(std::string("0.3"), "sigmaInit", - "Initial value for Sigmas (with a '%' -> scaled by the range of each variable)", - 's',"Genotype Initialization").value(); - // check for % - bool to_scale = false; - size_t pos = sigmaString.find('%'); - if (pos < sigmaString.size()) - { - // found a % - use scaling and get rid of '%' - to_scale = true; - sigmaString.resize(pos); + // check if there is a vecSigmaInit + eoParam *vecSigmaParam = _parser.getParamWithLongName("vecSigmaInit"); + if(vecSigmaParam) { + eoValueParam >& vecSigmaParam + = _parser.getORcreateParam(std::vector(vecSize.value(), 0.3), + "vecSigmaInit", "Initial value for Sigma(s)", + 'V',"Genotype Initialization"); + init = new eoEsChromInit(boundsParam.value(), vecSigmaParam.value()); + } else { + // now some initial value for sigmas - even if useless? + // should be used in Normal mutation + eoValueParam& sigmaParam + = _parser.getORcreateParam(std::string("0.3"), "sigmaInit", + "Initial value for Sigmas " + "(with '%' scaled by the range of each variable)", + 's',"Genotype Initialization"); + // check for % + bool to_scale = false; + size_t pos = sigmaParam.value().find('%'); + if(pos < sigmaParam.value().size()) + { + // found a % - use scaling and get rid of '%' + to_scale = true; + sigmaParam.value().resize(pos); + } + std::istringstream is(sigmaParam.value()); + double sigma; + is >> sigma; + // minimum check + if(sigma < 0) + throw std::runtime_error("Negative sigma in make_genotype"); + init = new eoEsChromInit(boundsParam.value(), sigma, to_scale); + // define parameter + _parser.getORcreateParam(std::vector(vecSize.value(), 0.3), + "vecSigmaInit", "Initial value for Sigma(s)", + 'V',"Genotype Initialization"); } - std::istringstream is(sigmaString); - double sigma; - is >> sigma; - // minimum check - if ( (sigma < 0) ) - throw std::runtime_error("Negative sigma in make_genotype"); - eoEsChromInit * init = new eoEsChromInit(boundsParam.value(), sigma, to_scale); // store in state _state.storeFunctor(init); return *init; } -#endif +#endif // EO_make_genotype_h + + + +// Local Variables: +// coding: iso-8859-1 +// mode:C++ +// c-file-style: "Stroustrup" +// comment-column: 35 +// fill-column: 80 +// End: diff --git a/eo/src/es/make_op_es.h b/eo/src/es/make_op_es.h index b54b55c7..5fb15a05 100644 --- a/eo/src/es/make_op_es.h +++ b/eo/src/es/make_op_es.h @@ -1,31 +1,27 @@ -// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- +/* (c) Maarten Keijzer, Marc Schoenauer and GeNeura Team, 2001 -//----------------------------------------------------------------------------- -// make_op.h - the real-valued version -// (c) Maarten Keijzer, Marc Schoenauer and GeNeura Team, 2001 -/* - 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 Software Foundation; either - version 2 of the License, or (at your option) any later version. +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 +Software Foundation; either version 2 of the License, or (at your option) any +later version. - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. +This library is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +You should have received a copy of the GNU Lesser General Public License along +with this library; if not, write to the Free Software Foundation, Inc., 59 +Temple Place, Suite 330, Boston, MA 02111-1307 USA - Contact: todos@geneura.ugr.es, http://geneura.ugr.es - Marc.Schoenauer@polytechnique.fr - mkeijzer@dhi.dk +Contact: http://eodev.sourceforge.net + todos@geneura.ugr.es, http://geneura.ugr.es + Marc.Schoenauer@polytechnique.fr + mkeijzer@dhi.dk */ -//----------------------------------------------------------------------------- -#ifndef _make_op_h -#define _make_op_h + +#ifndef EO_make_op_h +#define EO_make_op_h // the operators #include @@ -76,7 +72,10 @@ eoGenOp & do_make_op(eoParser& _parser, eoState& _state, eoRealInitBounded< // First, decide whether the objective variables are bounded eoValueParam& boundsParam = _parser.getORcreateParam(eoRealVectorBounds(vecSize,eoDummyRealNoBounds), - "objectBounds", "Bounds for variables", 'B', "Variation Operators"); + "objectBounds", "Bounds for variables", + 'B', "Variation Operators"); + + std::cerr << boundsParam.value() << std::endl; // now we read Pcross and Pmut, eoValueParam& operatorParam @@ -120,7 +119,8 @@ eoGenOp & do_make_op(eoParser& _parser, eoState& _state, eoRealInitBounded< 'O', "Variation Operators"); eoValueParam& crossStdevParam = _parser.getORcreateParam(std::string("intermediate"), "crossStdev", - "Recombination of mutation strategy parameters (intermediate, discrete or none)", + "Recombination of mutation strategy parameters " + "(intermediate, discrete or none)", 'S', "Variation Operators"); // The pointers: first the atom Xover @@ -171,7 +171,7 @@ eoGenOp & do_make_op(eoParser& _parser, eoState& _state, eoRealInitBounded< eoEsMutationInit mutateInit(_parser, "Variation Operators"); eoEsMutate & mut = _state.storeFunctor( - new eoEsMutate(mutateInit, boundsParam.value())); + new eoEsMutate(mutateInit, boundsParam.value())); // now the general op - a sequential application of crossover and mutatation // no need to first have crossover combined with a clone as it is an @@ -184,4 +184,14 @@ eoGenOp & do_make_op(eoParser& _parser, eoState& _state, eoRealInitBounded< // that's it! return op; } -#endif +#endif // EO_make_op_h + + + +// Local Variables: +// coding: iso-8859-1 +// mode:C++ +// c-file-style: "Stroustrup" +// comment-column: 35 +// fill-column: 80 +// End: