From afae4c1ecae358462248edd28506635537588ccd Mon Sep 17 00:00:00 2001 From: liefooga Date: Fri, 13 Apr 2007 14:57:23 +0000 Subject: [PATCH] add lesson2 git-svn-id: svn://scm.gforge.inria.fr/svnroot/paradiseo@231 331e1502-861f-0410-8da2-ba01fb791d7f --- .../tutorials/lesson2/Makefile.am | 9 ++ .../tutorials/lesson2/Sch1.cpp | 103 ++++++++++++++++++ 2 files changed, 112 insertions(+) create mode 100644 branches/paradiseo-moeo-1.0/tutorials/lesson2/Makefile.am create mode 100644 branches/paradiseo-moeo-1.0/tutorials/lesson2/Sch1.cpp diff --git a/branches/paradiseo-moeo-1.0/tutorials/lesson2/Makefile.am b/branches/paradiseo-moeo-1.0/tutorials/lesson2/Makefile.am new file mode 100644 index 000000000..d4984a47a --- /dev/null +++ b/branches/paradiseo-moeo-1.0/tutorials/lesson2/Makefile.am @@ -0,0 +1,9 @@ + +noinst_PROGRAMS = Sch1 + +Sch1_SOURCES = Sch1.cpp + +LDADD = -L$(top_builddir)/src ${EO_DIR}/src/libeo.a ${EO_DIR}/src/utils/libeoutils.a + +INCLUDES = -I${EO_DIR}/src/ -I${MO_DIR}/src/ -I$(top_srcdir)/src + diff --git a/branches/paradiseo-moeo-1.0/tutorials/lesson2/Sch1.cpp b/branches/paradiseo-moeo-1.0/tutorials/lesson2/Sch1.cpp new file mode 100644 index 000000000..827d16c05 --- /dev/null +++ b/branches/paradiseo-moeo-1.0/tutorials/lesson2/Sch1.cpp @@ -0,0 +1,103 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +//----------------------------------------------------------------------------- +// Sch1.cpp +// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2007 +/* + This library... + + Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr + */ +//----------------------------------------------------------------------------- + +using namespace std; + +#include +#include +#include +#include +#include + +// the moeoObjectiveVectorTraits : minimizing 2 objectives +class Sch1ObjectiveVectorTraits : public moeoObjectiveVectorTraits +{ + public:static bool minimizing (int i) + { + return true; + } + static unsigned nObjectives () + { + return 2; + } +}; + + +// objective vector of doubles +typedef moeoObjectiveVectorDouble < Sch1ObjectiveVectorTraits > Sch1ObjectiveVector; + + +// multi-objective evolving object for the Sch1 problem +class Sch1 : public moeoRealVector < Sch1ObjectiveVector, double, double > +{ +public: + Sch1() : moeoRealVector < Sch1ObjectiveVector, double, double > (1) {} +}; + + +// evaluation of objective functions +class Sch1Eval : public moeoEvalFunc < Sch1 > +{ +public: + void operator () (Sch1 & _sch1) + { + if (_sch1.invalidObjectiveVector()) + { + Sch1ObjectiveVector objVec; + double x = _sch1[0]; + objVec[0] = x * x; + objVec[1] = (x - 2.0) * (x - 2.0); + _sch1.objectiveVector(objVec); + } + } +}; + + +// main +int main (int argc, char *argv[]) +{ + // parameters + unsigned POP_SIZE = 20; + unsigned MAX_GEN = 100; + double M_EPSILON = 0.01; + double P_CROSS = 0.25; + double P_MUT = 0.35; + + // objective functions evaluation + Sch1Eval eval; + + // crossover and mutation + eoQuadCloneOp < Sch1 > xover; + eoUniformMutation < Sch1 > mutation (M_EPSILON); + + // generate initial population + eoRealVectorBounds bounds (1, 0.0, 2.0); // [0, 2] + eoRealInitBounded < Sch1 > init (bounds); + eoPop < Sch1 > pop (POP_SIZE, init); + + // build NSGA-II + moeoNSGAII < Sch1 > nsgaII (MAX_GEN, eval, xover, P_CROSS, mutation, P_MUT); + + // run the algo + nsgaII (pop); + + // extract first front of the final population using an moeoArchive (this is the output of nsgaII) + moeoArchive < Sch1 > arch; + arch.update (pop); + + // printing of the final archive + cout << "Final Archive" << endl; + arch.sortedPrintOn (cout); + cout << endl; + + return EXIT_SUCCESS; +}