From 557a06ff22d8c2bf8cb22c94e625b203c7d9ddca Mon Sep 17 00:00:00 2001 From: jmerelo Date: Fri, 8 Oct 1999 11:39:58 +0000 Subject: [PATCH] Two files left over added to the repo --- eo/src/eoEasyEA.h | 84 ++++++++++++++++++++++++++++++++++++++++++ eo/test/binary_value.h | 18 +++++++++ 2 files changed, 102 insertions(+) create mode 100644 eo/src/eoEasyEA.h create mode 100644 eo/test/binary_value.h diff --git a/eo/src/eoEasyEA.h b/eo/src/eoEasyEA.h new file mode 100644 index 000000000..5c2f7c029 --- /dev/null +++ b/eo/src/eoEasyEA.h @@ -0,0 +1,84 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +//----------------------------------------------------------------------------- +// eoEasyEA.h +// (c) GeNeura Team, 1998 +/* + 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 + */ +//----------------------------------------------------------------------------- + +#ifndef _eoEasyEA_h +#define _eoEasyEA_h + +//----------------------------------------------------------------------------- + +#include // eoPop +#include + +/** EOEasyEA: + An easy-to-use evolutionary algorithm; you can use any chromosome, + and any selection transformation, merging and evaluation + algorithms; you can even change in runtime parameters of those + sub-algorithms +*/ + +template class eoEasyEA: public eoAlgo +{ + public: + /// Constructor. + eoEasyEA(eoSelect& _select, + eoTransform& _transform, + eoMerge& _replace, + eoEvalFunc& _evaluator, + eoTerm& _terminator) + :step(_select, _transform, _replace, _evaluator), + terminator( _terminator){}; + + /// Constructor from an already created generation + eoEasyEA(eoGeneration& _gen, + eoTerm& _terminator): + step(_gen), + terminator( _terminator){}; + + /// Apply one generation of evolution to the population. + virtual void operator()(eoPop& pop) { + do { + try + { + step(pop); + } + catch (exception& e) + { + string s = e.what(); + s.append( " in eoEasyEA "); + throw runtime_error( s ); + } + } while ( terminator( pop ) ); + } + + /// Class name. + string className() const { return "eoEasyEA"; } + + private: + eoGeneration step; + eoTerm& terminator; +}; + +//----------------------------------------------------------------------------- + +#endif eoEasyEA_h diff --git a/eo/test/binary_value.h b/eo/test/binary_value.h new file mode 100644 index 000000000..f3e05e771 --- /dev/null +++ b/eo/test/binary_value.h @@ -0,0 +1,18 @@ +#include + +//----------------------------------------------------------------------------- + +typedef eoBin Chrom; + +/** Just a simple function that takes binary value of a chromosome and sets + the fitnes. + @param _chrom A binary chromosome +*/ +void binary_value(Chrom& _chrom) +{ + float sum = 0; + for (unsigned i = 0; i < _chrom.size(); i++) + if (_chrom[i]) + sum += pow(2, _chrom.size() - i - 1); + _chrom.fitness(sum); +}