// TODO : Un vrai test, propre, qui veut dire quelque chose :) #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) { // Dummy conversion. We just create a new Indi2 Indi2 v; for (unsigned ivar=0; ivar eval( binary_value ); // INIT //////////////////////////////// // Initilisation of population //////////////////////////////// // declare the population eoPop pop; // fill it! for (unsigned int igeno=0; igeno select(T_SIZE); // T_SIZE in [2,POP_SIZE] // REPLACE // The simple GA evolution engine uses generational replacement // so no replacement procedure is needed // OPERATORS ////////////////////////////////////// // The variation operators ////////////////////////////////////// // CROSSOVER // 1-point crossover for bitstring eo1PtBitXover xover; // MUTATION // standard bit-flip mutation for bitstring eoBitMutation mutation(P_MUT_PER_BIT); // STOP // CHECKPOINT ////////////////////////////////////// // termination condition ///////////////////////////////////// // stop after MAX_GEN generations eoGenContinue continuator(MAX_GEN); // GENERATION ///////////////////////////////////////// // the algorithm //////////////////////////////////////// // standard Generational GA requires as parameters // selection, evaluation, crossover and mutation, stopping criterion // // 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); ////////////////////////////////////////////////////////////////// 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 // Define population eoPop pop2(param.popSize, chromInit); // Island 1 // // 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); // Topology Topology topo; IslandModel model(topo); model.add(test); model.add(gga); model(); cout << test.getPop() << endl; cout << gga.getPop() << endl; return 0; }