From 21301c327dfd2f357beb1307429840f1921130df Mon Sep 17 00:00:00 2001 From: evomarc Date: Mon, 9 Jun 2003 06:17:26 +0000 Subject: [PATCH] Change in terminology: EDA (Estimation of Distribution Algorithms) replaces DEA (Distribution Evolution Algorithms), as it seems more widely used today. --- eo/src/eoEDA.h | 46 +++++++++++++++++++ eo/src/eoSimpleEDA.h | 105 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 151 insertions(+) create mode 100644 eo/src/eoEDA.h create mode 100644 eo/src/eoSimpleEDA.h diff --git a/eo/src/eoEDA.h b/eo/src/eoEDA.h new file mode 100644 index 00000000..490af15e --- /dev/null +++ b/eo/src/eoEDA.h @@ -0,0 +1,46 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +//----------------------------------------------------------------------------- +// eoEDA.h +// (c) Marc Schoenauer, Maarten Keijzer, 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 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: Marc.Schoenauer@polytechnique.fr + mkeijzer@dhi.dk + */ +//----------------------------------------------------------------------------- + +#ifndef _eoEDA_h +#define _eoEDA_h + +//----------------------------------------------------------------------------- + +#include + +/** eoEDA: Estimation of Distribution Algorithm within EO + * + * The abstract class for algorithms that evolve a probability distribution + * on the spaces of populations rather than a population + * + * It IS NOT an eoAlgo, as it evolves a distribution, not a population +*/ + +template class eoEDA: public eoUF&, void> +{ +}; + +#endif + diff --git a/eo/src/eoSimpleEDA.h b/eo/src/eoSimpleEDA.h new file mode 100644 index 00000000..1da9040e --- /dev/null +++ b/eo/src/eoSimpleEDA.h @@ -0,0 +1,105 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +//----------------------------------------------------------------------------- +// eoSimpleEDA.h +// (c) Marc Schoenauer, Maarten Keijzer, 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 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: Marc.Schoenauer@polytechnique.fr + mkeijzer@dhi.dk + */ +//----------------------------------------------------------------------------- + +#ifndef _eoSimpleEDA_h +#define _eoSimpleEDA_h + +//----------------------------------------------------------------------------- + +#include +#include +#include +#include +#include + +/** eoSimpleEDA: a very simple Estimation of Distribution Algorithm + * + * The algorithm that evolves a probability distribution + * on the spaces of populations with the loop + * generate a population from the current distribution + * evaluate that population + * update the distribution +*/ + +template class eoSimpleEDA: public eoEDA +{ + public: + + /** Ctor from an eoDistribUpdater + * ... plus an eoEval and eoContinue of course + */ + eoSimpleEDA(eoDistribUpdater& _update, + eoEvalFunc& _eval, + unsigned _popSize, + eoContinue& _continuator + ) : + update(_update), + eval(_eval), + popSize(_popSize), + continuator(_continuator) + {} + + /** The algorithm: + * generate pop from distrib, + * evaluate pop, + * update distrib + */ + virtual void operator()(eoDistribution& _distrib) + { + eoPop pop(popSize, _distrib); + do + { + try + { + apply(_distrib, pop); // re-init. of _pop from distrib + + apply(eval, pop); // eval of current population + + update(_distrib, pop); // updates distrib from _pop + + } + catch (std::exception& e) + { + std::string s = e.what(); + s.append( " in eoSimpleEDA"); + throw std::runtime_error( s ); + } + } while ( continuator( pop ) ); + } + + private: + eoDistribUpdater & update; + + eoEvalFunc& eval; + + unsigned popSize; + + eoContinue& continuator; +}; + +//----------------------------------------------------------------------------- + +#endif +