Changed stuff to make eoGeneration work

This commit is contained in:
jmerelo 1999-10-08 09:51:40 +00:00
commit ba4ace6324
4 changed files with 50 additions and 28 deletions

View file

@ -59,6 +59,10 @@
#include <eoPopOps.h>
#include <eoBitOp.h>
#include <eoEvalFunc.h>
#include <eoEvalFuncPtr.h>
#include <eoEvaluator.h>
#include <eoLottery.h>
#include <eoBreeder.h>
#include <eoInsertion.h>

View file

@ -41,11 +41,11 @@ struct eoEvalFunc {
#ifdef _MSC_VER
typedef EOT::Fitness EOFitT;
#else
typedef typename Fitness::EOFitT EOFitT;
typedef typename EOT::Fitness EOFitT;
#endif
/// Effectively applies the evaluation function to an EO or urEO
virtual EOFitT evaluate( EOT & _eo ) const = 0;
virtual void operator() ( EOT & _eo ) const = 0;
};
#endif
#endif

View file

@ -1,5 +1,25 @@
// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
//-----------------------------------------------------------------------------
// eoGeneration.h
// eoOp.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 eoGeneration_h
@ -7,31 +27,34 @@
//-----------------------------------------------------------------------------
#include <eoPop.h> // eoPop
#include <eoAlgo.h> // eoPop
#include <eoPopOps.h> // eoSelect, eoTranform, eoMerge
//-----------------------------------------------------------------------------
// eoGeneration
//-----------------------------------------------------------------------------
template<class Chrom> class eoGeneration
template<class Chrom> class eoGeneration: public eoAlgo<Chrom>
{
public:
/// Constructor.
eoGeneration(eoSelect<Chrom>& _select,
eoTransform<Chrom>& _transform,
eoMerge<Chrom>& _replace):
select(_select), transform(_transform), replace(_replace) {}
eoMerge<Chrom>& _replace,
eoEvalFunc<Chrom>& _evaluator):
select(_select), transform(_transform),
replace(_replace), evaluator( _evaluator) {}
/// Apply one generation of evolution to the population.
template<class Evaluator> void operator()(eoPop<Chrom>& pop,
Evaluator evaluator)
{
eoPop<Chrom> breeders;
virtual void operator()(eoPop<Chrom>& pop) {
eoPop<Chrom> breeders;
select(pop, breeders);
transform(breeders);
for_each(breeders.begin(), breeders.end(), evaluator);
eoPop<Chrom>::iterator i;
// Can't use foreach here since foreach takes the
// parameter by reference
for ( i = breeders.begin(); i != breeders.end(); i++)
evaluator(*i);
replace(breeders, pop);
}
@ -42,6 +65,7 @@ template<class Chrom> class eoGeneration
eoSelect<Chrom>& select;
eoTransform<Chrom>& transform;
eoMerge<Chrom>& replace;
eoEvalFunc<Chrom>& evaluator;
};
//-----------------------------------------------------------------------------