#include // tests a Steady State GA // Needed to define this breeder, maybe make it a breeder template class eoBreedOne : public eoBreed { public : eoBreedOne(eoSelectOne& _select, eoGenOp& _op) : select(_select), op(_op) {} void operator()(const eoPop& _src, eoPop& _dest) { _dest.clear(); eoSelectivePopulator pop(_src, _dest, select); op(pop); } private : eoSelectOne& select; eoGenOp& op; }; typedef eoMinimizingFitness FitnessType; typedef eoVector EoType; template class eoMyEval : public eoEvalFunc { public : void operator()(EOT& _eo) { _eo.fitness(*std::max_element(_eo.begin(), _eo.end())); } }; template class Xover : public eoBinOp { bool operator()(EOT& _eo, const EOT& _eo2) { unsigned point = rng.random(_eo.size()); std::copy(_eo2.begin() + point, _eo2.end(), _eo.begin() + point); return true; } }; template class Mutate : public eoMonOp { bool operator()(EOT& _eo) { unsigned point = rng.random(_eo.size()); _eo[point] = rng.random(1024); return true; } }; int main() { int pop_size = 10; eoGenContinue cnt(10); eoCheckPoint cp(cnt); Xover xover; Mutate mutate; eoProportionalOp opsel; opsel.add(xover, 0.8); opsel.add(mutate, 0.2); eoDetTournamentSelect selector(3); eoBreedOne breed(selector, opsel); // Replace a single one eoSSGAWorseReplacement replace; // eoRandomSelect selector; // eoGeneralBreeder breed(selector, opsel); // eoPlusReplacement replace; eoMyEval eval; eoEasyEA algo(cp, eval, breed, replace); eoUniformGenerator unif(0,1024); eoInitFixedLength init(20, unif); eoPop pop(pop_size, init); // evaluate apply(eval, pop); eoBestFitnessStat best("Best_Fitness"); eoAverageStat avg("Avg_Fitness"); eoStdoutMonitor mon; cp.add(best); cp.add(avg); // cp.add(mon); mon.add(best); mon.add(avg); // and run algo(pop); }