adding a include for apply.h

This commit is contained in:
gustavoromero 2000-11-08 12:56:14 +00:00
commit f48fbcf51a

View file

@ -34,6 +34,7 @@
#include <eoSelectPerc.h> #include <eoSelectPerc.h>
#include <eoEvalFunc.h> #include <eoEvalFunc.h>
#include <eoAlgo.h> #include <eoAlgo.h>
#include <apply.h>
/** The Simple Genetic Algorithm, following Holland and Goldberg /** The Simple Genetic Algorithm, following Holland and Goldberg
* Needs a selector (class eoSelectOne) a crossover (eoQuadratic, * Needs a selector (class eoSelectOne) a crossover (eoQuadratic,
@ -47,13 +48,13 @@ template <class EOT>
class eoSGA : public eoAlgo<EOT> class eoSGA : public eoAlgo<EOT>
{ {
public : public :
eoSGA( eoSGA(
eoContinue<EOT>& _cont, eoContinue<EOT>& _cont,
eoMonOp<EOT>& _mutate, float _mrate, eoMonOp<EOT>& _mutate, float _mrate,
eoQuadraticOp<EOT>& _cross, float _crate, eoQuadraticOp<EOT>& _cross, float _crate,
eoSelectOne<EOT>& _select, eoSelectOne<EOT>& _select,
eoEvalFunc<EOT>& _eval) eoEvalFunc<EOT>& _eval)
: cont(_cont), : cont(_cont),
mutate(_mutate), mutate(_mutate),
mutationRate(_mrate), mutationRate(_mrate),
cross(_cross), cross(_cross),
@ -63,13 +64,13 @@ public :
// added this second ctor as I didn't like the ordering of the parameters // added this second ctor as I didn't like the ordering of the parameters
// in the one above. Any objection :-) MS // in the one above. Any objection :-) MS
eoSGA( eoSGA(
eoSelectOne<EOT>& _select, eoSelectOne<EOT>& _select,
eoQuadraticOp<EOT>& _cross, float _crate, eoQuadraticOp<EOT>& _cross, float _crate,
eoMonOp<EOT>& _mutate, float _mrate, eoMonOp<EOT>& _mutate, float _mrate,
eoEvalFunc<EOT>& _eval, eoEvalFunc<EOT>& _eval,
eoContinue<EOT>& _cont) eoContinue<EOT>& _cont)
: cont(_cont), : cont(_cont),
mutate(_mutate), mutate(_mutate),
mutationRate(_mrate), mutationRate(_mrate),
cross(_cross), cross(_cross),
@ -77,49 +78,48 @@ public :
select(_select), select(_select),
eval(_eval) {} eval(_eval) {}
void operator()(eoPop<EOT>& _pop) void operator()(eoPop<EOT>& _pop)
{ {
eoPop<EOT> offspring; eoPop<EOT> offspring;
do do
{ {
select(_pop, offspring); select(_pop, offspring);
unsigned i; unsigned i;
for (i=0; i<_pop.size()/2; i++) for (i=0; i<_pop.size()/2; i++)
{ {
if ( rng.flip(crossoverRate) ) if ( rng.flip(crossoverRate) )
{ {
// this crossover generates 2 offspring from two parents // this crossover generates 2 offspring from two parents
cross(offspring[2*i], offspring[2*i+1]); cross(offspring[2*i], offspring[2*i+1]);
} }
} }
for (i=0; i < _pop.size(); i++) for (i=0; i < _pop.size(); i++)
{ {
if (rng.flip(mutationRate) ) if (rng.flip(mutationRate) )
{ {
mutate(offspring[i]); mutate(offspring[i]);
} }
}
}
_pop.swap(offspring);
_pop.swap(offspring); apply<EOT>(eval, _pop);
apply<EOT>(eval, _pop);
} while (cont(_pop));
} while (cont(_pop)); }
}
private : private :
eoContinue<EOT>& cont; eoContinue<EOT>& cont;
eoMonOp<EOT>& mutate; eoMonOp<EOT>& mutate;
float mutationRate; float mutationRate;
eoQuadraticOp<EOT>& cross; eoQuadraticOp<EOT>& cross;
float crossoverRate; float crossoverRate;
eoSelectPerc<EOT> select; eoSelectPerc<EOT> select;
eoEvalFunc<EOT>& eval; eoEvalFunc<EOT>& eval;
}; };
#endif #endif