// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- /* (c) OPAC Team, LIFL, October 2006 Contact: paradiseo-help@lists.gforge.inria.fr */ using namespace std; #include /* ParadisEO-EO */ #include #include /* ParadisEO-MOEO */ #include #include // Extend eoParetoFitnessTraits class SCH1Traits : public eoParetoFitnessTraits { public : static bool maximizing(int i) { return false; } // is the i-th objective static unsigned nObjectives() { return 2;} // number of objectives }; // Code decision variables typedef eoParetoFitness SCH1Fit; class SCH1EO : public eoReal { public: SCH1EO(): eoReal(1) {} }; // evaluation of the individuals class SCH1Eval : public eoEvalFunc { public: SCH1Eval(): eoEvalFunc() {} void operator()(SCH1EO & _eo) { SCH1Fit fitness; double x = _eo[0]; fitness[0] = x*x; fitness[1] = (x-2.0)*(x-2.0); _eo.fitness(fitness); } }; int main(int argc, char* argv[]) { unsigned POP_SIZE = 20; unsigned MAX_GEN = 100; double M_EPSILON = 0.01; double P_CROSS = 0.25; double P_MUT = 0.35; // The fitness evaluation SCH1Eval eval; // choose crossover and mutation eoQuadCloneOp xover; eoUniformMutation mutation(M_EPSILON); // generate initial population eoRealVectorBounds bounds(1, 0.0, 2.0); // [0, 2] eoRealInitBounded init(bounds); eoPop pop(POP_SIZE, init); // pass parameters to NSGA2 moeoNSGA_II nsga2(MAX_GEN, eval, xover, P_CROSS, mutation, P_MUT); // run the algo nsga2(pop); // extract first front of the final population (this is the solution of nsga2) moeoArchive arch; arch.update(pop); // printing of the final archive cout << "Final Archive\n"; arch.sortedPrintOn(cout); cout << endl; return EXIT_SUCCESS; }