#include #include #include "smpTestClass.h" using namespace paradiseo::smp; using namespace std; void changeTopo(IslandModel& _model, AbstractTopology& _topo) { static bool first = false; // Change topology after 1s of computation std::chrono::milliseconds dura(1000); std::this_thread::sleep_for( dura ); if(!first) { _model.setTopology(_topo); first = !first; } } int main(void) { // Defining parameters typedef struct { unsigned popSize = 1000; unsigned tSize = 2; double pCross = 0.8; double pMut = 0.7; unsigned maxGen = 1000; } Param; Param param; // Fixing the seed rng.reseed(42); // Load instance loadInstances("t-data.dat", n, bkv, a, b); //Common part to all islands IndiEvalFunc plainEval; IndiInit chromInit; eoDetTournamentSelect selectOne(param.tSize); eoSelectPerc select(selectOne);// by default rate==1 IndiXover Xover; // CROSSOVER IndiSwapMutation mutationSwap; // MUTATION eoSGATransform transform(Xover, param.pCross, mutationSwap, param.pMut); eoPlusReplacement replace; // MODEL // Topologies Topology topo; IslandModel model(topo); // ISLAND 1 // // Algorithm part eoGenContinue genCont(param.maxGen+100); eoPop pop(param.popSize, chromInit); // // Emigration policy // // // Element 1 eoPeriodicContinue criteria(5); eoDetTournamentSelect selectOne1(20); eoSelectNumber who(selectOne1, 3); Topology topo2; //std::function task = std::bind(changeTopo, model, topo2); //Notifier topoChanger(task); MigPolicy migPolicy; migPolicy.push_back(PolicyElement(who, criteria)); // // Integration policy eoPlusReplacement intPolicy; Island test(pop, intPolicy, migPolicy, genCont, plainEval, select, transform, replace); // ISLAND 1 // // Algorithm part eoGenContinue genCont_2(param.maxGen); // generation continuation eoPop pop2(30, chromInit); // // Emigration policy // // // Element 1 eoPeriodicContinue criteria_2(5); eoDetTournamentSelect selectOne_2(25); eoSelectNumber who_2(selectOne_2, 5); MigPolicy migPolicy_2; migPolicy_2.push_back(PolicyElement(who_2, criteria_2)); // // Integration policy eoPlusReplacement intPolicy_2; Island test2(pop2, intPolicy_2, migPolicy_2, genCont_2, plainEval, select, transform, replace); // Island 3 // // Algorithm part eoGenContinue genCont_3(param.maxGen); eoPop pop3(30, chromInit); // // Emigration policy // // // Element 1 eoPeriodicContinue criteria_3(10); eoDetTournamentSelect selectOne_3(15); eoSelectNumber who_3(selectOne_3, 1); MigPolicy migPolicy_3; migPolicy.push_back(PolicyElement(who_3, criteria_3)); // // Integration policy eoPlusReplacement intPolicy_3; Island test3(pop3, intPolicy_3, migPolicy_3, genCont_3, plainEval, select, transform, replace); try { model.add(test); model.add(test2); model.add(test3); model(); cout << test.getPop() << endl; cout << test2.getPop() << endl; cout << test3.getPop() << endl; } catch(exception& e) { cout << "Exception: " << e.what() << '\n'; } return 0; }