#include #include #include #include "smpTestClass.h" using namespace paradiseo::smp; using namespace std; typedef eoBit Indi2; // A bitstring with fitness double // Conversion functions Indi2 fromBase(Indi& i, unsigned size) { (void)i; // Dummy conversion. We just create a new Indi2 Indi2 v; for (unsigned ivar=0; ivar eval(binary_value); // PSO population initialization eoPop pop; for(unsigned int igeno=0; igeno select(T_SIZE); // T_SIZE in [2,POP_SIZE] eo1PtBitXover xover; eoBitMutation mutation(P_MUT_PER_BIT); eoGenContinue continuator(MAX_GEN); // // Emigration policy // // // Element 1 eoPeriodicContinue criteria(1); eoDetTournamentSelect selectOne(2); eoSelectNumber who(selectOne, 1); MigPolicy migPolicy; migPolicy.push_back(PolicyElement(who, criteria)); // // Integration policy eoPlusReplacement intPolicy; // We bind conversion functions auto frombase = std::bind(fromBase, std::placeholders::_1, VEC_SIZE); auto tobase = std::bind(toBase, std::placeholders::_1); Island gga(frombase, tobase, pop, intPolicy, migPolicy, select, xover, CROSS_RATE, mutation, MUT_RATE, eval, continuator); ////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////// // EasyEA PART ////////////////////////////////////////////////////////////////// // EA general parameters typedef struct { unsigned popSize = 10; unsigned tSize = 2; double pCross = 0.8; double pMut = 0.7; unsigned maxGen = 10; } Param; Param param; loadInstances("t-data.dat", n, bkv, a, b); // Evaluation function IndiEvalFunc plainEval; // Init a solution IndiInit chromInit; // Define selection eoDetTournamentSelect selectOne2(param.tSize); eoSelectPerc select2(selectOne2);// by default rate==1 // Define operators for crossover and mutation IndiXover Xover; // CROSSOVER IndiSwapMutation mutationSwap; // MUTATION // Encapsule in a tranform operator eoSGATransform transform(Xover, param.pCross, mutationSwap, param.pMut); // Define replace operator eoPlusReplacement replace; eoGenContinue genCont(param.maxGen); // generation continuation eoPop pop2(param.popSize, chromInit); // ISLAND 2 : EasyEA // // Emigration policy // // // Element 1 eoPeriodicContinue criteria2(1); eoDetTournamentSelect selectOne3(5); eoSelectNumber who2(selectOne3, 2); MigPolicy migPolicy2; migPolicy2.push_back(PolicyElement(who2, criteria2)); // // Integration policy eoPlusReplacement intPolicy2; Island test(pop2, intPolicy2, migPolicy2, genCont, plainEval, select2, transform, replace); // MODEL CREATION Topology topo; IslandModel model(topo); try { model.add(test); model.add(gga); model(); cout << test.getPop() << endl; cout << gga.getPop() << endl; } catch(exception& e) { cout << "Exception: " << e.what() << '\n'; } return 0; }