Changed functor base names and added to version
This commit is contained in:
parent
1d0794c46a
commit
f7c98d5b31
23 changed files with 64 additions and 48 deletions
11
eo/README
11
eo/README
|
|
@ -9,4 +9,13 @@ instead of
|
|||
|
||||
$> ./configure
|
||||
|
||||
before making the libraries.
|
||||
before making the libraries.
|
||||
|
||||
Documentation can be found in:
|
||||
eo/doc/html
|
||||
|
||||
And \latex sources for a reference manual in:
|
||||
eo/doc/latex
|
||||
|
||||
There are currently no examples except the programs in the test directory.
|
||||
Only the files mentioned in Makefile.am will actually compile.
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
AC_INIT(src/eo)
|
||||
|
||||
dnl Change the version number here
|
||||
AM_INIT_AUTOMAKE(eo, 0.9.1)
|
||||
AM_INIT_AUTOMAKE(eo, 0.9.11)
|
||||
|
||||
AC_PROG_CXX
|
||||
|
||||
|
|
|
|||
|
|
@ -29,8 +29,11 @@
|
|||
#include <eoFunctor.h>
|
||||
#include <vector>
|
||||
|
||||
/**
|
||||
Applies a unary function to a vector of things.
|
||||
*/
|
||||
template <class EOT>
|
||||
void apply(eoUnaryFunctor<void, EOT&>& _proc, std::vector<EOT>& _pop)
|
||||
void apply(eoUF<EOT&, void>& _proc, std::vector<EOT>& _pop)
|
||||
{
|
||||
for (unsigned i = 0; i < _pop.size(); ++i)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
population-transforming algorithms.
|
||||
*/
|
||||
template< class EOT >
|
||||
class eoAlgo : public eoUnaryFunctor<void, eoPop<EOT>&>
|
||||
class eoAlgo : public eoUF<eoPop<EOT>&, void>
|
||||
{};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ function.
|
|||
@see eoSelect, eoTransform, eoSelectTransform
|
||||
*/
|
||||
template<class EOT>
|
||||
class eoBreed : public eoBinaryFunctor<void, const eoPop<EOT>&, eoPop<EOT>&>
|
||||
class eoBreed : public eoBF<const eoPop<EOT>&, eoPop<EOT>&, void>
|
||||
{};
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@
|
|||
* false for termination
|
||||
*/
|
||||
template< class EOT>
|
||||
class eoContinue : public eoUnaryFunctor<bool, const eoPop<EOT>&> {};
|
||||
class eoContinue : public eoUF<const eoPop<EOT>&, bool> {};
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@
|
|||
EO, the requirements on this EO will depend on the evaluator.
|
||||
*/
|
||||
|
||||
template<class EOT> class eoEvalFunc : public eoUnaryFunctor<void, EOT&>
|
||||
template<class EOT> class eoEvalFunc : public eoUF<EOT&, void>
|
||||
{
|
||||
public :
|
||||
typedef typename EOT::Fitness EOFitT;
|
||||
|
|
|
|||
|
|
@ -26,6 +26,8 @@
|
|||
#ifndef _eoFunctor_h
|
||||
#define _eoFunctor_h
|
||||
|
||||
#include <functional>
|
||||
|
||||
/// Base class for functors to get a nice hierarchy diagram
|
||||
class eoFunctorBase
|
||||
{
|
||||
|
|
@ -41,19 +43,19 @@ public :
|
|||
};
|
||||
|
||||
/**
|
||||
Basic Procedure. Derive from this class when defining
|
||||
Basic Function. Derive from this class when defining
|
||||
any procedure. It defines a result_type that can be used
|
||||
to determine the return type
|
||||
Argument and result types can be any type including void for
|
||||
result_type
|
||||
**/
|
||||
template <class R>
|
||||
class eoProcedure : public eoFunctorBase
|
||||
class eoF : public eoFunctorBase
|
||||
{
|
||||
public :
|
||||
|
||||
/// virtual dtor here so there is no need to define it in derived classes
|
||||
virtual ~eoProcedure() {}
|
||||
virtual ~eoF() {}
|
||||
|
||||
typedef R result_type;
|
||||
|
||||
|
|
@ -68,28 +70,25 @@ public :
|
|||
@see eoCounter, make_counter
|
||||
*/
|
||||
template<class R>
|
||||
eoFunctorBase::procedure_tag functor_category(const eoProcedure<R>&)
|
||||
eoFunctorBase::procedure_tag functor_category(const eoF<R>&)
|
||||
{
|
||||
return eoFunctorBase::procedure_tag();
|
||||
}
|
||||
|
||||
/**
|
||||
Basic Unary Functor. Derive from this class when defining
|
||||
any unary function. First template argument is result_type, second
|
||||
is first_argument_type.
|
||||
any unary function. First template argument is the first_argument_type,
|
||||
second result_type.
|
||||
Argument and result types can be any type including void for
|
||||
result_type
|
||||
**/
|
||||
template <class R, class A1>
|
||||
class eoUnaryFunctor : public eoFunctorBase
|
||||
template <class A1, class R>
|
||||
class eoUF : public eoFunctorBase, public std::unary_function<A1, R>
|
||||
{
|
||||
public :
|
||||
|
||||
/// virtual dtor here so there is no need to define it in derived classes
|
||||
virtual ~eoUnaryFunctor() {}
|
||||
|
||||
typedef R result_type;
|
||||
typedef A1 first_argument_type;
|
||||
virtual ~eoUF() {}
|
||||
|
||||
/// The pure virtual function that needs to be implemented by the subclass
|
||||
virtual R operator()(A1) = 0;
|
||||
|
|
@ -101,7 +100,7 @@ public :
|
|||
@see eoCounter, make_counter
|
||||
*/
|
||||
template<class R, class A1>
|
||||
eoFunctorBase::unary_function_tag functor_category(const eoUnaryFunctor<R, A1>&)
|
||||
eoFunctorBase::unary_function_tag functor_category(const eoUF<A1, R>&)
|
||||
{
|
||||
return eoFunctorBase::unary_function_tag();
|
||||
}
|
||||
|
|
@ -114,16 +113,16 @@ eoFunctorBase::unary_function_tag functor_category(const eoUnaryFunctor<R, A1>&)
|
|||
Argument and result types can be any type including void for
|
||||
result_type
|
||||
**/
|
||||
template <class R, class A1, class A2>
|
||||
class eoBinaryFunctor : public eoFunctorBase
|
||||
template <class A1, class A2, class R>
|
||||
class eoBF : public eoFunctorBase, public std::binary_function<A1, A2, R>
|
||||
{
|
||||
public :
|
||||
/// virtual dtor here so there is no need to define it in derived classes
|
||||
virtual ~eoBinaryFunctor() {}
|
||||
virtual ~eoBF() {}
|
||||
|
||||
typedef R result_type;
|
||||
typedef A1 first_argument_type;
|
||||
typedef A2 second_argument_type;
|
||||
//typedef R result_type;
|
||||
//typedef A1 first_argument_type;
|
||||
//typedef A2 second_argument_type;
|
||||
|
||||
/// The pure virtual function that needs to be implemented by the subclass
|
||||
virtual R operator()(A1, A2) = 0;
|
||||
|
|
@ -135,7 +134,7 @@ public :
|
|||
@see eoCounter, make_counter
|
||||
*/
|
||||
template<class R, class A1, class A2>
|
||||
eoFunctorBase::binary_function_tag functor_category(const eoBinaryFunctor<R, A1, A2>&)
|
||||
eoFunctorBase::binary_function_tag functor_category(const eoBF<A1, A2, R>&)
|
||||
{
|
||||
return eoFunctorBase::binary_function_tag();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,8 +18,13 @@
|
|||
#include <eoIndiSelector.h>
|
||||
#include <eoBackInserter.h>
|
||||
|
||||
/**
|
||||
Base class for breeders using generalized operators, I'm not sure if we
|
||||
will maintain the generalized operators in their current form, so
|
||||
it might change.
|
||||
*/
|
||||
template<class EOT>
|
||||
class eoGOpBreeder: public eoUnaryFunctor<void, eoPop<EOT>&>
|
||||
class eoGOpBreeder: public eoUF<eoPop<EOT>&, void>
|
||||
{
|
||||
public:
|
||||
/// Default constructor.
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@
|
|||
*/
|
||||
|
||||
template <class EOT>
|
||||
class eoIndiSelector : public eoProcedure<const EOT&>
|
||||
class eoIndiSelector : public eoF<const EOT&>
|
||||
{
|
||||
public :
|
||||
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@
|
|||
*/
|
||||
|
||||
template <class EOT>
|
||||
class eoInit : public eoUnaryFunctor<void, EOT&>
|
||||
class eoInit : public eoUF<EOT&, void>
|
||||
{};
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@
|
|||
new individuals into the (intermediate) population for example.
|
||||
*/
|
||||
template <class EOT>
|
||||
class eoInserter : public eoUnaryFunctor<eoInserter<EOT>&, const EOT&>
|
||||
class eoInserter : public eoUF<const EOT&, eoInserter<EOT>&>
|
||||
{
|
||||
public :
|
||||
virtual ~eoInserter() {}
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@
|
|||
* next generation.
|
||||
*/
|
||||
|
||||
template<class Chrom> class eoMerge: public eoBinaryFunctor<void, const eoPop<Chrom>&, eoPop<Chrom>&>
|
||||
template<class Chrom> class eoMerge: public eoBF<const eoPop<Chrom>&, eoPop<Chrom>&, void>
|
||||
{};
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@ private:
|
|||
|
||||
/** eoMonOp is the monary operator: genetic operator that takes only one EO */
|
||||
template <class EOType>
|
||||
class eoMonOp: public eoOp<EOType>, public eoUnaryFunctor<void, EOType&>
|
||||
class eoMonOp: public eoOp<EOType>, public eoUF<EOType&, void>
|
||||
{
|
||||
public:
|
||||
/// Ctor
|
||||
|
|
@ -92,7 +92,7 @@ public:
|
|||
* operator() with two operands, only the first one can be modified
|
||||
*/
|
||||
template<class EOType>
|
||||
class eoBinOp: public eoOp<EOType>, public eoBinaryFunctor<void, EOType&, const EOType&>
|
||||
class eoBinOp: public eoOp<EOType>, public eoBF<EOType&, const EOType&, void>
|
||||
{
|
||||
public:
|
||||
/// Ctor
|
||||
|
|
@ -105,7 +105,7 @@ public:
|
|||
*/
|
||||
|
||||
template<class EOType>
|
||||
class eoQuadraticOp: public eoOp<EOType>, public eoBinaryFunctor<void, EOType&, EOType&> {
|
||||
class eoQuadraticOp: public eoOp<EOType>, public eoBF<EOType&, EOType&, void> {
|
||||
public:
|
||||
/// Ctor
|
||||
eoQuadraticOp()
|
||||
|
|
@ -129,7 +129,7 @@ class eoInserter;
|
|||
* eGeneralOp: General genetic operator; for objects used to transform sets
|
||||
* of EOs. Nary ("orgy") operators should be derived from this class
|
||||
|
||||
Derived from eoBinaryFunctor
|
||||
Derived from eoB(inary)F(unction)
|
||||
Applies the genetic operator
|
||||
to a individuals dispensed by an eoIndividualSelector,
|
||||
and puts the results in the eoIndividualInserter.
|
||||
|
|
@ -139,7 +139,7 @@ class eoInserter;
|
|||
|
||||
template<class EOT>
|
||||
|
||||
class eoGeneralOp: public eoOp<EOT>, public eoBinaryFunctor<void, eoIndiSelector<EOT>&, eoInserter<EOT>&>
|
||||
class eoGeneralOp: public eoOp<EOT>, public eoBF<eoIndiSelector<EOT>&, eoInserter<EOT>&, void>
|
||||
{
|
||||
public:
|
||||
/// Ctor that honors its superclass
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@
|
|||
* eoReduce: .reduce the new generation to the specified size
|
||||
*/
|
||||
|
||||
template<class Chrom> class eoReduce: public eoBinaryFunctor<void, eoPop<Chrom>&, unsigned>
|
||||
template<class Chrom> class eoReduce: public eoBF<eoPop<Chrom>&, unsigned, void>
|
||||
{};
|
||||
|
||||
template <class EOT> class eoTruncate : public eoReduce<EOT>
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ so there is an implementation called eoMergeReduce that can be found below
|
|||
@see eoMerge, eoReduce, eoMergeReduce
|
||||
*/
|
||||
template<class EOT>
|
||||
class eoReplacement : public eoBinaryFunctor<void, const eoPop<EOT>&, eoPop<EOT>&>
|
||||
class eoReplacement : public eoBF<const eoPop<EOT>&, eoPop<EOT>&, void>
|
||||
{};
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ the population, the second argument is an eoPopRange, a simple struct
|
|||
that holds a begin and end iterator to the population
|
||||
*/
|
||||
template<class EOT>
|
||||
class eoSelect : public eoBinaryFunctor<void, const eoPop<EOT>&, eoPop<EOT>&>
|
||||
class eoSelect : public eoBF<const eoPop<EOT>&, eoPop<EOT>&, void>
|
||||
{};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@
|
|||
@see eoSelectMany, eoSelectRandom, eoDetTournament, eoStochTournament, eoProportional
|
||||
*/
|
||||
template<class EOT>
|
||||
class eoSelectOne : public eoUnaryFunctor<const EOT&, const eoPop<EOT>&>
|
||||
class eoSelectOne : public eoUF<const eoPop<EOT>&, const EOT&>
|
||||
{
|
||||
public :
|
||||
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ eoTransform transforms a population by applying genetic operators on
|
|||
it.
|
||||
*/
|
||||
template<class EOT>
|
||||
class eoTransform : public eoUnaryFunctor<void, eoPop<EOT>&>
|
||||
class eoTransform : public eoUF<eoPop<EOT>&, void>
|
||||
{};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ class eoParam;
|
|||
will stream or pipe the current values of the parameters to wherever you
|
||||
want it streamed or piped to.
|
||||
*/
|
||||
class eoMonitor : public eoProcedure<eoMonitor&>
|
||||
class eoMonitor : public eoF<eoMonitor&>
|
||||
{
|
||||
public :
|
||||
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
over the (unsorted) population
|
||||
*/
|
||||
template <class EOT>
|
||||
class eoStatBase : public eoUnaryFunctor<void, const eoPop<EOT>&>
|
||||
class eoStatBase : public eoUF<const eoPop<EOT>&, void>
|
||||
{};
|
||||
|
||||
template <class EOT, class T>
|
||||
|
|
@ -50,7 +50,7 @@ public :
|
|||
Base class for statistics calculated over a sorted snapshot of the population
|
||||
*/
|
||||
template <class EOT>
|
||||
class eoSortedStatBase : public eoUnaryFunctor<void, const vector<const EOT*>&>
|
||||
class eoSortedStatBase : public eoUF<const vector<const EOT*>&, void>
|
||||
{
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@
|
|||
eoUpdater is a generic procudere for updating whatever you want.
|
||||
Yet again an empty name
|
||||
*/
|
||||
class eoUpdater : public eoProcedure<void>
|
||||
class eoUpdater : public eoF<void>
|
||||
{};
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -5,12 +5,12 @@
|
|||
|
||||
using namespace std;
|
||||
|
||||
struct eo1 : public eoProcedure<void>
|
||||
struct eo1 : public eoF<void>
|
||||
{
|
||||
void operator()(void) {}
|
||||
};
|
||||
|
||||
struct eo2 : public eoProcedure<int>
|
||||
struct eo2 : public eoF<int>
|
||||
{
|
||||
int operator()(void) { return 1; }
|
||||
};
|
||||
|
|
|
|||
Reference in a new issue