#include #include #include #include #include "../../problems/eval/oneMaxEval.h" int main(int /*argc*/, char** /*argv*/) { size_t dim = 500; size_t pop_size = 10; eo::log << eo::setlevel(eo::warnings); using EOT = eoBit; oneMaxEval eval; eoBooleanGenerator gen(0.5); eoInitFixedLength init(dim, gen); eoForgeVector< eoContinue > continuators; continuators.add< eoSteadyFitContinue >(10,10); continuators.add< eoGenContinue >(100); eoForgeVector< eoQuadOp > crossovers; crossovers.add< eo1PtBitXover >(); crossovers.add< eoUBitXover >(0.5); // preference over 1 crossovers.add< eoNPtsBitXover >(2); // nb of points eoForgeVector< eoMonOp > mutations; mutations.add< eoBitMutation >(0.01); // proba of flipping one bit mutations.add< eoDetBitFlip >(1); // mutate k bits eoForgeVector< eoSelectOne > selectors; selectors.add< eoDetTournamentSelect >(pop_size/2); selectors.add< eoStochTournamentSelect >(0.5); selectors.add< eoSequentialSelect >(); selectors.add< eoProportionalSelect >(); eoForgeVector< eoReplacement > replacors; replacors.add< eoCommaReplacement >(); replacors.add< eoPlusReplacement >(); replacors.add< eoSSGAWorseReplacement >(); replacors.add< eoSSGADetTournamentReplacement >(pop_size/2); replacors.add< eoSSGAStochTournamentReplacement >(0.51); std::clog << continuators.size() * crossovers.size() * mutations.size() * selectors.size() * replacors.size() << " algorithm instances to test." << std::endl; EOT best_sol; std::string best_algo = ""; for(auto& forge_cont : continuators) { auto& continuator = forge_cont->instanciate(); for(auto& forge_cross : crossovers) { auto& crossover = forge_cross->instanciate(); for(auto& forge_mut : mutations ) { auto& mutation = forge_mut->instanciate(); for(auto& forge_sel : selectors) { auto& selector = forge_sel->instanciate(); for(auto& forge_rep : replacors) { auto& replacor = forge_rep->instanciate(); std::ostringstream algo_name; algo_name << continuator.className() << " + " << crossover.className() << " + " << mutation.className() << " + " << selector.className() << " + " << replacor.className(); std::clog << "ALGO: " << algo_name.str(); std::clog.flush(); eoSequentialOp variator; variator.add(crossover, 1.0); variator.add(mutation, 1.0); eoGeneralBreeder breeder(selector, variator, 1.0); eoEasyEA algo(continuator, eval, breeder, replacor); eoPop pop; pop.append(pop_size, init); apply(eval,pop); algo(pop); std::clog << " = " << pop.best_element().fitness() << std::endl; if(best_sol.invalid()) { best_sol = pop.best_element(); best_algo = algo_name.str(); } else if(pop.best_element().fitness() > best_sol.fitness()) { best_sol = pop.best_element(); best_algo = algo_name.str(); } } } } } } std::cout << "Best algo: " << best_algo << ", with " << best_sol << std::endl; }