diff --git a/branches/paradiseo-moeo-1.0/.cdtproject b/branches/paradiseo-moeo-1.0/.cdtproject
new file mode 100644
index 000000000..7531e2ca2
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/.cdtproject
@@ -0,0 +1,507 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/branches/paradiseo-moeo-1.0/.project b/branches/paradiseo-moeo-1.0/.project
new file mode 100644
index 000000000..1a748c39d
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/.project
@@ -0,0 +1,86 @@
+
+
+ paradiseo-moeo
+
+
+
+
+
+ org.eclipse.cdt.make.core.makeBuilder
+ clean,full,incremental,
+
+
+ org.eclipse.cdt.make.core.append_environment
+ true
+
+
+ org.eclipse.cdt.make.core.enableCleanBuild
+ true
+
+
+ org.eclipse.cdt.make.core.build.command
+ make
+
+
+ org.eclipse.cdt.make.core.useDefaultBuildCmd
+ true
+
+
+ org.eclipse.cdt.make.core.build.target.auto
+ all
+
+
+ org.eclipse.cdt.make.core.stopOnError
+ false
+
+
+ org.eclipse.cdt.make.core.build.location
+
+
+
+ org.eclipse.cdt.make.core.build.target.inc
+ all
+
+
+ org.eclipse.cdt.make.core.build.arguments
+
+
+
+ org.eclipse.cdt.core.errorOutputParser
+ org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GASErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.VCErrorParser;
+
+
+ org.eclipse.cdt.make.core.enableAutoBuild
+ false
+
+
+ org.eclipse.cdt.make.core.environment
+
+
+
+ org.eclipse.cdt.make.core.enabledIncrementalBuild
+ true
+
+
+ org.eclipse.cdt.make.core.build.target.clean
+ clean
+
+
+ org.eclipse.cdt.make.core.enableFullBuild
+ true
+
+
+
+
+ org.eclipse.cdt.make.core.ScannerConfigBuilder
+
+
+
+
+
+ org.eclipse.cdt.core.cnature
+ org.eclipse.cdt.make.core.makeNature
+ org.eclipse.cdt.make.core.ScannerConfigNature
+ org.eclipse.cdt.core.ccnature
+
+
diff --git a/branches/paradiseo-moeo-1.0/.settings/org.eclipse.cdt.core.prefs b/branches/paradiseo-moeo-1.0/.settings/org.eclipse.cdt.core.prefs
new file mode 100644
index 000000000..8aa1feb88
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/.settings/org.eclipse.cdt.core.prefs
@@ -0,0 +1,3 @@
+#Fri Nov 24 13:29:51 GMT+01:00 2006
+eclipse.preferences.version=1
+indexerId=org.eclipse.cdt.core.fastIndexer
diff --git a/branches/paradiseo-moeo-1.0/.settings/org.eclipse.ltk.core.refactoring.prefs b/branches/paradiseo-moeo-1.0/.settings/org.eclipse.ltk.core.refactoring.prefs
new file mode 100644
index 000000000..80868204f
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/.settings/org.eclipse.ltk.core.refactoring.prefs
@@ -0,0 +1,3 @@
+#Fri Nov 24 13:33:38 GMT+01:00 2006
+org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
+eclipse.preferences.version=1
diff --git a/branches/paradiseo-moeo-1.0/AUTHORS b/branches/paradiseo-moeo-1.0/AUTHORS
new file mode 100644
index 000000000..ffa751632
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/AUTHORS
@@ -0,0 +1,4 @@
+Arnaud Liefooghe
+Thomas Legrand
+Sébastien Cahon
+Abdelhakim Deneche
diff --git a/branches/paradiseo-moeo-1.0/ChangeLog b/branches/paradiseo-moeo-1.0/ChangeLog
new file mode 100644
index 000000000..e69de29bb
diff --git a/branches/paradiseo-moeo-1.0/Makefile.am b/branches/paradiseo-moeo-1.0/Makefile.am
new file mode 100644
index 000000000..f82d6f279
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/Makefile.am
@@ -0,0 +1,16 @@
+SUBDIRS = docs src tutorials
+
+clean_all: clean_aux clean_doc
+ -@make clean
+ -@(rm -rf aclocal.m4 autom4te.cache configure config.* CO* dep* INST* install-sh miss* mkins* Makefile Makefile.in;\
+ cd docs; rm -rf Makefile Makefile.in *.doxytag; cd ../src ; rm -rf Makefile Makefile.in; cd ../tutorials; rm -rf Makefile Makefile.in;\
+ cd lesson1; rm -rf .deps/ Makefile Makefile.in)
+
+clean_aux:
+ -@find . \( -name "*~" -o -name "*.old" -o -name "#*" -o -name "*.bak" \) -print -exec rm -rf \{\} \;
+
+doc:
+ -@(cd docs; make doc)
+
+clean_doc:
+ -@(cd docs; make clean-local)
diff --git a/branches/paradiseo-moeo-1.0/NEWS b/branches/paradiseo-moeo-1.0/NEWS
new file mode 100644
index 000000000..31fe551dc
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/NEWS
@@ -0,0 +1,7 @@
+* release 0.1
+
+# Local Variables:
+# coding: iso-8859-1
+# mode: text
+# fill-column: 80
+# End:
diff --git a/branches/paradiseo-moeo-1.0/README b/branches/paradiseo-moeo-1.0/README
new file mode 100644
index 000000000..856657dfd
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/README
@@ -0,0 +1,64 @@
+ PARADISEO-MOEO README FILE
+=======================================================================
+ check latest news at http://paradiseo.gforge.inria.fr/
+=======================================================================
+
+Welcome to ParadisEO-MOEO, the Multi-Objective Evolving Objects library.
+The latest news about ParadisEO-MOEO can be found on the gforge repository at
+http://paradiseo.gforge.inria.fr/
+In case of any problem, please e-mail us at
+paradiseo-help@lists.gforge.inria.fr
+
+
+==================================================================
+ BUILDING PARADISEO-MOEO
+==================================================================
+The basic installation procedure goes the following:
+
+Go to your build-directory and run
+ > $(SRCDIR)/configure
+ > make
+ > make doc
+
+where $(SRCDIR) is the top-level source directory of PARADISEO-MOEO,
+i.e. where the sources were unpacked.
+
+In case of problems, you can read the INSTALL file - but remember this
+is a standard installation file from GNU and that it contains nothing
+specific about PARADISEO-MOEO.
+
+To clean everything, the simply run
+ > make clean_all
+
+===================================================================
+ DIRECTORY STRUCTURE
+===================================================================
+After unpacking the archive file, you should end up with the following
+structure:
+
+.../ The main PARADISEO-MOEO directory, created when unpacking.
+ |
+ +-- src SOURCE directory Contains most PARADISEO-MOEO .h files.
+ |
+ +-- docs DOCUMENTATION directory (generated by Doxygen).
+ | |
+ | +- html HTML files - start at index.html.
+ | |
+ | +- latex latex files - use to generate Postcript doc.
+ | |
+ | +- man Unix man format documentation.
+ |
+ |
+ +-- tutorials APPLICATIONS - one directory per separate application.
+ |
+ +-- lesson1 A bi-objective flow-shop problem example with main algorithms.
+ | |
+ | +-benchmarks Instance files for testing.
+ |
+ |-- lesson2 Implement NSGA-II for the SCH1 problem.
+
+===================================================================
+ NOTES
+===================================================================
+
+Mailing list : paradiseo-help@lists.gforge.inria.fr
diff --git a/branches/paradiseo-moeo-1.0/autogen.sh b/branches/paradiseo-moeo-1.0/autogen.sh
new file mode 100644
index 000000000..293b7972e
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/autogen.sh
@@ -0,0 +1,148 @@
+#!/bin/sh
+# Run this to generate all the initial makefiles, etc.
+
+srcdir=`dirname $0`
+PKG_NAME="the package."
+
+DIE=0
+
+(autoconf --version) < /dev/null > /dev/null 2>&1 || {
+ echo
+ echo "**Error**: You must have \`autoconf' installed to."
+ echo "Download the appropriate package for your distribution,"
+ echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/"
+ DIE=1
+}
+
+(grep "^AM_PROG_LIBTOOL" $srcdir/configure.in >/dev/null) && {
+ (libtool --version) < /dev/null > /dev/null 2>&1 || {
+ echo
+ echo "**Error**: You must have \`libtool' installed."
+ echo "Get ftp://ftp.gnu.org/pub/gnu/libtool-1.2d.tar.gz"
+ echo "(or a newer version if it is available)"
+ DIE=1
+ }
+}
+
+grep "^AM_GNU_GETTEXT" $srcdir/configure.in >/dev/null && {
+ grep "sed.*POTFILES" $srcdir/configure.in >/dev/null || \
+ (gettext --version) < /dev/null > /dev/null 2>&1 || {
+ echo
+ echo "**Error**: You must have \`gettext' installed."
+ echo "Get ftp://alpha.gnu.org/gnu/gettext-0.10.35.tar.gz"
+ echo "(or a newer version if it is available)"
+ DIE=1
+ }
+}
+
+grep "^AM_GNOME_GETTEXT" $srcdir/configure.in >/dev/null && {
+ grep "sed.*POTFILES" $srcdir/configure.in >/dev/null || \
+ (gettext --version) < /dev/null > /dev/null 2>&1 || {
+ echo
+ echo "**Error**: You must have \`gettext' installed."
+ echo "Get ftp://alpha.gnu.org/gnu/gettext-0.10.35.tar.gz"
+ echo "(or a newer version if it is available)"
+ DIE=1
+ }
+}
+
+(automake --version) < /dev/null > /dev/null 2>&1 || {
+ echo
+ echo "**Error**: You must have \`automake' installed."
+ echo "Get ftp://ftp.gnu.org/pub/gnu/automake-1.3.tar.gz"
+ echo "(or a newer version if it is available)"
+ DIE=1
+ NO_AUTOMAKE=yes
+}
+
+
+# if no automake, don't bother testing for aclocal
+test -n "$NO_AUTOMAKE" || (aclocal --version) < /dev/null > /dev/null 2>&1 || {
+ echo
+ echo "**Error**: Missing \`aclocal'. The version of \`automake'"
+ echo "installed doesn't appear recent enough."
+ echo "Get ftp://ftp.gnu.org/pub/gnu/automake-1.3.tar.gz"
+ echo "(or a newer version if it is available)"
+ DIE=1
+}
+
+if test "$DIE" -eq 1; then
+ exit 1
+fi
+
+if test -z "$*"; then
+ echo "**Warning**: I am going to run \`configure' with no arguments."
+ echo "If you wish to pass any to it, please specify them on the"
+ echo \`$0\'" command line."
+ echo
+fi
+
+case $CC in
+xlc )
+ am_opt=--include-deps;;
+esac
+
+for coin in `find $srcdir -name configure.in -print`
+do
+ dr=`dirname $coin`
+ if test -f $dr/NO-AUTO-GEN; then
+ echo skipping $dr -- flagged as no auto-gen
+ else
+ echo processing $dr
+ macrodirs=`sed -n -e 's,AM_ACLOCAL_INCLUDE(\(.*\)),\1,gp' < $coin`
+ ( cd $dr
+ aclocalinclude="$ACLOCAL_FLAGS"
+ for k in $macrodirs; do
+ if test -d $k; then
+ aclocalinclude="$aclocalinclude -I $k"
+ ##else
+ ## echo "**Warning**: No such directory \`$k'. Ignored."
+ fi
+ done
+ if grep "^AM_GNU_GETTEXT" configure.in >/dev/null; then
+ if grep "sed.*POTFILES" configure.in >/dev/null; then
+ : do nothing -- we still have an old unmodified configure.in
+ else
+ echo "Creating $dr/aclocal.m4 ..."
+ test -r $dr/aclocal.m4 || touch $dr/aclocal.m4
+ echo "Running gettextize... Ignore non-fatal messages."
+ echo "no" | gettextize --force --copy
+ echo "Making $dr/aclocal.m4 writable ..."
+ test -r $dr/aclocal.m4 && chmod u+w $dr/aclocal.m4
+ fi
+ fi
+ if grep "^AM_GNOME_GETTEXT" configure.in >/dev/null; then
+ echo "Creating $dr/aclocal.m4 ..."
+ test -r $dr/aclocal.m4 || touch $dr/aclocal.m4
+ echo "Running gettextize... Ignore non-fatal messages."
+ echo "no" | gettextize --force --copy
+ echo "Making $dr/aclocal.m4 writable ..."
+ test -r $dr/aclocal.m4 && chmod u+w $dr/aclocal.m4
+ fi
+ if grep "^AM_PROG_LIBTOOL" configure.in >/dev/null; then
+ echo "Running libtoolize..."
+ libtoolize --force --copy
+ fi
+ echo "Running aclocal $aclocalinclude ..."
+ aclocal $aclocalinclude
+ if grep "^AM_CONFIG_HEADER" configure.in >/dev/null; then
+ echo "Running autoheader..."
+ autoheader
+ fi
+ echo "Running automake --gnu $am_opt ..."
+ automake --add-missing --gnu $am_opt
+ echo "Running autoconf ..."
+ autoconf
+ )
+ fi
+done
+
+#conf_flags="--enable-maintainer-mode --enable-compile-warnings" #--enable-iso-c
+
+if test x$NOCONFIGURE = x; then
+ echo Running $srcdir/configure $conf_flags "$@" ...
+ $srcdir/configure $conf_flags "$@" \
+ && echo Now type \`make\' to compile $PKG_NAME
+else
+ echo Skipping configure process.
+fi
diff --git a/branches/paradiseo-moeo-1.0/configure.in b/branches/paradiseo-moeo-1.0/configure.in
new file mode 100644
index 000000000..253a290ba
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/configure.in
@@ -0,0 +1,43 @@
+AC_INIT(configure.in)
+AM_INIT_AUTOMAKE(moeo, 0.1)
+
+AC_ISC_POSIX
+AC_PROG_CXX
+AM_PROG_CC_STDC
+AC_HEADER_STDC
+AC_PROG_RANLIB
+
+AC_PROG_INSTALL
+AC_PROG_LN_S
+AC_PROG_MAKE_SET
+
+AC_C_CONST
+AC_C_INLINE
+AC_TYPE_SIZE_T
+
+AC_SUBST(EO_DIR)
+
+dnl EO
+AC_ARG_WITH(EOdir,
+ --with-EOdir : Giving the path of the EO tree.,
+ EO_DIR="$withval"
+ if test ! -d $EO_DIR
+ then
+ echo ""
+ echo "# --with-EOdir Invalid directory $withval"
+ exit 1
+ fi,
+ echo ""
+ echo "# You forgot to give the path of the EO tree !"
+ echo "# Please write something like ... './configure --with-EOdir=\$HOME/eo'"
+ exit 1
+ )
+
+AC_OUTPUT([
+Makefile
+src/Makefile
+docs/Makefile
+tutorials/Makefile
+tutorials/lesson1/Makefile
+tutorials/lesson2/Makefile
+])
diff --git a/branches/paradiseo-moeo-1.0/docs/Makefile.am b/branches/paradiseo-moeo-1.0/docs/Makefile.am
new file mode 100644
index 000000000..254b2661c
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/docs/Makefile.am
@@ -0,0 +1,5 @@
+doc:
+ -@doxygen moeo.doxyfile
+
+clean-local:
+ rm -rf html latex man
diff --git a/branches/paradiseo-moeo-1.0/docs/index.h b/branches/paradiseo-moeo-1.0/docs/index.h
new file mode 100644
index 000000000..a8ab0ea63
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/docs/index.h
@@ -0,0 +1,53 @@
+/** @mainpage Welcome to ParadisEO-MOEO
+
+@section intro Introduction
+
+ParadisEO-MOEO is a white-box object-oriented generic framework dedicated to the flexible design of evolutionary multi-objective algorithms.
+This paradigm-free software embeds some features and techniques for Pareto-based resolution and
+aims to provide a set of classes allowing to ease and speed up the development of computationally efficient programs.
+It is based on a clear conceptual distinction between the solution methods and the multi-objective problems they are intended to solve.
+This separation confers a maximum design and code reuse.
+ParadisEO-MOEO provides a broad range of archive-related features (such as elitism or performance metrics)
+and the most common Pareto-based fitness assignment strategies (MOGA, NSGA, SPEA, IBEA and more).
+Furthermore, parallel and distributed models as well as hybridization mechanisms can be applied to an algorithm designed within ParadisEO-MOEO
+using the whole version of ParadisEO.
+
+
+
+@section tutorial Tutorial
+
+A tutorial about a bi-objective flow-shop scheduling problem will be available soon.
+
+
+
+@section install Installation
+
+The installation procedure of the package is detailed in the README file in the top-directory of the source-tree.
+
+
+
+@section design Overall Design
+
+For an introduction to the design of ParadisEO-MOEO,
+you can look at the ParadisEO website.
+*/
+
+
+
+/** @page webpages Related webpages
+
+- ParadisEO homepage
+- INRIA GForge project page
+- README
+- NEWS
+*/
+
+
+
+// Local Variables:
+// coding: iso-8859-1
+// mode: C++
+// c-file-style: "Stroustrup"
+// fill-column: 80
+// End:
diff --git a/branches/paradiseo-moeo-1.0/docs/moeo.doxyfile b/branches/paradiseo-moeo-1.0/docs/moeo.doxyfile
new file mode 100644
index 000000000..5b8de0c70
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/docs/moeo.doxyfile
@@ -0,0 +1,237 @@
+# Doxyfile 1.5.1
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+PROJECT_NAME = ParadisEO-MOEO
+PROJECT_NUMBER = 0.1
+OUTPUT_DIRECTORY =
+CREATE_SUBDIRS = NO
+OUTPUT_LANGUAGE = English
+USE_WINDOWS_ENCODING = NO
+BRIEF_MEMBER_DESC = YES
+REPEAT_BRIEF = YES
+ABBREVIATE_BRIEF = "The $name class" \
+ "The $name widget" \
+ "The $name file" \
+ is \
+ provides \
+ specifies \
+ contains \
+ represents \
+ a \
+ an \
+ the
+ALWAYS_DETAILED_SEC = NO
+INLINE_INHERITED_MEMB = NO
+FULL_PATH_NAMES = NO
+STRIP_FROM_PATH =
+STRIP_FROM_INC_PATH =
+SHORT_NAMES = NO
+JAVADOC_AUTOBRIEF = YES
+MULTILINE_CPP_IS_BRIEF = NO
+DETAILS_AT_TOP = NO
+INHERIT_DOCS = YES
+SEPARATE_MEMBER_PAGES = NO
+TAB_SIZE = 8
+ALIASES =
+OPTIMIZE_OUTPUT_FOR_C = NO
+OPTIMIZE_OUTPUT_JAVA = NO
+BUILTIN_STL_SUPPORT = NO
+DISTRIBUTE_GROUP_DOC = NO
+SUBGROUPING = YES
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+EXTRACT_ALL = NO
+EXTRACT_PRIVATE = YES
+EXTRACT_STATIC = YES
+EXTRACT_LOCAL_CLASSES = YES
+EXTRACT_LOCAL_METHODS = NO
+HIDE_UNDOC_MEMBERS = YES
+HIDE_UNDOC_CLASSES = YES
+HIDE_FRIEND_COMPOUNDS = NO
+HIDE_IN_BODY_DOCS = NO
+INTERNAL_DOCS = NO
+CASE_SENSE_NAMES = YES
+HIDE_SCOPE_NAMES = NO
+SHOW_INCLUDE_FILES = YES
+INLINE_INFO = YES
+SORT_MEMBER_DOCS = NO
+SORT_BRIEF_DOCS = NO
+SORT_BY_SCOPE_NAME = NO
+GENERATE_TODOLIST = YES
+GENERATE_TESTLIST = YES
+GENERATE_BUGLIST = YES
+GENERATE_DEPRECATEDLIST= YES
+ENABLED_SECTIONS =
+MAX_INITIALIZER_LINES = 30
+SHOW_USED_FILES = YES
+SHOW_DIRECTORIES = NO
+FILE_VERSION_FILTER =
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+QUIET = YES
+WARNINGS = YES
+WARN_IF_UNDOCUMENTED = YES
+WARN_IF_DOC_ERROR = YES
+WARN_NO_PARAMDOC = NO
+WARN_FORMAT = "$file:$line: $text"
+WARN_LOGFILE =
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+INPUT = . ../src
+FILE_PATTERNS = *.cpp \
+ *.h \
+ NEWS README
+RECURSIVE = YES
+EXCLUDE =
+EXCLUDE_SYMLINKS = NO
+EXCLUDE_PATTERNS =
+EXAMPLE_PATH =
+EXAMPLE_PATTERNS = *
+EXAMPLE_RECURSIVE = NO
+IMAGE_PATH =
+INPUT_FILTER =
+FILTER_PATTERNS =
+FILTER_SOURCE_FILES = NO
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+SOURCE_BROWSER = YES
+INLINE_SOURCES = NO
+STRIP_CODE_COMMENTS = YES
+REFERENCED_BY_RELATION = YES
+REFERENCES_RELATION = YES
+REFERENCES_LINK_SOURCE = YES
+USE_HTAGS = NO
+VERBATIM_HEADERS = YES
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+ALPHABETICAL_INDEX = YES
+COLS_IN_ALPHA_INDEX = 3
+IGNORE_PREFIX = moeo
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+GENERATE_HTML = YES
+HTML_OUTPUT = html
+HTML_FILE_EXTENSION = .html
+HTML_HEADER =
+HTML_FOOTER =
+HTML_STYLESHEET =
+HTML_ALIGN_MEMBERS = YES
+GENERATE_HTMLHELP = NO
+CHM_FILE =
+HHC_LOCATION =
+GENERATE_CHI = NO
+BINARY_TOC = NO
+TOC_EXPAND = NO
+DISABLE_INDEX = NO
+ENUM_VALUES_PER_LINE = 4
+GENERATE_TREEVIEW = YES
+TREEVIEW_WIDTH = 250
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+GENERATE_LATEX = YES
+LATEX_OUTPUT = latex
+LATEX_CMD_NAME = latex
+MAKEINDEX_CMD_NAME = makeindex
+COMPACT_LATEX = NO
+PAPER_TYPE = a4wide
+EXTRA_PACKAGES =
+LATEX_HEADER =
+PDF_HYPERLINKS = NO
+USE_PDFLATEX = NO
+LATEX_BATCHMODE = NO
+LATEX_HIDE_INDICES = NO
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+GENERATE_RTF = NO
+RTF_OUTPUT = rtf
+COMPACT_RTF = NO
+RTF_HYPERLINKS = NO
+RTF_STYLESHEET_FILE =
+RTF_EXTENSIONS_FILE =
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+GENERATE_MAN = YES
+MAN_OUTPUT = man
+MAN_EXTENSION = .3
+MAN_LINKS = NO
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+GENERATE_XML = NO
+XML_OUTPUT = xml
+XML_SCHEMA =
+XML_DTD =
+XML_PROGRAMLISTING = YES
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+GENERATE_AUTOGEN_DEF = NO
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+GENERATE_PERLMOD = NO
+PERLMOD_LATEX = NO
+PERLMOD_PRETTY = YES
+PERLMOD_MAKEVAR_PREFIX =
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+ENABLE_PREPROCESSING = YES
+MACRO_EXPANSION = NO
+EXPAND_ONLY_PREDEF = NO
+SEARCH_INCLUDES = YES
+INCLUDE_PATH =
+INCLUDE_FILE_PATTERNS =
+PREDEFINED =
+EXPAND_AS_DEFINED =
+SKIP_FUNCTION_MACROS = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+TAGFILES = ../../paradiseo-eo/doc/eo.doxytag=../../paradiseo-eo/doc/doc/html
+GENERATE_TAGFILE = moeo.doxytag
+ALLEXTERNALS = NO
+EXTERNAL_GROUPS = YES
+PERL_PATH = /usr/bin/perl
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+CLASS_DIAGRAMS = YES
+HIDE_UNDOC_RELATIONS = YES
+HAVE_DOT = NO
+CLASS_GRAPH = YES
+COLLABORATION_GRAPH = YES
+GROUP_GRAPHS = YES
+UML_LOOK = NO
+TEMPLATE_RELATIONS = NO
+INCLUDE_GRAPH = YES
+INCLUDED_BY_GRAPH = YES
+CALL_GRAPH = NO
+CALLER_GRAPH = NO
+GRAPHICAL_HIERARCHY = YES
+DIRECTORY_GRAPH = YES
+DOT_IMAGE_FORMAT = png
+DOT_PATH =
+DOTFILE_DIRS =
+MAX_DOT_GRAPH_WIDTH = 1024
+MAX_DOT_GRAPH_HEIGHT = 1024
+MAX_DOT_GRAPH_DEPTH = 0
+DOT_TRANSPARENT = NO
+DOT_MULTI_TARGETS = NO
+GENERATE_LEGEND = YES
+DOT_CLEANUP = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine
+#---------------------------------------------------------------------------
+SEARCHENGINE = YES
diff --git a/branches/paradiseo-moeo-1.0/src/MOEO.h b/branches/paradiseo-moeo-1.0/src/MOEO.h
new file mode 100644
index 000000000..a191aa929
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/src/MOEO.h
@@ -0,0 +1,280 @@
+// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+
+//-----------------------------------------------------------------------------
+// MOEO.h
+// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2007
+/*
+ This library...
+
+ Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr
+ */
+//-----------------------------------------------------------------------------
+
+#ifndef MOEO_H_
+#define MOEO_H_
+
+#include
+#include
+#include
+#include
+
+/**
+ * Base class allowing to represent a solution (an individual) for multi-objective optimization.
+ * The template argument MOEOObjectiveVector allows to represent the solution in the objective space (it can be a moeoObjectiveVector object).
+ * The template argument MOEOFitness is an object reflecting the quality of the solution in term of convergence (the fitness of a solution is always to be maximized).
+ * The template argument MOEODiversity is an object reflecting the quality of the solution in term of diversity (the diversity of a solution is always to be maximized).
+ * All template arguments must have a void and a copy constructor.
+ * Besides, note that, contrary to the mono-objective case (and to EO) where the fitness value of a solution is confused with its objective value,
+ * the fitness value differs of the objectives values in the multi-objective case.
+ *
+ * !!!!!!!!!!!!!!!!! !!!!!
+ * operator '<' et '>' ???
+ * !!!!!!!!!!!!!!!!!!!!!!!
+ */
+template < class MOEOObjectiveVector, class MOEOFitness, class MOEODiversity >
+class MOEO : public EO < MOEOFitness >
+{
+public:
+
+ /** the objective vector type of a solution */
+ typedef MOEOObjectiveVector ObjectiveVector;
+
+ /** the fitness type of a solution */
+ typedef MOEOFitness Fitness;
+
+ /** the diversity type of a solution */
+ typedef MOEODiversity Diversity;
+
+
+ /**
+ * Ctor
+ */
+ MOEO()
+ {
+ // default values for every parameters
+ objectiveVectorValue = ObjectiveVector();
+ fitnessValue = Fitness();
+ diversityValue = Diversity();
+ // invalidate all
+ invalidate();
+ }
+
+
+ /**
+ * Virtual dtor
+ */
+ virtual ~MOEO() {};
+
+
+ /**
+ * Returns the objective vector of the current solution
+ */
+ ObjectiveVector objectiveVector() const
+ {
+ if ( invalidObjectiveVector() )
+ {
+ throw std::runtime_error("invalid objective vector");
+ }
+ return objectiveVectorValue;
+ }
+
+
+ /**
+ * Sets the objective vector of the current solution
+ * @param _objectiveVectorValue the new objective vector
+ */
+ void objectiveVector(const ObjectiveVector & _objectiveVectorValue)
+ {
+ objectiveVectorValue = _objectiveVectorValue;
+ invalidObjectiveVectorValue = false;
+ }
+
+
+ /**
+ * Sets the objective vector as invalid
+ */
+ void invalidateObjectiveVector()
+ {
+ invalidObjectiveVectorValue = true;
+ }
+
+
+ /**
+ * Returns true if the objective vector is invalid, false otherwise
+ */
+ bool invalidObjectiveVector() const
+ {
+ return invalidObjectiveVectorValue;
+ }
+
+
+ /**
+ * Returns the fitness value of the current solution
+ */
+ Fitness fitness() const
+ {
+ if ( invalidFitness() )
+ {
+ throw std::runtime_error("invalid fitness");
+ }
+ return fitnessValue;
+ }
+
+
+ /**
+ * Sets the fitness value of the current solution
+ * @param _fitnessValue the new fitness value
+ */
+ void fitness(const Fitness & _fitnessValue)
+ {
+ fitnessValue = _fitnessValue;
+ invalidFitnessValue = false;
+ }
+
+
+ /**
+ * Sets the fitness value as invalid
+ */
+ void invalidateFitness()
+ {
+ invalidFitnessValue = true;
+ }
+
+
+ /**
+ * Returns true if the fitness value is invalid, false otherwise
+ */
+ bool invalidFitness() const
+ {
+ return invalidFitnessValue;
+ }
+
+
+ /**
+ * Returns the diversity value of the current solution
+ */
+ Diversity diversity() const
+ {
+ if ( invalidDiversity() )
+ {
+ throw std::runtime_error("invalid diversity");
+ }
+ return diversityValue;
+ }
+
+
+ /**
+ * Sets the diversity value of the current solution
+ * @param _diversityValue the new diversity value
+ */
+ void diversity(const Diversity & _diversityValue)
+ {
+ diversityValue = _diversityValue;
+ invalidDiversityValue = false;
+ }
+
+
+ /**
+ * Sets the diversity value as invalid
+ */
+ void invalidateDiversity()
+ {
+ invalidDiversityValue = true;
+ }
+
+
+ /**
+ * Returns true if the diversity value is invalid, false otherwise
+ */
+ bool invalidDiversity() const
+ {
+ return invalidDiversityValue;
+ }
+
+
+ /**
+ * Sets the objective vector, the fitness value and the diversity value as invalid
+ */
+ void invalidate()
+ {
+ invalidateObjectiveVector();
+ invalidateFitness();
+ invalidateDiversity();
+ }
+
+
+ /**
+ * Returns true if the fitness value is invalid, false otherwise
+ */
+ bool invalid() const
+ {
+ return invalidObjectiveVector();
+ }
+
+
+ /**
+ * Return the class id (the class name as a std::string)
+ */
+ virtual std::string className() const
+ {
+ return "MOEO";
+ }
+
+
+ /**
+ * Writing object
+ * @param _os output stream
+ */
+ virtual void printOn(std::ostream & _os) const
+ {
+ if ( invalidObjectiveVector() )
+ {
+ _os << "INVALID\t";
+ }
+ else
+ {
+ _os << objectiveVectorValue << '\t';
+ }
+ }
+
+
+ /**
+ * Reading object
+ * @param _is input stream
+ */
+ virtual void readFrom(std::istream & _is)
+ {
+ std::string objectiveVector_str;
+ int pos = _is.tellg();
+ _is >> objectiveVector_str;
+ if (objectiveVector_str == "INVALID")
+ {
+ invalidateObjectiveVector();
+ }
+ else
+ {
+ invalidObjectiveVectorValue = false;
+ _is.seekg(pos); // rewind
+ _is >> objectiveVectorValue;
+ }
+ }
+
+
+private:
+
+ /** the objective vector of this solution */
+ ObjectiveVector objectiveVectorValue;
+ /** true if the objective vector is invalid */
+ bool invalidObjectiveVectorValue;
+ /** the fitness value of this solution */
+ Fitness fitnessValue;
+ /** true if the fitness value is invalid */
+ bool invalidFitnessValue;
+ /** the diversity value of this solution */
+ Diversity diversityValue;
+ /** true if the diversity value is invalid */
+ bool invalidDiversityValue;
+
+};
+
+#endif /*MOEO_H_*/
diff --git a/branches/paradiseo-moeo-1.0/src/Makefile.am b/branches/paradiseo-moeo-1.0/src/Makefile.am
new file mode 100644
index 000000000..ae1e51b3c
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/src/Makefile.am
@@ -0,0 +1 @@
+# Nothing to compile !
diff --git a/branches/paradiseo-moeo-1.0/src/metric/moeoAdditiveEpsilonBinaryMetric.h b/branches/paradiseo-moeo-1.0/src/metric/moeoAdditiveEpsilonBinaryMetric.h
new file mode 100644
index 000000000..cfb543b9f
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/src/metric/moeoAdditiveEpsilonBinaryMetric.h
@@ -0,0 +1,39 @@
+// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+
+//-----------------------------------------------------------------------------
+// moeoAdditiveEpsilonBinaryMetric.h
+// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2007
+/*
+ This library...
+
+ Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr
+ */
+//-----------------------------------------------------------------------------
+
+#ifndef MOEOADDITIVEEPSILONBINARYMETRIC_H_
+#define MOEOADDITIVEEPSILONBINARYMETRIC_H_
+
+#include
+
+/**
+ *
+ */
+template < class MOEOT >
+class moeoAdditiveEpsilonBinaryMetric : public moeoSolutionVsSolutionBinaryMetric < MOEOT, double >
+{
+public:
+
+ /** the objective vector type of a solution */
+ typedef typename MOEOT::ObjectiveVector ObjectiveVector;
+
+ moeoAdditiveEpsilonBinaryMetric();
+
+
+ double operator()(const std::vector < ObjectiveVector > & _set1, const std::vector < ObjectiveVector > & _set2)
+ {
+
+ }
+
+};
+
+#endif /*MOEOADDITIVEEPSILONBINARYMETRIC_H_*/
diff --git a/branches/paradiseo-moeo-1.0/src/metric/moeoBinaryMetricSavingUpdater.h b/branches/paradiseo-moeo-1.0/src/metric/moeoBinaryMetricSavingUpdater.h
new file mode 100644
index 000000000..8b66e1714
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/src/metric/moeoBinaryMetricSavingUpdater.h
@@ -0,0 +1,90 @@
+// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+
+//-----------------------------------------------------------------------------
+// moeoBinaryMetricSavingUpdater.h
+// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2006
+/*
+ This library...
+
+ Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr
+ */
+//-----------------------------------------------------------------------------
+
+#ifndef MOEOBINARYMETRICSAVINGUPDATER_H_
+#define MOEOBINARYMETRICSAVINGUPDATER_H_
+
+#include
+#include
+#include
+#include
+#include
+
+/**
+ * This class allows to save the progression of a binary metric comparing the fitness values of the current population (or archive)
+ * with the fitness values of the population (or archive) of the generation (n-1) into a file
+ */
+template
+class moeoBinaryMetricSavingUpdater : public eoUpdater
+{
+public:
+
+ /**
+ * The fitness type of a solution
+ */
+ typedef typename EOT::ObjectiveVector ObjectiveVector;
+
+ /**
+ * Ctor
+ * @param _metric the binary metric comparing two Pareto sets
+ * @param _pop the main population
+ * @param _filename the target filename
+ */
+ moeoBinaryMetricSavingUpdater (moeoPopVsPopBinaryMetric & _metric, const eoPop & _pop, std::string _filename) :
+ metric(_metric), pop(_pop), filename(_filename), counter(1)
+ {}
+
+ /**
+ * Saves the metric's value for the current generation
+ */
+ void operator()() {
+ if (pop.size()) {
+ if (firstGen) {
+ firstGen = false;
+ }
+ else {
+ // creation of the two Pareto sets
+ /*
+ std::vector from;
+ std::vector to;
+ for (unsigned i=0; i & metric;
+ /** main population */
+ const eoPop & pop;
+ /** (n-1) population */
+ eoPop oldPop;
+ /** target filename */
+ std::string filename;
+ /** is it the first generation ? */
+ bool firstGen;
+ /** counter */
+ unsigned counter;
+
+};
+
+#endif /*MOEOBINARYMETRICSAVINGUPDATER_H_*/
diff --git a/branches/paradiseo-moeo-1.0/src/metric/moeoContributionMetric.h b/branches/paradiseo-moeo-1.0/src/metric/moeoContributionMetric.h
new file mode 100644
index 000000000..34ebb3963
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/src/metric/moeoContributionMetric.h
@@ -0,0 +1,111 @@
+// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+
+//-----------------------------------------------------------------------------
+// moeoContributionMetric.h
+// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2006
+/*
+ This library...
+
+ Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr
+ */
+//-----------------------------------------------------------------------------
+
+#ifndef MOEOCONTRIBUTIONMETRIC_H_
+#define MOEOCONTRIBUTIONMETRIC_H_
+
+#include
+
+/**
+ * The contribution metric evaluates the proportion of non-dominated solutions given by a Pareto set relatively to another Pareto set
+ *
+ * (Meunier, Talbi, Reininger: 'A multiobjective genetic algorithm for radio network optimization', in Proc. of the 2000 Congress on Evolutionary Computation, IEEE Press, pp. 317-324)
+ */
+template < class MOEOT >
+class moeoContributionMetric : public moeoPopVsPopBinaryMetric < MOEOT, double >
+{
+public:
+
+ /** the objective vector type of a solution */
+ typedef typename MOEOT::ObjectiveVector ObjectiveVector;
+
+
+ /**
+ * Returns the contribution of the Pareto set '_set1' relatively to the Pareto set '_set2'
+ * @param _set1 the first Pareto set
+ * @param _set2 the second Pareto set
+ */
+ double operator()(const eoPop < MOEOT > & _pop1, const eoPop < MOEOT > & _pop2) {
+ /************/
+ std::vector set1;
+ std::vector set2;
+ for (unsigned i=0; i<_pop1.size(); i++)
+ set1.push_back(_pop1[i].objectiveVector());
+ for (unsigned i=0 ; i<_pop2.size(); i++)
+ set2.push_back(_pop2[i].objectiveVector());
+ /****************/
+ unsigned c = card_C(set1, set2);
+ unsigned w1 = card_W(set1, set2);
+ unsigned n1 = card_N(set1, set2);
+ unsigned w2 = card_W(set2, set1);
+ unsigned n2 = card_N(set2, set1);
+ return (double) (c / 2.0 + w1 + n1) / (c + w1 + n1 + w2 + n2);
+ }
+
+
+private:
+
+ /**
+ * Returns the number of solutions both in '_set1' and '_set2'
+ * @param _set1 the first Pareto set
+ * @param _set2 the second Pareto set
+ */
+ unsigned card_C (const std::vector < ObjectiveVector > & _set1, const std::vector < ObjectiveVector > & _set2) {
+ unsigned c=0;
+ for (unsigned i=0; i<_set1.size(); i++)
+ for (unsigned j=0; j<_set2.size(); j++)
+ if (_set1[i] == _set2[j]) {
+ c++;
+ break;
+ }
+ return c;
+ }
+
+ /**
+ * Returns the number of solutions in '_set1' dominating at least one solution of '_set2'
+ * @param _set1 the first Pareto set
+ * @param _set2 the second Pareto set
+ */
+ unsigned card_W (const std::vector < ObjectiveVector > & _set1, const std::vector < ObjectiveVector > & _set2) {
+ unsigned w=0;
+ for (unsigned i=0; i<_set1.size(); i++)
+ for (unsigned j=0; j<_set2.size(); j++)
+ if (_set1[i].dominates(_set2[j])) {
+ w++;
+ break;
+ }
+ return w;
+ }
+
+ /**
+ * Returns the number of solutions in '_set1' having no relation of dominance with those from '_set2'
+ * @param _set1 the first Pareto set
+ * @param _set2 the second Pareto set
+ */
+ unsigned card_N (const std::vector < ObjectiveVector > & _set1, const std::vector < ObjectiveVector > & _set2) {
+ unsigned n=0;
+ for (unsigned i=0; i<_set1.size(); i++) {
+ bool domin_rel = false;
+ for (unsigned j=0; j<_set2.size(); j++)
+ if (_set1[i].dominates(_set2[j]) || _set2[j].dominates(_set1 [i])) {
+ domin_rel = true;
+ break;
+ }
+ if (! domin_rel)
+ n++;
+ }
+ return n;
+ }
+
+};
+
+#endif /*MOEOCONTRIBUTIONMETRIC_H_*/
diff --git a/branches/paradiseo-moeo-1.0/src/metric/moeoEntropyMetric.h b/branches/paradiseo-moeo-1.0/src/metric/moeoEntropyMetric.h
new file mode 100644
index 000000000..2f4ff5328
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/src/metric/moeoEntropyMetric.h
@@ -0,0 +1,149 @@
+// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+
+//-----------------------------------------------------------------------------
+// moeoEntropyMetric.h
+// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2006
+/*
+ This library...
+
+ Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr
+ */
+//-----------------------------------------------------------------------------
+
+#ifndef MOEOENTROPYMETRIC_H_
+#define MOEOENTROPYMETRIC_H_
+
+#include
+
+/**
+ * The entropy gives an idea of the diversity of a Pareto set relatively to another Pareto set
+ *
+ * (Basseur, Seynhaeve, Talbi: 'Design of Multi-objective Evolutionary Algorithms: Application to the Flow-shop Scheduling Problem', in Proc. of the 2002 Congress on Evolutionary Computation, IEEE Press, pp. 1155-1156)
+ */
+template < class MOEOT >
+class moeoEntropyMetric : public moeoVectorVsVectorBinaryMetric < MOEOT, double >
+{
+public:
+
+ /** the objective vector type of a solution */
+ typedef typename MOEOT::ObjectiveVector ObjectiveVector;
+
+ /**
+ * Returns the entropy of the Pareto set '_set1' relatively to the Pareto set '_set2'
+ * @param _set1 the first Pareto set
+ * @param _set2 the second Pareto set
+ */
+ double operator()(const std::vector < ObjectiveVector > & _set1, const std::vector < ObjectiveVector > & _set2) {
+ // normalization
+ std::vector< ObjectiveVector > set1 = _set1;
+ std::vector< ObjectiveVector > set2= _set2;
+ removeDominated (set1);
+ removeDominated (set2);
+ prenormalize (set1);
+ normalize (set1);
+ normalize (set2);
+
+ // making of PO*
+ std::vector< ObjectiveVector > star; // rotf :-)
+ computeUnion (set1, set2, star);
+ removeDominated (star);
+
+ // making of PO1 U PO*
+ std::vector< ObjectiveVector > union_set1_star; // rotf again ...
+ computeUnion (set1, star, union_set1_star);
+
+ unsigned C = union_set1_star.size();
+ float omega=0;
+ float entropy=0;
+
+ for (unsigned i=0 ; i 0) {
+ omega += 1.0 / N_i;
+ entropy += (float) n_i / (N_i * C) * log (((float) n_i / C) / log (2.0));
+ }
+ }
+ entropy /= - log (omega);
+ entropy *= log (2.0);
+ return entropy;
+ }
+
+
+private:
+
+ std::vector vect_min_val;
+ std::vector vect_max_val;
+
+ void removeDominated(std::vector< ObjectiveVector > & _f) {
+ for (unsigned i=0 ; i<_f.size(); i++) {
+ bool dom = false;
+ for (unsigned j=0; j<_f.size(); j++)
+ if (i != j && _f[j].dominates(_f[i])) {
+ dom = true;
+ break;
+ }
+ if (dom) {
+ _f[i] = _f.back();
+ _f.pop_back();
+ i--;
+ }
+ }
+ }
+
+ void prenormalize (const std::vector< ObjectiveVector > & _f) {
+ vect_min_val.clear();
+ vect_max_val.clear();
+
+ for (unsigned char i=0 ; imax_val)
+ max_val = _f[j][i];
+ }
+ vect_min_val.push_back(min_val);
+ vect_max_val.push_back (max_val);
+ }
+ }
+
+ void normalize (std::vector< ObjectiveVector > & _f) {
+ for (unsigned i=0 ; i & _f1, const std::vector< ObjectiveVector > & _f2, std::vector< ObjectiveVector > & _f) {
+ _f = _f1 ;
+ for (unsigned i=0; i<_f2.size(); i++) {
+ bool b = false;
+ for (unsigned j=0; j<_f1.size(); j ++)
+ if (_f1[j] == _f2[i]) {
+ b = true;
+ break;
+ }
+ if (! b)
+ _f.push_back(_f2[i]);
+ }
+ }
+
+ unsigned howManyInNicheOf (const std::vector< ObjectiveVector > & _f, const ObjectiveVector & _s, unsigned _size) {
+ unsigned n=0;
+ for (unsigned i=0 ; i<_f.size(); i++) {
+ if (euclidianDistance(_f[i], _s) < (_s.size() / (double) _size))
+ n++;
+ }
+ return n;
+ }
+
+ double euclidianDistance (const ObjectiveVector & _set1, const ObjectiveVector & _to, unsigned _deg = 2) {
+ double dist=0;
+ for (unsigned i=0; i<_set1.size(); i++)
+ dist += pow(fabs(_set1[i] - _to[i]), (int)_deg);
+ return pow(dist, 1.0 / _deg);
+ }
+
+};
+
+#endif /*MOEOENTROPYMETRIC_H_*/
diff --git a/branches/paradiseo-moeo-1.0/src/metric/moeoMetric.h b/branches/paradiseo-moeo-1.0/src/metric/moeoMetric.h
new file mode 100644
index 000000000..2163770ba
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/src/metric/moeoMetric.h
@@ -0,0 +1,86 @@
+// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+
+//-----------------------------------------------------------------------------
+// moeoMetric.h
+// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2007
+/*
+ This library...
+
+ Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr
+ */
+//-----------------------------------------------------------------------------
+
+#ifndef MOEOMETRIC_H_
+#define MOEOMETRIC_H_
+
+#include
+
+/**
+ * Base class for performance metrics (also called quality indicators)
+ */
+class moeoMetric : public eoFunctorBase
+{};
+
+
+/**
+ * Base class for unary metrics
+ */
+template < class A, class R >
+class moeoUnaryMetric : public eoUF < A, R >, public moeoMetric
+{};
+
+
+/**
+ * Base class for binary metrics
+ */
+template < class A1, class A2, class R >
+class moeoBinaryMetric : public eoBF < A1, A2, R >, public moeoMetric
+{};
+
+
+/**
+ * Base class for unary metrics dedicated to the performance evaluation of a single solution's Pareto fitness
+ */
+template < class MOEOT, class R>//, class ObjVector = typename MOEOT::ObjectiveVector >
+//class moeoSolutionUnaryMetric : public moeoUnaryMetric < const ObjVector &, R >
+class moeoSolutionUnaryMetric : public moeoUnaryMetric < const MOEOT &, R >
+{};
+
+
+/**
+ * Base class for unary metrics dedicated to the performance evaluation of a Pareto set (a vector of Pareto fitnesses)
+ */
+template < class MOEOT, class R>//, class ObjVector = typename MOEOT::ObjectiveVector >
+//class moeoVectorUnaryMetric : public moeoUnaryMetric < const std::vector < ObjVector > &, R >
+class moeoPopUnaryMetric : public moeoUnaryMetric < const eoPop < MOEOT > &, R >
+{};
+
+
+/**
+ * Base class for binary metrics dedicated to the performance comparison between two solutions's Pareto fitnesses
+ */
+template < class MOEOT, class R>//, class ObjVector = typename MOEOT::ObjectiveVector >
+//class moeoSolutionVsSolutionBinaryMetric : public moeoBinaryMetric < const ObjVector &, const ObjVector &, R >
+class moeoSolutionVsSolutionBinaryMetric : public moeoBinaryMetric < const MOEOT &, const MOEOT &, R >
+{};
+
+
+/**
+ * Base class for binary metrics dedicated to the performance comparison between a Pareto set (a vector of Pareto fitnesses) and a single solution's Pareto fitness
+ */
+template < class MOEOT, class R>//, class ObjVector = typename MOEOT::ObjectiveVector >
+//class moeoVectorVsSolutionBinaryMetric : public moeoBinaryMetric < const std::vector < ObjVector > &, const ObjVector &, R >
+class moeoPopVsSolutionBinaryMetric : public moeoBinaryMetric < const eoPop < MOEOT > &, const MOEOT &, R >
+{};
+
+
+/**
+ * Base class for binary metrics dedicated to the performance comparison between two Pareto sets (two vectors of Pareto fitnesses)
+ */
+template < class MOEOT, class R >//, class ObjVector = typename MOEOT::ObjectiveVector >
+//class moeoVectorVsVectorBinaryMetric : public moeoBinaryMetric < const std::vector < ObjVector > &, const std::vector < ObjVector > &, R >
+class moeoPopVsPopBinaryMetric : public moeoBinaryMetric < const eoPop < MOEOT > &, const eoPop < MOEOT > &, R >
+{};
+
+
+#endif /*MOEOMETRIC_H_*/
diff --git a/branches/paradiseo-moeo-1.0/src/moeo b/branches/paradiseo-moeo-1.0/src/moeo
new file mode 100644
index 000000000..aeb808560
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/src/moeo
@@ -0,0 +1,43 @@
+// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+
+//-----------------------------------------------------------------------------
+// moeo
+// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2007
+/*
+ This library...
+
+ Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr
+ */
+//-----------------------------------------------------------------------------
+
+#ifndef MOEO_
+#define MOEO_
+
+#include
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#endif /*MOEO_*/
diff --git a/branches/paradiseo-moeo-1.0/src/moeoArchive.h b/branches/paradiseo-moeo-1.0/src/moeoArchive.h
new file mode 100644
index 000000000..e4747bec2
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/src/moeoArchive.h
@@ -0,0 +1,156 @@
+// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+
+//-----------------------------------------------------------------------------
+// moeoArchive.h
+// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2007
+/*
+ This library...
+
+ Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr
+ */
+//-----------------------------------------------------------------------------
+
+#ifndef MOEOARCHIVE_H_
+#define MOEOARCHIVE_H_
+
+#include
+
+/**
+ * An archive is a secondary population that stores non-dominated solutions
+ */
+template < class MOEOT >
+class moeoArchive : public eoPop < MOEOT >
+{
+public:
+
+ using std::vector< MOEOT > :: size;
+ using std::vector< MOEOT > :: operator[];
+ using std::vector< MOEOT > :: back;
+ using std::vector< MOEOT > :: pop_back;
+
+
+ /**
+ * The type of an objective vector for a solution
+ */
+ typedef typename MOEOT::ObjectiveVector ObjectiveVector;
+
+
+ /**
+ * Default ctor.
+ * The moeoObjectiveVectorComparator used to compare solutions is based on Pareto dominance
+ */
+ moeoArchive() : eoPop < MOEOT >(), comparator(paretoComparator)
+ {}
+
+
+ /**
+ * Ctor
+ * @param _comparator the moeoObjectiveVectorComparator used to compare solutions
+ */
+ moeoArchive(moeoObjectiveVectorComparator < ObjectiveVector > & _comparator) : eoPop < MOEOT >(), comparator(_comparator)
+ {}
+
+
+ /**
+ * Returns true if the current archive dominates _objectiveVector according to the moeoObjectiveVectorComparator given in the constructor
+ * @param _objectiveVector the objective vector to compare with the current archive
+ */
+ bool dominates (const ObjectiveVector & _objectiveVector) const
+ {
+ for (unsigned i = 0; i < size(); i++)
+ {
+ if ( comparator(operator[](i).fitness(), _objectiveVector)==1 )
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+
+ /**
+ * Returns true if the current archive already contains a solution with the same objective values than _objectiveVector
+ * @param _objectiveVector the objective vector to compare with the current archive
+ */
+ bool contains (const ObjectiveVector & _objectiveVector) const
+ {
+ for (unsigned i = 0; i < size; i++)
+ {
+ if (operator[](i).fitness () == _objectiveVector)
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+
+ /**
+ * Updates the archive with a given individual _moeo
+ * @param _moeo the given individual
+ */
+ void update (const MOEOT & _moeo)
+ {
+ // first step: removing the dominated solutions from the archive
+ for (unsigned j = 0; j < size();)
+ {
+ // if _moeo.fitness() dominates operator[](j).fitness()
+ //if ( comparator(_moeo.fitness(), operator[](j).fitness())==1 )
+ if ( comparator(_moeo.objectiveVector(), operator[](j).objectiveVector())==1 )
+ {
+ operator[](j) = back();
+ pop_back();
+ }
+ //else if (_moeo.fitness() == operator[](j).fitness())
+ else if (_moeo.objectiveVector() == operator[](j).objectiveVector())
+ {
+ operator[](j) = back();
+ pop_back();
+ }
+ else
+ {
+ j++;
+ }
+ }
+ // second step: is _moeo dominated?
+ bool dom = false;
+ for (unsigned j=0; j & _pop)
+ {
+ for (unsigned i=0; i<_pop.size(); i++)
+ {
+ update(_pop[i]);
+ }
+ }
+
+
+private:
+
+ /** The moeoObjectiveVectorComparator used to compare solutions */
+ moeoObjectiveVectorComparator < ObjectiveVector > & comparator;
+ /** A moeoObjectiveVectorComparator based on Pareto dominance (used as default) */
+ moeoParetoObjectiveVectorComparator < ObjectiveVector > paretoComparator;
+
+};
+
+#endif /*MOEOARCHIVE_H_ */
diff --git a/branches/paradiseo-moeo-1.0/src/moeoArchiveFitnessSavingUpdater.h b/branches/paradiseo-moeo-1.0/src/moeoArchiveFitnessSavingUpdater.h
new file mode 100644
index 000000000..013b1d744
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/src/moeoArchiveFitnessSavingUpdater.h
@@ -0,0 +1,70 @@
+// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+
+//-----------------------------------------------------------------------------
+// moeoArchiveFitnessSavingUpdater.h
+// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2006
+/*
+ This library...
+
+ Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr
+ */
+//-----------------------------------------------------------------------------
+
+#ifndef MOEOARCHIVEFITNESSSAVINGUPDATER_H_
+#define MOEOARCHIVEFITNESSSAVINGUPDATER_H_
+
+#include
+#include
+#include
+#include
+#include
+
+#define MAX_BUFFER_SIZE 1000
+
+/**
+ * This class allows to save the fitnesses of solutions contained in an archive into a file at each generation.
+ */
+template
+class moeoArchiveFitnessSavingUpdater : public eoUpdater
+{
+public:
+
+ /**
+ * Ctor
+ * @param _arch local archive
+ * @param _filename target filename
+ * @param _id own ID
+ */
+ moeoArchiveFitnessSavingUpdater (moeoArchive & _arch, const std::string & _filename = "Res/Arch", int _id = -1) : arch(_arch), filename(_filename), id(_id), counter(0)
+ {}
+
+ /**
+ * Saves the fitness of the archive's members into the file
+ */
+ void operator()() {
+ char buff[MAX_BUFFER_SIZE];
+ if (id == -1)
+ sprintf (buff, "%s.%u", filename.c_str(), counter ++);
+ else
+ sprintf (buff, "%s.%u.%u", filename.c_str(), id, counter ++);
+ std::ofstream f(buff);
+ for (unsigned i = 0; i < arch.size (); i++)
+ f << arch[i].objectiveVector() << std::endl;
+ f.close ();
+ }
+
+
+private:
+
+ /** local archive */
+ moeoArchive & arch;
+ /** target filename */
+ std::string filename;
+ /** own ID */
+ int id;
+ /** counter */
+ unsigned counter;
+
+};
+
+#endif /*MOEOARCHIVEFITNESSSAVINGUPDATER_H_*/
diff --git a/branches/paradiseo-moeo-1.0/src/moeoArchiveUpdater.h b/branches/paradiseo-moeo-1.0/src/moeoArchiveUpdater.h
new file mode 100644
index 000000000..fa3dfccd0
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/src/moeoArchiveUpdater.h
@@ -0,0 +1,54 @@
+// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+
+//-----------------------------------------------------------------------------
+// moeoArchiveUpdater.h
+// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2006
+/*
+ This library...
+
+ Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr
+ */
+//-----------------------------------------------------------------------------
+
+#ifndef MOEOARCHIVEUPDATER_H_
+#define MOEOARCHIVEUPDATER_H_
+
+#include
+#include
+#include
+
+/**
+ * This class allows to update the archive at each generation with newly found non-dominated solutions
+ */
+template < class EOT >
+class moeoArchiveUpdater : public eoUpdater
+{
+public:
+
+ /**
+ * Ctor
+ * @param _arch an archive of non-dominated solutions
+ * @param _pop the main population
+ */
+ moeoArchiveUpdater(moeoArchive & _arch, const eoPop & _pop) : arch(_arch), pop(_pop)
+ {}
+
+
+ /**
+ * Updates the archive with newly found non-dominated solutions contained in the main population
+ */
+ void operator()() {
+ arch.update(pop);
+ }
+
+
+private:
+
+ /** the archive of non-dominated solutions */
+ moeoArchive & arch;
+ /** the main population */
+ const eoPop & pop;
+
+};
+
+#endif /*MOEOARCHIVEUPDATER_H_*/
diff --git a/branches/paradiseo-moeo-1.0/src/moeoCombinedLS.h b/branches/paradiseo-moeo-1.0/src/moeoCombinedLS.h
new file mode 100644
index 000000000..a19b4fd5f
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/src/moeoCombinedLS.h
@@ -0,0 +1,67 @@
+// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+
+//-----------------------------------------------------------------------------
+// moeoCombinedLS.h
+// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2007
+/*
+ This library...
+
+ Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr
+ */
+//-----------------------------------------------------------------------------
+
+#ifndef MOEOCOMBINEDLS_H_
+#define MOEOCOMBINEDLS_H_
+
+#include
+#include
+#include
+
+/**
+ * This class allows to embed a set of local searches that are sequentially applied,
+ * and so working and updating the same archive of non-dominated solutions
+ */
+template < class MOEOT >
+class moeoCombinedLS : public moeoLS < MOEOT > {
+public:
+
+ /**
+ * Ctor
+ * @param _eval the full evaluator of a solution
+ * @param _first_ls the first multi-objective local search to add
+ */
+ moeoCombinedLS(moeoEvalFunc < MOEOT > & _eval, moeoLS < MOEOT > & _first_ls) : eval (_eval) {
+ combinedLS.push_back (& _first_ls);
+ }
+
+ /**
+ * Adds a new local search to combine
+ * @param _ls the multi-objective local search to add
+ */
+ void add(moeoLS < MOEOT > & _ls) {
+ combinedMOLS.push_back(& _ls);
+ }
+
+ /**
+ * Gives a new solution in order to explore the neigborhood.
+ * The new non-dominated solutions are added to the archive
+ * @param _eo the solution
+ * @param _arch the archive of non-dominated solutions
+ */
+ void operator () (const MOEOT & _eo, moeoArchive < MOEOT > & _arch) {
+ eval(const_cast < MOEOT & > (_eo));
+ for (unsigned i=0; i operator()(_eo, _arch);
+ }
+
+
+private:
+
+ /** the full evaluator of a solution */
+ moeoEvalFunc < MOEOT > & eval;
+ /** the vector that contains the combined LS */
+ std::vector< moeoLS < MOEOT > * > combinedLS;
+
+};
+
+#endif /*MOEOCOMBINEDLS_H_*/
diff --git a/branches/paradiseo-moeo-1.0/src/moeoComparator.h b/branches/paradiseo-moeo-1.0/src/moeoComparator.h
new file mode 100644
index 000000000..76fb709f7
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/src/moeoComparator.h
@@ -0,0 +1,182 @@
+// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+
+//-----------------------------------------------------------------------------
+// moeoComparator.h
+// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2007
+/*
+ This library...
+
+ Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr
+ */
+//-----------------------------------------------------------------------------
+
+#ifndef MOEOPOPSORTER_H_
+#define MOEOPOPSORTER_H_
+
+#include
+#include
+
+/**
+ * Functor allowing to compare two solutions
+ */
+template < class MOEOT >
+class moeoComparator : public eoBF < const MOEOT &, const MOEOT &, const bool >
+{};
+
+
+/**
+ * Functor allowing to compare two solutions according to their first objective value, then their second, and so on
+ */
+template < class MOEOT >
+class moeoObjectiveComparator : public moeoComparator < MOEOT >
+{
+public:
+ /**
+ * Returns true if _moeo1 is smaller than _moeo2 on the first objective, then on the second, and so on
+ * @param _moeo1 the first solution
+ * @param _moeo2 the second solution
+ */
+ const bool operator()(const MOEOT & _moeo1, const MOEOT & _moeo2)
+ {
+ return _moeo1.objectiveVector() < _moeo2.objectiveVector();
+ }
+};
+
+
+/**
+ * Functor allowing to compare two solutions according to their fitness values
+ */
+template < class MOEOT >
+class moeoFitnessComparator : public moeoComparator < MOEOT >
+{
+public:
+ /**
+ * Returns true if the fitness value of _moeo1 is smaller than the fitness value of _moeo2
+ * @param _moeo1 the first solution
+ * @param _moeo2 the second solution
+ */
+ const bool operator()(const MOEOT & _moeo1, const MOEOT & _moeo2)
+ {
+ return _moeo1.fitness() < _moeo2.fitness();
+ }
+};
+
+
+/**
+ * Functor allowing to compare two solutions according to their diversity values
+ */
+template < class MOEOT >
+class moeoDiversityComparator : public moeoComparator < MOEOT >
+{
+public:
+ /**
+ * Returns true if the diversity value of _moeo1 is smaller than the diversity value of _moeo2
+ * @param _moeo1 the first solution
+ * @param _moeo2 the second solution
+ */
+ const bool operator()(const MOEOT & _moeo1, const MOEOT & _moeo2)
+ {
+ return _moeo1.diversity() < _moeo2.diversity();
+ }
+};
+
+
+/**
+ * Functor allowing to compare two solutions according to their fitness values, then according to their diversity values
+ */
+template < class MOEOT >
+class moeoFitnessThenDiversityComparator : public moeoComparator < MOEOT >
+{
+public:
+ /**
+ * Returns true if _moeo1 is smaller than _moeo2 according to their fitness values, then according to their diversity values
+ * @param _moeo1 the first solution
+ * @param _moeo2 the second solution
+ */
+ const bool operator()(const MOEOT & _moeo1, const MOEOT & _moeo2)
+ {
+ if (_moeo1.fitness() == _moeo2.fitness())
+ {
+ return _moeo1.diversity() < _moeo2.diversity();
+ }
+ else
+ {
+ return _moeo1.fitness() < _moeo2.fitness();
+ }
+ }
+};
+
+
+/**
+ * Functor allowing to compare two solutions according to their diversity values, then according to their fitness values
+ */
+template < class MOEOT >
+class moeoDiversityThenFitnessComparator : public moeoComparator < MOEOT >
+{
+public:
+ /**
+ * Returns true if _moeo1 is smaller than _moeo2 according to their diversity values, then according to their fitness values
+ * @param _moeo1 the first solution
+ * @param _moeo2 the second solution
+ */
+ const bool operator()(const MOEOT & _moeo1, const MOEOT & _moeo2)
+ {
+ if (_moeo1.diversity() == _moeo2.diversity())
+ {
+ return _moeo1.fitness() < _moeo2.fitness();
+ }
+ else
+ {
+ return _moeo1.diversity() < _moeo2.diversity();
+ }
+ }
+};
+
+
+/**
+ * Functor allowing to compare two solutions according to Pareto dominance relation => USEFULL ???
+ *
+template < class MOEOT >
+class moeoParetoDominanceComparator : public moeoComparator < MOEOT >
+{
+public:
+ /**
+ * Returns true if _moeo1 is dominated by _moeo2 according to Pareto dominance relation
+ * @param _moeo1 the first solution
+ * @param _moeo2 the second solution
+ *
+ const bool operator()(const MOEOT & _moeo1, const MOEOT & _moeo2)
+ {
+ bool result = false;
+ typedef typename MOEOT::ObjectiveVector::Traits ObjectiveVectorTraits;
+ for (unsigned i=0; i ObjectiveVectorTraits::tolerance() )
+ {
+ // if the ith objective have to be minimized...
+ if (ObjectiveVectorTraits::minimizing(i))
+ {
+ if (_moeo1.objectiveVector()[i] < _moeo2.objectiveVector()[i])
+ {
+ return false; // _moeo2 cannot dominate _moeo1
+ }
+ result = true;
+ }
+ // if the ith objective have to be maximized...
+ else if (ObjectiveVectorTraits::maximizing(i))
+ {
+ if (_moeo1.objectiveVector()[i] > _moeo2.objectiveVector()[i])
+ {
+ return false; // _moeo2 cannot dominate _moeo1
+ }
+ result = true;
+ }
+ }
+ }
+ return result;
+ }
+};
+*/
+
+#endif /*MOEOPOPSORTER_H_*/
diff --git a/branches/paradiseo-moeo-1.0/src/moeoDiversityAssignment.h b/branches/paradiseo-moeo-1.0/src/moeoDiversityAssignment.h
new file mode 100644
index 000000000..157d8feb0
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/src/moeoDiversityAssignment.h
@@ -0,0 +1,26 @@
+// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+
+//-----------------------------------------------------------------------------
+// moeoDiversityAssignment.h
+// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2007
+/*
+ This library...
+
+ Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr
+ */
+//-----------------------------------------------------------------------------
+
+#ifndef MOEODIVERSITYASSIGNMENT_H_
+#define MOEODIVERSITYASSIGNMENT_H_
+
+#include
+#include
+
+/**
+ * Functor that sets the diversity values of a whole population
+ */
+template < class MOEOT >
+class moeoDiversityAssignment : public eoUF < eoPop < MOEOT > &, void >
+{};
+
+#endif /*MOEODIVERSITYASSIGNMENT_H_*/
diff --git a/branches/paradiseo-moeo-1.0/src/moeoEA.h b/branches/paradiseo-moeo-1.0/src/moeoEA.h
new file mode 100644
index 000000000..273d4d741
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/src/moeoEA.h
@@ -0,0 +1,25 @@
+// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+
+//-----------------------------------------------------------------------------
+// moeoEA.h
+// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2007
+/*
+ This library...
+
+ Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr
+ */
+//-----------------------------------------------------------------------------
+
+#ifndef MOEOEA_H_
+#define MOEOEA_H_
+
+#include
+
+/**
+ * Abstract class for multi-objective evolutionary algorithms
+ */
+template < class MOEOT >
+class moeoEA : public eoAlgo < MOEOT > {};
+
+
+#endif /*MOEOEA_H_*/
diff --git a/branches/paradiseo-moeo-1.0/src/moeoEvalFunc.h b/branches/paradiseo-moeo-1.0/src/moeoEvalFunc.h
new file mode 100644
index 000000000..1f6b7544d
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/src/moeoEvalFunc.h
@@ -0,0 +1,24 @@
+// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+
+//-----------------------------------------------------------------------------
+// moeoEvalFunc.h
+// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2007
+/*
+ This library...
+
+ Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr
+ */
+//-----------------------------------------------------------------------------
+
+#ifndef MOEOEVALFUNC_H_
+#define MOEOEVALFUNC_H_
+
+#include
+
+/*
+ * Functor that evaluates one MOEO by setting all its objective values.
+ */
+template < class MOEOT >
+class moeoEvalFunc : public eoEvalFunc< MOEOT > {};
+
+#endif /*MOEOEVALFUNC_H_*/
diff --git a/branches/paradiseo-moeo-1.0/src/moeoFastNonDominatedSortingFitnessAssignment.h b/branches/paradiseo-moeo-1.0/src/moeoFastNonDominatedSortingFitnessAssignment.h
new file mode 100644
index 000000000..5e4585489
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/src/moeoFastNonDominatedSortingFitnessAssignment.h
@@ -0,0 +1,176 @@
+// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+
+//-----------------------------------------------------------------------------
+// moeoFastNonDominatedSortingFitnessAssignment.h
+// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2007
+/*
+ This library...
+
+ Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr
+ */
+//-----------------------------------------------------------------------------
+
+#ifndef MOEOFASTNONDOMINATEDSORTINGFITNESSASSIGNMENT_H_
+#define MOEOFASTNONDOMINATEDSORTINGFITNESSASSIGNMENT_H_
+
+#include
+#include
+#include
+#include
+
+/**
+ * Fitness assignment sheme based on Pareto-dominance count proposed in
+ * N. Srinivas, K. Deb, "Multiobjective Optimization Using Nondominated Sorting in Genetic Algorithms", Evolutionary Computation vol. 2, no. 3, pp. 221-248 (1994)
+ * and in
+ * K. Deb, A. Pratap, S. Agarwal, T. Meyarivan, "A Fast and Elitist Multi-Objective Genetic Algorithm: NSGA-II", IEEE Transactions on Evolutionary Computation, vol. 6, no. 2 (2002).
+ * This strategy is, for instance, used in NSGA and NSGA-II.
+ */
+template < class MOEOT >
+class moeoFastNonDominatedSortingFitnessAssignment : public moeoParetoBasedFitnessAssignment < MOEOT >
+{
+public:
+
+ /**
+ * Ctor
+ */
+ moeoFastNonDominatedSortingFitnessAssignment() {}
+
+
+ /**
+ * Computes fitness values for every solution contained in the population _pop
+ * @param _pop the population
+ */
+ void operator()(eoPop < MOEOT > & _pop)
+ {
+ // number of objectives for the problem under consideration
+ unsigned nObjectives = MOEOT::ObjectiveVector::nObjectives();
+ if (nObjectives == 1)
+ {
+ // one objective
+ oneObjective(_pop);
+ }
+ else if (nObjectives == 2)
+ {
+ // two objectives (the two objectives function is still to do)
+ mObjectives(_pop);
+ }
+ else if (nObjectives > 2)
+ {
+ // more than two objectives
+ mObjectives(_pop);
+ }
+ else
+ {
+ // problem with the number of objectives
+ throw std::runtime_error("Problem with the number of objectives in moeoFastNonDominatedSortingFitnessAssignment");
+ }
+ }
+
+
+private:
+
+ /** the objective vector type of the solutions */
+ typedef typename MOEOT::ObjectiveVector ObjectiveVector;
+ /** Functor to compare two objective vectors according to Pareto dominance relation */
+ moeoParetoObjectiveVectorComparator < ObjectiveVector > comparator;
+ /** Functor to compare two solutions on the first objective, then on the second, and so on */
+ moeoObjectiveComparator < MOEOT > objComparator;
+
+
+ /**
+ * Sets the fitness values for mono-objective problems
+ * @param _pop the population
+ */
+ void oneObjective (eoPop < MOEOT > & _pop)
+ {
+ std::sort(_pop.begin(), _pop.end(), objComparator);
+ for (unsigned i=0; i<_pop.size(); i++)
+ {
+ _pop[i].fitness(i+1);
+ }
+ }
+
+
+ /**
+ * Sets the fitness values for bi-objective problems with a complexity of O(n log n), where n stands for the population size
+ * @param _pop the population
+ */
+ void twoObjectives (eoPop < MOEOT > & _pop)
+ {
+ //... TO DO !
+ }
+
+
+ /**
+ * Sets the fitness values for problems with more than two objectives with a complexity of O(n² log n), where n stands for the population size
+ * @param _pop the population
+ */
+ void mObjectives (eoPop < MOEOT > & _pop)
+ {
+ // S[i] = indexes of the individuals dominated by _pop[i]
+ std::vector < std::vector > S(_pop.size());
+ // n[i] = number of individuals that dominate the individual _pop[i]
+ std::vector < unsigned > n(_pop.size(), 0);
+ // fronts: F[i] = indexes of the individuals contained in the ith front
+ std::vector < std::vector > F(_pop.size()+1);
+ // used to store the number of the first front
+ F[1].reserve(_pop.size());
+ // flag to comparae solutions
+ int comparatorFlag;
+ for (unsigned p=0; p<_pop.size(); p++)
+ {
+ for (unsigned q=0; q<_pop.size(); q++)
+ {
+ // comparison of the 2 solutions according to Pareto dominance
+ comparatorFlag = comparator(_pop[p].objectiveVector(), _pop[q].objectiveVector());
+ // if p dominates q
+ if (comparatorFlag == 1)
+ {
+ // add q to the set of solutions dominated by p
+ S[p].push_back(q);
+ }
+ // if q dominates p
+ else if (comparatorFlag == -1)
+ {
+ // increment the domination counter of p
+ n[p]++;
+ }
+ }
+ // if no individual dominates p
+ if (n[p] == 0)
+ {
+ // p belongs to the first front
+ _pop[p].fitness(1);
+ F[1].push_back(p);
+ }
+ }
+ // front counter
+ unsigned counter=1;
+ unsigned p,q;
+ while (! F[counter].empty())
+ {
+ // used to store the number of the next front
+ F[counter+1].reserve(_pop.size());
+ for (unsigned i=0; i
+#include
+
+/**
+ * Functor that sets the fitness values of a whole population
+ */
+template < class MOEOT >
+class moeoFitnessAssignment : public eoUF < eoPop < MOEOT > &, void >
+{};
+
+
+/**
+ * moeoScalarFitnessAssignment is a moeoFitnessAssignment for scalar strategies
+ */
+template < class MOEOT >
+class moeoScalarFitnessAssignment : public moeoFitnessAssignment < MOEOT >
+{};
+
+
+/**
+ * moeoCriterionBasedFitnessAssignment is a moeoFitnessAssignment for criterion-based strategies
+ */
+template < class MOEOT >
+class moeoCriterionBasedFitnessAssignment : public moeoFitnessAssignment < MOEOT >
+{};
+
+
+/**
+ * moeoParetoBasedFitnessAssignment is a moeoFitnessAssignment for Pareto-based strategies
+ */
+template < class MOEOT >
+class moeoParetoBasedFitnessAssignment : public moeoFitnessAssignment < MOEOT >
+{};
+
+
+#endif /*MOEOFITNESSASSIGNMENT_H_*/
diff --git a/branches/paradiseo-moeo-1.0/src/moeoGenerationalReplacement.h b/branches/paradiseo-moeo-1.0/src/moeoGenerationalReplacement.h
new file mode 100644
index 000000000..dc1a2e1d5
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/src/moeoGenerationalReplacement.h
@@ -0,0 +1,25 @@
+// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+
+//-----------------------------------------------------------------------------
+// moeoGenerationalReplacement.h
+// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2007
+/*
+ This library...
+
+ Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr
+ */
+//-----------------------------------------------------------------------------
+
+#ifndef MOEOGENERATIONALREPLACEMENT_H_
+#define MOEOGENERATIONALREPLACEMENT_H_
+
+#include
+#include
+
+/**
+ * Generational replacement: only the new individuals are preserved
+ */
+template < class MOEOT >
+class moeoGenerationalReplacement : public moeoReplacement < MOEOT >, public eoGenerationalReplacement < MOEOT > {};
+
+#endif /*MOEOGENERATIONALREPLACEMENT_H_*/
diff --git a/branches/paradiseo-moeo-1.0/src/moeoHybridLS.h b/branches/paradiseo-moeo-1.0/src/moeoHybridLS.h
new file mode 100644
index 000000000..f9ed01d36
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/src/moeoHybridLS.h
@@ -0,0 +1,74 @@
+// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+
+//-----------------------------------------------------------------------------
+// moeoHybridLS.h
+// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2007
+/*
+ This library...
+
+ Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr
+ */
+//-----------------------------------------------------------------------------
+
+#ifndef MOEOHYBRIDLS_H_
+#define MOEOHYBRIDLS_H_
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+/**
+ * This class allows to apply a multi-objective local search to a number of selected individuals contained in the archive
+ * at every generation until a stopping criteria is verified.
+ */
+template < class MOEOT >
+class moeoHybridLS : public eoUpdater
+{
+public:
+
+ /**
+ * Ctor
+ * @param _term stopping criteria
+ * @param _select selector
+ * @param _ls a multi-objective local search
+ * @param _arch the archive
+ */
+ eoHybridLS (eoContinue < MOEOT > & _term, eoSelect < MOEOT > & _select, moeoLS < MOEOT > & _ls, moeoArchive < MOEOT > & _arch) : term(_term), select(_select), ls(_ls), arch(_arch)
+ {}
+
+ /**
+ * Applies the multi-objective local search to selected individuals contained in the archive if the stopping criteria is not verified
+ */
+ void operator () ()
+ {
+ if (! cont (arch))
+ {
+ // selection of solutions
+ eoPop < MOEOT > selectedSolutions;
+ select(arch, selectedSolutions);
+ // apply the local search to every selected solution
+ for (unsigned i=0; i & term;
+ /** selector */
+ eoSelect < MOEOT > & select;
+ /** multi-objective local search */
+ moeoLS < MOEOT > & ls;
+ /** archive */
+ moeoArchive < MOEOT > & arch;
+
+};
+
+#endif /*MOEOHYBRIDLS_H_*/
diff --git a/branches/paradiseo-moeo-1.0/src/moeoLS.h b/branches/paradiseo-moeo-1.0/src/moeoLS.h
new file mode 100644
index 000000000..f6cca796f
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/src/moeoLS.h
@@ -0,0 +1,27 @@
+// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+
+//-----------------------------------------------------------------------------
+// moeoLS.h
+// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2007
+/*
+ This library...
+
+ Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr
+ */
+//-----------------------------------------------------------------------------
+
+#ifndef MOEOLS_H_
+#define MOEOLS_H_
+
+#include
+#include
+
+/**
+ * Abstract class for local searches applied to multi-objective optimization.
+ * Starting from only one solution, it produces a set of new non-dominated solutions.
+ */
+template < class MOEOT >
+class moeoLS: public eoBF < const MOEOT &, moeoArchive < MOEOT > &, void >
+{};
+
+#endif /*MOEOLS_H_*/
diff --git a/branches/paradiseo-moeo-1.0/src/moeoObjectiveVector.h b/branches/paradiseo-moeo-1.0/src/moeoObjectiveVector.h
new file mode 100644
index 000000000..c5e7fcc86
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/src/moeoObjectiveVector.h
@@ -0,0 +1,231 @@
+// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+
+//-----------------------------------------------------------------------------
+// moeoObjectiveVector.h
+// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2007
+/*
+ This library...
+
+ Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr
+ */
+//-----------------------------------------------------------------------------
+
+#ifndef MOEOOBJECTIVEVECTOR_H_
+#define MOEOOBJECTIVEVECTOR_H_
+
+#include
+#include
+#include
+#include
+
+/**
+ * Abstract class allowing to represent a solution in the objective space (phenotypic representation).
+ * The template argument ObjectiveVectorTraits defaults to moeoObjectiveVectorTraits,
+ * but it can be replaced at will by any other class that implements the static functions defined therein.
+ * Some static funtions to access to the traits characteristics are re-defined in order not to write a lot of typedef's.
+ */
+template < class ObjectiveVectorTraits >
+class moeoObjectiveVector
+{
+public:
+
+ /** The traits of objective vectors */
+ typedef ObjectiveVectorTraits Traits;
+
+
+ /**
+ * Parameters setting (for the objective vector of any solution)
+ * @param _nObjectives the number of objectives
+ * @param _bObjectives the min/max vector (true = min / false = max)
+ */
+ static void setup(unsigned _nObjectives, std::vector < bool > & _bObjectives)
+ {
+ ObjectiveVectorTraits::setup(_nObjectives, _bObjectives);
+ }
+
+
+ /**
+ * Returns the number of objectives
+ */
+ static unsigned nObjectives()
+ {
+ return ObjectiveVectorTraits::nObjectives();
+ }
+
+
+ /**
+ * Returns true if the _ith objective have to be minimized
+ * @param _i the index
+ */
+ static bool minimizing(unsigned _i) {
+ return ObjectiveVectorTraits::minimizing(_i);
+ }
+
+
+ /**
+ * Returns true if the _ith objective have to be maximized
+ * @param _i the index
+ */
+ static bool maximizing(unsigned _i) {
+ return ObjectiveVectorTraits::maximizing(_i);
+ }
+
+};
+
+
+/**
+ * This class allows to represent a solution in the objective space (phenotypic representation) by a std::vector of doubles,
+ * i.e. that an objective value is represented using a double, and this for any objective.
+ */
+template < class ObjectiveVectorTraits >
+class moeoObjectiveVectorDouble : public moeoObjectiveVector < ObjectiveVectorTraits >, public std::vector < double >
+{
+public:
+
+ using std::vector< double >::size;
+ using std::vector< double >::operator[];
+
+ /**
+ * Ctor
+ */
+ moeoObjectiveVectorDouble() : std::vector < double > (ObjectiveVectorTraits::nObjectives(), 0.0) {}
+
+
+ /**
+ * Ctor from a vector of doubles
+ * @param _v the std::vector < double >
+ */
+ moeoObjectiveVectorDouble(std::vector & _v) : std::vector < double > (_v) {}
+
+
+ /**
+ * Returns true if the current objective vector dominates _other according to the Pareto dominance relation
+ * (but it's better to use a moeoObjectiveVectorComparator object to compare solutions)
+ * @param _other the other moeoObjectiveVectorDouble object to compare with
+ */
+ bool dominates(const moeoObjectiveVectorDouble < ObjectiveVectorTraits > & _other) const
+ {
+ moeoParetoObjectiveVectorComparator < moeoObjectiveVectorDouble > comparator;
+ return comparator(*this, _other)==1;
+ }
+
+
+ /**
+ * Returns true if the current objective vector is equal to _other (according to a tolerance value)
+ * @param _other the other moeoObjectiveVectorDouble object to compare with
+ */
+ bool operator==(const moeoObjectiveVectorDouble < ObjectiveVectorTraits > & _other) const
+ {
+ for (unsigned i=0; i < size(); i++)
+ {
+ if ( fabs(operator[](i) - _other[i]) > ObjectiveVectorTraits::tolerance() )
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+
+ /**
+ * Returns true if the current objective vector is different than _other (according to a tolerance value)
+ * @param _other the other moeoObjectiveVectorDouble object to compare with
+ */
+ bool operator!=(const moeoObjectiveVectorDouble < ObjectiveVectorTraits > & _other) const
+ {
+ return ! operator==(_other);
+ }
+
+
+ /**
+ * Returns true if the current objective vector is smaller than _other on the first objective, then on the second, and so on
+ * (can be usefull for sorting/printing)
+ * @param _other the other moeoObjectiveVectorDouble object to compare with
+ */
+ bool operator<(const moeoObjectiveVectorDouble < ObjectiveVectorTraits > & _other) const
+ {
+ for (unsigned i=0; i < size(); i++)
+ {
+ if ( fabs(operator[](i) - _other[i]) > ObjectiveVectorTraits::tolerance() )
+ {
+ if (operator[](i) < _other[i])
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+ }
+ return false;
+ }
+
+
+ /**
+ * Returns true if the current objective vector is greater than _other on the first objective, then on the second, and so on
+ * (can be usefull for sorting/printing)
+ * @param _other the other moeoObjectiveVectorDouble object to compare with
+ */
+ bool operator>(const moeoObjectiveVectorDouble < ObjectiveVectorTraits > & _other) const
+ {
+ return _other < *this;
+ }
+
+
+ /**
+ * Returns true if the current objective vector is smaller than or equal to _other on the first objective, then on the second, and so on
+ * (can be usefull for sorting/printing)
+ * @param _other the other moeoObjectiveVectorDouble object to compare with
+ */
+ bool operator<=(const moeoObjectiveVectorDouble < ObjectiveVectorTraits > & _other) const
+ {
+ return operator==(_other) || operator<(_other);
+ }
+
+
+ /**
+ * Returns true if the current objective vector is greater than or equal to _other on the first objective, then on the second, and so on
+ * (can be usefull for sorting/printing)
+ * @param _other the other moeoObjectiveVectorDouble object to compare with
+ */
+ bool operator>=(const moeoObjectiveVectorDouble < ObjectiveVectorTraits > & _other) const
+ {
+ return operator==(_other) || operator>(_other);
+ }
+
+};
+
+
+/**
+ * Output for a moeoObjectiveVectorDouble object
+ * @param _os output stream
+ * @param _objectiveVector the objective vector to write
+ */
+template < class ObjectiveVectorTraits >
+std::ostream & operator<<(std::ostream & _os, const moeoObjectiveVectorDouble < ObjectiveVectorTraits > & _objectiveVector)
+{
+ for (unsigned i=0; i<_objectiveVector.size(); i++)
+ {
+ _os << _objectiveVector[i] << ' ';
+ }
+ return _os;
+}
+
+/**
+ * Input for a moeoObjectiveVectorDouble object
+ * @param _is input stream
+ * @param _objectiveVector the objective vector to read
+ */
+template < class ObjectiveVectorTraits >
+std::istream & operator>>(std::istream & _is, moeoObjectiveVectorDouble < ObjectiveVectorTraits > & _objectiveVector)
+{
+ _objectiveVector = moeoObjectiveVectorDouble < ObjectiveVectorTraits > ();
+ for (unsigned i=0; i<_objectiveVector.size(); i++)
+ {
+ _is >> _objectiveVector[i];
+ }
+ return _is;
+}
+
+#endif /*MOEOOBJECTIVEVECTOR_H_*/
diff --git a/branches/paradiseo-moeo-1.0/src/moeoObjectiveVectorComparator.h b/branches/paradiseo-moeo-1.0/src/moeoObjectiveVectorComparator.h
new file mode 100644
index 000000000..aa9144f4d
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/src/moeoObjectiveVectorComparator.h
@@ -0,0 +1,89 @@
+// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+
+//-----------------------------------------------------------------------------
+// moeoObjectiveVectorComparator.h
+// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2007
+/*
+ This library...
+
+ Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr
+ */
+//-----------------------------------------------------------------------------
+
+#ifndef MOEOOBJECTIVEVECTORCOMPARATOR_H_
+#define MOEOOBJECTIVEVECTORCOMPARATOR_H_
+
+#include
+#include
+
+/**
+ * Abstract class allowing to compare 2 objective vectors.
+ * The template argument ObjectiveVector have to be a moeoObjectiveVector.
+ */
+template < class ObjectiveVector >
+class moeoObjectiveVectorComparator : public eoBF < const ObjectiveVector &, const ObjectiveVector &, int >
+{};
+
+
+/**
+ * This functor class allows to compare 2 objective vectors according to Pareto dominance
+ */
+template < class ObjectiveVector >
+class moeoParetoObjectiveVectorComparator : public moeoObjectiveVectorComparator < ObjectiveVector >
+{
+public:
+
+ /**
+ * Returns 1 if _objectiveVector1 dominates _objectiveVector2, -1 if _objectiveVector2 dominates _objectiveVector1 and 0 if no one dominates the other
+ * @param _objectiveVector1 the first objective vector
+ * @param _objectiveVector2 the second objective vector
+ */
+ int operator()(const ObjectiveVector & _objectiveVector1, const ObjectiveVector & _objectiveVector2)
+ {
+ bool dom1 = false;
+ bool dom2 = false;
+ for (unsigned i=0; i ObjectiveVector::Traits::tolerance() )
+ {
+ // if the ith objective have to be minimized...
+ if (ObjectiveVector::minimizing(i))
+ {
+ if (_objectiveVector1[i] > _objectiveVector2[i])
+ {
+ dom2 = true; //_objectiveVector2[i] is better than _objectiveVector1[i]
+ }
+ else // _objectiveVector1[i] < _objectiveVector2[i]
+ {
+ dom1 = true; //_objectiveVector1[i] is better than _objectiveVector2[i]
+ }
+ }
+ // if the ith objective have to be maximized...
+ else if (ObjectiveVector::maximizing(i))
+ {
+ if (_objectiveVector1[i] > _objectiveVector2[i])
+ {
+ dom1 = true; //_objectiveVector1[i] is better than _objectiveVector2[i]
+ }
+ else // _objectiveVector1[i] < _objectiveVector2[i]
+ {
+ dom2 = true; //_objectiveVector2[i] is better than _objectiveVector1[i]
+ }
+ }
+ }
+ }
+ if (dom1 == dom2)
+ {
+ return 0; // no one dominates the other
+ }
+ if (dom1)
+ {
+ return 1; //_objectiveVector1 dominates _objectiveVector2
+ }
+ return -1; //_objectiveVector2 dominates _objectiveVector1
+ }
+
+};
+
+#endif /*MOEOOBJECTIVEVECTORCOMPARATOR_H_*/
diff --git a/branches/paradiseo-moeo-1.0/src/moeoObjectiveVectorTraits.h b/branches/paradiseo-moeo-1.0/src/moeoObjectiveVectorTraits.h
new file mode 100644
index 000000000..f47e01fe4
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/src/moeoObjectiveVectorTraits.h
@@ -0,0 +1,111 @@
+// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+
+//-----------------------------------------------------------------------------
+// moeoObjectiveVectorTraits.h
+// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2007
+/*
+ This library...
+
+ Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr
+ */
+//-----------------------------------------------------------------------------
+
+#ifndef MOEOOBJECTIVEVECTORTRAITS_H_
+#define MOEOOBJECTIVEVECTORTRAITS_H_
+
+#include
+#include
+#include
+
+/**
+ * A traits class for moeoObjectiveVector to specify the number of objectives and which ones have to be minimized or maximized
+ */
+class moeoObjectiveVectorTraits
+{
+public:
+
+ /** The tolerance value (used to compare solutions) */
+ const static double tol = 1e-6;
+
+ /**
+ * Parameters setting
+ * @param _nObjectives the number of objectives
+ * @param _bObjectives the min/max vector (true = min / false = max)
+ */
+ static void setup(unsigned _nObjectives, std::vector < bool > & _bObjectives)
+ {
+ // in case the number of objectives was already set to a different value
+ if ( nObj && (nObj != _nObjectives) ) {
+ std::cout << "WARNING\n";
+ std::cout << "WARNING : the number of objectives are changing\n";
+ std::cout << "ARNING : Make sure all existing objects are destroyed\n";
+ std::cout << "WARNING\n";
+ }
+ // number of objectives
+ nObj = _nObjectives;
+ // min/max vector
+ bObj = _bObjectives;
+ // in case the number of objectives and the min/max vector size don't match
+ if (nObj != bObj.size())
+ throw std::runtime_error("Number of objectives and min/max size don't match in moeoObjectiveVectorTraits::setup");
+ }
+
+ /**
+ * Returns the number of objectives
+ */
+ static unsigned nObjectives()
+ {
+ // in case the number of objectives would not be assigned yet
+ if (! nObj)
+ throw std::runtime_error("Number of objectives not assigned in moeoObjectiveVectorTraits");
+ return nObj;
+ }
+
+ /**
+ * Returns true if the _ith objective have to be minimized
+ * @param _i the index
+ */
+ static bool minimizing(unsigned _i)
+ {
+ // in case the min/max vector would not be assigned yet
+ if (! bObj[_i])
+ throw std::runtime_error("We don't know if the ith objective have to be minimized or maximized in moeoObjectiveVectorTraits");
+ // in case there would be a wrong index
+ if (_i >= bObj.size())
+ throw std::runtime_error("Wrong index in moeoObjectiveVectorTraits");
+ return bObj[_i];
+ }
+
+ /**
+ * Returns true if the _ith objective have to be maximized
+ * @param _i the index
+ */
+ static bool maximizing(unsigned _i) {
+ return (! minimizing(_i));
+ }
+
+ /**
+ * Returns the tolerance value (to compare solutions)
+ */
+ static double tolerance()
+ {
+ return tol;
+ }
+
+
+private:
+
+ /** The number of objectives */
+ static unsigned nObj;
+ /** The min/max vector */
+ static std::vector < bool > bObj;
+
+};
+
+#endif /*MOEOOBJECTIVEVECTORTRAITS_H_*/
+
+
+// The static variables of the moeoObjectiveVectorTraits class need to be allocated
+// (maybe it would have been better to put this on a moeoObjectiveVectorTraits.cpp file)
+unsigned moeoObjectiveVectorTraits::nObj;
+std::vector < bool > moeoObjectiveVectorTraits::bObj;
diff --git a/branches/paradiseo-moeo-1.0/src/moeoRandomSelectOne.h b/branches/paradiseo-moeo-1.0/src/moeoRandomSelectOne.h
new file mode 100644
index 000000000..817a33b27
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/src/moeoRandomSelectOne.h
@@ -0,0 +1,25 @@
+// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+
+//-----------------------------------------------------------------------------
+// moeoRandomSelectOne.h
+// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2007
+/*
+ This library...
+
+ Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr
+ */
+//-----------------------------------------------------------------------------
+
+#ifndef MOEORANDOMSELECTONE_H_
+#define MOEORANDOMSELECTONE_H_
+
+#include
+#include
+
+/**
+ * Selection strategy that selects only one element randomly from a whole population
+ */
+template < class MOEOT >
+class moeoRandomSelectOne : public moeoSelectOne < MOEOT >, public eoRandomSelect < MOEOT > {};
+
+#endif /*MOEORANDOMSELECTONE_H_*/
diff --git a/branches/paradiseo-moeo-1.0/src/moeoReplacement.h b/branches/paradiseo-moeo-1.0/src/moeoReplacement.h
new file mode 100644
index 000000000..26efa7a27
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/src/moeoReplacement.h
@@ -0,0 +1,24 @@
+// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+
+//-----------------------------------------------------------------------------
+// moeoReplacement.h
+// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2007
+/*
+ This library...
+
+ Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr
+ */
+//-----------------------------------------------------------------------------
+
+#ifndef MOEOREPLACEMENT_H_
+#define MOEOREPLACEMENT_H_
+
+#include
+
+/**
+ * Replacement strategy for multi-objective optimization
+ */
+template < class MOEOT >
+class moeoReplacement : public eoReplacement < MOEOT > {};
+
+#endif /*MOEOREPLACEMENT_H_*/
diff --git a/branches/paradiseo-moeo-1.0/src/moeoSelectOne.h b/branches/paradiseo-moeo-1.0/src/moeoSelectOne.h
new file mode 100644
index 000000000..1f1f5689e
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/src/moeoSelectOne.h
@@ -0,0 +1,24 @@
+// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+
+//-----------------------------------------------------------------------------
+// moeoSelectOne.h
+// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2007
+/*
+ This library...
+
+ Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr
+ */
+//-----------------------------------------------------------------------------
+
+#ifndef MOEOSELECTONE_H_
+#define MOEOSELECTONE_H_
+
+#include
+
+/**
+ * Selection strategy for multi-objective optimization that selects only one element from a whole population
+ */
+template < class MOEOT >
+class moeoSelectOne : public eoSelectOne < MOEOT > {};
+
+#endif /*MOEOSELECTONE_H_*/
diff --git a/branches/paradiseo-moeo-1.0/src/moeoSelectOneFromPopAndArch.h b/branches/paradiseo-moeo-1.0/src/moeoSelectOneFromPopAndArch.h
new file mode 100644
index 000000000..910c4b44d
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/src/moeoSelectOneFromPopAndArch.h
@@ -0,0 +1,87 @@
+// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
+
+//-----------------------------------------------------------------------------
+// moeoSelectOneFormPopAndArch.h
+// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2007
+/*
+ This library...
+
+ Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr
+ */
+//-----------------------------------------------------------------------------
+
+#ifndef MOEOSELECTONEFROMPOPANDARCH_H_
+#define MOEOSELECTONEFROMPOPANDARCH_H_
+
+#include
+#include
+#include
+#include
+#include
+
+/**
+ * Elitist selection process that consists in choosing individuals in the archive as well as in the current population.
+ */
+template
+class moeoSelectOneFromPopAndArch : public moeoSelectOne
+{
+public:
+
+ /**
+ * Ctor
+ * @param _popSelectOne the population's selection operator
+ * @param _archSelectOne the archive's selection operator
+ * @param _arch the archive
+ * @param _ratioFromPop the ratio of selected individuals from the population
+ */
+ moeoSelectOneFromPopAndArch (moeoSelectOne & _popSelectOne, moeoSelectOne _archSelectOne, moeoArchive & _arch, double _ratioFromPop=0.5)
+ : popSelectOne(_popSelectOne), archSelectOne(_archSelectOne), arch(_arch), ratioFromPop(_ratioFromPop)
+ {}
+
+ /**
+ * Ctor - the archive's selection operator is a random selector
+ * @param _popSelectOne the population's selection operator
+ * @param _arch the archive
+ * @param _ratioFromPop the ratio of selected individuals from the population
+ */
+ moeoSelectOneFromPopAndArch (moeoSelectOne & _popSelectOne, moeoArchive & _arch, double _ratioFromPop=0.5)
+ : popSelectOne(_popSelectOne), archSelectOne(randomSelectOne), arch(_arch), ratioFromPop(_ratioFromPop)
+ {}
+
+ /**
+ * The selection process
+ */
+ virtual const EOT & operator () (const eoPop & pop) {
+ if (arch.size() > 0)
+ if (rng.flip(ratioFromPop))
+ return popSelectOne(pop);
+ else
+ return archSelectOne(arch);
+ else
+ return popSelectOne(pop);
+ }
+
+ /**
+ * Setups some population stats
+ */
+ virtual void setup (const eoPop & _pop) {
+ popSelectOne.setup(_pop);
+ }
+
+
+private:
+
+ /** The population's selection operator */
+ moeoSelectOne & popSelectOne;
+ /** The archive's selection operator */
+ moeoSelectOne & archSelectOne;
+ /** The archive */
+ moeoArchive & arch;
+ /** The ratio of selected individuals from the population*/
+ double ratioFromPop;
+ /** A random selection operator */
+ moeoRandomSelectOne randomSelectOne;
+
+};
+
+#endif /*MOEOSELECTONEFROMPOPANDARCH_H_*/
diff --git a/branches/paradiseo-moeo-1.0/tutorials/Makefile.am b/branches/paradiseo-moeo-1.0/tutorials/Makefile.am
new file mode 100644
index 000000000..40441b3b9
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/tutorials/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS=lesson1
diff --git a/branches/paradiseo-moeo-1.0/tutorials/lesson1/FlowShopEA.param b/branches/paradiseo-moeo-1.0/tutorials/lesson1/FlowShopEA.param
new file mode 100644
index 000000000..c70b0b1a7
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/tutorials/lesson1/FlowShopEA.param
@@ -0,0 +1,51 @@
+
+###### General ######
+# --help=0 # -h : Prints this message
+# --stopOnUnknownParam=1 # Stop if unkown param entered
+# --seed=1165485212 # -S : Random number seed
+
+###### Evolution Engine ######
+--popSize=20 # -P : Population Size
+--selCrit=NSGA-II # -S : Multi-objective selection criterion: NSGA, NSGA-II, IBEA, ParetoRanking, ParetoSharing
+--nicheSize=1 # -n : Size of niche for NSGA-I or ParetoSharing
+--kappa=0.05 # -k : Scaling factor kappa for IBEA
+--indicator=Epsilon # -I : Binary quality indicator for IBEA : Epsilon, Hypervolume
+--rho=1.1 # -r : reference point for the hypervolume calculation (must not be smaller than 1)
+--selection=DetTour(2) # -s : Selection: Roulette, DetTour(T), StochTour(t) or Random
+--elitism=0 # -E : Use elitism in the selection process (individuals from the archive are randomly selected)
+--ratio=0.8 # Ratio from the population for elitism (must not be greater than 1)
+--nbOffspring=100% # -O : Nb of offspring (percentage or absolute)
+--replacement=Plus # -R : Replacement: Plus, DistinctPlus or Generational
+
+###### Output ######
+--useEval=1 # Use nb of eval. as counter (vs nb of gen.)
+--printPop=0 # Print sorted pop. every gen.
+
+###### Output - Disk ######
+--resDir=Res # Directory to store DISK outputs
+--eraseDir=1 # erase files in dirName if any
+--frontFileFrequency=1(0,1) # File save frequency in objective spaces (std::pairs of comma-separated objectives in 1 single parentheses std::pair)
+
+###### Output - Graphical ######
+--plotFront=0 # Objective plots (requires corresponding files - see frontFileFrequency
+
+###### Persistence ######
+# --Load= # -L : A save file to restart from
+--recomputeFitness=0 # -r : Recompute the fitness after re-loading the pop.?
+--saveFrequency=0 # Save every F generation (0 = only final state, absent = never)
+--saveTimeInterval=0 # Save every T seconds (0 or absent = never)
+--status=./FlowShopEA.status # Status file
+
+###### Representation ######
+--BenchmarkFile=benchmarks/020_05_01.txt # -B : Benchmark file name (benchmarks are available at www.lifl.fr/~basseur/BenchsUncertain/) REQUIRED
+
+###### Stopping criterion ######
+--maxGen=100 # -G : Maximum number of generations () = none)
+--CtrlC=1 # -C : Terminate current generation upon Ctrl C
+
+###### Variation Operators ######
+--crossRate=1 # Relative rate for the only crossover
+--shiftMutRate=0.5 # Relative rate for shift mutation
+--exchangeMutRate=0.5 # Relative rate for exchange mutation
+--pCross=0.25 # -c : Probability of Crossover
+--pMut=0.35 # -m : Probability of Mutation
diff --git a/branches/paradiseo-moeo-1.0/tutorials/lesson1/Makefile.am b/branches/paradiseo-moeo-1.0/tutorials/lesson1/Makefile.am
new file mode 100644
index 000000000..26370a030
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/tutorials/lesson1/Makefile.am
@@ -0,0 +1,9 @@
+
+noinst_PROGRAMS = FlowShopEA
+
+FlowShopEA_SOURCES = FlowShopEA.cpp
+
+LDADD = -L$(top_builddir)/src ${EO_DIR}/src/libeo.a ${EO_DIR}/src/utils/libeoutils.a
+
+INCLUDES = -I${EO_DIR}/src/ -I$(top_srcdir)/src
+
diff --git a/branches/paradiseo-moeo-1.0/tutorials/lesson1/benchmarks/020_05_01.txt b/branches/paradiseo-moeo-1.0/tutorials/lesson1/benchmarks/020_05_01.txt
new file mode 100644
index 000000000..2c2f78d86
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/tutorials/lesson1/benchmarks/020_05_01.txt
@@ -0,0 +1,63 @@
+20
+5
+873654221
+0
+468
+54 79 16 66 58
+1
+325
+83 3 89 58 56
+2
+923
+15 11 49 31 20
+3
+513
+71 99 15 68 85
+4
+1070
+77 56 89 78 53
+5
+690
+36 70 45 91 35
+6
+602
+53 99 60 13 53
+7
+289
+38 60 23 59 41
+8
+873
+27 5 57 49 69
+9
+342
+87 56 64 85 13
+10
+764
+76 3 7 85 86
+11
+268
+91 61 1 9 72
+12
+1158
+14 73 63 39 8
+13
+646
+29 75 41 41 49
+14
+1111
+12 47 63 56 47
+15
+965
+77 14 47 40 87
+16
+703
+32 21 26 54 58
+17
+1205
+87 86 75 77 18
+18
+334
+68 5 77 51 68
+19
+1111
+94 77 40 31 28
diff --git a/branches/paradiseo-moeo-1.0/tutorials/lesson1/benchmarks/020_05_02.txt b/branches/paradiseo-moeo-1.0/tutorials/lesson1/benchmarks/020_05_02.txt
new file mode 100644
index 000000000..c82c2d033
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/tutorials/lesson1/benchmarks/020_05_02.txt
@@ -0,0 +1,63 @@
+20
+5
+379008056
+0
+517
+26 59 78 88 69
+1
+461
+38 62 90 54 30
+2
+832
+27 44 64 47 61
+3
+653
+88 10 49 83 35
+4
+933
+95 23 47 84 53
+5
+811
+55 64 20 9 98
+6
+966
+54 47 61 30 94
+7
+448
+63 68 93 11 33
+8
+577
+23 54 36 92 77
+9
+1122
+45 9 47 63 31
+10
+666
+86 30 70 62 54
+11
+1189
+43 31 54 75 71
+12
+470
+43 92 87 48 78
+13
+475
+40 7 13 23 9
+14
+462
+37 14 40 85 79
+15
+866
+54 95 34 23 51
+16
+392
+35 76 55 4 76
+17
+310
+59 82 13 31 56
+18
+719
+43 91 11 13 80
+19
+1221
+50 37 5 98 72
diff --git a/branches/paradiseo-moeo-1.0/tutorials/lesson1/benchmarks/020_10_01.txt b/branches/paradiseo-moeo-1.0/tutorials/lesson1/benchmarks/020_10_01.txt
new file mode 100644
index 000000000..96bca095d
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/tutorials/lesson1/benchmarks/020_10_01.txt
@@ -0,0 +1,63 @@
+20
+10
+587595453
+0
+1250
+74 28 89 60 54 92 9 4 25 15
+1
+1371
+21 3 52 88 66 11 8 18 15 84
+2
+637
+58 27 56 26 12 54 88 25 91 8
+3
+616
+4 61 13 58 57 97 72 28 49 30
+4
+917
+21 34 7 76 70 57 27 95 56 95
+5
+937
+28 76 32 98 82 53 22 51 10 79
+6
+1435
+58 64 32 29 99 65 50 84 62 9
+7
+1197
+83 87 98 47 84 77 2 18 70 91
+8
+1301
+31 54 46 79 16 51 49 6 76 76
+9
+637
+61 98 60 26 41 36 82 90 99 26
+10
+749
+94 76 23 19 23 53 93 69 58 42
+11
+1223
+44 41 87 48 11 19 96 61 83 66
+12
+887
+97 70 7 95 68 54 43 57 84 70
+13
+1316
+94 43 36 78 58 86 13 5 64 91
+14
+1330
+66 42 26 77 30 40 60 75 74 67
+15
+1380
+6 79 85 90 5 56 11 4 14 3
+16
+767
+37 88 7 24 5 79 37 38 18 98
+17
+574
+22 15 34 10 39 74 91 28 48 4
+18
+1398
+99 49 36 85 58 24 84 4 96 71
+19
+1179
+83 72 48 55 31 3 67 80 86 62
diff --git a/branches/paradiseo-moeo-1.0/tutorials/lesson1/benchmarks/020_10_02.txt b/branches/paradiseo-moeo-1.0/tutorials/lesson1/benchmarks/020_10_02.txt
new file mode 100644
index 000000000..bf23361f5
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/tutorials/lesson1/benchmarks/020_10_02.txt
@@ -0,0 +1,63 @@
+20
+10
+1401007982
+0
+1279
+80 59 59 31 30 53 93 90 65 64
+1
+1481
+13 83 70 64 88 19 79 92 97 38
+2
+1157
+64 85 76 11 14 99 88 35 27 44
+3
+1391
+77 85 10 9 22 62 77 13 25 46
+4
+763
+17 70 65 32 93 88 94 75 61 66
+5
+1456
+78 35 19 58 48 93 39 55 24 31
+6
+900
+82 2 77 98 10 34 74 80 97 48
+7
+1047
+4 76 86 95 7 72 46 67 61 27
+8
+1355
+72 46 21 25 14 42 17 3 75 82
+9
+1262
+93 72 75 4 91 65 30 93 92 51
+10
+1329
+68 69 96 45 5 39 62 54 73 90
+11
+562
+25 46 3 60 43 79 77 67 21 63
+12
+684
+67 3 50 87 30 9 43 25 29 85
+13
+567
+80 57 57 31 79 26 98 77 3 36
+14
+765
+43 71 66 1 39 72 48 38 96 69
+15
+808
+93 77 84 96 34 29 14 98 51 67
+16
+999
+21 33 98 22 77 36 45 96 26 81
+17
+548
+33 49 55 95 81 48 25 20 44 18
+18
+577
+14 59 70 73 11 57 98 15 56 81
+19
+704
+30 82 32 77 10 95 30 36 31 72
diff --git a/branches/paradiseo-moeo-1.0/tutorials/lesson1/benchmarks/020_20_01.txt b/branches/paradiseo-moeo-1.0/tutorials/lesson1/benchmarks/020_20_01.txt
new file mode 100644
index 000000000..2ef8f0bee
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/tutorials/lesson1/benchmarks/020_20_01.txt
@@ -0,0 +1,63 @@
+20
+20
+479340445
+0
+1696
+50 78 36 85 9 75 46 73 71 7 49 3 60 12 75 31 70 20 88 9
+1
+1273
+90 56 43 88 92 64 94 3 49 40 49 53 88 47 19 61 78 78 30 41
+2
+1546
+39 9 10 60 98 96 6 56 36 33 15 59 15 46 60 47 41 38 34 22
+3
+1882
+34 43 19 98 44 95 19 73 87 64 18 7 26 17 87 32 9 26 33 34
+4
+1117
+66 84 55 4 51 22 20 80 8 5 65 65 11 43 27 34 47 64 21 83
+5
+1181
+81 73 48 99 8 41 51 82 25 25 55 58 16 16 48 69 94 62 7 55
+6
+1416
+27 66 85 53 31 26 85 36 76 89 1 24 55 91 72 32 26 11 94 3
+7
+1635
+48 38 70 21 15 33 92 98 73 95 79 55 59 94 88 1 65 38 10 8
+8
+1723
+46 83 82 33 47 68 43 90 80 58 10 26 81 73 48 1 17 68 73 75
+9
+1932
+68 57 39 53 31 9 75 46 6 83 37 40 53 89 59 80 42 37 85 30
+10
+1219
+48 97 91 63 80 81 70 10 6 28 77 89 92 12 74 19 59 74 82 57
+11
+1521
+92 52 82 18 83 28 70 46 33 35 80 94 23 58 86 57 80 9 62 65
+12
+1322
+78 77 85 45 20 61 36 65 79 74 79 51 55 25 49 98 7 65 99 89
+13
+1057
+84 13 17 29 84 69 31 83 10 5 84 74 79 24 94 37 75 16 67 60
+14
+1922
+93 12 6 43 69 37 76 75 93 6 93 54 13 55 15 31 63 38 61 90
+15
+1130
+39 2 54 41 49 57 63 47 65 9 21 86 89 1 95 51 96 85 10 84
+16
+1411
+43 65 87 80 93 36 89 61 26 3 85 22 2 67 41 66 7 50 4 74
+17
+1840
+1 93 85 4 39 80 46 28 73 2 64 83 17 3 94 38 10 62 70 17
+18
+1741
+65 39 4 31 13 96 25 59 42 35 46 19 97 1 15 62 47 39 31 2
+19
+1377
+87 1 72 19 88 74 88 22 18 41 35 44 41 71 71 72 38 97 49 19
diff --git a/branches/paradiseo-moeo-1.0/tutorials/lesson1/benchmarks/050_05_01.txt b/branches/paradiseo-moeo-1.0/tutorials/lesson1/benchmarks/050_05_01.txt
new file mode 100644
index 000000000..5f4b46f37
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/tutorials/lesson1/benchmarks/050_05_01.txt
@@ -0,0 +1,153 @@
+50
+5
+1328042058
+0
+1290
+75 26 48 26 77
+1
+2352
+87 37 4 67 94
+2
+362
+13 25 92 4 9
+3
+305
+11 95 92 14 57
+4
+262
+41 49 72 93 29
+5
+1250
+43 12 45 54 79
+6
+2170
+93 59 5 21 55
+7
+1601
+69 17 98 20 73
+8
+2039
+80 46 93 6 65
+9
+1628
+13 20 17 18 86
+10
+483
+24 52 79 75 25
+11
+285
+72 44 11 25 39
+12
+1092
+38 92 16 16 76
+13
+936
+81 75 89 77 24
+14
+2349
+83 95 81 28 38
+15
+473
+88 33 92 24 5
+16
+2325
+26 10 45 15 91
+17
+747
+6 45 61 77 29
+18
+970
+89 2 39 36 22
+19
+434
+67 62 28 16 27
+20
+1258
+70 62 94 32 39
+21
+2405
+30 82 87 46 31
+22
+862
+89 29 23 21 46
+23
+298
+30 29 1 81 18
+24
+2014
+68 94 55 28 93
+25
+2608
+21 20 91 70 58
+26
+1737
+78 42 67 89 85
+27
+2214
+46 80 91 54 58
+28
+1910
+99 94 4 96 97
+29
+2245
+10 35 60 62 10
+30
+2211
+17 8 38 46 79
+31
+547
+23 41 25 60 93
+32
+2237
+83 65 90 19 2
+33
+1327
+47 4 93 97 87
+34
+700
+86 71 13 13 17
+35
+1011
+18 30 65 7 18
+36
+2001
+67 14 25 44 10
+37
+1230
+46 32 34 7 50
+38
+1020
+4 50 47 73 8
+39
+1918
+14 30 98 15 26
+40
+1001
+4 27 91 66 14
+41
+1383
+20 98 11 70 21
+42
+1229
+88 39 46 97 15
+43
+2594
+50 84 50 33 10
+44
+403
+84 65 77 97 85
+45
+1515
+58 12 5 64 46
+46
+431
+93 58 14 73 42
+47
+1971
+76 45 47 28 18
+48
+939
+50 49 80 4 36
+49
+2028
+30 15 45 87 2
diff --git a/branches/paradiseo-moeo-1.0/tutorials/lesson1/benchmarks/050_10_01.txt b/branches/paradiseo-moeo-1.0/tutorials/lesson1/benchmarks/050_10_01.txt
new file mode 100644
index 000000000..17f3cb117
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/tutorials/lesson1/benchmarks/050_10_01.txt
@@ -0,0 +1,153 @@
+50
+10
+1958948863
+0
+793
+46 61 3 51 37 79 83 22 27 24
+1
+2280
+52 87 1 24 16 93 87 29 92 47
+2
+939
+79 51 58 21 42 68 38 99 75 39
+3
+2591
+45 25 85 57 47 75 38 25 94 66
+4
+1540
+97 73 33 69 94 37 86 98 18 41
+5
+2386
+10 93 71 51 14 44 67 55 41 46
+6
+812
+44 28 58 50 94 34 23 80 37 24
+7
+2524
+24 90 56 51 34 39 19 82 58 23
+8
+1370
+85 94 64 21 72 76 97 33 56 68
+9
+1319
+75 59 43 19 36 62 78 68 20 50
+10
+2388
+66 64 48 63 88 74 66 47 2 93
+11
+961
+49 2 69 91 51 28 67 74 39 22
+12
+2831
+95 16 96 11 41 78 7 26 91 64
+13
+2790
+61 35 35 6 71 43 23 61 81 81
+14
+2076
+19 53 82 31 94 98 67 95 33 94
+15
+2519
+47 40 53 63 99 83 8 55 14 97
+16
+1981
+84 81 64 36 11 91 77 11 88 54
+17
+695
+13 26 11 39 97 27 71 42 22 82
+18
+2133
+11 85 61 57 44 6 85 72 36 11
+19
+1871
+19 4 36 47 77 82 29 14 65 91
+20
+1495
+98 4 53 56 69 60 49 8 79 23
+21
+754
+2 10 87 65 91 44 3 98 23 32
+22
+783
+85 63 88 59 38 43 94 90 66 26
+23
+984
+44 96 10 4 25 76 76 36 5 22
+24
+2004
+7 55 32 10 87 99 95 75 15 12
+25
+2269
+73 71 38 12 7 66 48 69 51 23
+26
+1771
+19 66 25 62 66 11 4 26 2 34
+27
+2030
+69 94 24 43 54 35 37 24 81 87
+28
+2603
+12 7 90 49 86 52 82 55 12 59
+29
+2150
+73 15 7 54 49 8 57 98 40 2
+30
+2157
+85 11 11 87 3 40 61 86 59 38
+31
+2187
+23 99 49 29 48 62 6 30 32 84
+32
+937
+53 37 2 2 44 25 97 92 16 62
+33
+728
+16 50 76 18 93 24 5 94 87 10
+34
+510
+88 56 17 75 37 30 27 66 78 11
+35
+2786
+8 69 32 39 82 1 95 47 41 93
+36
+2134
+26 22 39 77 31 73 46 3 43 57
+37
+1046
+42 56 9 69 59 27 92 41 94 81
+38
+2849
+58 67 83 15 78 16 46 41 1 10
+39
+1956
+63 63 69 78 33 91 52 47 93 40
+40
+2456
+7 96 67 68 36 33 8 89 22 62
+41
+1105
+2 74 28 37 3 11 11 28 93 49
+42
+1560
+44 4 88 22 58 99 7 39 62 90
+43
+1745
+38 42 23 41 10 2 54 80 53 34
+44
+2216
+24 40 91 92 98 60 72 47 30 11
+45
+1157
+76 30 71 67 6 90 57 57 34 81
+46
+1317
+85 93 3 24 44 36 85 74 27 51
+47
+2372
+61 36 26 87 62 62 22 38 30 21
+48
+777
+32 25 41 91 24 15 87 59 54 39
+49
+972
+90 87 96 31 94 3 65 5 77 27
diff --git a/branches/paradiseo-moeo-1.0/tutorials/lesson1/benchmarks/050_20_01.txt b/branches/paradiseo-moeo-1.0/tutorials/lesson1/benchmarks/050_20_01.txt
new file mode 100644
index 000000000..23ccddab3
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/tutorials/lesson1/benchmarks/050_20_01.txt
@@ -0,0 +1,153 @@
+50
+20
+1539989115
+0
+2509
+52 63 82 16 63 94 79 22 80 96 53 54 71 27 95 3 92 80 61 74
+1
+2039
+95 99 21 26 55 34 21 6 13 3 19 67 90 93 53 80 62 38 86 38
+2
+3096
+42 69 79 46 59 89 93 24 64 50 99 25 59 49 54 78 11 55 16 4
+3
+2950
+75 70 95 66 35 62 32 55 77 57 62 77 82 63 22 32 83 34 42 31
+4
+1249
+44 53 46 76 21 47 8 48 17 66 88 38 22 65 84 53 87 85 14 62
+5
+2481
+57 21 23 31 59 66 45 57 78 84 93 98 88 34 54 43 66 44 92 39
+6
+3193
+89 10 40 36 78 76 37 78 82 98 34 96 35 10 2 85 98 47 67 97
+7
+3253
+53 31 95 8 25 15 78 5 4 55 72 20 49 56 80 19 42 66 77 57
+8
+2123
+84 80 87 37 30 18 26 50 72 70 42 15 78 51 84 48 23 19 46 9
+9
+2390
+62 18 37 21 38 54 98 83 93 32 65 36 69 97 66 49 45 66 41 54
+10
+1764
+91 5 24 3 78 24 17 70 68 31 39 65 76 52 25 66 52 61 78 13
+11
+2940
+14 18 24 76 79 55 25 21 25 64 79 97 2 46 16 22 6 60 3 47
+12
+1635
+95 17 65 67 58 96 21 71 67 11 9 27 14 16 79 37 3 98 72 6
+13
+3171
+89 71 62 5 44 10 28 58 80 9 26 25 3 50 90 51 64 82 95 70
+14
+2670
+4 90 19 47 38 12 68 36 43 32 72 61 22 96 51 82 55 79 53 19
+15
+2932
+95 93 67 72 76 96 24 50 93 58 29 24 26 85 29 59 97 71 59 97
+16
+2054
+2 14 66 66 70 53 62 31 21 98 36 97 44 61 29 88 83 28 34 41
+17
+3238
+97 49 6 56 72 92 89 86 33 95 48 61 1 76 90 77 42 74 66 1
+18
+2466
+68 52 65 95 85 77 60 29 14 25 57 75 4 30 83 19 81 27 42 57
+19
+2384
+20 7 59 49 8 6 64 30 30 4 95 92 16 90 83 32 92 33 63 60
+20
+3473
+33 78 2 47 10 91 38 93 59 45 93 73 55 42 19 52 68 13 27 62
+21
+3290
+51 57 67 26 84 14 90 49 83 60 79 21 43 88 95 9 46 9 92 14
+22
+2086
+98 41 82 81 42 41 87 83 85 87 88 29 87 37 87 96 56 12 8 90
+23
+2560
+8 75 90 56 67 30 1 89 85 31 77 3 35 43 12 23 88 51 65 76
+24
+3253
+85 98 30 76 20 85 99 44 70 1 94 96 76 88 34 64 50 16 34 12
+25
+3205
+86 93 63 66 24 17 34 38 35 96 39 51 98 91 23 22 13 49 6 89
+26
+2534
+73 33 5 36 75 23 9 62 2 22 74 26 78 14 44 37 23 83 42 37
+27
+2039
+4 75 93 53 23 60 22 45 76 95 46 44 81 63 30 3 13 48 39 35
+28
+2273
+40 68 53 26 33 76 74 22 46 73 17 56 48 65 82 52 49 13 2 91
+29
+2062
+98 33 85 52 60 39 14 85 72 77 30 31 25 74 83 44 18 78 7 69
+30
+1909
+12 60 81 29 20 85 14 39 69 30 62 64 81 71 42 11 50 96 85 55
+31
+2432
+59 82 73 36 75 10 84 98 46 88 77 38 27 8 56 21 94 77 32 48
+32
+2624
+44 24 34 68 83 65 75 56 3 14 43 44 84 39 89 85 71 68 14 56
+33
+3325
+46 99 74 21 26 15 37 68 57 22 98 46 59 95 38 6 64 88 74 84
+34
+3427
+2 4 13 71 92 55 32 84 71 93 48 66 98 82 96 40 31 77 59 22
+35
+1318
+41 97 78 61 29 41 29 77 77 48 14 31 14 17 10 68 21 76 95 51
+36
+1539
+28 24 35 71 39 28 32 67 33 10 45 48 32 38 3 30 2 73 48 43
+37
+3223
+83 50 20 69 14 93 89 53 49 7 25 27 95 69 53 35 63 92 37 50
+38
+1703
+28 55 16 28 74 88 12 46 59 14 98 82 30 17 97 58 58 72 59 62
+39
+1051
+21 91 48 86 66 27 47 24 82 91 30 51 13 24 11 31 36 87 4 61
+40
+1512
+80 46 12 27 86 77 19 52 59 5 90 90 68 66 65 11 64 66 42 10
+41
+2589
+71 58 11 41 10 81 97 96 70 43 92 63 19 75 47 11 52 98 93 87
+42
+3248
+4 17 80 86 27 19 7 2 76 30 35 85 57 52 76 6 8 40 32 99
+43
+2047
+60 47 9 55 8 76 12 88 10 79 13 36 65 59 22 59 94 31 30 40
+44
+3333
+34 82 24 17 7 55 43 33 65 39 75 69 13 4 17 64 51 75 16 91
+45
+1760
+55 6 76 62 97 67 89 27 19 34 55 67 63 73 14 65 36 45 95 64
+46
+2333
+53 15 32 96 84 65 14 49 77 77 80 81 26 56 11 23 82 98 58 62
+47
+2400
+96 91 35 59 56 8 33 78 86 81 67 18 96 19 69 80 30 90 12 53
+48
+2142
+37 74 66 53 61 18 56 82 21 11 3 81 53 39 91 75 17 4 95 33
+49
+1231
+37 42 48 93 9 56 57 65 75 10 93 72 94 51 53 63 21 23 21 16
diff --git a/branches/paradiseo-moeo-1.0/tutorials/lesson1/benchmarks/100_05_01.txt b/branches/paradiseo-moeo-1.0/tutorials/lesson1/benchmarks/100_05_01.txt
new file mode 100644
index 000000000..f0d8d9b38
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/tutorials/lesson1/benchmarks/100_05_01.txt
@@ -0,0 +1,303 @@
+100
+5
+896678084
+0
+1682
+73 34 8 62 10
+1
+4503
+84 46 37 86 60
+2
+1249
+57 97 38 46 34
+3
+4984
+52 88 30 3 96
+4
+2923
+66 52 20 22 79
+5
+2401
+67 49 68 33 62
+6
+1978
+33 88 4 90 6
+7
+5318
+62 15 78 94 15
+8
+4769
+65 55 41 98 94
+9
+2093
+7 6 2 9 39
+10
+2438
+6 77 62 84 85
+11
+3143
+31 49 38 69 17
+12
+698
+42 46 95 26 55
+13
+621
+82 14 82 22 59
+14
+2463
+48 35 96 49 48
+15
+3865
+45 40 56 90 11
+16
+1563
+79 1 61 81 63
+17
+1461
+86 70 34 12 98
+18
+2285
+10 46 1 54 33
+19
+4381
+47 28 9 53 49
+20
+1057
+67 73 57 18 41
+21
+3190
+86 24 80 56 82
+22
+4493
+64 44 58 43 12
+23
+4604
+38 55 7 50 61
+24
+1592
+13 94 56 82 94
+25
+4645
+69 52 31 18 80
+26
+2729
+4 40 92 89 84
+27
+1925
+21 76 84 49 18
+28
+3843
+25 92 25 20 68
+29
+4188
+74 22 20 76 6
+30
+2635
+11 46 65 90 98
+31
+3773
+85 19 36 64 47
+32
+269
+50 18 67 89 6
+33
+307
+21 50 96 16 55
+34
+907
+93 31 35 3 73
+35
+288
+98 41 59 12 70
+36
+5211
+91 51 76 45 56
+37
+331
+26 73 66 67 46
+38
+1499
+4 22 83 97 50
+39
+1119
+28 21 37 80 90
+40
+4399
+61 79 33 97 89
+41
+1306
+8 93 2 92 88
+42
+1149
+55 98 95 56 50
+43
+3919
+68 89 20 50 99
+44
+3875
+30 44 84 95 41
+45
+3485
+26 64 43 25 36
+46
+2800
+81 93 4 52 16
+47
+1893
+95 66 44 21 84
+48
+2341
+49 14 74 47 98
+49
+874
+6 10 92 4 44
+50
+3355
+82 36 55 67 42
+51
+345
+71 36 98 62 43
+52
+1530
+61 69 8 63 62
+53
+3516
+84 79 30 25 49
+54
+3194
+29 90 18 3 22
+55
+985
+44 51 28 55 16
+56
+1638
+83 81 54 87 14
+57
+2970
+12 16 68 84 55
+58
+4265
+54 28 42 28 45
+59
+3494
+19 26 28 73 20
+60
+5134
+52 97 12 8 35
+61
+3520
+59 33 57 38 89
+62
+3570
+74 77 81 80 7
+63
+1335
+42 68 19 53 64
+64
+313
+60 28 16 70 36
+65
+1031
+43 46 88 9 5
+66
+4360
+80 16 75 87 63
+67
+2814
+34 96 11 33 8
+68
+571
+74 59 57 11 76
+69
+538
+46 56 99 65 95
+70
+2856
+40 4 4 92 40
+71
+747
+27 52 51 34 51
+72
+3321
+79 89 26 64 98
+73
+612
+1 84 6 96 77
+74
+4517
+98 42 16 67 92
+75
+1532
+44 37 71 54 35
+76
+2848
+8 90 52 26 3
+77
+4701
+55 51 96 32 56
+78
+263
+55 84 89 10 1
+79
+5340
+27 16 79 91 17
+80
+3979
+69 39 91 90 70
+81
+4804
+79 16 57 31 45
+82
+1574
+97 37 2 7 87
+83
+3644
+39 19 33 6 37
+84
+1512
+54 15 42 77 70
+85
+4445
+75 68 1 91 84
+86
+3253
+88 7 40 42 69
+87
+5334
+87 58 76 5 7
+88
+2338
+97 47 85 46 5
+89
+1071
+4 27 99 54 97
+90
+2398
+79 82 65 56 47
+91
+1675
+59 72 98 1 12
+92
+4974
+7 1 78 24 54
+93
+1785
+89 7 61 62 84
+94
+3391
+61 22 83 47 49
+95
+4517
+42 40 30 63 89
+96
+2909
+79 59 14 39 86
+97
+2733
+85 16 62 63 37
+98
+853
+66 7 41 95 52
+99
+4261
+99 72 91 45 85
diff --git a/branches/paradiseo-moeo-1.0/tutorials/lesson1/benchmarks/100_10_01.txt b/branches/paradiseo-moeo-1.0/tutorials/lesson1/benchmarks/100_10_01.txt
new file mode 100644
index 000000000..480d6be62
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/tutorials/lesson1/benchmarks/100_10_01.txt
@@ -0,0 +1,303 @@
+100
+10
+1539989115
+0
+3490
+52 82 63 79 80 53 71 95 92 61
+1
+2540
+95 21 55 21 13 19 90 53 62 86
+2
+4675
+42 79 59 93 64 99 59 54 11 16
+3
+4381
+75 95 35 32 77 62 82 22 83 42
+4
+945
+44 46 21 8 17 88 22 84 87 14
+5
+3435
+57 23 59 45 78 93 88 54 66 92
+6
+4873
+89 40 78 37 82 34 35 2 98 67
+7
+4993
+53 95 25 78 4 72 49 80 42 77
+8
+2710
+84 87 30 26 72 42 78 84 23 46
+9
+3251
+62 37 38 98 93 65 69 66 45 41
+10
+1985
+91 24 78 17 68 39 76 25 52 78
+11
+4361
+14 24 79 25 25 79 2 16 6 3
+12
+1726
+95 65 58 21 67 9 14 79 3 72
+13
+4828
+89 62 44 28 80 26 3 90 64 95
+14
+3816
+4 19 38 68 43 72 22 51 55 53
+15
+4345
+95 67 76 24 93 29 26 29 97 59
+16
+2572
+2 66 70 62 21 36 44 29 83 34
+17
+4963
+97 6 72 89 33 48 1 90 42 66
+18
+3403
+68 65 85 60 14 57 4 83 81 42
+19
+3238
+20 59 8 64 30 95 16 83 92 63
+20
+5437
+33 2 10 38 59 93 55 19 68 27
+21
+5068
+51 67 84 90 83 79 43 95 46 92
+22
+2635
+98 82 42 87 85 88 87 87 56 8
+23
+3593
+8 90 67 1 85 77 35 12 88 65
+24
+4993
+85 30 20 99 70 94 76 34 50 34
+25
+4897
+86 63 24 34 35 39 98 23 13 6
+26
+3542
+73 5 75 9 2 74 78 44 23 42
+27
+2541
+4 93 23 22 76 46 81 30 13 39
+28
+3014
+40 53 33 74 46 17 48 82 49 2
+29
+2587
+98 85 60 14 72 30 25 83 18 7
+30
+2278
+12 81 20 14 69 62 81 42 50 85
+31
+3336
+59 73 75 84 46 77 27 56 94 32
+32
+3723
+44 34 83 75 3 43 84 89 71 14
+33
+5138
+46 74 26 37 57 98 59 38 64 74
+34
+5345
+2 13 92 32 71 48 98 96 31 59
+35
+1084
+41 78 29 29 77 14 14 10 21 95
+36
+1531
+28 35 39 32 33 45 32 3 2 48
+37
+4932
+83 20 14 89 49 25 95 53 63 37
+38
+1863
+28 16 74 12 59 98 30 97 58 59
+39
+545
+21 48 66 47 82 30 13 11 36 4
+40
+1477
+80 12 86 19 59 90 68 65 64 42
+41
+3653
+71 11 10 97 70 92 19 47 52 93
+42
+4983
+4 80 27 7 76 35 57 76 8 32
+43
+2558
+60 9 8 12 10 13 65 22 94 30
+44
+5156
+34 24 7 43 65 75 13 17 51 16
+45
+1977
+55 76 97 89 19 55 63 14 36 95
+46
+3136
+53 32 84 14 77 80 26 11 82 58
+47
+3271
+96 35 56 33 86 67 96 69 30 12
+48
+2748
+37 66 61 56 21 3 53 91 17 95
+49
+909
+37 48 9 57 75 93 94 53 21 21
+50
+4366
+63 16 94 22 96 54 27 3 80 74
+51
+4943
+99 26 34 6 3 67 93 80 38 38
+52
+4596
+69 46 89 24 50 25 49 78 55 4
+53
+1793
+70 66 62 55 57 77 63 32 34 31
+54
+4596
+53 76 47 48 66 38 65 53 85 62
+55
+3717
+21 31 66 57 84 98 34 43 44 39
+56
+4624
+10 36 76 78 98 96 10 85 47 97
+57
+5212
+31 8 15 5 55 20 56 19 66 57
+58
+5604
+80 37 18 50 70 15 51 48 19 9
+59
+2110
+18 21 54 83 32 36 97 49 66 54
+60
+2568
+5 3 24 70 31 65 52 66 61 13
+61
+5330
+18 76 55 21 64 97 46 22 60 47
+62
+676
+17 67 96 71 11 27 16 37 98 6
+63
+1603
+71 5 10 58 9 25 50 51 82 70
+64
+1085
+90 47 12 36 32 61 96 82 79 19
+65
+5128
+93 72 96 50 58 24 85 59 71 97
+66
+938
+14 66 53 31 98 97 61 88 28 41
+67
+4778
+49 56 92 86 95 61 76 77 74 1
+68
+1986
+52 95 77 29 25 75 30 19 27 57
+69
+2115
+7 49 6 30 4 92 90 32 33 60
+70
+616
+78 47 91 93 45 73 42 52 13 62
+71
+534
+57 26 14 49 60 21 88 9 9 14
+72
+1231
+41 81 41 83 87 29 37 96 12 90
+73
+3376
+75 56 30 89 31 3 43 23 51 76
+74
+2922
+98 76 85 44 1 96 88 64 16 12
+75
+2152
+93 66 17 38 96 51 91 22 49 89
+76
+1813
+33 36 23 62 22 26 14 37 83 37
+77
+3561
+75 53 60 45 95 44 63 3 48 35
+78
+4603
+68 26 76 22 73 56 65 52 13 91
+79
+2813
+33 52 39 85 77 31 74 44 78 69
+80
+528
+60 29 85 39 30 64 71 11 96 55
+81
+1112
+82 36 10 98 88 38 8 21 77 48
+82
+4387
+24 68 65 56 14 44 39 85 68 56
+83
+4573
+99 21 15 68 22 46 95 6 88 84
+84
+5585
+4 71 55 84 93 66 82 40 77 22
+85
+2680
+97 61 41 77 48 31 17 68 76 51
+86
+3262
+24 71 28 67 10 48 38 30 73 43
+87
+3913
+50 69 93 53 7 27 69 35 92 50
+88
+1749
+55 28 88 46 14 82 17 58 72 62
+89
+2369
+91 86 27 24 91 51 24 31 87 61
+90
+888
+46 27 77 52 5 90 66 11 66 10
+91
+3107
+58 41 81 96 43 63 75 11 98 87
+92
+4964
+17 86 19 2 30 85 52 6 40 99
+93
+5249
+47 55 76 88 79 36 59 59 31 40
+94
+5632
+82 17 55 33 39 69 4 64 75 91
+95
+893
+6 62 67 27 34 67 73 65 45 64
+96
+3432
+15 96 65 49 77 81 56 23 98 62
+97
+5507
+91 59 8 78 81 18 19 80 90 53
+98
+2007
+74 53 18 82 11 81 39 75 4 33
+99
+5336
+42 93 56 65 10 72 51 63 23 16
diff --git a/branches/paradiseo-moeo-1.0/tutorials/lesson1/benchmarks/100_20_01.txt b/branches/paradiseo-moeo-1.0/tutorials/lesson1/benchmarks/100_20_01.txt
new file mode 100644
index 000000000..f063c0f7c
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/tutorials/lesson1/benchmarks/100_20_01.txt
@@ -0,0 +1,303 @@
+100
+20
+450926852
+0
+1420
+12 27 24 42 5 27 51 48 42 31 48 51 8 1 1 28 4 44 6 57
+1
+1890
+72 97 57 16 42 69 9 44 18 49 92 84 37 77 59 81 40 6 49 88
+2
+5212
+29 53 68 44 47 38 22 73 31 78 43 28 33 92 53 96 5 18 84 88
+3
+2835
+16 16 58 75 47 66 15 95 18 23 35 63 4 57 22 99 37 51 72 43
+4
+4466
+22 36 76 32 47 21 84 72 55 37 7 86 8 46 10 79 80 77 39 25
+5
+5004
+61 28 70 66 78 65 38 12 82 34 51 99 38 75 48 97 46 47 51 81
+6
+1562
+69 50 72 31 94 3 71 30 64 43 85 27 97 2 94 15 14 27 77 3
+7
+1927
+71 41 56 6 18 7 11 22 36 7 66 24 75 14 46 6 81 17 59 3
+8
+2807
+86 42 56 6 14 10 45 25 48 69 87 36 76 14 57 77 16 42 97 78
+9
+2057
+16 86 55 52 97 11 48 92 74 97 71 83 93 79 55 98 10 84 5 97
+10
+5762
+54 2 89 7 54 41 29 5 17 15 16 24 69 64 66 5 79 3 83 74
+11
+5182
+53 45 23 92 73 64 31 44 60 38 40 54 10 8 69 51 35 69 51 71
+12
+5558
+64 86 42 45 94 9 14 90 18 80 22 34 25 73 7 51 41 3 9 50
+13
+2591
+96 43 26 70 17 15 56 35 88 78 12 49 40 15 13 60 83 6 9 70
+14
+4353
+79 92 87 72 97 71 59 24 37 89 2 43 88 71 64 17 13 94 59 23
+15
+4442
+68 73 17 48 7 86 35 64 29 95 90 5 90 6 83 98 93 58 30 43
+16
+2375
+98 99 38 86 94 2 7 82 19 1 63 70 57 54 39 46 55 65 86 51
+17
+3311
+87 84 24 63 94 26 20 7 51 18 52 56 39 59 46 87 48 36 49 97
+18
+2369
+40 83 82 61 68 57 48 34 20 11 15 71 29 49 59 44 35 28 46 57
+19
+4728
+74 61 55 92 4 78 88 91 7 11 6 12 97 38 36 18 75 68 13 77
+20
+5437
+22 7 47 73 60 84 54 59 43 92 18 30 51 21 69 71 66 73 45 90
+21
+3616
+23 8 7 49 70 20 30 5 77 99 87 77 97 60 47 93 82 81 51 58
+22
+4472
+47 62 99 53 68 21 81 47 95 81 66 55 5 8 83 97 3 12 68 75
+23
+2738
+55 3 89 20 22 3 2 96 92 79 7 92 75 35 25 44 79 89 82 4
+24
+1604
+21 21 20 97 17 39 1 7 27 53 43 78 91 81 12 18 78 53 6 12
+25
+3121
+90 50 65 58 59 64 78 53 70 47 27 79 80 96 28 59 48 14 99 2
+26
+2296
+68 71 3 59 98 51 8 60 91 48 78 52 81 61 30 9 99 88 12 4
+27
+2107
+14 95 45 29 55 83 8 77 74 32 80 19 60 89 49 45 91 78 8 28
+28
+5637
+42 70 89 98 76 12 71 61 62 58 73 16 97 58 81 78 29 63 36 54
+29
+1686
+41 60 96 61 3 16 60 14 80 33 86 21 14 32 56 67 87 81 24 39
+30
+2186
+40 4 16 83 21 3 41 88 85 65 82 37 2 59 96 65 27 29 82 30
+31
+5311
+63 58 42 8 10 1 39 97 8 86 33 85 55 89 89 50 2 15 73 71
+32
+3210
+23 16 70 83 11 88 8 92 39 60 92 56 97 99 73 87 48 81 66 89
+33
+1223
+75 30 69 73 44 80 96 65 85 47 8 29 60 7 52 29 33 84 69 33
+34
+2856
+4 80 77 2 29 77 3 73 83 89 87 56 8 79 12 80 92 36 71 85
+35
+4618
+31 71 46 56 43 2 79 19 76 40 64 23 30 38 98 14 15 8 70 2
+36
+1981
+87 59 20 7 60 14 48 99 31 72 7 19 87 1 12 70 55 60 61 69
+37
+2755
+25 75 71 15 14 60 23 92 12 54 26 52 42 67 40 10 24 24 42 20
+38
+1976
+47 52 91 55 46 45 38 19 69 29 79 39 16 63 70 30 59 57 77 64
+39
+1153
+70 25 8 3 3 39 85 66 26 57 49 4 56 42 35 19 41 87 10 94
+40
+5686
+1 86 34 73 60 32 32 25 54 93 71 46 86 3 58 51 49 61 2 3
+41
+4817
+49 48 72 13 72 97 69 79 91 65 72 59 4 29 95 4 88 57 6 41
+42
+1305
+59 53 40 47 90 98 56 36 61 39 69 22 30 23 41 23 67 85 24 37
+43
+4539
+11 54 82 76 1 65 99 10 27 8 30 76 15 21 71 9 49 45 97 36
+44
+4894
+93 98 60 15 42 86 51 23 88 87 28 34 24 25 90 62 81 69 15 74
+45
+2853
+38 36 59 43 74 6 59 37 53 57 46 63 23 48 3 30 89 15 91 53
+46
+1815
+5 9 59 44 54 14 47 76 47 5 75 32 57 33 68 20 43 7 32 49
+47
+5816
+43 78 43 13 41 99 79 83 39 56 78 72 81 92 5 69 24 87 68 77
+48
+5297
+82 80 72 16 15 93 67 58 14 80 34 92 77 2 18 88 70 58 17 13
+49
+4830
+33 88 10 18 38 54 83 99 78 2 4 72 43 12 26 22 74 61 1 37
+50
+4903
+26 52 63 16 24 54 58 29 90 17 23 26 82 32 2 43 44 82 49 34
+51
+3618
+89 30 67 18 91 92 49 35 90 84 69 46 97 38 21 63 23 73 25 31
+52
+4572
+86 62 12 3 49 57 50 49 50 86 33 30 3 67 86 67 89 84 46 15
+53
+5078
+10 8 41 11 23 39 19 89 64 65 11 49 46 93 8 22 96 63 37 32
+54
+1714
+16 45 5 98 63 13 64 79 94 53 5 3 86 80 33 82 80 14 56 45
+55
+1214
+72 77 25 9 88 70 5 82 79 5 54 81 62 75 88 41 44 73 50 50
+56
+2317
+96 90 67 28 1 73 5 92 10 16 42 4 26 59 33 69 69 84 9 81
+57
+1939
+47 52 95 44 30 16 52 45 18 58 12 46 56 51 65 81 7 9 62 46
+58
+4684
+9 39 46 14 85 43 15 42 7 60 40 95 67 7 8 21 10 38 10 93
+59
+2148
+56 95 37 39 22 9 26 21 26 78 30 20 87 65 89 54 15 67 89 13
+60
+4555
+8 86 41 76 94 2 67 51 51 25 51 56 46 6 46 42 55 76 66 47
+61
+5302
+69 15 2 92 39 76 11 30 23 71 94 57 66 59 76 53 27 18 98 50
+62
+1794
+87 98 25 59 70 38 77 70 43 93 24 85 53 30 57 52 55 70 10 70
+63
+2125
+84 59 99 95 85 66 74 2 95 99 28 31 34 67 51 26 2 69 70 21
+64
+3571
+62 22 48 11 7 21 88 20 57 6 84 44 52 41 58 69 82 4 92 41
+65
+5197
+52 43 24 55 65 32 83 82 30 62 69 1 81 32 62 80 42 58 36 12
+66
+1470
+82 85 18 56 43 78 96 13 86 60 44 11 68 63 59 46 88 66 82 18
+67
+2420
+66 93 10 16 4 41 73 92 80 33 98 72 48 7 71 10 84 11 54 28
+68
+4451
+67 6 23 56 60 52 59 91 55 57 36 6 4 8 12 81 38 1 34 22
+69
+1234
+33 46 66 23 90 88 94 2 76 79 21 68 25 89 11 99 69 51 34 60
+70
+1487
+3 51 82 84 73 76 15 80 12 7 9 62 76 51 82 6 31 38 5 69
+71
+5745
+53 97 84 22 21 14 50 38 91 69 48 18 46 81 56 90 5 16 12 49
+72
+1472
+95 79 14 32 25 86 20 54 95 82 30 21 13 9 57 79 3 81 3 38
+73
+5132
+42 46 13 40 33 35 54 45 28 26 15 48 72 13 53 34 37 39 56 80
+74
+3842
+59 71 88 47 48 81 16 19 12 41 21 32 72 27 45 56 14 56 44 52
+75
+3269
+77 18 7 92 25 32 33 65 18 52 43 42 82 74 96 75 35 83 41 45
+76
+4366
+38 33 40 61 27 75 9 35 80 38 91 79 32 59 31 54 61 27 14 34
+77
+4912
+12 13 20 51 37 38 74 66 32 21 49 74 25 98 39 94 43 29 25 3
+78
+3383
+1 3 68 74 63 55 11 26 67 84 86 82 58 31 12 84 38 93 78 61
+79
+4632
+66 32 22 85 28 96 21 18 2 74 36 3 17 98 13 55 48 70 25 96
+80
+2775
+24 28 92 6 88 19 97 32 4 76 41 64 99 48 8 64 89 64 89 99
+81
+5614
+17 48 53 13 27 35 15 51 30 16 10 90 54 74 49 14 86 22 83 49
+82
+3465
+58 8 16 32 94 41 43 23 64 75 75 10 81 76 4 18 37 84 78 78
+83
+1004
+71 42 10 8 20 77 2 18 69 75 56 72 73 75 33 6 20 25 23 34
+84
+1425
+88 26 23 43 54 36 1 87 76 36 70 2 93 78 22 27 33 73 51 78
+85
+1759
+63 26 88 30 17 24 74 74 92 79 73 49 73 11 30 20 1 81 7 79
+86
+5341
+60 95 65 53 74 52 37 10 50 71 57 88 79 71 34 54 8 10 20 64
+87
+1080
+86 44 11 24 35 60 61 76 35 82 51 53 54 54 19 30 61 46 30 55
+88
+4906
+8 74 89 2 15 43 3 31 20 70 34 59 72 10 24 58 41 32 30 63
+89
+2859
+8 82 78 11 53 30 75 31 23 22 62 88 37 96 56 35 40 38 30 24
+90
+5588
+44 28 94 33 64 86 41 93 52 39 3 97 68 97 96 66 10 68 63 58
+91
+5551
+99 4 32 27 38 6 86 61 25 8 34 98 22 75 35 85 10 40 82 25
+92
+5376
+80 42 64 35 79 8 51 26 82 22 27 94 94 41 43 78 75 33 40 93
+93
+5672
+76 81 42 40 45 31 65 39 18 79 29 95 37 30 8 15 9 79 39 73
+94
+5671
+94 56 74 40 67 80 42 83 2 90 25 93 15 73 5 29 81 64 37 45
+95
+4086
+75 38 87 96 93 82 50 11 29 55 97 95 31 84 65 31 40 36 44 93
+96
+1806
+63 50 63 69 16 2 48 57 70 77 30 6 46 22 64 45 13 62 2 37
+97
+5810
+57 12 94 23 59 59 88 81 7 3 28 1 33 8 20 41 10 82 27 64
+98
+1083
+76 43 87 32 47 47 52 40 36 20 48 15 82 98 54 84 53 44 71 92
+99
+1887
+34 51 72 13 95 21 46 97 96 61 99 66 75 68 38 51 28 99 45 59
diff --git a/branches/paradiseo-moeo-1.0/tutorials/lesson1/benchmarks/200_10_01.txt b/branches/paradiseo-moeo-1.0/tutorials/lesson1/benchmarks/200_10_01.txt
new file mode 100644
index 000000000..d1bccf9b0
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/tutorials/lesson1/benchmarks/200_10_01.txt
@@ -0,0 +1,603 @@
+200
+10
+471503978
+0
+7166
+17 30 28 15 52 5 53 55 81 47
+1
+7478
+37 26 82 67 82 44 43 65 44 51
+2
+4344
+22 2 88 57 17 2 43 38 46 44
+3
+3004
+71 29 33 64 66 98 56 76 3 27
+4
+4783
+79 98 69 23 62 27 48 45 93 76
+5
+4813
+37 67 28 9 57 10 83 99 14 4
+6
+1411
+69 92 92 1 58 25 34 84 86 76
+7
+4573
+53 51 66 2 91 27 93 67 23 49
+8
+7480
+59 53 92 43 42 41 95 40 59 5
+9
+4429
+64 82 30 73 69 59 48 93 47 25
+10
+841
+11 86 67 94 48 89 63 70 76 23
+11
+9418
+67 47 53 96 46 36 93 45 45 67
+12
+8849
+27 36 93 78 18 62 91 75 64 55
+13
+5306
+64 23 45 14 94 29 94 91 10 40
+14
+4634
+59 34 7 32 83 17 32 21 4 58
+15
+9336
+31 66 70 23 48 37 81 72 29 26
+16
+4344
+43 43 58 83 81 35 69 15 69 36
+17
+10182
+42 71 58 29 57 47 29 73 46 83
+18
+5648
+56 31 17 75 93 37 44 43 68 65
+19
+10009
+88 36 41 55 67 52 2 62 89 91
+20
+7809
+71 41 56 91 19 3 66 40 48 77
+21
+6970
+86 6 34 44 65 87 25 43 68 62
+22
+6260
+6 28 62 46 49 4 60 96 13 6
+23
+3543
+54 43 81 59 45 50 69 39 36 57
+24
+4215
+92 18 44 11 22 96 44 23 85 87
+25
+7436
+75 64 95 20 92 74 34 79 35 4
+26
+2229
+83 28 50 68 41 68 68 66 25 11
+27
+6742
+2 13 88 3 38 30 77 19 21 60
+28
+1878
+60 7 19 17 26 69 31 41 44 23
+29
+3222
+62 13 50 55 2 17 10 71 40 87
+30
+2189
+83 93 25 59 90 34 57 60 20 50
+31
+9874
+73 93 88 18 79 95 21 72 83 18
+32
+1849
+55 56 1 31 17 3 56 62 76 23
+33
+10057
+3 72 6 84 61 24 36 17 26 24
+34
+7309
+71 71 45 61 81 51 26 25 50 82
+35
+9509
+34 28 29 55 67 55 11 59 98 16
+36
+10403
+40 95 2 46 18 60 6 95 6 96
+37
+4515
+13 96 54 77 1 61 86 47 83 37
+38
+1586
+62 55 71 59 36 15 2 10 51 29
+39
+638
+56 58 81 98 31 38 89 94 46 19
+40
+7434
+28 66 22 23 85 83 28 39 99 26
+41
+9737
+53 3 57 18 92 62 62 53 65 56
+42
+5477
+71 77 16 17 6 84 63 50 46 33
+43
+5976
+5 80 88 70 78 44 52 99 24 53
+44
+3293
+73 2 5 73 83 80 12 63 47 6
+45
+5869
+95 82 52 38 39 48 13 59 24 95
+46
+10358
+23 86 23 13 74 45 43 30 32 63
+47
+4698
+49 16 21 77 77 54 99 67 66 84
+48
+9855
+17 29 21 74 85 71 11 18 48 13
+49
+5305
+81 24 58 79 88 10 70 12 83 6
+50
+8401
+88 89 96 51 25 96 82 9 3 19
+51
+6004
+62 96 37 48 33 23 14 41 74 16
+52
+3369
+35 99 46 16 36 8 39 67 97 80
+53
+10335
+78 15 78 93 32 56 83 52 39 37
+54
+2868
+90 49 87 29 82 35 4 39 80 20
+55
+5297
+36 78 91 28 98 72 86 90 27 62
+56
+3744
+46 48 9 6 3 53 93 25 70 81
+57
+9148
+98 64 96 82 46 13 87 13 65 52
+58
+3270
+75 3 93 40 68 72 82 81 1 14
+59
+7616
+36 63 98 9 11 38 78 3 26 67
+60
+5131
+74 14 31 88 30 1 32 8 46 19
+61
+9674
+86 95 78 51 75 69 82 66 8 86
+62
+940
+67 88 20 48 42 85 24 67 74 1
+63
+6286
+87 9 75 1 93 2 88 51 47 53
+64
+1159
+68 61 18 4 36 28 45 54 19 21
+65
+10410
+1 24 34 77 97 18 48 85 85 33
+66
+3268
+87 38 48 48 1 10 67 10 62 68
+67
+6533
+87 50 49 6 63 70 14 95 33 28
+68
+1984
+7 47 69 1 86 67 34 59 96 25
+69
+2658
+34 42 88 32 54 95 76 64 33 69
+70
+7518
+1 30 30 79 33 72 1 90 5 71
+71
+3280
+91 97 34 40 71 64 51 28 23 60
+72
+8989
+7 49 22 14 1 19 15 48 43 69
+73
+4877
+6 79 81 20 18 60 67 57 63 99
+74
+7608
+46 19 50 86 75 31 57 85 10 53
+75
+4775
+3 80 40 40 55 29 3 78 47 77
+76
+4441
+45 30 73 25 62 43 37 18 73 27
+77
+689
+55 24 91 94 21 17 15 59 1 29
+78
+8408
+92 58 7 73 71 78 50 11 19 83
+79
+2103
+67 43 1 44 80 28 75 67 92 22
+80
+6500
+13 6 71 98 5 47 80 36 31 10
+81
+3906
+30 95 72 94 48 78 3 24 29 42
+82
+4713
+27 43 8 61 87 77 9 59 68 64
+83
+9905
+19 99 68 65 22 92 28 24 31 80
+84
+3660
+51 22 49 44 5 42 44 39 92 73
+85
+2405
+86 99 7 75 71 86 2 1 48 91
+86
+7436
+20 11 47 4 69 6 71 80 87 38
+87
+5400
+95 99 90 17 75 19 89 58 8 60
+88
+8689
+79 60 59 1 72 28 24 76 90 53
+89
+5805
+48 42 39 12 36 18 73 59 57 38
+90
+685
+83 33 49 78 54 4 28 90 40 19
+91
+9892
+91 68 28 51 24 24 98 92 25 14
+92
+9000
+78 78 22 55 55 57 17 3 49 35
+93
+2827
+41 26 10 53 5 82 27 51 26 10
+94
+1779
+61 77 96 96 40 7 90 1 35 44
+95
+2539
+90 1 2 92 56 4 4 55 90 97
+96
+5797
+57 13 88 82 8 94 13 50 99 17
+97
+6740
+4 67 90 20 19 9 83 15 30 50
+98
+5913
+21 87 69 22 7 57 43 31 5 22
+99
+1778
+68 31 44 13 12 82 63 99 52 19
+100
+9256
+87 49 74 40 44 98 68 8 12 70
+101
+1943
+62 90 16 43 66 54 74 44 11 88
+102
+2314
+69 6 90 23 39 2 12 91 72 31
+103
+5964
+79 76 7 30 41 71 69 83 32 7
+104
+2160
+69 94 14 16 60 94 38 75 81 81
+105
+5000
+35 76 47 76 11 69 74 66 21 58
+106
+753
+25 79 48 30 31 51 98 98 81 2
+107
+8317
+68 66 36 59 65 80 86 77 64 89
+108
+9608
+14 51 62 64 16 79 72 8 45 1
+109
+5659
+9 14 1 72 67 85 76 6 4 80
+110
+3727
+74 89 63 61 19 56 53 26 10 52
+111
+878
+61 87 86 13 69 79 94 47 90 15
+112
+5610
+58 1 49 81 56 46 45 55 11 25
+113
+8024
+81 65 48 25 96 71 30 39 88 11
+114
+7993
+52 53 3 90 78 85 39 91 52 97
+115
+7345
+93 19 51 67 36 52 60 78 96 90
+116
+5943
+44 21 80 21 56 42 69 49 92 62
+117
+5637
+57 98 86 70 12 66 12 23 44 69
+118
+3377
+89 90 97 96 37 82 83 92 54 34
+119
+10135
+81 45 4 99 1 91 21 68 28 66
+120
+2394
+69 77 58 64 50 48 25 88 85 54
+121
+6036
+98 54 79 68 43 70 50 9 51 84
+122
+6761
+78 86 28 61 58 21 47 38 21 62
+123
+7860
+70 2 19 36 13 82 43 60 4 71
+124
+8007
+3 3 93 57 55 12 58 2 42 70
+125
+7718
+70 88 88 86 87 94 11 8 43 60
+126
+7598
+62 39 44 10 20 17 63 86 55 54
+127
+3245
+81 56 74 57 84 45 74 62 89 52
+128
+4953
+61 24 18 88 28 68 6 41 4 71
+129
+8163
+65 91 95 59 59 60 23 66 1 9
+130
+8429
+65 86 2 73 65 93 94 94 97 99
+131
+8623
+33 80 22 43 56 30 93 54 65 41
+132
+1742
+62 58 7 25 2 5 26 9 38 30
+133
+1409
+19 54 82 37 36 31 49 75 87 23
+134
+5249
+57 57 52 70 41 30 30 43 58 60
+135
+9063
+82 42 17 97 7 71 50 9 47 1
+136
+7293
+78 32 59 29 23 29 47 10 53 67
+137
+1353
+94 5 42 33 25 82 89 79 51 55
+138
+6480
+65 43 51 99 81 20 43 10 40 64
+139
+8191
+14 80 79 34 6 13 32 97 80 21
+140
+7595
+9 86 93 96 67 94 45 39 20 16
+141
+739
+29 47 65 65 5 47 47 30 24 94
+142
+7977
+70 95 27 90 89 57 68 74 77 11
+143
+8304
+90 86 25 52 71 95 13 52 37 90
+144
+6930
+86 40 60 95 86 8 86 90 13 48
+145
+5996
+12 31 72 3 48 46 97 12 29 85
+146
+2438
+40 61 29 64 50 80 2 61 28 34
+147
+2339
+12 12 55 21 54 32 16 34 18 7
+148
+5848
+64 64 58 16 21 7 27 88 22 79
+149
+4982
+32 17 22 70 83 34 38 27 75 95
+150
+7604
+18 52 58 67 27 33 53 68 24 50
+151
+10491
+11 56 61 13 38 33 37 14 79 78
+152
+8007
+40 35 89 96 79 18 94 88 99 39
+153
+6393
+14 60 67 57 71 29 78 74 35 79
+154
+1948
+22 75 14 7 53 19 84 71 45 69
+155
+8138
+49 10 10 30 2 74 49 14 95 27
+156
+3757
+95 50 40 96 9 58 25 16 46 42
+157
+4120
+82 66 11 98 49 52 59 46 15 15
+158
+4850
+7 53 99 72 79 10 36 47 7 51
+159
+4564
+19 58 7 31 39 70 33 54 24 44
+160
+4171
+95 12 20 11 28 78 15 91 45 71
+161
+669
+39 66 78 36 39 59 36 89 20 32
+162
+4803
+71 81 6 10 70 32 47 59 35 66
+163
+5464
+34 51 71 20 72 20 83 39 61 49
+164
+6219
+89 75 48 26 70 12 24 52 97 8
+165
+2726
+63 71 39 67 38 98 71 91 69 7
+166
+6507
+85 46 58 13 48 18 7 21 78 44
+167
+6446
+60 88 7 60 57 12 6 90 13 1
+168
+3416
+91 58 17 50 11 57 55 58 53 15
+169
+918
+49 73 63 28 38 73 43 74 16 6
+170
+3139
+46 27 73 32 37 91 82 30 94 51
+171
+9351
+10 26 43 49 56 46 40 63 59 91
+172
+7171
+19 38 14 54 64 64 78 19 64 33
+173
+2127
+50 48 66 46 64 92 64 18 72 77
+174
+4461
+65 8 59 15 68 45 96 88 13 69
+175
+799
+41 14 75 49 27 86 27 22 47 28
+176
+6861
+58 58 96 94 36 84 99 43 22 8
+177
+9690
+62 89 28 63 94 15 11 60 9 8
+178
+3180
+45 44 12 96 65 99 91 20 68 48
+179
+2449
+67 16 99 43 89 8 78 32 4 7
+180
+8742
+64 20 63 73 23 87 97 67 67 55
+181
+4503
+6 69 19 19 93 61 23 1 92 51
+182
+10135
+77 67 26 19 14 42 48 42 49 89
+183
+8757
+94 80 8 81 57 25 20 95 23 61
+184
+1192
+24 81 72 82 93 35 99 84 37 82
+185
+8334
+38 82 55 69 60 64 39 37 16 39
+186
+9610
+73 27 67 13 82 74 53 30 39 89
+187
+8681
+59 5 1 85 16 40 3 12 47 47
+188
+8465
+61 44 23 32 69 89 65 87 94 24
+189
+8425
+14 38 35 34 57 4 81 13 71 79
+190
+3227
+59 53 6 57 8 43 47 60 36 86
+191
+4628
+83 16 89 69 52 12 25 92 72 60
+192
+1319
+3 48 93 63 98 28 36 52 67 67
+193
+9629
+46 16 88 49 67 68 44 51 78 10
+194
+4236
+16 31 86 56 19 46 29 91 13 61
+195
+5509
+56 79 37 37 56 23 85 76 68 60
+196
+9597
+40 75 53 54 38 3 26 32 36 68
+197
+8513
+7 14 45 60 75 70 4 81 69 72
+198
+2882
+79 67 32 97 69 81 9 57 28 9
+199
+7268
+55 70 69 44 14 14 59 71 69 47
diff --git a/branches/paradiseo-moeo-1.0/tutorials/lesson1/benchmarks/README b/branches/paradiseo-moeo-1.0/tutorials/lesson1/benchmarks/README
new file mode 100644
index 000000000..7f3c69274
--- /dev/null
+++ b/branches/paradiseo-moeo-1.0/tutorials/lesson1/benchmarks/README
@@ -0,0 +1 @@
+Further benchmarks for the bi-objective flow-shop scheduling problem are available at http://www.lifl.fr/~liefooga/benchmarks/
\ No newline at end of file
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..086363914
--- /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$(top_srcdir)/src
+