diff --git a/eo/src/eo b/eo/src/eo index 325572d4..3c07b82c 100644 --- a/eo/src/eo +++ b/eo/src/eo @@ -61,7 +61,12 @@ // combinations of simple eoOps (eoMonOp and eoQuadOp) #include // didactic (mimics SGA-like variation into an eoGenOp) +// calls crossover and mutation sequentially, +// with their respective mutation rates #include +// its dual: crossover, mutation (and copy) - proportional choice +// w.r.t. given relative weights +#include // population #include diff --git a/eo/src/eoPropGAGenOp.h b/eo/src/eoPropGAGenOp.h new file mode 100644 index 00000000..e4305e29 --- /dev/null +++ b/eo/src/eoPropGAGenOp.h @@ -0,0 +1,87 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +//----------------------------------------------------------------------------- +// eoPropGAGenOp.h +// (c) Marc.Schoenauer 2005 +/* + 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. + + 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@inria.fr + mak@dhi.dk + */ +//----------------------------------------------------------------------------- + +#ifndef _eoPropGAGenOp_h +#define _eoPropGAGenOp_h + +#include "eoGenOp.h" +#include "eoInvalidateOps.h" +/////////////////////////////////////////////////////////////////////////////// +// class eoSGAGenOp +/////////////////////////////////////////////////////////////////////////////// + +/** *************************************************************************** + * eoPropGAGenOp (for Simple GA, but Proportional) + * choice between Crossover, mutation or cloining + * with respect to given relatve weights + *****************************************************************************/ +template +class eoPropGAGenOp : public eoGenOp +{ + public: + + /** Ctor from + * * weight of clone + * * crossover (with weight) + * * mutation (with weight) + */ + eoPropGAGenOp(double _wClone, eoQuadOp& _cross, double _wCross, + eoMonOp& _mut, double _wMut) + : wClone(_wClone), + cross(_cross), + wCross(_wCross), + mut(_mut), + wMut(_wMut) + { + propOp.add(cross, wCross); // the crossover - with weight wCross + propOp.add(mut, wMut); // mutation with weight wMut + propOp.add(monClone, wClone); + } + + /** do the job: delegate to op */ + virtual void apply(eoPopulator& _pop) + { + propOp.apply(_pop); + } + + /** inherited from eoGenOp */ + virtual unsigned max_production(void) {return 2;} + + virtual std::string className() const {return "eoPropGAGenOp";} + + + private: + double wClone; + eoQuadOp ✗ // eoInvalidateXXX take the boolean output + double wCross; + eoMonOp & mut; // of the XXX op and invalidate the EOT + double wMut; + eoProportionalOp propOp; + eoMonCloneOp monClone; +}; + + +#endif