diff --git a/trunk/paradiseo-mo/AUTHORS b/trunk/paradiseo-mo/AUTHORS new file mode 100644 index 000000000..c9f1498f0 --- /dev/null +++ b/trunk/paradiseo-mo/AUTHORS @@ -0,0 +1,4 @@ +Authors: + Sebastien Verel + Arnaud Liefooghe + Jérémie Humeau diff --git a/trunk/paradiseo-mo/CMakeLists.txt b/trunk/paradiseo-mo/CMakeLists.txt new file mode 100644 index 000000000..6ec78b35f --- /dev/null +++ b/trunk/paradiseo-mo/CMakeLists.txt @@ -0,0 +1,41 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) + +########################################################################################################################################## +### 0) If you want to set your own variables in mo-conf.cmake and avoid the cmd line +########################################################################################################################################## + +INCLUDE(mo-conf.cmake OPTIONAL) + +########################################################################################################################################## + + +########################################################################################################################################## +### 1) Project properties +########################################################################################################################################## + +# set the project name +PROJECT(ParadisEO-MO) + +SET(PACKAGE_BUGREPORT "paradiseo-help@lists.gforge.inria.fr" CACHE STRING "Package bug report" FORCE) +SET(PACKAGE_NAME "ParadisEO-MO - Moving Objects" CACHE STRING "Package name" FORCE) +SET(PACKAGE_STRING "ParadisEO-MO 1.3" CACHE STRING "MO Package string full name" FORCE) +SET(PACKAGE_VERSION "1.3" CACHE STRING "Package version" FORCE) +SET(GLOBAL_VERSION "1.3" CACHE STRING "Global version" FORCE) +SET(VERSION "1.3.0" CACHE STRING "Version" FORCE) +########################################################################################################################################## + + +########################################################################################################################################## +### 2) Include the common CMake configuration +########################################################################################################################################## + +# The "config" variable must be provided on the command line +IF(NOT DEFINED config OR NOT config) + MESSAGE(FATAL_ERROR "The \"config\" variable must be set on the command line to + give the path of the install configuration file. ") +ENDIF(NOT DEFINED config OR NOT config) + +# Need the config file whose full path is given thanks to the "config" variable +INCLUDE(${config}) +########################################################################################################################################## + diff --git a/trunk/paradiseo-mo/CTestConfig.cmake b/trunk/paradiseo-mo/CTestConfig.cmake new file mode 100644 index 000000000..465d208d6 --- /dev/null +++ b/trunk/paradiseo-mo/CTestConfig.cmake @@ -0,0 +1,7 @@ +set(CTEST_PROJECT_NAME "ParadisEO") +set(CTEST_NIGHTLY_START_TIME "00:00:00 EST") + +set(CTEST_DROP_METHOD "http") +set(CTEST_DROP_SITE "cdash.inria.fr") +set(CTEST_DROP_LOCATION "/CDash/submit.php?project=ParadisEO") +set(CTEST_DROP_SITE_CDASH TRUE) diff --git a/trunk/paradiseo-mo/doc/CMakeLists.txt b/trunk/paradiseo-mo/doc/CMakeLists.txt new file mode 100755 index 000000000..8963a9ba5 --- /dev/null +++ b/trunk/paradiseo-mo/doc/CMakeLists.txt @@ -0,0 +1,26 @@ + +########################################################################################## +### MO Doc generation using Doxygen +########################################################################################## + +IF (DOXYGEN_FOUND) + + SET(DOC_DIR ${CMAKE_BINARY_DIR}/doc CACHE PATH "MO documentation directory") + SET(MO_DOC_CONFIG_FILE "mo.doxyfile" CACHE PATH "MO documentation configuration file") + # define the doc target + IF (DOXYGEN_EXECUTABLE) + ADD_CUSTOM_TARGET(doc + COMMAND ${DOXYGEN_EXECUTABLE} ${MO_DOC_CONFIG_FILE} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + ) + ENDIF (DOXYGEN_EXECUTABLE) + + # configure doxyfile file + CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/doc/${MO_DOC_CONFIG_FILE}.cmake" + "${CMAKE_BINARY_DIR}/doc/${MO_DOC_CONFIG_FILE}") + +ELSE (DOXYGEN_FOUND) + MESSAGE(STATUS "Unable to generate the documentation, Doxygen package not found") +ENDIF (DOXYGEN_FOUND) + +########################################################################################## diff --git a/trunk/paradiseo-mo/doc/mo.doxyfile.cmake b/trunk/paradiseo-mo/doc/mo.doxyfile.cmake new file mode 100644 index 000000000..862e9e731 --- /dev/null +++ b/trunk/paradiseo-mo/doc/mo.doxyfile.cmake @@ -0,0 +1,1523 @@ +# Doxyfile 1.5.8 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# http://www.gnu.org/software/libiconv for the list of possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = @PACKAGE_NAME@ + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = @PACKAGE_VERSION@ + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = @CMAKE_BINARY_DIR@/doc + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, +# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, +# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, +# Spanish, Swedish, and Ukrainian. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = YES + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = NO + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = @CMAKE_SOURCE_DIR@ + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = YES + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = YES + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = YES + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for +# Java. For instance, namespaces will be presented as packages, qualified +# scopes will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources only. Doxygen will then generate output that is more tailored for +# Fortran. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for +# VHDL. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it parses. +# With this tag you can assign which parser to use for a given extension. +# Doxygen has a built-in mapping, but you can override or extend it using this tag. +# The format is ext=language, where ext is a file extension, and language is one of +# the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, +# Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat +# .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), +# use: inc=Fortran f=C + +EXTENSION_MAPPING = + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = YES + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate getter +# and setter methods for a property. Setting this option to YES (the default) +# will make doxygen to replace the get and set methods by a property in the +# documentation. This will only work if the methods are indeed getting or +# setting a simple type. If this is not the case, or you want to show the +# methods anyway, you should set this option to NO. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum +# is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. + +TYPEDEF_HIDES_STRUCT = NO + +# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to +# determine which symbols to keep in memory and which to flush to disk. +# When the cache is full, less often used symbols will be written to disk. +# For small to medium size projects (<1000 input files) the default value is +# probably good enough. For larger projects a too small cache size can cause +# doxygen to be busy swapping symbols to and from disk most of the time +# causing a significant performance penality. +# If the system has enough physical memory increasing the cache will improve the +# performance by keeping more symbols in memory. Note that the value works on +# a logarithmic scale so increasing the size by one will rougly double the +# memory usage. The cache size is given by this formula: +# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols + +SYMBOL_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = YES + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base +# name of the file that contains the anonymous namespace. By default +# anonymous namespace are hidden. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = YES + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = YES + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = NO + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the +# hierarchy of group names into alphabetical order. If set to NO (the default) +# the group names will appear in their defined order. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. +# This will remove the Files entry from the Quick Index and from the +# Folder Tree View (if specified). The default is YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the +# Namespaces page. +# This will remove the Namespaces entry from the Quick Index +# and from the Folder Tree View (if specified). The default is YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by +# doxygen. The layout file controls the global structure of the generated output files +# in an output format independent way. The create the layout file that represents +# doxygen's defaults, run doxygen with the -l option. You can optionally specify a +# file name after the option, if omitted DoxygenLayout.xml will be used as the name +# of the layout file. + +LAYOUT_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = YES + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = NO + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = NO + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be abled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = @CMAKE_SOURCE_DIR@ + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is +# also the default input encoding. Doxygen uses libiconv (or the iconv built +# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 + +FILE_PATTERNS = *.cpp \ + *.h \ + NEWS \ + README + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = */tutorial/* + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = *::* + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = * + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. +# If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. +# Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. +# The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = YES + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. +# Otherwise they will link to the documentation. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = YES + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 3 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = mo + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. For this to work a browser that supports +# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox +# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). + +HTML_DYNAMIC_SECTIONS = NO + +# If the GENERATE_DOCSET tag is set to YES, additional index files +# will be generated that can be used as input for Apple's Xcode 3 +# integrated development environment, introduced with OSX 10.5 (Leopard). +# To create a documentation set, doxygen will generate a Makefile in the +# HTML output directory. Running make will produce the docset in that +# directory and running "make install" will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find +# it at startup. +# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. + +GENERATE_DOCSET = NO + +# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the +# feed. A documentation feed provides an umbrella under which multiple +# documentation sets from a single provider (such as a company or product suite) +# can be grouped. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that +# should uniquely identify the documentation set bundle. This should be a +# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen +# will append .docset to the name. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING +# is used to encode HtmlHelp index (hhk), content (hhc) and project file +# content. + +CHM_INDEX_ENCODING = + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER +# are set, an additional index file will be generated that can be used as input for +# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated +# HTML documentation. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can +# be used to specify the file name of the resulting .qch file. +# The path specified is relative to the HTML output folder. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#namespace + +QHP_NAMESPACE = + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#virtual-folders + +QHP_VIRTUAL_FOLDER = doc + +# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. +# For more information please see +# http://doc.trolltech.com/qthelpproject.html#custom-filters + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see +# Qt Help Project / Custom Filters. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's +# filter section matches. +# Qt Help Project / Filter Attributes. + +QHP_SECT_FILTER_ATTRS = + +# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can +# be used to specify the location of Qt's qhelpgenerator. +# If non-empty doxygen will try to run qhelpgenerator on the generated +# .qhp file. + +QHG_LOCATION = + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. +# If the tag value is set to FRAME, a side panel will be generated +# containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. Other possible values +# for this tag are: HIERARCHIES, which will generate the Groups, Directories, +# and Class Hierarchy pages using a tree view instead of an ordered list; +# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which +# disables this behavior completely. For backwards compatibility with previous +# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE +# respectively. + +GENERATE_TREEVIEW = YES + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +# Use this tag to change the font size of Latex formulas included +# as images in the HTML documentation. The default is 10. Note that +# when you change the font size after a successful doxygen run you need +# to manually remove any form_*.png images from the HTML output directory +# to force them to be regenerated. + +FORMULA_FONTSIZE = 10 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = YES + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = NO + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = YES + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. +# This is useful +# if you want to understand what is going on. +# On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = @PARADISEO_EO_BIN_DIR@/doc/eo.doxytag=http://eodev.sourceforge.net/eo/doc/html + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = @CMAKE_BINARY_DIR@/doc/mo.doxytag + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see +# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = YES + +# By default doxygen will write a font called FreeSans.ttf to the output +# directory and reference it in all dot files that doxygen generates. This +# font does not include all possible unicode characters however, so when you need +# these (or just want a differently looking font) you can specify the font name +# using DOT_FONTNAME. You need need to make sure dot is able to find the font, +# which can be done by putting it in a standard location or by setting the +# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory +# containing the font. + +DOT_FONTNAME = FreeSans + +# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. +# The default size is 10pt. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the output directory to look for the +# FreeSans.ttf font (which doxygen will put there itself). If you specify a +# different font using DOT_FONTNAME you can set the path where dot +# can find it using this tag. + +DOT_FONTPATH = + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = NO + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = YES + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT options are set to YES then +# doxygen will generate a call dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable call graphs +# for selected functions only using the \callgraph command. + +CALL_GRAPH = YES + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then +# doxygen will generate a caller dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable caller +# graphs for selected functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the +# number of direct children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not +# seem to support this out of the box. Warning: Depending on the platform used, +# enabling this option may lead to badly anti-aliased labels on the edges of +# a graph (i.e. they become hard to read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Options related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = YES diff --git a/trunk/paradiseo-mo/install.cmake b/trunk/paradiseo-mo/install.cmake new file mode 100644 index 000000000..cbbc3f1f8 --- /dev/null +++ b/trunk/paradiseo-mo/install.cmake @@ -0,0 +1,22 @@ +######################################################################################################### +# 1) ParadisEO install: SIMPLE Configuration +######################################################################################################### + + +# Here, just specify PARADISEO_DIR : the directory where ParadisEO has been installed +SET(PARADISEO_DIR "${paradis}" CACHE PATH "ParadisEO directory" FORCE) + +######################################################################################################### + + +######################################################################################################### +# 2) ParadisEO install: ADVANCED Configuration +######################################################################################################### + +SET(PARADISEO_EO_SRC_DIR "${PARADISEO_DIR}/paradiseo-eo" CACHE PATH "ParadisEO-EO source directory" FORCE) +SET(PARADISEO_EO_BIN_DIR "${PARADISEO_DIR}/paradiseo-eo/build" CACHE PATH "ParadisEO-EO binary directory" FORCE) + +SET(NEWMO_SRC_DIR "${CMAKE_SOURCE_DIR}" CACHE PATH "ParadisEO-EO source directory" FORCE) +SET(NEWMO_BIN_DIR "${CMAKE_SOURCE_DIR}" CACHE PATH "ParadisEO-EO binary directory" FORCE) + + diff --git a/trunk/paradiseo-mo/src/CMakeLists.txt b/trunk/paradiseo-mo/src/CMakeLists.txt new file mode 100644 index 000000000..d41d4587a --- /dev/null +++ b/trunk/paradiseo-mo/src/CMakeLists.txt @@ -0,0 +1,3 @@ +############################################################### +# This is a dummy file +############################################################### diff --git a/trunk/paradiseo-mo/src/algo/moLocalSearch.h b/trunk/paradiseo-mo/src/algo/moLocalSearch.h new file mode 100644 index 000000000..3704944d1 --- /dev/null +++ b/trunk/paradiseo-mo/src/algo/moLocalSearch.h @@ -0,0 +1,112 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moLocalSearch_h +#define _moLocalSearch_h + +#include +#include +#include + +/** + * the main algorithm of the local search + */ +template +class moLocalSearch: public eoMonOp +{ +public: + typedef NHE NeighborhoodExplorer ; + typedef typename NeighborhoodExplorer::EOT EOT ; + typedef typename NeighborhoodExplorer::Neighborhood Neighborhood ; + + + /** + * Constructor of a moLocalSearch needs a NeighborhooExplorer and a Continuator + */ + moLocalSearch(NeighborhoodExplorer& _searchExpl, moContinuator & _continuator, eoEvalFunc& _fullEval) : searchExplorer(_searchExpl), continuator(_continuator), fullEval(_fullEval) { } ; + + /** + * Run the local search on a solution + * @param _solution the related solution + */ + virtual bool operator() (EOT & _solution) { + + if(_solution.invalid()) + fullEval(_solution); + + // initialization of the parameter of the search (for example fill empty the tabu list) + searchExplorer.initParam(_solution); + + // initialization of the external continuator (for example the time, or the number of generations) + continuator.init(_solution); + + bool b=continuator(_solution); + + do { + // explore the neighborhood of the solution + searchExplorer(_solution); + // if a solution in the neighborhood can be accepted + if (searchExplorer.accept(_solution)){ + searchExplorer.move(_solution); + searchExplorer.moveApplied(true); + } + else + searchExplorer.moveApplied(false); + + // update the parameter of the search (for ex. Temperature of the SA) + searchExplorer.updateParam(_solution); + + b=continuator(_solution); + } while (b && searchExplorer.isContinue(_solution)); + + searchExplorer.terminate(_solution); + + continuator.lastCall(_solution); + + return true; + }; + +private: + // make the exploration of the neighborhood according to a local search heuristic + NeighborhoodExplorer& searchExplorer ; + + // external continuator + moContinuator& continuator ; + + //full evaluation function + eoEvalFunc& fullEval; +}; + +#endif + diff --git a/trunk/paradiseo-mo/src/comparator/moComparator.h b/trunk/paradiseo-mo/src/comparator/moComparator.h new file mode 100644 index 000000000..d33ad59a7 --- /dev/null +++ b/trunk/paradiseo-mo/src/comparator/moComparator.h @@ -0,0 +1,73 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moComparator_h +#define _moComparator_h + +#include +#include + +// moComparator => comparer deux solutions +// idée : +// - eoComparator +// - moComparator qui hérite de eoComparator ? +// - moeoComparator qui hérite de eoComparator +// idée J : +// - eoComparator : eoBF +// - eoSolComparator : eoComparator ? +// - moNeighborCompartor : : eoComparator +// +// une instantiation possible !! + + +/** + * Comparator of two types + */ +template< class T1, class T2 > +class moComparator : public eoBF +{ +public: + virtual bool equals(const T1&, const T2&) = 0; + + /** + * Return the class id. + * @return the class name as a std::string + */ + virtual std::string className() const { + return "moComparator"; + } +}; + +#endif + diff --git a/trunk/paradiseo-mo/src/comparator/moNeighborComparator.h b/trunk/paradiseo-mo/src/comparator/moNeighborComparator.h new file mode 100644 index 000000000..7a9358611 --- /dev/null +++ b/trunk/paradiseo-mo/src/comparator/moNeighborComparator.h @@ -0,0 +1,83 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moNeighborComparator_h +#define _moNeighborComparator_h + +#include +#include + +#include +#include + + +/** + * Comparator of two neighbors + */ +template< class Neighbor > +class moNeighborComparator : public moComparator +{ +public: + + /** + * Compare two neighbors + * @param _neighbor1 the first neighbor + * @param _neighbor2 the second neighbor + * @return true if the neighbor2 is better than neighbor1 + */ + virtual bool operator()(const Neighbor& _neighbor1, const Neighbor& _neighbor2) { + return (_neighbor1.fitness() < _neighbor2.fitness()); + } + + /** + * Compare two neighbors + * @param _neighbor1 the first neighbor + * @param _neighbor2 the second neighbor + * @return true if the neighbor2 is equal to neighbor1 + */ + virtual bool equals(const Neighbor& _neighbor1, const Neighbor& _neighbor2) { + return (_neighbor1.fitness() == _neighbor2.fitness()); + } + + /** + * Return the class id. + * @return the class name as a std::string + */ + virtual std::string className() const { + return "moNeighborComparator"; + } +}; + + +#endif diff --git a/trunk/paradiseo-mo/src/comparator/moSolNeighborComparator.h b/trunk/paradiseo-mo/src/comparator/moSolNeighborComparator.h new file mode 100644 index 000000000..2e8027d98 --- /dev/null +++ b/trunk/paradiseo-mo/src/comparator/moSolNeighborComparator.h @@ -0,0 +1,84 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moSolNeighborComparator_h +#define _moSolNeighborComparator_h + +#include +#include + +#include +#include + + +/** + * Comparator of two neighbors + */ +template< class Neighbor > +class moSolNeighborComparator : public moComparator +{ +public: + typedef typename Neighbor::EOT EOT ; + + /** + * Compare two neighbors + * @param _sol the solution + * @param _neighbor the neighbor + * @return true if the neighbor is better than sol + */ + virtual bool operator()(const EOT& _sol, const Neighbor& _neighbor) { + return (_sol.fitness() < _neighbor.fitness()); + } + + /** + * Compare two neighbors + * @param _sol the solution + * @param _neighbor the neighbor + * @return true if the neighbor is equal to the solution + */ + virtual bool equals(const EOT& _sol, const Neighbor& _neighbor) { + return (_sol.fitness() == _neighbor.fitness()); + } + + /** + * Return the class id. + * @return the class name as a std::string + */ + virtual std::string className() const { + return "moSolNeighborComparator"; + } +}; + + +#endif diff --git a/trunk/paradiseo-mo/src/continuator/moCheckpoint.h b/trunk/paradiseo-mo/src/continuator/moCheckpoint.h new file mode 100644 index 000000000..69e879e8f --- /dev/null +++ b/trunk/paradiseo-mo/src/continuator/moCheckpoint.h @@ -0,0 +1,170 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef moCheckpoint_h +#define moCheckpoint_h + +#include +#include +#include +#include + +/** + * Continuator allowing to add others (continuators, stats, monitors or updaters) + */ +template +class moCheckpoint : public moContinuator { +public : + + typedef NH Neighborhood ; + typedef typename Neighborhood::EOT EOT ; + + /** + * Default constructor (moCheckpoint must have at least one continuator) + * @param _cont a continuator + * @param _interval frequency to compute statistical operators + */ + moCheckpoint(moContinuator& _cont, unsigned int _interval=1):interval(_interval), counter(0){ + continuators.push_back(&_cont); + } + + /** + * add a continuator to the checkpoint + * @param _cont a continuator + */ + void add(moContinuator& _cont) { + continuators.push_back(&_cont); + } + + /** + * add a statistic operator to the checkpoint + * @param _stat a statistic operator + */ + void add(moStatBase& _stat) { + stats.push_back(&_stat); + } + + /** + * add a monitor to the checkpoint + * @param _mon a monitor + */ + void add(eoMonitor& _mon) { + monitors.push_back(&_mon); + } + + /** + * add a updater to the checkpoint + * @param _upd an updater + */ + void add(eoUpdater& _upd) { + updaters.push_back(&_upd); + } + + /** + * init all continuators containing in the checkpoint regarding a solution + * @param _sol the corresponding solution + */ + virtual void init(EOT& _sol) { + for(unsigned i = 0; i < continuators.size(); ++i) + continuators[i]->init(_sol); + } + + /** + * @return class name + */ + virtual std::string className(void) const { + return "moCheckpoint"; + } + + /** + * apply operator of checkpoint's containers + * @param _sol reference of the solution + * @return true if all continuator return true + */ + bool operator()(EOT & _sol) { + unsigned i; + bool bContinue = true; + + for (i = 0; i < stats.size(); ++i){ + if(counter % interval == 0) + (*stats[i])(_sol); + counter++; + } + + for (i = 0; i < updaters.size(); ++i) + (*updaters[i])(); + + for (i = 0; i < monitors.size(); ++i) + (*monitors[i])(); + + for (i = 0; i < continuators.size(); ++i) + if ( !(*continuators[i])(_sol) ) + bContinue = false; + + return bContinue; + } + + /** + * last call of statistic operators, monitors and updaters + * @param _sol reference of the solution + */ + void lastCall(EOT& _sol){ + unsigned int i; + for (i = 0; i < stats.size(); ++i) + stats[i]->lastCall(_sol); + + for (i = 0; i < updaters.size(); ++i) + updaters[i]->lastCall(); + + for (i = 0; i < monitors.size(); ++i) + monitors[i]->lastCall(); + } + +private : + /** continuators vector */ + std::vector*> continuators; + /** statistic operators vector */ + std::vector*> stats; + /** monitors vector */ + std::vector monitors; + /** updaters vector */ + std::vector updaters; + + unsigned int interval; + unsigned int counter; + +}; + + +#endif diff --git a/trunk/paradiseo-mo/src/continuator/moContinuator.h b/trunk/paradiseo-mo/src/continuator/moContinuator.h new file mode 100644 index 000000000..e2bef885c --- /dev/null +++ b/trunk/paradiseo-mo/src/continuator/moContinuator.h @@ -0,0 +1,63 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moContinuator_h +#define _moContinuator_h + +#include + +/** + * To make specific continuator from a solution + */ +template< class NH > +class moContinuator : public eoUF +{ +public: + typedef NH Neighborhood ; + typedef typename Neighborhood::EOT EOT ; + + /** + * Init Continuator parameters + * @param _solution the related solution + */ + virtual void init(EOT& _solution){}; + + /** + * Last Call to terminate the checkpoint + * @param _solution the related solution + */ + virtual void lastCall(EOT& _solution){}; +}; + +#endif diff --git a/trunk/paradiseo-mo/src/continuator/moCounterMonitorSaver.h b/trunk/paradiseo-mo/src/continuator/moCounterMonitorSaver.h new file mode 100644 index 000000000..3d42b9a3a --- /dev/null +++ b/trunk/paradiseo-mo/src/continuator/moCounterMonitorSaver.h @@ -0,0 +1,97 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef moCounterMonitorSaver_h +#define moCounterMonitorSaver_h + +#include +#include + +/** + * The actual class that will be used as base for all statistics + * that need to be calculated over the solution + * It is a moStatBase AND an eoValueParam so it can be used in Monitors. + */ +class moCounterMonitorSaver : public eoUpdater { +public : + + /** + * Default Constructor + * @param _interval frequency to call monitors + * @param _mon a monitor + */ + moCounterMonitorSaver(unsigned _interval, eoMonitor& _mon) : interval(_interval), counter(0) { + monitors.push_back(&_mon); + } + + /** + * call monitors if interval is reach by a counter + */ + void operator()(void) { + if (counter++ % interval == 0) + for (unsigned i = 0; i < monitors.size(); i++) + (*monitors[i])(); + } + + /** + * last call of monitors + */ + void lastCall(void) { + for (unsigned i = 0; i < monitors.size(); i++) + monitors[i]->lastCall(); + } + + /** + * attach another monitor to this class + * @param _mon the monitor to attach + */ + void add(eoMonitor& _mon) { + monitors.push_back(&_mon); + } + + /** + * @return name of the class + */ + virtual std::string className(void) const { return "moCounterMonitorSaver"; } + +private : + /** interval and counter value */ + unsigned int interval, counter; + + /** monitor's vector */ + std::vector monitors; +}; + + +#endif diff --git a/trunk/paradiseo-mo/src/continuator/moDistanceStat.h b/trunk/paradiseo-mo/src/continuator/moDistanceStat.h new file mode 100644 index 000000000..61ab9ad04 --- /dev/null +++ b/trunk/paradiseo-mo/src/continuator/moDistanceStat.h @@ -0,0 +1,83 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef moDistanceStat_h +#define moDistanceStat_h + +#include +#include + +/** + * The statistic gives the distance to a reference solution + * The reference solution could be the global optimum, or the best knowed solution + * It allows to compute the Fitness-Distance correlation (FDC) + */ +template +class moDistanceStat : public moStat +{ +public : + using moStat< EOT, T >::value; + + /** + * Default Constructor + * @param _dist a distance + * @param _ref the reference solution + */ + moDistanceStat(eoDistance & _dist, EOT & _ref): moStat(0, "distance"), dist(_dist), refSolution(_ref){} + + /** + * Compute distance between a solution and the reference solution + * @param _sol a solution + */ + virtual void operator()(EOT & _sol){ + value() = dist(_sol, refSolution); + } + + /** + * @return name of the class + */ + virtual std::string className(void) const { return "moDistanceStat"; } + +private: + /** the distance */ + eoDistance & dist; + /** + * the reference solution does not change during the run + * it could be the best solution knowed of the problem + */ + EOT refSolution; + +}; + +#endif diff --git a/trunk/paradiseo-mo/src/continuator/moFitnessStat.h b/trunk/paradiseo-mo/src/continuator/moFitnessStat.h new file mode 100644 index 000000000..bf660055c --- /dev/null +++ b/trunk/paradiseo-mo/src/continuator/moFitnessStat.h @@ -0,0 +1,74 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef moFitnessStat_h +#define moFitnessStat_h + +#include + +/** + * The actual class that will be used as base for all statistics + * that need to be calculated over the solution + * It is a moStatBase AND an eoValueParam so it can be used in Monitors. +*/ +template +class moFitnessStat : public moStat +{ +public : + typedef T Fitness; + using moStat< EOT, Fitness >::value; + + /** + * Default Constructor + * @param _description a description of the stat + */ + moFitnessStat(std::string _description = "fitness"): + moStat(Fitness(), _description){} + + /** + * store fitness value + * @param _sol the corresponding solution + */ + virtual void operator()(EOT & _sol) + { + value() = _sol.fitness(); + } + + /** + * @return the name of the class + */ + virtual std::string className(void) const { return "moFitnessStat"; } +}; + +#endif diff --git a/trunk/paradiseo-mo/src/continuator/moMaxNeighborStat.h b/trunk/paradiseo-mo/src/continuator/moMaxNeighborStat.h new file mode 100644 index 000000000..9b54739b7 --- /dev/null +++ b/trunk/paradiseo-mo/src/continuator/moMaxNeighborStat.h @@ -0,0 +1,78 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef moMaxNeighborStat_h +#define moMaxNeighborStat_h + +#include +#include + +/** + * From moNeighborhoodStat, to compute the max fitness in the neighborhood + */ +template< class Neighborhood > +class moMaxNeighborStat : public moStat +{ +public : + typedef typename Neighborhood::EOT EOT ; + typedef typename EOT::Fitness Fitness ; + + using moStat< EOT, Fitness >::value; + + /** + * Default Constructor + * @param _nhStat a neighborhoodStat + */ + moMaxNeighborStat(moNeighborhoodStat & _nhStat): + moStat(Fitness(), "min"), nhStat(_nhStat){} + + /** + * Set the max fitness in the neighborhood + * @param _sol the corresponding solution + */ + virtual void operator()(EOT & _sol){ + value() = nhStat.getMax(); + } + + /** + * @return the class name + */ + virtual std::string className(void) const { return "moMaxNeighborStat"; } + +private: + /** moNeighborhoodStat */ + moNeighborhoodStat & nhStat; +}; + +#endif diff --git a/trunk/paradiseo-mo/src/continuator/moMinNeighborStat.h b/trunk/paradiseo-mo/src/continuator/moMinNeighborStat.h new file mode 100644 index 000000000..bfc215018 --- /dev/null +++ b/trunk/paradiseo-mo/src/continuator/moMinNeighborStat.h @@ -0,0 +1,78 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef moMinNeighborStat_h +#define moMinNeighborStat_h + +#include +#include + +/** + * From moNeighborhoodStat, to compute the min fitness in the neighborhood + */ +template< class Neighborhood > +class moMinNeighborStat : public moStat +{ +public : + typedef typename Neighborhood::EOT EOT ; + typedef typename EOT::Fitness Fitness ; + + using moStat< EOT, Fitness >::value; + + /** + * Default Constructor + * @param _nhStat a neighborhoodStat + */ + moMinNeighborStat(moNeighborhoodStat & _nhStat): + moStat(Fitness(), "min"), nhStat(_nhStat){} + + /** + * Set the worst fitness in the neighborhood + * @param _sol the corresponding solution + */ + virtual void operator()(EOT & _sol){ + value() = nhStat.getMin(); + } + + /** + * @return the class name + */ + virtual std::string className(void) const { return "moMinNeighborStat"; } + +private: + /** moNeighborhoodStat */ + moNeighborhoodStat & nhStat; +}; + +#endif diff --git a/trunk/paradiseo-mo/src/continuator/moNbInfNeighborStat.h b/trunk/paradiseo-mo/src/continuator/moNbInfNeighborStat.h new file mode 100644 index 000000000..9b40de5a8 --- /dev/null +++ b/trunk/paradiseo-mo/src/continuator/moNbInfNeighborStat.h @@ -0,0 +1,81 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef moNbInfNeighborStat_h +#define moNbInfNeighborStat_h + +#include +#include + +/** + * + * From moNeighborhoodStat, to compute the number of solutions in the neighborhood + * with (strictly) lower fitness than the current solution + * +*/ +template< class Neighborhood > +class moNbInfNeighborStat : public moStat +{ +public : + typedef typename Neighborhood::EOT EOT ; + typedef typename EOT::Fitness Fitness ; + + using moStat< EOT, unsigned >::value; + + /** + * Default Constructor + * @param _nhStat a neighborhoodStat + */ + moNbInfNeighborStat(moNeighborhoodStat & _nhStat): + moStat(0, "nb inf"), nhStat(_nhStat){} + + /** + * Set the number of solutions in the neighborhood with (strictly) lower fitness than the current solution + * @param _sol the corresponding solution + */ + virtual void operator()(EOT & _sol){ + value() = nhStat.getNbInf(); + } + + /** + * @return the class name + */ + virtual std::string className(void) const { return "moNbInfNeighborStat"; } + +private: + /** moNeighborhoodStat */ + moNeighborhoodStat & nhStat; +}; + +#endif diff --git a/trunk/paradiseo-mo/src/continuator/moNbSupNeighborStat.h b/trunk/paradiseo-mo/src/continuator/moNbSupNeighborStat.h new file mode 100644 index 000000000..9e2fdfba2 --- /dev/null +++ b/trunk/paradiseo-mo/src/continuator/moNbSupNeighborStat.h @@ -0,0 +1,81 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef moNbSupNeighborStat_h +#define moNbSupNeighborStat_h + +#include +#include + +/** + * + * From moNeighborhoodStat, to compute the number of solutions in the neighborhood + * with higher fitness than the current solution + * +*/ +template< class Neighborhood > +class moNbSupNeighborStat : public moStat +{ +public : + typedef typename Neighborhood::EOT EOT ; + typedef typename EOT::Fitness Fitness ; + + using moStat< EOT, unsigned >::value; + + /** + * Default Constructor + * @param _nhStat a neighborhoodStat + */ + moNbSupNeighborStat(moNeighborhoodStat & _nhStat): + moStat(0, "nb sup"), nhStat(_nhStat){} + + /** + * Set the number of solutions in the neighborhood with better fitness than the current solution + * @param _sol the corresponding solution + */ + virtual void operator()(EOT & _sol){ + value() = nhStat.getNbSup(); + } + + /** + * @return the class name + */ + virtual std::string className(void) const { return "moNbSupNeighborStat"; } + +private: + /** moNeighborhoodStat */ + moNeighborhoodStat & nhStat; +}; + +#endif diff --git a/trunk/paradiseo-mo/src/continuator/moNeighborhoodStat.h b/trunk/paradiseo-mo/src/continuator/moNeighborhoodStat.h new file mode 100644 index 000000000..153c7970a --- /dev/null +++ b/trunk/paradiseo-mo/src/continuator/moNeighborhoodStat.h @@ -0,0 +1,235 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef moNeighborhoodStat_h +#define moNeighborhoodStat_h + +#include + +#include +#include +#include + +/** + * All possible statitic on the neighborhood fitness + * to combine with other specific statistic to print them + */ +template< class Neighborhood > +class moNeighborhoodStat : public moStat +{ +public : + typedef typename Neighborhood::EOT EOT ; + typedef typename Neighborhood::Neighbor Neighbor ; + typedef typename EOT::Fitness Fitness ; + + using moStat< EOT, bool >::value; + + /** + * Default Constructor + * @param _neighborhood a neighborhood + * @param _eval an evaluation function + * @param _neighborComparator a neighbor Comparator + * @param _solNeighborComparator a comparator between a solution and a neighbor + */ + moNeighborhoodStat(Neighborhood& _neighborhood, moEval& _eval, moNeighborComparator& _neighborComparator, moSolNeighborComparator& _solNeighborComparator): + moStat(true, "neighborhood"), + neighborhood(_neighborhood), eval(_eval), + neighborComparator(_neighborComparator), + solNeighborComparator(_solNeighborComparator) + {} + + /** + * Compute classical statistics of a solution's neighborhood + * @param _solution the corresponding solution + */ + virtual void operator()(EOT & _solution){ + Neighbor current ; + Neighbor best ; + Neighbor lowest ; + + if(neighborhood.hasNeighbor(_solution)){ + //init the first neighbor + neighborhood.init(_solution, current); + + //eval the _solution moved with the neighbor and stock the result in the neighbor + eval(_solution, current); + + // init the statistics + value() = true; + + mean = current.fitness(); + sd = mean * mean; + nb = 1; + nbInf = 0; + nbEqual = 0; + nbSup = 0; + + if (solNeighborComparator.equals(_solution, current)) + nbEqual++; + else if (solNeighborComparator(_solution, current)) + nbSup++; + else + nbInf++; + + //initialize the best neighbor + best = current; + lowest = current; + + //test all others neighbors + while (neighborhood.cont(_solution)) { + //next neighbor + neighborhood.next(_solution, current); + //eval + eval(_solution, current); + + mean += current.fitness(); + sd += current.fitness() * current.fitness(); + nb++; + + if (solNeighborComparator.equals(_solution, current)) + nbEqual++; + else if (solNeighborComparator(_solution, current)) + nbSup++; + else + nbInf++; + + //if we found a better neighbor, update the best + if (neighborComparator(best, current)) + best = current; + + if (neighborComparator(current, lowest)) + lowest = current; + } + + max = best.fitness(); + min = lowest.fitness(); + + mean /= nb; + if (nb > 1) + sd = sqrt( (sd - nb * mean * mean) / (nb - 1.0) ); + else + sd = 0.0; + } + else{ + //if _solution hasn't neighbor, + value() = false; + } + } + + /** + * @return the worst fitness value found in the neighborhood + */ + Fitness getMin(){ + return min; + } + + /** + * @return the best fitness value found in the neighborhood + */ + Fitness getMax(){ + return max; + } + + /** + * @return the mean fitness value of the neighborhood + */ + double getMean(){ + return mean; + } + + /** + * @return the standard deviation value of the neighborhood + */ + double getSD(){ + return sd; + } + + /** + * @return the size of the neighborhood + */ + unsigned getSize(){ + return nb; + } + + /** + * @return the number of neighbors having a better fitness than the current solution + */ + unsigned getNbSup(){ + return nbSup; + } + + /** + * @return the number of neighbors having the same fitness than the current solution + */ + unsigned getNbEqual(){ + return nbEqual; + } + + /** + * @return the number of neighbors having a worst fitness than the current solution + */ + unsigned getNbInf() { + return nbInf; + } + + /** + * @return the class name + */ + virtual std::string className(void) const { + return "moNeighborhoodStat"; + } + +private: + + // to explore the neighborhood + Neighborhood& neighborhood ; + moEval& eval; + + // comparator betwenn solution and neighbor or between neighbors + moNeighborComparator& neighborComparator; + moSolNeighborComparator& solNeighborComparator; + + // the stastics of the fitness + Fitness max, min; + //mean and standard deviation + double mean, sd ; + + // number of neighbors in the neighborhood; + unsigned int nb; + + // number of neighbors with lower, equal and higher fitness + unsigned int nbInf, nbEqual, nbSup ; +}; + +#endif diff --git a/trunk/paradiseo-mo/src/continuator/moNeutralDegreeNeighborStat.h b/trunk/paradiseo-mo/src/continuator/moNeutralDegreeNeighborStat.h new file mode 100644 index 000000000..d09994ed4 --- /dev/null +++ b/trunk/paradiseo-mo/src/continuator/moNeutralDegreeNeighborStat.h @@ -0,0 +1,80 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef moNeutralDegreeNeighborStat_h +#define moNeutralDegreeNeighborStat_h + +#include +#include + +/** + * From moNeighborhoodStat, to compute the neutral degree of the solution + * which is the number of solutions in the neighborhood + * with equals fitness + */ +template< class Neighborhood > +class moNeutralDegreeNeighborStat : public moStat +{ +public : + typedef typename Neighborhood::EOT EOT ; + typedef typename EOT::Fitness Fitness ; + + using moStat< EOT, unsigned >::value; + + /** + * Default Constructor + * @param _nhStat a neighborhoodStat + */ + moNeutralDegreeNeighborStat(moNeighborhoodStat & _nhStat): + moStat(0, "neutral degree"), nhStat(_nhStat){} + + /** + * Set the neutral degree of the solution which is the number of solutions in the neighborhood with equals fitness + * @param _sol the corresponding solution + */ + virtual void operator()(EOT & _sol){ + value() = nhStat.getNbEqual(); + } + + /** + * @return the class name + */ + virtual std::string className(void) const { return "moNeutralDegreeNeighborStat"; } + +private: + /** moNeighborhoodStat */ + moNeighborhoodStat & nhStat; +}; + +#endif diff --git a/trunk/paradiseo-mo/src/continuator/moSecondMomentNeighborStat.h b/trunk/paradiseo-mo/src/continuator/moSecondMomentNeighborStat.h new file mode 100644 index 000000000..e7ed41f41 --- /dev/null +++ b/trunk/paradiseo-mo/src/continuator/moSecondMomentNeighborStat.h @@ -0,0 +1,79 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef moSecondMomentNeighborStat_h +#define moSecondMomentNeighborStat_h + +#include +#include + +/** + * From moNeighborhoodStat, to compute the average and the standard deviation of fitness in the neighborhood + */ +template< class Neighborhood > +class moSecondMomentNeighborStat : public moStat > +{ +public : + typedef typename Neighborhood::EOT EOT ; + typedef typename EOT::Fitness Fitness ; + + using moStat< EOT, std::pair >::value; + + /** + * Default Constructor + * @param _nhStat a neighborhoodStat + */ + moSecondMomentNeighborStat(moNeighborhoodStat & _nhStat): + moStat >(std::make_pair(0.0,0.0), "average and stdev"), nhStat(_nhStat){} + + /** + * Set the average and the standard deviation of fitness in the neighborhood + * @param _sol the corresponding solution + */ + virtual void operator()(EOT & _sol){ + value().first = nhStat.getMean(); + value().second = nhStat.getSD(); + } + + /** + * @return the class name + */ + virtual std::string className(void) const { return "moSecondMomentNeighborStat"; } + +private: + /** moNeighborhoodStat */ + moNeighborhoodStat & nhStat; +}; + +#endif diff --git a/trunk/paradiseo-mo/src/continuator/moSizeNeighborStat.h b/trunk/paradiseo-mo/src/continuator/moSizeNeighborStat.h new file mode 100644 index 000000000..8f8d73dcc --- /dev/null +++ b/trunk/paradiseo-mo/src/continuator/moSizeNeighborStat.h @@ -0,0 +1,79 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef moSizeNeighborStat_h +#define moSizeNeighborStat_h + +#include +#include + +/** + * From moNeighborhoodStat, to compute the number of solutions in the neighborhood + * + */ +template< class Neighborhood > +class moSizeNeighborStat : public moStat +{ +public : + typedef typename Neighborhood::EOT EOT ; + typedef typename EOT::Fitness Fitness ; + + using moStat< EOT, unsigned >::value; + + /** + * Default Constructor + * @param _nhStat a neighborhoodStat + */ + moSizeNeighborStat(moNeighborhoodStat & _nhStat): + moStat(0, "size"), nhStat(_nhStat){} + + /** + * Set the number of solutions in the neighborhood + * @param _sol the corresponding solution + */ + virtual void operator()(EOT & _sol){ + value() = nhStat.getSize(); + } + + /** + * @return the class name + */ + virtual std::string className(void) const { return "moSizeNeighborStat"; } + +private: + /** moNeighborhoodStat */ + moNeighborhoodStat & nhStat; +}; + +#endif diff --git a/trunk/paradiseo-mo/src/continuator/moSolutionStat.h b/trunk/paradiseo-mo/src/continuator/moSolutionStat.h new file mode 100644 index 000000000..92f1d353f --- /dev/null +++ b/trunk/paradiseo-mo/src/continuator/moSolutionStat.h @@ -0,0 +1,74 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef moSolutionStat_h +#define moSolutionStat_h + +#include + +/** + * The statistic which only give the current solution + * be careful, the solution is given by copy + * + */ +template +class moSolutionStat : public moStat +{ +public : + using moStat< EOT, EOT >::value; + + /** + * Default Constructor + * @param _description a description of the parameter + */ + moSolutionStat(std::string _description = "solution"): + moStat(EOT(), _description){} + + /** + * Set the solution by copy + * @param _sol the corresponding solution + */ + virtual void operator()(EOT & _sol){ + value() = _sol; + } + + /** + * @return name of the class + */ + virtual std::string className(void) const{ + return "moSolutionStat"; + } +}; + +#endif diff --git a/trunk/paradiseo-mo/src/continuator/moStat.h b/trunk/paradiseo-mo/src/continuator/moStat.h new file mode 100644 index 000000000..955aefeb0 --- /dev/null +++ b/trunk/paradiseo-mo/src/continuator/moStat.h @@ -0,0 +1,67 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef moStat_h +#define moStat_h + +#include + +/** + * The actual class that will be used as base for all statistics + * that need to be calculated over the solution + * It is a moStatBase AND an eoValueParam so it can be used in Monitors. + */ +template +class moStat : public eoValueParam, public moStatBase +{ +public: + + /** + * Default Constructor + * @param _value a default parameter's value + * @param _description a description of the parameter + */ + moStat(T _value, std::string _description): + eoValueParam(_value, _description){} + + /** + * @return name of the class + */ + virtual std::string className(void) const{ + return "moStat"; + } +}; + + +#endif diff --git a/trunk/paradiseo-mo/src/continuator/moStatBase.h b/trunk/paradiseo-mo/src/continuator/moStatBase.h new file mode 100644 index 000000000..b6ef3afd2 --- /dev/null +++ b/trunk/paradiseo-mo/src/continuator/moStatBase.h @@ -0,0 +1,65 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef moStatBase_h +#define moStatBase_h + +#include +#include + +/** + * Base class for all statistics that need to be calculated + * over the solution + * (I guess it is not really necessary? MS. + * Depstd::ends, there might be reasons to have a stat that is not an eoValueParam, + * but maybe I'm just kidding myself, MK) +*/ +template +class moStatBase : public eoUF +{ +public: + /** + * last call of a statistical operator + */ + virtual void lastCall(EOT &) {} + + /** + * @return name of the class + */ + virtual std::string className(void) const{ + return "moStatBase"; + } +}; + +#endif diff --git a/trunk/paradiseo-mo/src/continuator/moTrueContinuator.h b/trunk/paradiseo-mo/src/continuator/moTrueContinuator.h new file mode 100644 index 000000000..bdf3a42fb --- /dev/null +++ b/trunk/paradiseo-mo/src/continuator/moTrueContinuator.h @@ -0,0 +1,68 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moTrueContinuator_h +#define _moTrueContinuator_h + +#include + +/** + * Continuator always return True + */ +template< class NH > +class moTrueContinuator : public moContinuator +{ +public: + typedef typename NH::EOT EOT ; + + // empty constructor + moTrueContinuator() {} ; + + /** + *@param _solution a solution + *@return always true + */ + virtual bool operator()(EOT & _solution) { + return true; + } + + /** + * NOTHING TO DO + * @param _solution a solution + */ + virtual void init(EOT & _solution) {} + +}; + +#endif diff --git a/trunk/paradiseo-mo/src/eval/moEval.h b/trunk/paradiseo-mo/src/eval/moEval.h new file mode 100644 index 000000000..97fa07ed2 --- /dev/null +++ b/trunk/paradiseo-mo/src/eval/moEval.h @@ -0,0 +1,51 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef moEval_H +#define moEval_H + +#include + +/** + * Abstract class for the evaluation + */ +template +class moEval : public eoBF +{ +public: + typedef typename Neighbor::EOT EOT; + typedef typename EOT::Fitness Fitness; +}; + +#endif diff --git a/trunk/paradiseo-mo/src/eval/moFullEvalByCopy.h b/trunk/paradiseo-mo/src/eval/moFullEvalByCopy.h new file mode 100644 index 000000000..e5be31d1b --- /dev/null +++ b/trunk/paradiseo-mo/src/eval/moFullEvalByCopy.h @@ -0,0 +1,82 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef moFullEvalByCopy_H +#define moFullEvalByCopy_H + +#include +#include + +/** + * Evaluation by copy + */ +template +class moFullEvalByCopy : public moEval +{ +public: + typedef typename moEval::EOT EOT; + typedef typename moEval::Fitness Fitness; + + /** + * Ctor + * @param _eval the full evaluation object + */ + moFullEvalByCopy(eoEvalFunc & _eval) : eval(_eval) {} + + /** + * Full evaluation of the neighbor by copy + * @param _sol current solution + * @param _neighbor the neighbor to be evaluated + */ + void operator()(EOT & _sol, Neighbor & _neighbor) + { + // tmp solution + EOT tmp(_sol); + // move tmp solution wrt _neighbor + _neighbor.move(tmp); + // eval copy + tmp.invalidate(); + eval(tmp); + // set the fitness value to the neighbor + _neighbor.fitness(tmp.fitness()); + } + + +private: + /** the full evaluation object */ + eoEvalFunc & eval; + +}; + +#endif diff --git a/trunk/paradiseo-mo/src/eval/moFullEvalByModif.h b/trunk/paradiseo-mo/src/eval/moFullEvalByModif.h new file mode 100644 index 000000000..9567aa31d --- /dev/null +++ b/trunk/paradiseo-mo/src/eval/moFullEvalByModif.h @@ -0,0 +1,95 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef moFullEvalByModif_H +#define moFullEvalByModif_H + +#include +#include + +/** + * Full evaluation to use with a moBackableNeighbor + */ +template +class moFullEvalByModif : public moEval +{ +public: + typedef typename moEval::EOT EOT; + typedef typename moEval::Fitness Fitness; + + /** + * Ctor + * @param _eval the full evaluation object + */ + moFullEvalByModif(eoEvalFunc& _eval) : eval(_eval) {} + + /** + * Full evaluation of the neighbor by copy + * @param _sol current solution + * @param _neighbor the neighbor to be evaluated + */ + void operator()(EOT & _sol, BackableNeighbor & _neighbor) + { + // tmp fitness value of the current solution + Fitness tmpFit; + + + // save current fitness value + tmpFit = _sol.fitness(); + + // move the current solution wrt _neighbor + _neighbor.move(_sol); + + // eval the modified solution + _sol.invalidate(); + eval(_sol); + + // set the fitness value to the neighbor + _neighbor.fitness(_sol.fitness()); + + // move the current solution back + _neighbor.moveBack(_sol); + + // set the fitness back + _sol.fitness(tmpFit); + } + + +private: + /** the full evaluation object */ + eoEvalFunc & eval; + +}; + +#endif diff --git a/trunk/paradiseo-mo/src/explorer/moFirstImprExplorer.h b/trunk/paradiseo-mo/src/explorer/moFirstImprExplorer.h new file mode 100644 index 000000000..15710861c --- /dev/null +++ b/trunk/paradiseo-mo/src/explorer/moFirstImprExplorer.h @@ -0,0 +1,162 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moFirstImprexplorer_h +#define _moFirstImprexplorer_h + +#include +#include +#include + +/** + * Explorer for a first imporvement heuristic + */ +template< class Neighborhood > +class moFirstImprExplorer : public moNeighborhoodExplorer +{ +public: + typedef typename Neighborhood::EOT EOT ; + typedef typename Neighborhood::Neighbor Neighbor ; + + using moNeighborhoodExplorer::neighborhood; + using moNeighborhoodExplorer::eval; + + /** + * Constructor + * @param _neighborhood the neighborhood + * @param _eval the evaluation function + * @param _neighborComparator a neighbor comparator + * @param _solNeighborComparator a solution vs neighbor comparator + */ + moFirstImprExplorer(Neighborhood& _neighborhood, moEval& _eval, moNeighborComparator& _neighborComparator, moSolNeighborComparator& _solNeighborComparator) : moNeighborhoodExplorer(_neighborhood, _eval), neighborComparator(_neighborComparator), solNeighborComparator(_solNeighborComparator) { + isAccept = false; + current=new Neighbor(); + } + + /** + * Destructor + */ + ~moFirstImprExplorer(){ + delete current; + } + + /** + * initParam: NOTHING TO DO + */ + virtual void initParam(EOT & solution){}; + + /** + * updateParam: NOTHING TO DO + */ + virtual void updateParam(EOT & solution){}; + + /** + * terminate: NOTHING TO DO + */ + virtual void terminate(EOT & solution){}; + + /** + * Explore the neighborhood of a solution + * @param _solution + */ + virtual void operator()(EOT & _solution){ + + //Test if _solution has a Neighbor + if(neighborhood.hasNeighbor(_solution)){ + //init the first neighbor + neighborhood.init(_solution, (*current)); + + //eval the _solution moved with the neighbor and stock the result in the neighbor + eval(_solution, (*current)); + + //test all others neighbors + while (! solNeighborComparator(_solution, *current) && neighborhood.cont(_solution)) { + //next neighbor + neighborhood.next(_solution, (*current)); + //eval + eval(_solution, (*current)); + } + } + else{ + //if _solution hasn't neighbor, + isAccept=false; + } + }; + + /** + * continue if a move is accepted + * @param _solution the solution + * @return true if an ameliorated neighbor was be found + */ + virtual bool isContinue(EOT & _solution) { + return isAccept ; + }; + + /** + * move the solution with the best neighbor + * @param _solution the solution to move + */ + virtual void move(EOT & _solution) { + //move the solution + (*current).move(_solution); + //update its fitness + _solution.fitness((*current).fitness()); + }; + + /** + * accept test if an amelirated neighbor was be found + * @param _solution the solution + * @return true if the best neighbor ameliorate the fitness + */ + virtual bool accept(EOT & _solution) { + if(neighborhood.hasNeighbor(_solution)){ + isAccept = solNeighborComparator(_solution, (*current)) ; + } + return isAccept; + }; + +private: + // comparator betwenn solution and neighbor or between neighbors + moNeighborComparator& neighborComparator; + moSolNeighborComparator& solNeighborComparator; + + //Pointer on the best and the current neighbor + Neighbor* current; + + // true if the move is accepted + bool isAccept ; +}; + + +#endif diff --git a/trunk/paradiseo-mo/src/explorer/moHCneutralExplorer.h b/trunk/paradiseo-mo/src/explorer/moHCneutralExplorer.h new file mode 100644 index 000000000..9176d1c0d --- /dev/null +++ b/trunk/paradiseo-mo/src/explorer/moHCneutralExplorer.h @@ -0,0 +1,134 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moHCneutralExplorer_h +#define _moHCneutralExplorer_h + +#include +#include +#include + +/** + * Explorer for a neutral Hill-climbing + */ +template< class Neighborhood > +class moHCneutralExplorer : public moSimpleHCneutralExplorer +{ +public: + typedef typename Neighborhood::EOT EOT ; + typedef typename Neighborhood::Neighbor Neighbor ; + + using moNeighborhoodExplorer::neighborhood; + using moSimpleHCneutralExplorer::solNeighborComparator; + using moSimpleHCneutralExplorer::isAccept; + using moSimpleHCneutralExplorer::bestVector; + using moSimpleHCneutralExplorer::initParam; + using moSimpleHCneutralExplorer::updateParam; + + /** + * Constructor + * @param _neighborhood the neighborhood + * @param _eval the evaluation function + * @param _neighborComparator a neighbor comparator + * @param _solNeighborComparator a solution vs neighbor comparator + * @param _nbStep maximum step to do + */ + moHCneutralExplorer(Neighborhood& _neighborhood, + moEval& _eval, + moNeighborComparator& _neighborComparator, + moSolNeighborComparator& _solNeighborComparator, + unsigned _nbStep) : + moSimpleHCneutralExplorer(_neighborhood, _eval, _neighborComparator, _solNeighborComparator), + nbStep(_nbStep){ + //Some cycle is possible with equals fitness solutions if the neighborhood is not random + if(!neighborhood.isRandom()){ + std::cout << "moHCneutralExplorer::Warning -> the neighborhood used is not random" << std::endl; + } + } + + /** + * Destructor + */ + ~moHCneutralExplorer(){ + } + + /** + * initial number of step + */ + virtual void initParam(EOT & solution){ + moSimpleHCneutralExplorer::initParam(solution); + + step = 0; + }; + + /** + * one more step + */ + virtual void updateParam(EOT & solution){ + moSimpleHCneutralExplorer::updateParam(solution); + + step++; + }; + + /** + * continue if there is a neighbor and it is remainds some steps to do + * @param _solution the solution + * @return true there is some steps to do + */ + virtual bool isContinue(EOT & _solution) { + return (step < nbStep) && isAccept ; + }; + + /** + * accept test if an ameliorated neighbor was be found + * @param _solution the solution + * @return true if the best neighbor ameliorate the fitness or is equals + */ + virtual bool accept(EOT & _solution) { + if(neighborhood.hasNeighbor(_solution)) + isAccept = solNeighborComparator(_solution, bestVector[0]) || solNeighborComparator.equals(_solution, bestVector[0]) ; + return isAccept; + }; + +private: + // current number of step + unsigned int step; + + // maximum number of steps to do + unsigned int nbStep; + +}; + + +#endif diff --git a/trunk/paradiseo-mo/src/explorer/moMetropolisHastingExplorer.h b/trunk/paradiseo-mo/src/explorer/moMetropolisHastingExplorer.h new file mode 100644 index 000000000..392091307 --- /dev/null +++ b/trunk/paradiseo-mo/src/explorer/moMetropolisHastingExplorer.h @@ -0,0 +1,194 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moMetropolisHastingExplorer_h +#define _moMetropolisHastingExplorer_h + +#include + +#include +#include +#include + +#include + +/** + * Explorer for the Metropolis-Hasting Sampling + * Only the symetric case is considered when Q(x,y) = Q(y,x) + * Fitness must be > 0 + */ +template< class Neighborhood > +class moMetropolisHastingExplorer : public moNeighborhoodExplorer +{ +public: + typedef typename Neighborhood::EOT EOT ; + typedef typename Neighborhood::Neighbor Neighbor ; + + using moNeighborhoodExplorer::neighborhood; + using moNeighborhoodExplorer::eval; + + /** + * Constructor + * @param _neighborhood the neighborhood + * @param _eval the evaluation function + * @param _neighborComparator a neighbor comparator + * @param _solNeighborComparator a solution vs neighbor comparator + * @param _nbStep maximum number of step to do + */ + moMetropolisHastingExplorer(Neighborhood& _neighborhood, moEval& _eval, moNeighborComparator& _neighborComparator, moSolNeighborComparator& _solNeighborComparator, unsigned int _nbStep) : moNeighborhoodExplorer(_neighborhood, _eval), neighborComparator(_neighborComparator), solNeighborComparator(_solNeighborComparator), nbStep(_nbStep) { + isAccept = false; + current=new Neighbor(); + if(!neighborhood.isRandom()){ + std::cout << "moMetropolisHastingExplorer::Warning -> the neighborhood used is not random" << std::endl; + } + } + + /** + * Destructor + */ + ~moMetropolisHastingExplorer(){ + delete current; + } + + /** + * initialization of the number of step to be done + * @param _solution the solution (unused here) + */ + virtual void initParam(EOT & _solution){ + step = 0; + isAccept = true; + }; + + /** + * increase the number of step + * @param _solution the solution (unused here) + */ + virtual void updateParam(EOT & _solution){ + step++; + }; + + /** + * terminate: NOTHING TO DO + * @param _solution the solution (unused here) + */ + virtual void terminate(EOT & _solution){}; + + /** + * Explore the neighborhood of a solution + * @param _solution + */ + virtual void operator()(EOT & _solution){ + //Test if _solution has a Neighbor + if(neighborhood.hasNeighbor(_solution)){ + //init the first neighbor + neighborhood.init(_solution, (*current)); + + //eval the _solution moved with the neighbor and stock the result in the neighbor + eval(_solution, (*current)); + } + else{ + //if _solution hasn't neighbor, + isAccept=false; + } + }; + + /** + * continue if there is a neighbor and it is remainds some steps to do + * @param _solution the solution + * @return true there is some steps to do + */ + virtual bool isContinue(EOT & _solution) { + return (step < nbStep) ; + }; + + /** + * move the solution with the best neighbor + * @param _solution the solution to move + */ + virtual void move(EOT & _solution) { + //move the solution + (*current).move(_solution); + //update its fitness + _solution.fitness((*current).fitness()); + }; + + /** + * accept test if an ameliorated neighbor was be found + * @param _solution the solution + * @return true if the best neighbor ameliorate the fitness + */ + virtual bool accept(EOT & _solution) { + double alpha=0.0; + if(neighborhood.hasNeighbor(_solution)){ + if (solNeighborComparator(_solution, *current)) + isAccept = true; + else{ + if(_solution.fitness() != 0){ + if( (double)current->fitness() < (double)_solution.fitness()) // maximizing + alpha = (double) current->fitness() / (double) _solution.fitness(); + else //minimizing + alpha = (double) _solution.fitness() / (double) current->fitness(); + isAccept = (rng.uniform() < alpha) ; + } + else{ + if( (double)current->fitness() < (double)_solution.fitness()) // maximizing + isAccept = true; + else + isAccept = false; + } + } + } + return isAccept; + }; + +private: + // comparator betwenn solution and neighbor or between neighbors + moNeighborComparator& neighborComparator; + moSolNeighborComparator& solNeighborComparator; + + // current number of step + unsigned int step; + + // maximum number of steps to do + unsigned int nbStep; + + //Pointer on the best and the current neighbor + Neighbor* current; + + // true if the move is accepted + bool isAccept ; +}; + + +#endif diff --git a/trunk/paradiseo-mo/src/explorer/moNeighborhoodExplorer.h b/trunk/paradiseo-mo/src/explorer/moNeighborhoodExplorer.h new file mode 100644 index 000000000..4a2a13f29 --- /dev/null +++ b/trunk/paradiseo-mo/src/explorer/moNeighborhoodExplorer.h @@ -0,0 +1,131 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _neighborhoodExplorer_h +#define _neighborhoodExplorer_h + +//EO inclusion +#include + +#include +#include + +/** + * Explore the neighborhood + */ +template< class NH > +class moNeighborhoodExplorer : public eoUF +{ +public: + typedef NH Neighborhood ; + typedef typename Neighborhood::EOT EOT ; + typedef typename Neighborhood::Neighbor Neighbor ; + + /** + * Constructor with a Neighborhood and evaluation function + * @param _neighborhood the neighborhood + * @param _eval the evaluation function + */ + moNeighborhoodExplorer(Neighborhood& _neighborhood, moEval& _eval):neighborhood(_neighborhood), eval(_eval), isMoved(false) {} + + /** + * Init Search parameters + * @param _solution the solution to explore + */ + virtual void initParam (EOT& _solution) = 0 ; + + /** + * Update Search parameters + * @param _solution the solution to explore + */ + virtual void updateParam (EOT& _solution) = 0 ; + + /** + * Test if the exploration continue or not + * @param _solution the solution to explore + * @return true if the exploration continue, else return false + */ + virtual bool isContinue(EOT& _solution) = 0 ; + + /** + * Move a solution + * @param _solution the solution to explore + */ + virtual void move(EOT& _solution) = 0 ; + + /** + * Test if a solution is accepted + * @param _solution the solution to explore + * @return true if the solution is accepted, else return false + */ + virtual bool accept(EOT& _solution) = 0 ; + + /** + * Terminate the search + * @param _solution the solution to explore + */ + virtual void terminate(EOT& _solution) = 0 ; + + + /** + * Getter for variable "isMoved" + * @return true if move is applied + */ + bool moveApplied(){ + return isMoved; + } + + /** + * Setter for variable "isMoved" + * @param _isMoved + */ + void moveApplied(bool _isMoved){ + isMoved=_isMoved; + } + + /** + * Return the class id. + * @return the class name as a std::string + */ + virtual std::string className() const { + return "moNeighborhoodExplorer"; + } + +protected: + Neighborhood & neighborhood; + moEval& eval; + bool isMoved; +}; + +#endif diff --git a/trunk/paradiseo-mo/src/explorer/moRandomNeutralWalkExplorer.h b/trunk/paradiseo-mo/src/explorer/moRandomNeutralWalkExplorer.h new file mode 100644 index 000000000..e8cf78f38 --- /dev/null +++ b/trunk/paradiseo-mo/src/explorer/moRandomNeutralWalkExplorer.h @@ -0,0 +1,180 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moRandomNeutralWalkexplorer_h +#define _moRandomNeutralWalkexplorer_h + +#include +#include + +/** + * Explorer for a random neutral walk + * accept the movement when the neighbor has the same fitnes + * To sample the neutral networks by random walk, there is no memory + * neighborhood must be explored in random order + */ +template< class Neighborhood > +class moRandomNeutralWalkExplorer : public moNeighborhoodExplorer +{ +public: + typedef typename Neighborhood::EOT EOT ; + typedef typename Neighborhood::Neighbor Neighbor ; + + using moNeighborhoodExplorer::neighborhood; + using moNeighborhoodExplorer::eval; + + /** + * Constructor + * @param _neighborhood the neighborhood + * @param _eval the evaluation function + * @param _solNeighborComparator a solution vs neighbor comparator + * @param _nbStep maximum number of step to do + */ + moRandomNeutralWalkExplorer(Neighborhood& _neighborhood, moEval& _eval, + moSolNeighborComparator& _solNeighborComparator, + unsigned _nbStep): + moNeighborhoodExplorer(_neighborhood, _eval), + solNeighborComparator(_solNeighborComparator), + nbStep(_nbStep) { + isAccept = false; + current=new Neighbor(); + if(!neighborhood.isRandom()){ + std::cout << "moRandomNeutralWalkExplorer::Warning -> the neighborhood used is not random" << std::endl; + } + } + + /** + * Destructor + */ + ~moRandomNeutralWalkExplorer(){ + delete current; + } + + /** + * initialization of the number of step to be done + */ + virtual void initParam(EOT & solution){ + step = 0; + isAccept = true; + }; + + /** + * increase the number of step + */ + virtual void updateParam(EOT & solution){ + step++; + }; + + /** + * terminate: NOTHING TO DO + */ + virtual void terminate(EOT & solution){}; + + /** + * Explore the neighborhood of a solution + * @param _solution + */ + virtual void operator()(EOT & _solution){ + //Test if _solution has a Neighbor + if(neighborhood.hasNeighbor(_solution)){ + //init the first neighbor + neighborhood.init(_solution, (*current)); + + //eval the _solution moved with the neighbor and stock the result in the neighbor + eval(_solution, (*current)); + + //test all others neighbors + while (! solNeighborComparator.equals(_solution, *current) && neighborhood.cont(_solution)) { + //next neighbor + neighborhood.next(_solution, (*current)); + //eval + eval(_solution, (*current)); + } + } + else{ + //if _solution hasn't neighbor, + isAccept=false; + } + }; + + /** + * continue if there is a neighbor and it is remainds some steps to do + * @param _solution the solution + * @return true there is some steps to do + */ + virtual bool isContinue(EOT & _solution) { + return (step < nbStep) && isAccept ; + }; + + /** + * move the solution with the best neighbor + * @param _solution the solution to move + */ + virtual void move(EOT & _solution) { + //move the solution + (*current).move(_solution); + //update its fitness + _solution.fitness((*current).fitness()); + }; + + /** + * accept test if an ameliorated neighbor was be found + * @param _solution the solution + * @return true if the best neighbor ameliorate the fitness + */ + virtual bool accept(EOT & _solution) { + if(neighborhood.hasNeighbor(_solution)) + isAccept = solNeighborComparator.equals(_solution, (*current)) ; + return isAccept; + }; + +private: + // comparator betwenn solution and neighbor or between neighbors + moSolNeighborComparator& solNeighborComparator; + + // current number of step + unsigned int step; + + // maximum number of steps to do + unsigned int nbStep; + + //Pointer on the best and the current neighbor + Neighbor* current; + + // true if the move is accepted + bool isAccept ; +}; + + +#endif diff --git a/trunk/paradiseo-mo/src/explorer/moRandomWalkExplorer.h b/trunk/paradiseo-mo/src/explorer/moRandomWalkExplorer.h new file mode 100644 index 000000000..3e975366b --- /dev/null +++ b/trunk/paradiseo-mo/src/explorer/moRandomWalkExplorer.h @@ -0,0 +1,166 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moRandomWalkexplorer_h +#define _moRandomWalkexplorer_h + +#include +#include +#include + +/** + * Explorer for a random walk explorer + */ +template< class Neighborhood > +class moRandomWalkExplorer : public moNeighborhoodExplorer +{ +public: + typedef typename Neighborhood::EOT EOT ; + typedef typename Neighborhood::Neighbor Neighbor ; + + using moNeighborhoodExplorer::neighborhood; + using moNeighborhoodExplorer::eval; + + /** + * Constructor + * @param _neighborhood the neighborhood + * @param _eval the evaluation function + * @param _nbStep maximum number of step to do + */ + moRandomWalkExplorer(Neighborhood& _neighborhood, moEval& _eval, unsigned _nbStep) : moNeighborhoodExplorer(_neighborhood, _eval), nbStep(_nbStep) { + isAccept = false; + current=new Neighbor(); + // number of step done + step = 0; + if(!neighborhood.isRandom()){ + std::cout << "moRandomWalkExplorer::Warning -> the neighborhood used is not random" << std::endl; + } + } + + /** + * Destructor + */ + ~moRandomWalkExplorer(){ + delete current; + } + + /** + * initialization of the number of step to be done + */ + virtual void initParam(EOT & solution){ + step = 0; + isAccept = true; + }; + + /** + * increase the number of step + */ + virtual void updateParam(EOT & solution){ + step++; + }; + + /** + * terminate: NOTHING TO DO + */ + virtual void terminate(EOT & solution){}; + + /** + * Explore the neighborhood with only one random solution + * @param _solution + */ + virtual void operator()(EOT & _solution){ + + //Test if _solution has a Neighbor + if(neighborhood.hasNeighbor(_solution)){ + //init the first neighbor + neighborhood.init(_solution, (*current)); + + //eval the _solution moved with the neighbor and stock the result in the neighbor + eval(_solution, (*current)); + + isAccept = true; + } + else{ + //if _solution hasn't neighbor, + isAccept=false; + } + }; + + /** + * continue if there is a neighbor and it is remainds some steps to do + * @param _solution the solution + * @return true there is some steps to do + */ + virtual bool isContinue(EOT & _solution) { + return (step < nbStep) && isAccept ; + }; + + /** + * move the solution with the best neighbor + * @param _solution the solution to move + */ + virtual void move(EOT & _solution) { + //move the solution + (*current).move(_solution); + //update its fitness + _solution.fitness((*current).fitness()); + }; + + /** + * accept test if an amelirated neighbor was be found + * @param _solution the solution + * @return true if the best neighbor ameliorate the fitness + */ + virtual bool accept(EOT & _solution) { + if(neighborhood.hasNeighbor(_solution)) + isAccept = true ; + return isAccept; + }; + +private: + // current number of step + unsigned int step; + + // maximum number of steps to do + unsigned int nbStep; + + //Pointer on the best and the current neighbor + Neighbor* current; + + // true if the move is accepted + bool isAccept ; +}; + + +#endif diff --git a/trunk/paradiseo-mo/src/explorer/moSimpleHCexplorer.h b/trunk/paradiseo-mo/src/explorer/moSimpleHCexplorer.h new file mode 100644 index 000000000..6c92136b2 --- /dev/null +++ b/trunk/paradiseo-mo/src/explorer/moSimpleHCexplorer.h @@ -0,0 +1,182 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moSimpleHCexplorer_h +#define _moSimpleHCexplorer_h + +#include +#include +#include + +/** + * Explorer for a simple Hill-climbing + */ +template< class Neighborhood > +class moSimpleHCexplorer : public moNeighborhoodExplorer +{ +public: + typedef typename Neighborhood::EOT EOT ; + typedef typename Neighborhood::Neighbor Neighbor ; + + using moNeighborhoodExplorer::neighborhood; + using moNeighborhoodExplorer::eval; + + /** + * Constructor + * @param _neighborhood the neighborhood + * @param _eval the evaluation function + * @param _neighborComparator a neighbor comparator + * @param _solNeighborComparator solution vs neighbor comparator + */ + moSimpleHCexplorer(Neighborhood& _neighborhood, moEval& _eval, moNeighborComparator& _neighborComparator, moSolNeighborComparator& _solNeighborComparator) : moNeighborhoodExplorer(_neighborhood, _eval), neighborComparator(_neighborComparator), solNeighborComparator(_solNeighborComparator) { + isAccept = false; + current=new Neighbor(); + best=new Neighbor(); + } + + /** + * Destructor + */ + ~moSimpleHCexplorer(){ + delete current; + delete best; + } + + /** + * initParam: NOTHING TO DO + */ + virtual void initParam(EOT & solution){}; + + /** + * updateParam: NOTHING TO DO + */ + virtual void updateParam(EOT & solution){}; + + /** + * terminate: NOTHING TO DO + */ + virtual void terminate(EOT & solution){}; + + /** + * Explore the neighborhood of a solution + * @param _solution + */ + virtual void operator()(EOT & _solution){ + + //est qu'on peut initializer + //Test if _solution has a Neighbor + if(neighborhood.hasNeighbor(_solution)){ + //init the first neighbor + neighborhood.init(_solution, (*current)); + + //eval the _solution moved with the neighbor and stock the result in the neighbor + eval(_solution, (*current)); + + //initialize the best neighbor + (*best) = (*current); + + //test all others neighbors + while (neighborhood.cont(_solution)) { + //next neighbor + neighborhood.next(_solution, (*current)); + //eval + eval(_solution, (*current)); + //if we found a better neighbor, update the best + if (neighborComparator((*best), (*current))) { + (*best) = (*current); + } + } + + } + else{ + //if _solution hasn't neighbor, + isAccept=false; + } + }; + + /** + * continue if a move is accepted + * @param _solution the solution + * @return true if an ameliorated neighbor was be found + */ + virtual bool isContinue(EOT & _solution) { + return isAccept ; + }; + + /** + * move the solution with the best neighbor + * @param _solution the solution to move + */ + virtual void move(EOT & _solution) { + //move the solution + (*best).move(_solution); + //update its fitness + _solution.fitness((*best).fitness()); + }; + + /** + * accept test if an amelirated neighbor was be found + * @param _solution the solution + * @return true if the best neighbor ameliorate the fitness + */ + virtual bool accept(EOT & _solution) { + if(neighborhood.hasNeighbor(_solution)){ + isAccept = solNeighborComparator(_solution, (*best)) ; + } + return isAccept; + }; + + /** + * Return the class id. + * @return the class name as a std::string + */ + virtual std::string className() const { + return "moSimpleHCexplorer"; + } + +private: + // comparator betwenn solution and neighbor or between neighbors + moNeighborComparator& neighborComparator; + moSolNeighborComparator& solNeighborComparator; + + //Pointer on the best and the current neighbor + Neighbor* best; + Neighbor* current; + + // true if the move is accepted + bool isAccept ; +}; + + +#endif diff --git a/trunk/paradiseo-mo/src/explorer/moSimpleHCneutralExplorer.h b/trunk/paradiseo-mo/src/explorer/moSimpleHCneutralExplorer.h new file mode 100644 index 000000000..6df1b3959 --- /dev/null +++ b/trunk/paradiseo-mo/src/explorer/moSimpleHCneutralExplorer.h @@ -0,0 +1,193 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moSimpleHCneutralExplorer_h +#define _moSimpleHCneutralExplorer_h + +#include +#include +#include +#include +#include + +/** + * Explorer for a simple neutral Hill-climbing + */ +template< class Neighborhood > +class moSimpleHCneutralExplorer : public moNeighborhoodExplorer +{ +public: + typedef typename Neighborhood::EOT EOT ; + typedef typename Neighborhood::Neighbor Neighbor ; + + using moNeighborhoodExplorer::neighborhood; + using moNeighborhoodExplorer::eval; + + /** + * Constructor + * @param _neighborhood the neighborhood + * @param _eval the evaluation function + * @param _neighborComparator a neighbor comparator + * @param _solNeighborComparator solution vs neighbor comparator + */ + moSimpleHCneutralExplorer(Neighborhood& _neighborhood, + moEval& _eval, + moNeighborComparator& _neighborComparator, + moSolNeighborComparator& _solNeighborComparator) : + moNeighborhoodExplorer(_neighborhood, _eval), + neighborComparator(_neighborComparator), + solNeighborComparator(_solNeighborComparator) { + isAccept = false; + current=new Neighbor(); + } + + /** + * Destructor + */ + ~moSimpleHCneutralExplorer(){ + delete current; + } + + /** + * empty the vector of best solutions + */ + virtual void initParam(EOT & solution){ + // delete all the best solutions + bestVector.clear(); + }; + + /** + * empty the vector of best solutions + */ + virtual void updateParam(EOT & solution){ + // delete all the best solutions + bestVector.clear(); + }; + + /** + * terminate: NOTHING TO DO + */ + virtual void terminate(EOT & solution){}; + + /** + * Explore the neighborhood of a solution + * @param _solution + */ + virtual void operator()(EOT & _solution){ + + //Test if _solution has a Neighbor + if(neighborhood.hasNeighbor(_solution)){ + //init the first neighbor + neighborhood.init(_solution, (*current)); + + //eval the _solution moved with the neighbor and stock the result in the neighbor + eval(_solution, (*current)); + + //initialize the best neighbor + bestVector.push_back(*current); + + //test all others neighbors + while (neighborhood.cont(_solution)) { + //next neighbor + neighborhood.next(_solution, (*current)); + + //eval + eval(_solution, (*current)); + + //if we found a better neighbor, update the best + if (neighborComparator(bestVector[0], (*current))) { + bestVector.clear(); + bestVector.push_back(*current); + } + else if (neighborComparator.equals((*current), bestVector[0])) //if the current is equals to previous best solutions then update vector of the best solution + bestVector.push_back(*current); + } + } + else { + //if _solution hasn't neighbor, + isAccept=false; + } + }; + + /** + * continue if a move is accepted + * @param _solution the solution + * @return true if an ameliorated neighbor was be found + */ + virtual bool isContinue(EOT & _solution) { + return isAccept ; + }; + + /** + * move the solution with the best neighbor + * @param _solution the solution to move + */ + virtual void move(EOT & _solution) { + // choose randomly one of the best solutions + unsigned int i = rng.random(bestVector.size()); + + //move the solution + bestVector[i].move(_solution); + + //update its fitness + _solution.fitness(bestVector[i].fitness()); + }; + + /** + * accept test if an amelirated neighbor was be found + * @param _solution the solution + * @return true if the best neighbor ameliorate the fitness + */ + virtual bool accept(EOT & _solution) { + if(neighborhood.hasNeighbor(_solution)) + isAccept = solNeighborComparator(_solution, bestVector[0]) ; + return isAccept; + }; + +protected: + // comparator betwenn solution and neighbor or between neighbors + moNeighborComparator& neighborComparator; + moSolNeighborComparator& solNeighborComparator; + + // the best solutions in the neighborhood + std::vector bestVector; + //Pointer on the current neighbor + Neighbor* current; + + // true if the move is accepted + bool isAccept ; +}; + + +#endif diff --git a/trunk/paradiseo-mo/src/explorer/moTSExplorer.h b/trunk/paradiseo-mo/src/explorer/moTSExplorer.h new file mode 100644 index 000000000..173ac90f3 --- /dev/null +++ b/trunk/paradiseo-mo/src/explorer/moTSExplorer.h @@ -0,0 +1,255 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moTSExplorer_h +#define _moTSExplorer_h + +#include +#include +#include +#include +#include +#include +#include + + +/** + * Explorer for a Tabu Search + */ +template< class Neighborhood > +class moTSExplorer : public moNeighborhoodExplorer +{ +public: + typedef typename Neighborhood::EOT EOT ; + typedef typename Neighborhood::Neighbor Neighbor ; + + /** + * Constructor + * @param _neighborhood the neighborhood + * @param _eval the evaluation function + * @param _neighborComparator a neighbor comparator + * @param _solNeighborComparator a comparator between a solution and a neighbor + * @param _tabuList the tabu list + * @param _intensification the intensification box + * @param _diversification the diversification box + * @param _aspiration the aspiration criteria + */ + moTSExplorer(Neighborhood& _neighborhood, + moEval& _eval, + moNeighborComparator& _neighborComparator, + moSolNeighborComparator& _solNeighborComparator, + moTabuList & _tabuList, + moIntensification & _intensification, + moDiversification & _diversification, + moAspiration & _aspiration + ) : + moNeighborhoodExplorer(_neighborhood, _eval), neighborComparator(_neighborComparator), solNeighborComparator(_solNeighborComparator), + tabuList(_tabuList), intensification(_intensification), diversification(_diversification), aspiration(_aspiration) + { + isAccept = false; + current=new Neighbor(); + best=new Neighbor(); + } + + /** + * Destructor + */ + ~moTSExplorer(){ + delete current; + delete best; + } + + /** + * init tabu list, intensification box, diversification box and aspiration criteria + * @param _solution + */ + virtual void initParam(EOT& _solution) + { + tabuList.init(_solution); + intensification.init(_solution); + diversification.init(_solution); + aspiration.init(_solution); + bestSoFar=_solution; + }; + + + /** + * update params of tabu list, intensification box, diversification box and aspiration criteria + * @param _solution + */ + virtual void updateParam(EOT& _solution) + { + if ((*this).moveApplied()){ + tabuList.add(_solution, *best); + intensification.add(_solution, *best); + diversification.add(_solution, *best); + if(_solution.fitness() > bestSoFar.fitness()) + bestSoFar = _solution; + } + tabuList.update(_solution, *best); + intensification.update(_solution, *best); + diversification.update(_solution, *best); + aspiration.update(_solution, *best); + }; + + + /** + * terminate : _solution becomes the best so far + */ + virtual void terminate(EOT & _solution){ + _solution= bestSoFar; + }; + + + /** + * Explore the neighborhood of a solution + * @param _solution + */ + virtual void operator()(EOT & _solution) + { + bool found=false; + intensification(_solution); + diversification(_solution); + if(neighborhood.hasNeighbor(_solution)) + { + //init the current neighbor + neighborhood.init(_solution, *current); + //eval the current neighbor + eval(_solution, *current); + + //Find the first non-tabu element + if ( (!tabuList.check(_solution, *current)) || aspiration(_solution, *current) ){ + // set best + (*best)= (*current); + found=true; + } + while(neighborhood.cont(_solution) && !found){ + //next neighbor + neighborhood.next(_solution, (*current)); + //eval + eval(_solution, (*current)); + + if ( (!tabuList.check(_solution, *current)) || aspiration(_solution, *current) ){ + // set best + (*best)=(*current); + found=true; + } + } + //Explore the neighborhood + if(found){ + isAccept=true; + while(neighborhood.cont(_solution)){ + //next neighbor + neighborhood.next(_solution, (*current)); + //eval + eval(_solution, (*current)); + //check if the current is better than the best and is not tabu or if it is aspirat (by the aspiration criteria of course) + if ( (!tabuList.check(_solution, *current) || aspiration(_solution, (*current))) && neighborComparator((*best),(*current))){ + // set best + (*best)=(*current); + } + } + } + else{ + isAccept=false; + } + } + else{ + isAccept=false; + } + }; + + + /** + * always continue + * @param _solution the solution + * @return true + */ + virtual bool isContinue(EOT & _solution){ + return true; + }; + + + /** + * move the solution with the best neighbor + * @param _solution the solution to move + */ + virtual void move(EOT & _solution) { + //move the solution + best->move(_solution); + //update its fitness + _solution.fitness(best->fitness()); + }; + + + /** + * accept test if an ameliorated neighbor was be found + * @param _solution the solution + * @return true if the best neighbor ameliorate the fitness + */ + virtual bool accept(EOT & _solution){ + return isAccept; + }; + + + +protected: + + using moNeighborhoodExplorer::neighborhood; + using moNeighborhoodExplorer::eval; + + // comparator between solution and neighbor or between neighbors + moNeighborComparator& neighborComparator; + moSolNeighborComparator& solNeighborComparator; + + // Tabu components + moTabuList & tabuList; + moIntensification & intensification; + moDiversification & diversification; + moAspiration & aspiration; + + //Current and best neighbor + Neighbor* best; + Neighbor* current; + + //Best so far Solution + EOT bestSoFar; + + // true if the move is accepted + bool isAccept ; + +}; + + +#endif diff --git a/trunk/paradiseo-mo/src/memory/moAspiration.h b/trunk/paradiseo-mo/src/memory/moAspiration.h new file mode 100644 index 000000000..f8746a1d8 --- /dev/null +++ b/trunk/paradiseo-mo/src/memory/moAspiration.h @@ -0,0 +1,19 @@ +#ifndef _moAspiration_h +#define _moAspiration_h + +#include + +/** + * Abstract class for Aspiration Criteria + */ +template< class Neighbor > +class moAspiration : public eoBF +{ +public: + typedef typename Neighbor::EOT EOT; + + virtual void init(EOT & _sol) = 0; + virtual void update(EOT & _sol, Neighbor & _neighbor) = 0; +}; + +#endif diff --git a/trunk/paradiseo-mo/src/memory/moBestImprAspiration.h b/trunk/paradiseo-mo/src/memory/moBestImprAspiration.h new file mode 100644 index 000000000..6e0d1dc7a --- /dev/null +++ b/trunk/paradiseo-mo/src/memory/moBestImprAspiration.h @@ -0,0 +1,57 @@ +#ifndef _moBestImprAspiration_h +#define _moBestImprAspiration_h + +#include + +/** + * Aspiration criteria accepts a solution better than the best so far + */ +template< class Neighbor > +class moBestImprAspiration : public moAspiration +{ +public: + + typedef typename Neighbor::EOT EOT; + + /** + * init the best solution + * @param _sol the best solution found + */ + void init(EOT & _sol){ + bestFoundSoFar = _sol; + } + + /** + * update the "bestFoundSoFar" if a best solution is found + * @param _sol a solution + * @param _neighbor a neighbor + */ + void update(EOT & _sol, Neighbor & _neighbor){ + if (bestFoundSoFar.fitness() < _sol.fitness()) + bestFoundSoFar = _sol; + } + + /** + * Test the tabu feature of the neighbor: + * test if the neighbor's fitness is better than the "bestFoundSoFar" fitness + * @param _sol a solution + * @param _neighbor a neighbor + * @return true if _neighbor fitness is better than the "bestFoundSoFar" + */ + bool operator()(EOT & _sol, Neighbor & _neighbor){ + return (bestFoundSoFar.fitness() < _neighbor.fitness()); + } + + /** + * Getter + * @return a reference on the best found so far solution + */ + EOT& getBest(){ + return bestFoundSoFar; + } + +private: + EOT bestFoundSoFar; +}; + +#endif diff --git a/trunk/paradiseo-mo/src/memory/moDiversification.h b/trunk/paradiseo-mo/src/memory/moDiversification.h new file mode 100644 index 000000000..91cb5b3de --- /dev/null +++ b/trunk/paradiseo-mo/src/memory/moDiversification.h @@ -0,0 +1,14 @@ +#ifndef _moDiversification_h +#define _moDiversification_h + +#include +#include + +/** + * Abstract class for diversification strategy + */ +template< class Neighbor > +class moDiversification : public moMemory, public eoUF +{}; + +#endif diff --git a/trunk/paradiseo-mo/src/memory/moDummyDiversification.h b/trunk/paradiseo-mo/src/memory/moDummyDiversification.h new file mode 100644 index 000000000..9f0e14376 --- /dev/null +++ b/trunk/paradiseo-mo/src/memory/moDummyDiversification.h @@ -0,0 +1,43 @@ +#ifndef _moDummyDiversification_h +#define _moDummyDiversification_h + +#include + +/** + * Dummy diversification strategy + */ +template< class Neighbor > +class moDummyDiversification : public moDiversification +{ +public: + typedef typename Neighbor::EOT EOT; + + /** + * Init : NOTHIING TO DO + */ + void init(EOT & _sol) {} + + /** + * Add : NOTHIING TO DO + */ + void add(EOT & _sol, Neighbor & _neighbor) {} + + /** + * Update : NOTHIING TO DO + */ + void update(EOT & _sol, Neighbor & _neighbor) {} + + /** + * ClearMemory : NOTHIING TO DO + */ + void clearMemory() {} + + /** + * @return always false + */ + bool operator()(EOT &){ + return false; + } +}; + +#endif diff --git a/trunk/paradiseo-mo/src/memory/moDummyIntensification.h b/trunk/paradiseo-mo/src/memory/moDummyIntensification.h new file mode 100644 index 000000000..7cc124871 --- /dev/null +++ b/trunk/paradiseo-mo/src/memory/moDummyIntensification.h @@ -0,0 +1,43 @@ +#ifndef _moDummyIntensification_h +#define _moDummyIntensification_h + +#include + +/** + * Dummy intensification strategy + */ +template< class Neighbor > +class moDummyIntensification : public moIntensification +{ +public: + typedef typename Neighbor::EOT EOT; + + /** + * Init : NOTHIING TO DO + */ + void init(EOT & _sol) {} + + /** + * Add : NOTHIING TO DO + */ + void add(EOT & _sol, Neighbor & _neighbor) {} + + /** + * Update : NOTHIING TO DO + */ + void update(EOT & _sol, Neighbor & _neighbor) {} + + /** + * ClearMemory : NOTHIING TO DO + */ + void clearMemory() {} + + /** + * @return always false + */ + bool operator()(EOT &){ + return false; + } +}; + +#endif diff --git a/trunk/paradiseo-mo/src/memory/moIntensification.h b/trunk/paradiseo-mo/src/memory/moIntensification.h new file mode 100644 index 000000000..65b9bb1ad --- /dev/null +++ b/trunk/paradiseo-mo/src/memory/moIntensification.h @@ -0,0 +1,14 @@ +#ifndef _moIntensification_h +#define _moIntensification_h + +#include +#include + +/** + * Abstract class for intensification strategy + */ +template< class Neighbor > +class moIntensification : public moMemory, public eoUF +{}; + +#endif diff --git a/trunk/paradiseo-mo/src/memory/moMemory.h b/trunk/paradiseo-mo/src/memory/moMemory.h new file mode 100644 index 000000000..a1284a094 --- /dev/null +++ b/trunk/paradiseo-mo/src/memory/moMemory.h @@ -0,0 +1,40 @@ +#ifndef _moMemory_h +#define _moMemory_h + +/** + * Abstract class for different memory + */ +template< class Neighbor > +class moMemory //: public eoObject +{ +public: + typedef typename Neighbor::EOT EOT; + + /** + * Init the memory + * @param _sol the current solution + */ + virtual void init(EOT & _sol) = 0; + + /** + * Add data in the memory + * @param _sol the current solution + * @param _neighbor the current neighbor + */ + virtual void add(EOT & _sol, Neighbor & _neighbor) = 0; + + /** + * update the memory + * @param _sol the current solution + * @param _neighbor the current neighbor + */ + virtual void update(EOT & _sol, Neighbor & _neighbor) = 0; + + /** + * clear the memory + */ + virtual void clearMemory() = 0; + +}; + +#endif diff --git a/trunk/paradiseo-mo/src/memory/moSolVectorTabuList.h b/trunk/paradiseo-mo/src/memory/moSolVectorTabuList.h new file mode 100644 index 000000000..17628f7a8 --- /dev/null +++ b/trunk/paradiseo-mo/src/memory/moSolVectorTabuList.h @@ -0,0 +1,103 @@ +#ifndef _moSolVectorTabuList_h +#define _moSolVectorTabuList_h + +#include +#include +#include + +/** + * Tabu List of solution stocked in a vector + */ +template +class moSolVectorTabuList : public moTabuList +{ +public: + typedef typename Neighbor::EOT EOT; + + /** + * Constructor + * @param _maxSize maximum size of the tabu list + * @param _howlong how many iteration a move is tabu + */ + moSolVectorTabuList(unsigned int _maxSize, unsigned int _howlong) : maxSize(_maxSize), howlong(_howlong){ + tabuList.reserve(_maxSize); + tabuList.resize(0); + } + + /** + * init the tabuList by clearing the memory + * @param _sol the current solution + */ + virtual void init(EOT & _sol){ + clearMemory(); + } + + + /** + * add a new solution in the tabuList + * @param _sol the current solution + * @param _neighbor the current neighbor (unused) + */ + virtual void add(EOT & _sol, Neighbor & _neighbor){ + + if(tabuList.size() < maxSize){ + std::pair tmp; + tmp.first=_sol; + tmp.second=howlong; + tabuList.push_back(tmp); + } + else{ + tabuList[index%maxSize].first = _sol; + tabuList[index%maxSize].second = howlong; + index++; + } + } + + /** + * update the tabulist: NOTHING TO DO + * @param _sol the current solution + * @param _neighbor the current neighbor (unused) + */ + virtual void update(EOT & _sol, Neighbor & _neighbor){ + for(unsigned int i=0; i 0 && tabuList[i].second > 0 && tabuList[i].first == tmp) || (howlong==0 && tabuList[i].first==tmp)) + return true; + } + return false; + } + + /** + * clearMemory: remove all solution of the tabuList + */ + virtual void clearMemory(){ + tabuList.resize(0); + index = 0; + } + + +private: + //tabu list + std::vector< std::pair > tabuList; + //maximum size of the tabu list + unsigned int maxSize; + //how many iteration a move is tabu + unsigned int howlong; + //index on the tabulist + unsigned long index; + +}; + +#endif diff --git a/trunk/paradiseo-mo/src/memory/moTabuList.h b/trunk/paradiseo-mo/src/memory/moTabuList.h new file mode 100644 index 000000000..96131286e --- /dev/null +++ b/trunk/paradiseo-mo/src/memory/moTabuList.h @@ -0,0 +1,24 @@ +#ifndef _moTabuList_h +#define _moTabuList_h + +#include + +/** + * Abstract class for the Tabu List + */ +template< class Neighbor > +class moTabuList : public moMemory +{ +public: + typedef typename Neighbor::EOT EOT; + + /** + * Check if a neighbor is tabu or not + * @param _sol the current solution + * @param _neighbor the neighbor + * @return true if the neighbor is tabu + */ + virtual bool check(EOT & _sol, Neighbor & _neighbor) = 0; +}; + +#endif diff --git a/trunk/paradiseo-mo/src/neighborhood/moBackableNeighbor.h b/trunk/paradiseo-mo/src/neighborhood/moBackableNeighbor.h new file mode 100644 index 000000000..ac4324c77 --- /dev/null +++ b/trunk/paradiseo-mo/src/neighborhood/moBackableNeighbor.h @@ -0,0 +1,56 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _BackableNeighbor_h +#define _BackableNeighbor_h + +#include + +/** + * Neighbor with a move back function to use in a moFullEvalByModif + */ +template< class EOT , class Fitness > +class moBackableNeighbor : virtual public moNeighbor +{ +public: + + /** + * the move back function + * @param _solution the solution to moveBack + */ + virtual void moveBack(EOT & _solution)=0; + +}; + +#endif diff --git a/trunk/paradiseo-mo/src/neighborhood/moBitNeighbor.h b/trunk/paradiseo-mo/src/neighborhood/moBitNeighbor.h new file mode 100644 index 000000000..3c4ccd35f --- /dev/null +++ b/trunk/paradiseo-mo/src/neighborhood/moBitNeighbor.h @@ -0,0 +1,111 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _bitNeighbor_h +#define _bitNeighbor_h + +#include +#include +#include + +/** + * Neighbor related to a vector of Bit + */ +template< class Fitness > +class moBitNeighbor : public moBackableNeighbor, Fitness>, public moIndexNeighbor, Fitness> +{ +public: + typedef eoBit EOT ; + + using moBackableNeighbor, Fitness>::fitness; + using moIndexNeighbor, Fitness>::key; + + /** + * move the solution + * @param _solution the solution to move + */ + virtual void move(EOT & _solution) { + _solution[key] = !_solution[key]; + } + + /** + * move back the solution (useful for the evaluation by modif) + * @param _solution the solution to move back + */ + virtual void moveBack(EOT & _solution) { + _solution[key] = !_solution[key]; + } + + /** + * Return the class id. + * @return the class name as a std::string + */ + virtual std::string className() const { + return "moBitNeighbor"; + } + + /** + * Read object.\ \ + * Calls base class, just in case that one had something to do. + * The read and print methods should be compatible and have the same format. + * In principle, format is "plain": they just print a number + * @param _is a std::istream. + * @throw runtime_std::exception If a valid object can't be read. + */ + virtual void readFrom(std::istream& _is) { + std::string fitness_str; + int pos = _is.tellg(); + _is >> fitness_str; + if (fitness_str == "INVALID"){ + throw std::runtime_error("invalid fitness"); + } + else{ + Fitness repFit ; + _is.seekg(pos); // rewind + _is >> repFit; + _is >> key; + fitness(repFit); + } + } + + /** + * Write object. Called printOn since it prints the object _on_ a stream. + * @param _os A std::ostream. + */ + virtual void printOn(std::ostream& _os) const { + _os << fitness() << ' ' << key << std::endl; + } +}; + +#endif diff --git a/trunk/paradiseo-mo/src/neighborhood/moIndexNeighbor.h b/trunk/paradiseo-mo/src/neighborhood/moIndexNeighbor.h new file mode 100644 index 000000000..c02747d2a --- /dev/null +++ b/trunk/paradiseo-mo/src/neighborhood/moIndexNeighbor.h @@ -0,0 +1,101 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _IndexNeighbor_h +#define _IndexNeighbor_h + +#include + +/** + * Index Neighbor + */ +template< class EOT , class Fitness > +class moIndexNeighbor : virtual public moNeighbor +{ +public: + + using moNeighbor::fitness; + + /** + * Default Constructor + */ + moIndexNeighbor() : moNeighbor(), key(0){} + + /** + * Copy Constructor + */ + moIndexNeighbor(const moIndexNeighbor& _n) : moNeighbor(_n) { + this->key = _n.key ; + } + + /** + * Assignment operator + */ + virtual moIndexNeighbor & operator=(const moIndexNeighbor & _source) { + moNeighbor::operator=(_source); + this->key = _source.key ; + return *this ; + } + + /** + * Return the class id. + * @return the class name as a std::string + */ + virtual std::string className() const { + return "moIndexNeighbor"; + } + + /** + * Getter + * @return index of the IndexNeighbor + */ + unsigned int index(){ + return key; + } + + /** + * Setter + * @param _key index of the IndexNeighbor + */ + void index(unsigned int _key){ + key=_key; + } + +protected: + // key allowing to describe the neighbor + unsigned int key; + +}; + +#endif diff --git a/trunk/paradiseo-mo/src/neighborhood/moIndexNeighborhood.h b/trunk/paradiseo-mo/src/neighborhood/moIndexNeighborhood.h new file mode 100644 index 000000000..12c8b4246 --- /dev/null +++ b/trunk/paradiseo-mo/src/neighborhood/moIndexNeighborhood.h @@ -0,0 +1,70 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moIndexNeighborhood_h +#define _moIndexNeighborhood_h + +#include + +/** + * A Indexed Neighborhood + */ +template< class Neighbor > +class moIndexNeighborhood : virtual public moNeighborhood +{ +public: + /** + * Define type of a solution corresponding to Neighbor + */ + typedef typename Neighbor::EOT EOT; + + /** + * Constructor + * @param _neighborhoodSize the size of the neighborhood + */ + moIndexNeighborhood(unsigned int _neighborhoodSize):neighborhoodSize(_neighborhoodSize){} + + /** + * Return the class id. + * @return the class name as a std::string + */ + virtual std::string className() const { + return "moIndexNeighborhood"; + } + +protected: + unsigned int neighborhoodSize; +}; + +#endif diff --git a/trunk/paradiseo-mo/src/neighborhood/moNeighbor.h b/trunk/paradiseo-mo/src/neighborhood/moNeighbor.h new file mode 100644 index 000000000..38531bcf7 --- /dev/null +++ b/trunk/paradiseo-mo/src/neighborhood/moNeighbor.h @@ -0,0 +1,136 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moNeighbor_h +#define _moNeighbor_h + +//EO inclusion +#include +#include +#include + +/** + * Container of the neighbor informations + */ +template< class EOType , class Fitness > +class moNeighbor : public eoObject, public eoPersistent +{ +public: + typedef EOType EOT; + /** + * Default Constructor + */ + moNeighbor(){} + + /** + * Copy Constructor + * @param _neighbor to copy + */ + moNeighbor(const moNeighbor& _neighbor) { + repFitness = _neighbor.fitness(); + } + + /** + * Assignment operator + * @param _neighbor the neighbor to assign + * @return a neighbor equal to the other + */ + virtual moNeighbor& operator=(const moNeighbor& _neighbor) { + repFitness = _neighbor.fitness(); + return (*this); + } + + /** + * Move a solution + * @param _solution the related solution + */ + virtual void move(EOT & _solution) = 0 ; + + /** + * Get the fitness of the neighbor + * @return fitness of the neighbor + */ + const Fitness fitness() const { + return repFitness; + } + + + /** + * Get fitness as reference, useful when fitness is set in a multi-stage way, e.g., MOFitness gets performance information, is subsequently ranked + * @return fitness as reference of the neighbor + */ + Fitness& fitnessReference() { + return repFitness; + } + + /** + * Set fitness. At the same time, validates it. + * @param _fitness new fitness value. + */ + void fitness(const Fitness& _fitness){ + repFitness = _fitness; + } + + /** + * Return the class id. + * @return the class name as a std::string + */ + virtual std::string className() const { return "moNeighbor"; } + + /** + * Read object. + * Calls base class, just in case that one had something to do. + * The read and print methods should be compatible and have the same format. + * In principle, format is "plain": they just print a number + * @param _is a std::istream. + */ + virtual void readFrom(std::istream& _is) { + _is >> repFitness; + } + + /** + * Write object. Called printOn since it prints the object _on_ a stream. + * @param _os A std::ostream. + */ + virtual void printOn(std::ostream& _os) const { + _os << repFitness << std::endl; + } + +protected: + // minimal information on the neighbor : fitness + Fitness repFitness ; + +}; + +#endif diff --git a/trunk/paradiseo-mo/src/neighborhood/moNeighborhood.h b/trunk/paradiseo-mo/src/neighborhood/moNeighborhood.h new file mode 100644 index 000000000..bb3ca6d8f --- /dev/null +++ b/trunk/paradiseo-mo/src/neighborhood/moNeighborhood.h @@ -0,0 +1,101 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moNeighborhood_h +#define _moNeighborhood_h + +#include + +/** + * A Neighborhood + */ +template< class Neighbor > +class moNeighborhood : public eoObject +{ +public: + /** + * Define type of a solution corresponding to Neighbor + */ + typedef typename Neighbor::EOT EOT; + + /** + * Default Constructor + */ + moNeighborhood(){} + + /** + * @return if the neighborhood is random + */ + virtual bool isRandom(){ + return false; + } + + /** + * Test if a solution has (again) a Neighbor + * @param _solution the related solution + * @return if _solution has a Neighbor + */ + virtual bool hasNeighbor(EOT & _solution) = 0 ; + + /** + * Initialization of the neighborhood + * @param _solution the solution to explore + * @param _current the first neighbor + */ + virtual void init(EOT & _solution, Neighbor & _current) = 0 ; + + /** + * Give the next neighbor + * @param _solution the solution to explore + * @param _current the next neighbor + */ + virtual void next(EOT & _solution, Neighbor & _current) = 0 ; + + /** + * Test if there is again a neighbor + * @param _solution the solution to explore + * @return if there is again a neighbor not explored + */ + virtual bool cont(EOT & _solution) = 0 ; + + /** + * Return the class id. + * @return the class name as a std::string + */ + virtual std::string className() const { + return "moNeighborhood"; + } +}; + +#endif diff --git a/trunk/paradiseo-mo/src/neighborhood/moOrderNeighborhood.h b/trunk/paradiseo-mo/src/neighborhood/moOrderNeighborhood.h new file mode 100644 index 000000000..fa3f7ef0d --- /dev/null +++ b/trunk/paradiseo-mo/src/neighborhood/moOrderNeighborhood.h @@ -0,0 +1,125 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moOrderNeighborhood_h +#define _moOrderNeighborhood_h + +#include + +/** + * A Ordered Neighborhood + */ +template< class N > +class moOrderNeighborhood : public moIndexNeighborhood +{ +public: + + /** + * Define type of a solution corresponding to Neighbor + */ + typedef N Neighbor; + typedef typename Neighbor::EOT EOT; + + + using moIndexNeighborhood::neighborhoodSize; + + + /** + * Constructor + * @param _neighborhoodSize the size of the neighborhood + */ + moOrderNeighborhood(unsigned int _neighborhoodSize): moIndexNeighborhood(_neighborhoodSize), currentIndex(0){} + + /** + * Test if it exist a neighbor + * @param _solution the solution to explore + * @return true if the neighborhood was not empty + */ + virtual bool hasNeighbor(EOT& _solution) { + return neighborhoodSize > 0; + } + + /** + * Initialization of the neighborhood + * @param _solution the solution to explore + * @param _neighbor the first neighbor + */ + virtual void init(EOT & _solution, Neighbor & _neighbor) { + currentIndex = 0 ; + _neighbor.index(currentIndex) ; + } + + /** + * Give the next neighbor + * @param _solution the solution to explore + * @param _neighbor the next neighbor + */ + virtual void next(EOT & _solution, Neighbor & _neighbor) { + currentIndex++ ; + _neighbor.index(currentIndex); + } + + /** + * test if all neighbors are explore or not,if false, there is no neighbor left to explore + * currentIndex is the index which have been used before, it is not the next neighbor which can be possibly evaluated + * + * @param _solution the solution to explore + * @return true if there is again a neighbor to explore + */ + virtual bool cont(EOT & _solution) { + return (currentIndex < neighborhoodSize - 1) ; + } + + /** + * Getter + * @return the position in the Neighborhood + */ + unsigned int position(){ + return currentIndex; + } + + /** + * Return the class id. + * @return the class name as a std::string + */ + virtual std::string className() const { + return "moOrderNeighborhood"; + } + +private: + unsigned int currentIndex; + +}; + +#endif diff --git a/trunk/paradiseo-mo/src/neighborhood/moRndNeighborhood.h b/trunk/paradiseo-mo/src/neighborhood/moRndNeighborhood.h new file mode 100644 index 000000000..2192bec57 --- /dev/null +++ b/trunk/paradiseo-mo/src/neighborhood/moRndNeighborhood.h @@ -0,0 +1,45 @@ +/* + +Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + +Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can ue, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms. + +ParadisEO WebSite : http://paradiseo.gforge.inria.fr +Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moRndNeighborhood_h +#define _moRndNeighborhood_h + +#include + +template< class Neighbor > +class moRndNeighborhood : virtual public moNeighborhood{ + +public: + + bool isRandom(){ + return true; + } +}; + +#endif diff --git a/trunk/paradiseo-mo/src/neighborhood/moRndWithReplNeighborhood.h b/trunk/paradiseo-mo/src/neighborhood/moRndWithReplNeighborhood.h new file mode 100644 index 000000000..773138696 --- /dev/null +++ b/trunk/paradiseo-mo/src/neighborhood/moRndWithReplNeighborhood.h @@ -0,0 +1,111 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moRndWithReplNeighborhood_h +#define _moRndWithReplNeighborhood_h + +#include +#include +#include + +/** + * A Random With replacement Neighborhood + */ +template< class N > +class moRndWithReplNeighborhood : public moIndexNeighborhood, public moRndNeighborhood +{ +public: + + /** + * Define type of a solution corresponding to Neighbor + */ + typedef N Neighbor; + typedef typename Neighbor::EOT EOT; + + + using moIndexNeighborhood::neighborhoodSize; + + /** + * Constructor + * @param _neighborhoodSize the size of the neighborhood + */ + moRndWithReplNeighborhood(unsigned int _neighborhoodSize): moIndexNeighborhood(_neighborhoodSize){} + + /** + * Test if it exist a neighbor + * @param _solution the solution to explore + * @return true if the neighborhood was not empty + */ + virtual bool hasNeighbor(EOT& _solution) { + return neighborhoodSize > 0; + } + + /** + * Initialization of the neighborhood + * @param _solution the solution to explore + * @param _neighbor the first neighbor + */ + virtual void init(EOT & _solution, Neighbor & _neighbor) { + _neighbor.index(rng.random(neighborhoodSize)); + } + + /** + * Give the next neighbor + * @param _solution the solution to explore + * @param _neighbor the next neighbor + */ + virtual void next(EOT & _solution, Neighbor & _neighbor) { + _neighbor.index(rng.random(neighborhoodSize)); + } + + /** + * test if all neighbors are explore or not,if false, there is no neighbor left to explore + * @param _solution the solution to explore + * @return true if there is again a neighbor to explore + */ + virtual bool cont(EOT & _solution) { + return neighborhoodSize > 0; + } + + /** + * Return the class id. + * @return the class name as a std::string + */ + virtual std::string className() const { + return "moRndWithReplNeighborhood"; + } + +}; + +#endif diff --git a/trunk/paradiseo-mo/src/neighborhood/moRndWithoutReplNeighborhood.h b/trunk/paradiseo-mo/src/neighborhood/moRndWithoutReplNeighborhood.h new file mode 100644 index 000000000..3766deafb --- /dev/null +++ b/trunk/paradiseo-mo/src/neighborhood/moRndWithoutReplNeighborhood.h @@ -0,0 +1,139 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moRndWithoutReplNeighborhood_h +#define _moRndWithoutReplNeighborhood_h + +#include +#include +#include + +/** + * A Random without replacement Neighborhood + */ +template< class N > +class moRndWithoutReplNeighborhood : public moIndexNeighborhood, public moRndNeighborhood +{ +public: + + /** + * Define type of a solution corresponding to Neighbor + */ + typedef N Neighbor; + typedef typename Neighbor::EOT EOT; + + + using moIndexNeighborhood::neighborhoodSize; + + /** + * Constructor + * @param _neighborhoodSize the size of the neighborhood + */ + moRndWithoutReplNeighborhood(unsigned int _neighborhoodSize): moIndexNeighborhood(_neighborhoodSize), maxIndex(0){ + for(unsigned int i=0; i < neighborhoodSize; i++) + indexVector.push_back(i); + } + + /** + * Test if it exist a neighbor + * @param _solution the solution to explore + * @return true if the neighborhood was not empty + */ + virtual bool hasNeighbor(EOT& _solution) { + return neighborhoodSize > 0; + } + + /** + * Initialization of the neighborhood + * @param _solution the solution to explore + * @param _neighbor the first neighbor + */ + virtual void init(EOT & _solution, Neighbor & _neighbor) { + unsigned int i, tmp; + maxIndex = neighborhoodSize ; + i = rng.random(maxIndex); + _neighbor.index(indexVector[i]); + tmp=indexVector[i]; + indexVector[i]=indexVector[maxIndex-1]; + indexVector[maxIndex-1]=tmp; + maxIndex--; + } + + /** + * Give the next neighbor + * @param _solution the solution to explore + * @param _neighbor the next neighbor + */ + virtual void next(EOT & _solution, Neighbor & _neighbor) { + unsigned int i, tmp; + i = rng.random(maxIndex); + _neighbor.index(indexVector[i]); + tmp=indexVector[i]; + indexVector[i]=indexVector[maxIndex-1]; + indexVector[maxIndex-1]=tmp; + maxIndex--; + } + + /** + * test if all neighbors are explore or not,if false, there is no neighbor left to explore + * maxIndex is number of neighbors + * @param _solution the solution to explore + * @return true if there is again a neighbor to explore + */ + virtual bool cont(EOT & _solution) { + return (maxIndex > 0) ; + } + + /** + * Getter + * @return the position in the Neighborhood + */ + unsigned int position(){ + return indexVector[maxIndex]; + } + + /** + * Return the class id. + * @return the class name as a std::string + */ + virtual std::string className() const { + return "moRndWithoutReplNeighborhood"; + } + +private: + unsigned int maxIndex; + std::vector indexVector; +}; + +#endif diff --git a/trunk/paradiseo-mo/src/newmo b/trunk/paradiseo-mo/src/newmo new file mode 100755 index 000000000..f7e8293c4 --- /dev/null +++ b/trunk/paradiseo-mo/src/newmo @@ -0,0 +1,40 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef __newmo +#define __newmo + +#include "newmo.h" + +#endif diff --git a/trunk/paradiseo-mo/src/newmo.h b/trunk/paradiseo-mo/src/newmo.h new file mode 100755 index 000000000..a275a4466 --- /dev/null +++ b/trunk/paradiseo-mo/src/newmo.h @@ -0,0 +1,104 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _newmo_h +#define _newmo_h + +#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 +#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 +#include +#include + +//#include +//#include +//#include +//#include +//#include +//#include + +#endif diff --git a/trunk/paradiseo-mo/src/old/moIncrEvalWrapper.h b/trunk/paradiseo-mo/src/old/moIncrEvalWrapper.h new file mode 100644 index 000000000..d951804d5 --- /dev/null +++ b/trunk/paradiseo-mo/src/old/moIncrEvalWrapper.h @@ -0,0 +1,34 @@ +#ifndef moIncrEvalWrapper_H +#define moIncrEvalWrapper_H + +#include +#include + +/* + * (Old fashioned) Incremental evaluation to use with a moMoveNeighbor + * WARNING: Don't use this class unless you are an moMove user. + */ +template +class moIncrEvalWrapper : public moEval +{ +public: + using moEval::EOT EOT; + using moEval::Fitness Fitness; + + moIncrEvalWrapper(moIncrEval& _incr):incr(_incr){} + + /* + * make the evaluation of the current neighbor and update the information on this neighbor + * the evaluation could be incremental + */ + virtual void eval(MoveNeighbor& _neighbor,EOT & _solution){ + _neighbor.fitness(incrEval(*(_neighbor.getMove()), _solution)); + } + +private: + /** the full evaluation object */ + moIncrEval & incrEval; + +}; + +#endif diff --git a/trunk/paradiseo-mo/src/old/moMove.h b/trunk/paradiseo-mo/src/old/moMove.h new file mode 100644 index 000000000..ecf878783 --- /dev/null +++ b/trunk/paradiseo-mo/src/old/moMove.h @@ -0,0 +1,57 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr + +*/ + +#ifndef _moMove_h +#define _moMove_h + +#include + +// Definition of a move. + +/* + * A move transforms a solution to another close solution. + * It describes how a solution can be modified to another one. + */ +template < class EOT > +class moMove:public eoUF < EOT &, void > +{ + public: + + // Alias for the type + typedef EOT EOType; +}; + +#endif diff --git a/trunk/paradiseo-mo/src/old/moMoveIncrEval.h b/trunk/paradiseo-mo/src/old/moMoveIncrEval.h new file mode 100644 index 000000000..e4a911eb7 --- /dev/null +++ b/trunk/paradiseo-mo/src/old/moMoveIncrEval.h @@ -0,0 +1,52 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moMoveIncrEval_h +#define _moMoveIncrEval_h + +#include + +// (generally) Efficient evaluation function based a move and a solution. + +/* + * From a move and a solution, it computes + * a new fitness that could be associated to + * the solution if this one is updated. + */ +template < class M, class Objective = typename M::EOType::Fitness> +class moMoveIncrEval:public eoBF < const M &, const typename M::EOType &, Objective > +{}; + +#endif diff --git a/trunk/paradiseo-mo/src/old/moMoveInit.h b/trunk/paradiseo-mo/src/old/moMoveInit.h new file mode 100644 index 000000000..dae026c72 --- /dev/null +++ b/trunk/paradiseo-mo/src/old/moMoveInit.h @@ -0,0 +1,50 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moMoveInit_h +#define _moMoveInit_h + +#include + +// Move (moMove) initializer +/* + * Class which allows to initiase a move. + * Only a description... An object that herits from this class needs to be designed to be used. + */ +template < class M > +class moMoveInit:public eoBF < M &, const typename M::EOType &, void > +{}; + +#endif diff --git a/trunk/paradiseo-mo/src/old/moMoveNeighbor.h b/trunk/paradiseo-mo/src/old/moMoveNeighbor.h new file mode 100644 index 000000000..ce655e609 --- /dev/null +++ b/trunk/paradiseo-mo/src/old/moMoveNeighbor.h @@ -0,0 +1,69 @@ +#ifndef _moMoveNeighbor_h +#define _moMoveNeighbor_h + +#include + +#include +#include +#include + + +/* + contener of the neighbor informations +*/ +template< class M , class Fitness > + class moMoveNeighbor : public moNeighbor +{ +public: + + typedef typename M::EOType EOT; + + // empty constructor + moMoveNeighbor() { + move=new M(); + }; + + ~moMoveNeighbor() { + delete move; + }; + + // copy constructeur + moMoveNeighbor(const moMoveNeighbor & _n) { + moNeighbor::operator=(_n); + (*move) = *(_n.getMove()); + } + + // assignment operator + virtual moMoveNeighbor & operator=(const moMoveNeighbor & _n) { + moNeighbor ::operator=(_n); + (*move) = *(_n.getMove()); + return *this ; + } + + /* + * move the solution + */ + virtual void move(EOT & _solution){ + (*move)(_solution); + } + + /** Return the class id. + * @return the class name as a std::string + */ + virtual std::string className() const { return "moMoveNeighbor"; } + + void setMove(M* _move){ + move=_move; + } + + M* getMove(){ + return move; + } + + +private: + M* move; + +}; + +#endif diff --git a/trunk/paradiseo-mo/src/old/moMoveNeighborhood.h b/trunk/paradiseo-mo/src/old/moMoveNeighborhood.h new file mode 100644 index 000000000..b66b925a2 --- /dev/null +++ b/trunk/paradiseo-mo/src/old/moMoveNeighborhood.h @@ -0,0 +1,59 @@ +#ifndef _moMoveNeighborhood_h +#define _moMoveNeighborhood_h + +#include +#include + +#include +#include + +template< class M, class Fitness > + class moMoveNeighborhood : public moNeighborhood > +{ +public: + + typedef moMoveNeighbor Neighbor; + typedef typename M::EOType EOT; + + moMoveNeighborhood(moMoveInit& i, moNextMove& n):_init(i), _next(n), isContinue(true) {} + + virtual bool hasNeighbor(EOT & solution){ + return true; + } + + /* + initialisation of the neighborhood + */ + virtual void init(EOT & solution, Neighbor & current){ + _init(*(current._move), solution); + isContinue=true; + } + + /* + Give the next neighbor + */ + virtual void next(EOT & solution, Neighbor & current){ + isContinue=_next(*(current._move), solution); + } + + /* + if false, there is no neighbor left to explore + */ + virtual bool cont(EOT & solution){ + return isContinue; + } + + /** Return the class id. + * @return the class name as a std::string + */ + virtual std::string className() const { return "moMoveNeighborhood"; } + + private: + moMoveInit& _init; + moNextMove& _next; + bool isContinue; + +}; + + +#endif diff --git a/trunk/paradiseo-mo/src/old/moNextMove.h b/trunk/paradiseo-mo/src/old/moNextMove.h new file mode 100644 index 000000000..c40268f2f --- /dev/null +++ b/trunk/paradiseo-mo/src/old/moNextMove.h @@ -0,0 +1,50 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2008 + (C) OPAC Team, LIFL, 2002-2008 + + Sébastien Cahon, Jean-Charles Boisson (Jean-Charles.Boisson@lifl.fr) + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moNextMove_h +#define _moNextMove_h + +#include + +// Class which allows to generate a new move (moMove). +/* + * Useful for the explorer (for moTS or moHC). + * Does nothing... An object that herits from this class needs to be designed for being used. + */ +template < class M > +class moNextMove:public eoBF < M &, const typename M::EOType &, bool > +{}; + +#endif diff --git a/trunk/paradiseo-mo/test/CMakeLists.txt b/trunk/paradiseo-mo/test/CMakeLists.txt new file mode 100644 index 000000000..2f78edadf --- /dev/null +++ b/trunk/paradiseo-mo/test/CMakeLists.txt @@ -0,0 +1,84 @@ +############################################################################### +## +## CMakeLists file for ParadisEO-MO/test +## +############################################################################### + + +###################################################################################### +### 1) Include the sources +###################################################################################### + +INCLUDE_DIRECTORIES(${EO_SRC_DIR}/src) +INCLUDE_DIRECTORIES(${MO_SRC_DIR}/src) +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) + +###################################################################################### + + +###################################################################################### +### 2) Specify where CMake can find the libraries +###################################################################################### + +LINK_DIRECTORIES(${EO_BIN_DIR}/lib) + +###################################################################################### + +###################################################################################### +### 3) Define your targets and link the librairies +###################################################################################### + + + +SET (TEST_LIST + t-moNeighbor + t-moBitNeighbor + t-moOrderNeighborhood + t-moFullEvalByCopy + t-moFullEvalByModif + t-moNeighborComparator + t-moSolNeighborComparator + t-moTrueContinuator + t-moRndWithoutReplNeighborhood + t-moRndWithReplNeighborhood + t-moFitnessStat + t-moDistanceStat + t-moNeighborhoodStat + t-moCounterMonitorSaver + t-moSolutionStat + t-moCheckpoint + t-moDummyMemory + t-moSolVectorTabuList + t-moBestImprAspiration + t-moSimpleHCexplorer + t-moSimpleHCneutralExplorer + t-moHCneutralExplorer + t-moFirstImprExplorer + t-moRandomWalkExplorer + t-moMetropolisHastingExplorer + t-moRandomNeutralWalkExplorer + t-moTSExplorer + ) + +FOREACH (test ${TEST_LIST}) + SET ("T_${test}_SOURCES" "${test}.cpp") +ENDFOREACH (test) + + +IF(ENABLE_CMAKE_TESTING) + + # Add the tests + FOREACH (test ${TEST_LIST}) + ADD_EXECUTABLE(${test} ${T_${test}_SOURCES}) + ADD_TEST(${test} ${test}) + ENDFOREACH (test) + + # Link the librairies + FOREACH (test ${TEST_LIST}) + TARGET_LINK_LIBRARIES(${test} ga es eoutils eo) + ENDFOREACH (test) + +ENDIF(ENABLE_CMAKE_TESTING) + +###################################################################################### + diff --git a/trunk/paradiseo-mo/test/moTestClass.h b/trunk/paradiseo-mo/test/moTestClass.h new file mode 100644 index 000000000..7350d7628 --- /dev/null +++ b/trunk/paradiseo-mo/test/moTestClass.h @@ -0,0 +1,204 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#ifndef _moTestClass_h +#define _moTestClass_h + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include + +typedef eoBit bitVector; +typedef moBitNeighbor bitNeighbor ; + +class moDummyRndNeighborhood: public moOrderNeighborhood/*, public moRndNeighborhood*/{ +public: + moDummyRndNeighborhood(unsigned int a): moOrderNeighborhood(a){} +}; + +typedef moDummyRndNeighborhood bitNeighborhood ; + +typedef EO Solution; + +class moDummyNeighbor : public moNeighbor{ +public: + virtual void move(Solution & _solution){} +}; + +class moDummyBackableNeighbor : public moBackableNeighbor{ +public: + virtual void move(Solution & _solution){} + virtual void moveBack(Solution & _solution){} +}; + +class moDummyNeighborhood : public moNeighborhood{ +public: + typedef moDummyNeighbor Neighbor; + + moDummyNeighborhood():i(0),j(0){} + + virtual bool hasNeighbor(EOT & _solution){ + bool res; + if(i%3==0) + res=false; + else + res=true; + i++; + return res; + } + virtual void init(EOT & _solution, Neighbor & _current){} + virtual void next(EOT & _solution, Neighbor & _current){} + virtual bool cont(EOT & _solution){ + j++; + return (j%10!=0); + } + +private: + int i,j; +}; + +class moDummyEval: public eoEvalFunc{ +public: + void operator()(Solution& _sol){ + if(_sol.invalid()) + _sol.fitness(100); + else + _sol.fitness(_sol.fitness()+50); + } +}; + +class evalOneMax : public moEval< bitNeighbor > +{ +private: + unsigned size; + +public: + evalOneMax(unsigned _size) : size(_size) {}; + + ~evalOneMax(void) {} ; + + void operator() (bitVector& _sol, bitNeighbor& _n) { + unsigned int fit = _sol.fitness(); + if(_sol[_n.index()]) + fit--; + else + fit++; + _n.fitness(fit); + } +}; + +class dummyEvalOneMax : public moEval< bitNeighbor > +{ +private: + unsigned size; + +public: + dummyEvalOneMax(unsigned _size) : size(_size) {}; + + ~dummyEvalOneMax(void) {} ; + + void operator() (bitVector& _sol, bitNeighbor& _n) { + unsigned int fit = _sol.fitness(); + _n.fitness(fit); + } +}; + +class monitor1 : public eoMonitor +{ +public: + + monitor1(unsigned int& _a): a(_a){} + + eoMonitor& operator()(){ + a++; + return *this; + } + + void lastCall(){ + a++; + } + +private: + unsigned int& a; +}; + +class monitor2 : public eoMonitor +{ +public: + + monitor2(unsigned int& _a): a(_a){} + + eoMonitor& operator()(){ + a++; + return *this; + } + + void lastCall(){ + a++; + } + +private: + unsigned int& a; +}; + +class updater1: public eoUpdater +{ +public: + updater1(unsigned int& _a): a(_a){} + + void operator()(){ + a++; + } + + void lastCall(){ + a++; + } + +private: + unsigned int& a; +}; + +#endif diff --git a/trunk/paradiseo-mo/test/t-moBestImprAspiration.cpp b/trunk/paradiseo-mo/test/t-moBestImprAspiration.cpp new file mode 100644 index 000000000..a7910ba80 --- /dev/null +++ b/trunk/paradiseo-mo/test/t-moBestImprAspiration.cpp @@ -0,0 +1,78 @@ +/* + +Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + +Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can ue, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms. + +ParadisEO WebSite : http://paradiseo.gforge.inria.fr +Contact: paradiseo-help@lists.gforge.inria.fr +*/ +#include +#include "moTestClass.h" + +#include +#include +#include + +int main(){ + + std::cout << "[t-moBestImprAspiration] => START" << std::endl; + + moBestImprAspiration test; + eoBit sol1(4); + eoBit sol2(4); + eoBit sol3(4); + eoBit sol4(4); + bitNeighbor n1; + bitNeighbor n2; + bitNeighbor n3; + bitNeighbor n4; + + sol3[0]=true; + sol4[3]=true; + + sol1.fitness(4); + sol2.fitness(5); + sol3.fitness(3); + sol4.fitness(3); + n1.fitness(4); + n2.fitness(5); + n3.fitness(3); + n4.fitness(3); + + + //verification qu'on update bien le best so far quand il faut + test.init(sol1); + assert(test.getBest()==sol1); + assert(!test(sol2,n2)); + assert(test(sol3,n3)); + test.update(sol3,n3); + assert(test.getBest()==sol3); + assert(!test(sol4,n4)); + test.update(sol4,n4); + assert(test.getBest()==sol3); + + std::cout << "[t-moBestImprAspiration] => OK" << std::endl; + + return EXIT_SUCCESS; +} + diff --git a/trunk/paradiseo-mo/test/t-moBitNeighbor.cpp b/trunk/paradiseo-mo/test/t-moBitNeighbor.cpp new file mode 100644 index 000000000..ee3bd1e68 --- /dev/null +++ b/trunk/paradiseo-mo/test/t-moBitNeighbor.cpp @@ -0,0 +1,85 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include + +#include +#include + +int main(){ + + std::cout << "[t-moBitNeighbor] => START" << std::endl; + + //init sol + eoBit sol; + sol.push_back(true); + sol.push_back(false); + sol.push_back(true); + + //verif du constructeur vide + moBitNeighbor test1; + assert(test1.index()==0); + + //verif du setter d'index et du constructeur de copy + test1.index(6); + test1.fitness(2); + moBitNeighbor test2(test1); + assert(test2.index()==6); + assert(test2.fitness()==2); + + //verif du getter + assert(test1.index()==6); + + //verif de l'operateur= + test1.fitness(8); + test1.index(2); + test2=test1; + assert(test2.fitness()==8); + assert(test2.index()==2); + + //verif de move + test2.move(sol); + assert(!sol[2]); + + //verif de moveBack + test2.moveBack(sol); + assert(sol[2]); + + test1.printOn(std::cout); + test2.printOn(std::cout); + + assert(test1.className()=="moBitNeighbor"); + std::cout << "[t-moBitNeighbor] => OK" << std::endl; + return EXIT_SUCCESS; +} diff --git a/trunk/paradiseo-mo/test/t-moCheckpoint.cpp b/trunk/paradiseo-mo/test/t-moCheckpoint.cpp new file mode 100644 index 000000000..fb9b788e7 --- /dev/null +++ b/trunk/paradiseo-mo/test/t-moCheckpoint.cpp @@ -0,0 +1,122 @@ +/* + +Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + +Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can ue, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms. + +ParadisEO WebSite : http://paradiseo.gforge.inria.fr +Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include +#include +#include +#include "moTestClass.h" + +#include +#include +#include + +int main(){ + + std::cout << "[t-moCheckpoint] => START" << std::endl; + + unsigned int a=2; + unsigned int b=15; + unsigned int c= 10; + unsigned int d= 47; + + eoBit s(3); + s[0]=true; + s[1]=true; + s[2]=false; + + s.fitness(17); + + + //verification que toutes les operateurs sont bien apellés + moSolutionStat< eoBit< eoMinimizingFitness > > stat; + updater1 up1(a); + updater1 up2(b); + monitor1 mon1(c); + monitor2 mon2(d); + moTrueContinuator< bitNeighborhood > cont; + + moCheckpoint< bitNeighborhood> test1(cont); + moCheckpoint< bitNeighborhood> test2(cont, 3); + + test1.add(up1); + test1.add(up2); + test1.add(mon1); + test1.add(mon2); + test1.add(stat); + + test2.add(up1); + test2.add(up2); + test2.add(mon1); + test2.add(mon2); + test2.add(stat); + + test1.init(s); + test1(s); + assert(a==3 && b==16 && c==11 && d==48); + assert(stat.value()[0]); + assert(stat.value()[1]); + assert(!stat.value()[2]); + assert(stat.value().fitness()==17); + + test1(s); + assert(a==4 && b==17 && c==12 && d==49); + assert(stat.value()[0]); + assert(stat.value()[1]); + assert(!stat.value()[2]); + assert(stat.value().fitness()==17); + + s.fitness(4); + + test2.init(s); + test2(s); + assert(a==5 && b==18 && c==13 && d==50); + assert(stat.value()[0]); + assert(stat.value()[1]); + assert(!stat.value()[2]); + assert(stat.value().fitness()==4); + + s.fitness(6); + test2(s); + assert(stat.value().fitness()==4); + test2(s); + assert(stat.value().fitness()==4); + test2(s); + assert(stat.value().fitness()==6); + + test1.lastCall(s); + assert(a==9 && b==22 && c==17 && d==54); + test2.lastCall(s); + assert(a==10 && b==23 && c==18 && d==55); + + assert(test1.className()=="moCheckpoint"); + std::cout << "[t-moCheckpoint] => OK" << std::endl; + + return EXIT_SUCCESS; +} + diff --git a/trunk/paradiseo-mo/test/t-moCounterMonitorSaver.cpp b/trunk/paradiseo-mo/test/t-moCounterMonitorSaver.cpp new file mode 100644 index 000000000..7ea014147 --- /dev/null +++ b/trunk/paradiseo-mo/test/t-moCounterMonitorSaver.cpp @@ -0,0 +1,71 @@ +/* + +Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + +Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can ue, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms. + +ParadisEO WebSite : http://paradiseo.gforge.inria.fr +Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include +#include "moTestClass.h" + +#include +#include +#include + + +int main(){ + + std::cout << "[t-moCounterMonitorSaver] => START" << std::endl; + + unsigned int a=1; + unsigned int b=10; + + monitor1 mon1(a); + monitor2 mon2(b); + + moCounterMonitorSaver test(3, mon1); + test.add(mon2); + + //on verifie qu'on apelle les moniteurs seulement tout les 3 itération + + test(); + assert(a==2 && b==11); + test(); + assert(a==2 && b==11); + test(); + assert(a==2 && b==11); + test(); + assert(a==3 && b==12); + + //test du lastCall + test.lastCall(); + assert(a==4 && b==13); + + assert(test.className()=="moCounterMonitorSaver"); + std::cout << "[t-moCounterMonitorSaver] => OK" << std::endl; + + return EXIT_SUCCESS; +} + diff --git a/trunk/paradiseo-mo/test/t-moDistanceStat.cpp b/trunk/paradiseo-mo/test/t-moDistanceStat.cpp new file mode 100644 index 000000000..8a8434817 --- /dev/null +++ b/trunk/paradiseo-mo/test/t-moDistanceStat.cpp @@ -0,0 +1,73 @@ +/* + +Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + +Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can ue, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms. + +ParadisEO WebSite : http://paradiseo.gforge.inria.fr +Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include +#include +#include + +#include +#include +#include + +int main(){ + + std::cout << "[t-moDistanceStat] => START" << std::endl; + + eoBit sol1; + eoBit sol2; + eoBit sol3; + sol1.push_back(true); + sol1.push_back(false); + sol1.push_back(true); + + sol2.push_back(true); + sol2.push_back(true); + sol2.push_back(false); + + sol3.push_back(true); + sol3.push_back(true); + sol3.push_back(true); + + //verification de la stat avec une distance de Hamming + + eoHammingDistance< eoBit > dist; + + moDistanceStat< eoBit > test(dist, sol1); + + test(sol2); + assert(test.value()==2); + test(sol3); + assert(test.value()==1); + + assert(test.className()=="moDistanceStat"); + std::cout << "[t-moDistanceStat] => OK" << std::endl; + + return EXIT_SUCCESS; +} + diff --git a/trunk/paradiseo-mo/test/t-moDummyMemory.cpp b/trunk/paradiseo-mo/test/t-moDummyMemory.cpp new file mode 100644 index 000000000..5d965da43 --- /dev/null +++ b/trunk/paradiseo-mo/test/t-moDummyMemory.cpp @@ -0,0 +1,63 @@ +/* + +Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + +Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can ue, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms. + +ParadisEO WebSite : http://paradiseo.gforge.inria.fr +Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include +#include +#include "moTestClass.h" + +#include +#include +#include + +int main(){ + + std::cout << "[t-moDummyMemory] => START" << std::endl; + + eoBit sol(4); + bitNeighbor n; + moDummyDiversification test1; + test1.init(sol); + test1.add(sol, n); + test1.update(sol, n); + test1.clearMemory(); + assert(!test1(sol)); + + moDummyIntensification test2; + test2.init(sol); + test2.add(sol, n); + test2.update(sol, n); + test2.clearMemory(); + assert(!test2(sol)); + + + std::cout << "[t-moDummyMemory] => OK" << std::endl; + + return EXIT_SUCCESS; +} + diff --git a/trunk/paradiseo-mo/test/t-moFirstImprExplorer.cpp b/trunk/paradiseo-mo/test/t-moFirstImprExplorer.cpp new file mode 100644 index 000000000..6506ec753 --- /dev/null +++ b/trunk/paradiseo-mo/test/t-moFirstImprExplorer.cpp @@ -0,0 +1,93 @@ +/* + +Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + +Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can ue, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms. + +ParadisEO WebSite : http://paradiseo.gforge.inria.fr +Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include +#include +#include +#include "moTestClass.h" + +#include +#include +#include + +int main(){ + + std::cout << "[t-moFirstImprExplorer] => START" << std::endl; + + //Instanciation + eoBit sol(4, true); + sol.fitness(4); + bitNeighborhood nh(4); + evalOneMax eval(4); + moNeighborComparator ncomp; + moSolNeighborComparator sncomp; + + moFirstImprExplorer test(nh, eval, ncomp, sncomp); + + //on verifie qu'on améliore peut continuer à explorer tant qu'on améliore la solution + + test(sol); + assert(test.accept(sol)); + test.move(sol); + assert(sol.fitness()==3); + assert(!sol[0]); + assert(test.isContinue(sol)); + + + test(sol); + assert(test.accept(sol)); + test.move(sol); + assert(sol.fitness()==2); + assert(!sol[1]); + assert(test.isContinue(sol)); + + test(sol); + assert(test.accept(sol)); + test.move(sol); + assert(sol.fitness()==1); + assert(!sol[2]); + assert(test.isContinue(sol)); + + test(sol); + assert(test.accept(sol)); + test.move(sol); + assert(sol.fitness()==0); + assert(!sol[3]); + assert(test.isContinue(sol)); + + test(sol); + assert(!test.accept(sol)); + assert(sol.fitness()==0); + assert(!test.isContinue(sol)); + + std::cout << "[t-moFirstImprExplorer] => OK" << std::endl; + + return EXIT_SUCCESS; +} + diff --git a/trunk/paradiseo-mo/test/t-moFitnessStat.cpp b/trunk/paradiseo-mo/test/t-moFitnessStat.cpp new file mode 100644 index 000000000..34d221508 --- /dev/null +++ b/trunk/paradiseo-mo/test/t-moFitnessStat.cpp @@ -0,0 +1,57 @@ +/* + +Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + +Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can ue, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms. + +ParadisEO WebSite : http://paradiseo.gforge.inria.fr +Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include +#include + +#include +#include +#include + +int main(){ + + std::cout << "[t-moFitnessStat] => START" << std::endl; + + eoBit sol; + + moFitnessStat< eoBit > test; + sol.fitness(3); + test(sol); + assert(test.value()==3); + + sol.fitness(12); + test(sol); + assert(test.value()==12); + + assert(test.className()=="moFitnessStat"); + std::cout << "[t-moFitnessStat] => OK" << std::endl; + + return EXIT_SUCCESS; +} + diff --git a/trunk/paradiseo-mo/test/t-moFullEvalByCopy.cpp b/trunk/paradiseo-mo/test/t-moFullEvalByCopy.cpp new file mode 100644 index 000000000..c2865a751 --- /dev/null +++ b/trunk/paradiseo-mo/test/t-moFullEvalByCopy.cpp @@ -0,0 +1,63 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include "moTestClass.h" +#include + +#include +#include + +int main(){ + + //Pas grand chose à faire: le gros du travail est fait par le voisin et l'eval + + std::cout << "[t-moFullEvalByCopy] => START" << std::endl; + + Solution sol; + moDummyNeighbor neighbor; + moDummyEval eval; + + //verif constructor + moFullEvalByCopy test(eval); + + sol.fitness(3); + + //verif operator() + test(sol,neighbor); + assert(sol.fitness()==3); + + std::cout << "[t-moFullEvalByCopy] => OK" << std::endl; + + return EXIT_SUCCESS; +} diff --git a/trunk/paradiseo-mo/test/t-moFullEvalByModif.cpp b/trunk/paradiseo-mo/test/t-moFullEvalByModif.cpp new file mode 100644 index 000000000..0c71df098 --- /dev/null +++ b/trunk/paradiseo-mo/test/t-moFullEvalByModif.cpp @@ -0,0 +1,63 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include "moTestClass.h" +#include + +#include +#include + +int main(){ + + //Pas grand chose à faire: le gros du travail est fait par le voisin et l'eval + + std::cout << "[t-moFullEvalByModif] => START" << std::endl; + + Solution sol; + moDummyBackableNeighbor neighbor; + moDummyEval eval; + + //verif constructor + moFullEvalByModif test(eval); + + sol.fitness(3); + + //verif operator() + test(sol,neighbor); + assert(sol.fitness()==3); + + std::cout << "[t-moFullEvalByModif] => OK" << std::endl; + + return EXIT_SUCCESS; +} diff --git a/trunk/paradiseo-mo/test/t-moHCneutralExplorer.cpp b/trunk/paradiseo-mo/test/t-moHCneutralExplorer.cpp new file mode 100644 index 000000000..cc7f65a6a --- /dev/null +++ b/trunk/paradiseo-mo/test/t-moHCneutralExplorer.cpp @@ -0,0 +1,92 @@ +/* + +Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + +Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can ue, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms. + +ParadisEO WebSite : http://paradiseo.gforge.inria.fr +Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include +#include +#include +#include "moTestClass.h" + +#include +#include +#include + +int main(){ + + std::cout << "[t-moHCneutralExplorer] => START" << std::endl; + + //Instanciation + eoBit sol(4, true); + sol.fitness(4); + bitNeighborhood nh(4); + evalOneMax eval(4); + moNeighborComparator ncomp; + moSolNeighborComparator sncomp; + + moHCneutralExplorer test(nh, eval, ncomp, sncomp,3); + + //on verifie qu'on ameliore bien la solution et que l'exploration dure 3 itérations + + test.initParam(sol); + test(sol); + assert(test.accept(sol)); + test.move(sol); + assert(sol.fitness()==3); + test.updateParam(sol); + assert(test.isContinue(sol)); + + //les affichages permettent de voir qu'on prend pas toujours les mm voisins(lancer plusieurs fois l'exe) + std::cout << sol << std::endl; + + test(sol); + assert(test.accept(sol)); + test.move(sol); + assert(sol.fitness()==2); + test.updateParam(sol); + assert(test.isContinue(sol)); + + + std::cout << sol << std::endl; + + test(sol); + assert(test.accept(sol)); + test.move(sol); + assert(sol.fitness()==1); + test.updateParam(sol); + assert(!test.isContinue(sol)); + + + std::cout << sol << std::endl; + + + + std::cout << "[t-moHCneutralExplorer] => OK" << std::endl; + + return EXIT_SUCCESS; +} + diff --git a/trunk/paradiseo-mo/test/t-moMetropolisHastingExplorer.cpp b/trunk/paradiseo-mo/test/t-moMetropolisHastingExplorer.cpp new file mode 100644 index 000000000..8ddd4f8ef --- /dev/null +++ b/trunk/paradiseo-mo/test/t-moMetropolisHastingExplorer.cpp @@ -0,0 +1,97 @@ +/* + +Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + +Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can ue, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms. + +ParadisEO WebSite : http://paradiseo.gforge.inria.fr +Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include +#include "moTestClass.h" + +#include +#include +#include + +int main(){ + + std::cout << "[t-moMetropolisHastingExplorer] => START" << std::endl; + + //Instanciation + eoBit sol(4, true); + sol.fitness(4); + bitNeighborhood nh(4); + evalOneMax eval(4); + moNeighborComparator ncomp; + moSolNeighborComparator sncomp; + + moMetropolisHastingExplorer test(nh, eval, ncomp, sncomp, 3); + + //test de l'acceptation d'un voisin améliorant + test.initParam(sol); + test(sol); + assert(test.accept(sol)); + test.move(sol); + assert(sol.fitness()==3); + test.updateParam(sol); + assert(test.isContinue(sol)); + + unsigned int oui=0, non=0; + + //test de l'acceptation d'un voisin non améliorant + for(unsigned int i=0; i<1000; i++){ + test(sol); + if(test.accept(sol)) + oui++; + else + non++; + } + std::cout << "Attention test en fonction d'une proba \"p\" uniforme dans [0,1] , oui si p < 3/4, non sinon -> resultat sur 1000 essai" << std::endl; + std::cout << "oui: " << oui << std::endl; + std::cout << "non: " << non << std::endl; + + assert(oui > 700 && oui < 800); //verification grossiere + + //test du critere d'arret + test.updateParam(sol); + assert(test.isContinue(sol)); + test.updateParam(sol); + assert(!test.isContinue(sol)); + + //test de l'acceptation d'un voisin + sol[0]=false; + sol[1]=false; + sol[2]=false; + sol[3]=false; + sol.fitness(0); + + test.initParam(sol); + test(sol); + assert(!test.accept(sol)); + + std::cout << "[t-moMetropolisHastingExplorer] => OK" << std::endl; + + return EXIT_SUCCESS; +} + diff --git a/trunk/paradiseo-mo/test/t-moNeighbor.cpp b/trunk/paradiseo-mo/test/t-moNeighbor.cpp new file mode 100644 index 000000000..d703f8ce4 --- /dev/null +++ b/trunk/paradiseo-mo/test/t-moNeighbor.cpp @@ -0,0 +1,64 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include "moTestClass.h" + +#include +#include + +int main(){ + + std::cout << "[t-moNeighbor] => START" << std::endl; + + //test constructor + moDummyNeighbor test1, test2; + + test1.fitness(3); + //test operateur d'affectation + test2=test1; + assert(test1.fitness()==test2.fitness()); + + //test operateur de copy + moDummyNeighbor test3(test1); + assert(test1.fitness()==test3.fitness()); + + test1.printOn(std::cout); + test2.printOn(std::cout); + test3.printOn(std::cout); + + assert(test1.className()=="moNeighbor"); + std::cout << "[t-moNeighbor] => OK" << std::endl; + + return EXIT_SUCCESS; +} diff --git a/trunk/paradiseo-mo/test/t-moNeighborComparator.cpp b/trunk/paradiseo-mo/test/t-moNeighborComparator.cpp new file mode 100644 index 000000000..2f305e597 --- /dev/null +++ b/trunk/paradiseo-mo/test/t-moNeighborComparator.cpp @@ -0,0 +1,68 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include +#include +#include +#include + +#include +#include + +int main(){ + + std::cout << "[t-moNeighborComparator] => START" << std::endl; + + + moBitNeighbor neighbor1; + moBitNeighbor neighbor2; + + moNeighborComparator< moBitNeighbor > test; + + neighbor1.fitness(3); + neighbor2.fitness(2); + //test with a minimizing fitness neighbor2 must be better than neighbor1 and reversly + assert(test(neighbor1, neighbor2)); + assert(!test(neighbor2, neighbor1)); + + //test equals + assert(!test.equals(neighbor1,neighbor2)); + + neighbor2.fitness(3); + assert(test.equals(neighbor1,neighbor2)); + + assert(test.className()=="moNeighborComparator"); + std::cout << "[t-moNeighborComparator] => OK" << std::endl; + return EXIT_SUCCESS; +} diff --git a/trunk/paradiseo-mo/test/t-moNeighborhoodStat.cpp b/trunk/paradiseo-mo/test/t-moNeighborhoodStat.cpp new file mode 100644 index 000000000..1d15665ae --- /dev/null +++ b/trunk/paradiseo-mo/test/t-moNeighborhoodStat.cpp @@ -0,0 +1,152 @@ +/* + +Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + +Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can ue, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms. + +ParadisEO WebSite : http://paradiseo.gforge.inria.fr +Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "moTestClass.h" + +#include +#include +#include + +/* + * Tests all classes depending of moNeighborhoodStat.h + */ +int main(){ + + //test de moNeighborhoodStat.h + std::cout << "[t-moNeighborhoodStat] => START" << std::endl; + + moNeighborComparator neighborComp; + moSolNeighborComparator solNeighborComp; + evalOneMax eval(10); + + bitNeighborhood n(10); + + bitVector sol; + + sol.push_back(true); + sol.push_back(false); + sol.push_back(true); + sol.push_back(true); + sol.push_back(false); + sol.push_back(true); + sol.push_back(false); + sol.push_back(true); + sol.push_back(true); + sol.push_back(true); + + sol.fitness(7); + + + moNeighborhoodStat test(n, eval, neighborComp, solNeighborComp); + + test(sol); + + assert(test.getMin()==8); + assert(test.getMax()==6); + assert(test.getMean()==6.6); + double sd=test.getSD(); + assert(test.getSD()>0.966 && test.getSD()<0.967); + assert(test.getSize()==10); + assert(test.getNbSup()==7); + assert(test.getNbInf()==3); + assert(test.getNbEqual()==0); + + assert(test.className()=="moNeighborhoodStat"); + std::cout << "[t-moNeighborhoodStat] => OK" << std::endl; + + //test of moMaxNeighborStat.h + std::cout << "[t-moMaxNeighborStat] => START" << std::endl; + moMaxNeighborStat test2(test); + test2(sol); + assert(test2.value()==6); + assert(test2.className()=="moMaxNeighborStat"); + std::cout << "[t-moMaxNeighborStat] => OK" << std::endl; + + //test of moMinNeighborStat.h + std::cout << "[t-moMinNeighborStat] => START" << std::endl; + moMinNeighborStat test3(test); + test3(sol); + assert(test3.value()==8); + assert(test3.className()=="moMinNeighborStat"); + std::cout << "[t-moMinNeighborStat] => OK" << std::endl; + + //test of moNbInfNeighborStat.h + std::cout << "[t-moNbInfNeighborStat] => START" << std::endl; + moNbInfNeighborStat test4(test); + test4(sol); + assert(test4.value()==3); + assert(test4.className()=="moNbInfNeighborStat"); + std::cout << "[t-moNbInfNeighborStat] => OK" << std::endl; + + //test of moNbSupNeighborStat.h + std::cout << "[t-moNbSupNeighborStat] => START" << std::endl; + moNbSupNeighborStat test5(test); + test5(sol); + assert(test5.value()==7); + assert(test5.className()=="moNbSupNeighborStat"); + std::cout << "[t-moNbSupNeighborStat] => OK" << std::endl; + + //test of moNeutralDegreeNeighborStat.h + std::cout << "[t-moNeutralDegreeNeighborStat] => START" << std::endl; + moNeutralDegreeNeighborStat test6(test); + test6(sol); + assert(test6.value()==0); + assert(test6.className()=="moNeutralDegreeNeighborStat"); + std::cout << "[t-moNeutralDegreeNeighborStat] => OK" << std::endl; + + //test of moSecondMomentNeighborStat.h + std::cout << "[t-moSecondMomentNeighborStat] => START" << std::endl; + moSecondMomentNeighborStat test7(test); + test7(sol); + assert(test7.value().first==6.6); + assert(test7.value().second > 0.966 && test7.value().second < 0.967); + assert(test7.className()=="moSecondMomentNeighborStat"); + std::cout << "[t-moSecondMomentNeighborStat] => OK" << std::endl; + + //test of moSizeNeighborStat.h + std::cout << "[t-moSizeNeighborStat] => START" << std::endl; + moSizeNeighborStat test8(test); + test8(sol); + assert(test8.value()==10); + assert(test8.className()=="moSizeNeighborStat"); + std::cout << "[t-moSizeNeighborStat] => OK" << std::endl; + + return EXIT_SUCCESS; +} + diff --git a/trunk/paradiseo-mo/test/t-moOrderNeighborhood.cpp b/trunk/paradiseo-mo/test/t-moOrderNeighborhood.cpp new file mode 100644 index 000000000..1b07436dd --- /dev/null +++ b/trunk/paradiseo-mo/test/t-moOrderNeighborhood.cpp @@ -0,0 +1,80 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include +#include +#include + +#include +#include + +int main(){ + + std::cout << "[t-moOrderNeighborhood] => START" << std::endl; + + //init sol + eoBit sol; + sol.push_back(true); + sol.push_back(false); + sol.push_back(true); + + moBitNeighbor neighbor; + + //verif du constructeur vide + moOrderNeighborhood > test(3); + assert(test.position()==0); + + //verif du hasneighbor + assert(test.hasNeighbor(sol)); + + //verif de init + test.init(sol, neighbor); + assert(neighbor.index()==0); + assert(test.position()==0); + + //verif du next + test.next(sol, neighbor); + assert(neighbor.index()==1); + assert(test.position()==1); + + //verif du cont + assert(test.cont(sol)); + test.next(sol, neighbor); + assert(!test.cont(sol)); + + assert(test.className()=="moOrderNeighborhood"); + + std::cout << "[t-moOrderNeighborhood] => OK" << std::endl; + return EXIT_SUCCESS; +} diff --git a/trunk/paradiseo-mo/test/t-moRandomNeutralWalkExplorer.cpp b/trunk/paradiseo-mo/test/t-moRandomNeutralWalkExplorer.cpp new file mode 100644 index 000000000..483525b1e --- /dev/null +++ b/trunk/paradiseo-mo/test/t-moRandomNeutralWalkExplorer.cpp @@ -0,0 +1,88 @@ +/* + +Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + +Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can ue, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms. + +ParadisEO WebSite : http://paradiseo.gforge.inria.fr +Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include +#include "moTestClass.h" + +#include +#include +#include + +int main(){ + + std::cout << "[t-moRandomNeutralWalkExplorer] => START" << std::endl; + + eoBit sol(4, true); + sol.fitness(4); + bitNeighborhood nh(4); + evalOneMax eval(4); + dummyEvalOneMax eval2(4); + moSolNeighborComparator sncomp; + + //test avec la fonction d'eval classique + //on verifie qu'on ne trouve pas de voisin de mm fitness + moRandomNeutralWalkExplorer test(nh, eval, sncomp, 3); + + test.initParam(sol); + test(sol); + assert(!test.accept(sol)); + assert(!test.isContinue(sol)); + + //test avec une fonction d'eval bidon qui renvoie toujours la mm fitness + //on peut donc verifier qu'on s'arette au bout des 3 itérations. + moRandomNeutralWalkExplorer test2(nh, eval2, sncomp, 3); + + sol.fitness(2); + test2.initParam(sol); + test2(sol); + assert(test2.accept(sol)); + test2.move(sol); + assert(sol.fitness()==2); + test2.updateParam(sol); + assert(test2.isContinue(sol)); + + test2(sol); + assert(test2.accept(sol)); + test2.move(sol); + assert(sol.fitness()==2); + test2.updateParam(sol); + assert(test2.isContinue(sol)); + + test2(sol); + assert(test2.accept(sol)); + test2.move(sol); + assert(sol.fitness()==2); + test2.updateParam(sol); + assert(!test2.isContinue(sol)); + + std::cout << "[t-moRandomNeutralWalkExplorer] => OK" << std::endl; + + return EXIT_SUCCESS; +} + diff --git a/trunk/paradiseo-mo/test/t-moRandomWalkExplorer.cpp b/trunk/paradiseo-mo/test/t-moRandomWalkExplorer.cpp new file mode 100644 index 000000000..460988d2b --- /dev/null +++ b/trunk/paradiseo-mo/test/t-moRandomWalkExplorer.cpp @@ -0,0 +1,79 @@ +/* + +Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + +Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can ue, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms. + +ParadisEO WebSite : http://paradiseo.gforge.inria.fr +Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include +#include "moTestClass.h" + +#include +#include +#include + +int main(){ + + std::cout << "[t-moRandomWalkExplorer] => START" << std::endl; + + eoBit sol(4, true); + sol.fitness(4); + bitNeighborhood nh(4); + evalOneMax eval(4); + + //test avec un neighbordhood ordonné + //Du coup on verifie juste qu'on a bien une evolution de la solution et qu'on fait 3 pas avant d'arreter l'exploration + moRandomWalkExplorer test(nh, eval, 3); + + test.initParam(sol); + + test(sol); + assert(test.accept(sol)); + test.move(sol); + assert(sol.fitness()==3); + test.updateParam(sol); + assert(test.isContinue(sol)); + + + test(sol); + assert(test.accept(sol)); + test.move(sol); + assert(sol.fitness()==4); + test.updateParam(sol); + assert(test.isContinue(sol)); + + test(sol); + assert(test.accept(sol)); + test.move(sol); + assert(sol.fitness()==3); + assert(!sol[0]); + test.updateParam(sol); + assert(!test.isContinue(sol)); + + std::cout << "[t-moRandomWalkExplorer] => OK" << std::endl; + + return EXIT_SUCCESS; +} + diff --git a/trunk/paradiseo-mo/test/t-moRndWithReplNeighborhood.cpp b/trunk/paradiseo-mo/test/t-moRndWithReplNeighborhood.cpp new file mode 100644 index 000000000..110b4e824 --- /dev/null +++ b/trunk/paradiseo-mo/test/t-moRndWithReplNeighborhood.cpp @@ -0,0 +1,75 @@ +/* + +Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + +Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can ue, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms. + +ParadisEO WebSite : http://paradiseo.gforge.inria.fr +Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include +#include + +#include "moTestClass.h" +#include +#include +#include + +int main(){ + + std::cout << "[t-moRndWithReplNeighborhood] => START" << std::endl; + + unsigned int a, b; + eoBit sol; + moBitNeighbor n; + + moRndWithReplNeighborhood< moBitNeighbor > test(3); + moRndWithReplNeighborhood< moBitNeighbor > test2(0); + + assert(test.hasNeighbor(sol)); + assert(!test2.hasNeighbor(sol)); + + test.init(sol,n); + + //on s'assure qu'on a bien toujours bien l'index 0, 1 ou 2 qui est renvoyé + for(unsigned int i=0; i<100; i++){ + + a=n.index(); + test.next(sol,n); + b=n.index(); + + assert(a==0 || a==1 || a==2); + assert(b==0 || b==1 || b==2); + assert(test.cont(sol)); + assert(!test2.cont(sol)); + assert(test.cont(sol)); + + } + + assert(test.className()=="moRndWithReplNeighborhood"); + + std::cout << "[t-moRndWithReplNeighborhood] => OK" << std::endl; + + return EXIT_SUCCESS; +} + diff --git a/trunk/paradiseo-mo/test/t-moRndWithoutReplNeighborhood.cpp b/trunk/paradiseo-mo/test/t-moRndWithoutReplNeighborhood.cpp new file mode 100644 index 000000000..c8ed7e426 --- /dev/null +++ b/trunk/paradiseo-mo/test/t-moRndWithoutReplNeighborhood.cpp @@ -0,0 +1,76 @@ +/* + +Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + +Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can ue, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms. + +ParadisEO WebSite : http://paradiseo.gforge.inria.fr +Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include +#include + +#include "moTestClass.h" +#include +#include +#include + +int main(){ + + std::cout << "[t-moRndWithoutReplNeighborhood] => START" << std::endl; + + unsigned int a, b, c; + eoBit sol; + moBitNeighbor n; + + //instanciation + moRndWithoutReplNeighborhood< moBitNeighbor > test(3); + moRndWithoutReplNeighborhood< moBitNeighbor > test2(0); + + //on verifie que test a bien des voisins et que test2 n'en a pas + assert(test.hasNeighbor(sol)); + assert(!test2.hasNeighbor(sol)); + + //on recupere successivement les index + test.init(sol, n); + assert(test.cont(sol)); + a=test.position(); + test.next(sol, n); + assert(test.cont(sol)); + b=test.position(); + test.next(sol,n); + assert(!test.cont(sol)); + c=test.position(); + + //on s'assure qu'on a bien 0, 1 et 2 (dans un ordre aléatoire) + assert(a==0 || b==0 || c==0); + assert(a==1 || b==1 || c==1); + assert(a==2 || b==2 || c==2); + + assert(test.className()=="moRndWithoutReplNeighborhood"); + + std::cout << "[t-moRndWithoutReplNeighborhood] => OK" << std::endl; + + return EXIT_SUCCESS; +} + diff --git a/trunk/paradiseo-mo/test/t-moSimpleHCexplorer.cpp b/trunk/paradiseo-mo/test/t-moSimpleHCexplorer.cpp new file mode 100644 index 000000000..90c7a66fe --- /dev/null +++ b/trunk/paradiseo-mo/test/t-moSimpleHCexplorer.cpp @@ -0,0 +1,92 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include "moTestClass.h" +#include +#include +#include +#include + +#include +#include + +int main(){ + + //Pas grand chose à faire: le gros du travail est fait par le voisin et l'eval + + std::cout << "[t-moSimpleHCexplorer] => START" << std::endl; + + Solution sol; + moDummyNeighbor neighbor; + moDummyEval eval; + moDummyNeighborhood nh; + moFullEvalByCopy fulleval(eval); + moNeighborComparator comp; + moSolNeighborComparator solNeighborComp; + + //verif constructor + moSimpleHCexplorer test(nh, fulleval, comp, solNeighborComp); + + //verif operator() et accept: le neigorhood est construit pour qu'on tombe dans les 3 cas suivants: + //hasNeighbor() retourne faux a l'entrée de l'operator() donc on doit pas continuer + sol.fitness(3); + test(sol); + test.accept(sol); + assert(!test.isContinue(sol)); + + //hasNeighbor() retourne faux a l'entrée de accept() donc on doit pas continuer + test(sol); + test.accept(sol); + assert(!test.isContinue(sol)); + + //hasNeighbor() retourne vrai et on ameliore la fitness donc on doit continuer + test(sol); + test.accept(sol); + assert(test.isContinue(sol)); + + //verif de move -> on affecte la fitness du best d'avant + test.move(sol); + + //hasNeighbor() retourne vrai et on ameliore pas la fitness donc on doit pas continuer + test(sol); + test(sol); + test.accept(sol); + assert(!test.isContinue(sol)); + + assert(test.className()=="moSimpleHCexplorer"); + + std::cout << "[t-moSimpleHCexplorer] => OK" << std::endl; + + return EXIT_SUCCESS; +} diff --git a/trunk/paradiseo-mo/test/t-moSimpleHCneutralExplorer.cpp b/trunk/paradiseo-mo/test/t-moSimpleHCneutralExplorer.cpp new file mode 100644 index 000000000..7d32c5a0d --- /dev/null +++ b/trunk/paradiseo-mo/test/t-moSimpleHCneutralExplorer.cpp @@ -0,0 +1,101 @@ +/* + +Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + +Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can ue, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms. + +ParadisEO WebSite : http://paradiseo.gforge.inria.fr +Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include +#include +#include +#include "moTestClass.h" + +#include +#include +#include + +int main(){ + + std::cout << "[t-moSimpleHCneutralExplorer] => START" << std::endl; + + //instanciation + eoBit sol(4, true); + sol.fitness(4); + bitNeighborhood nh(4); + evalOneMax eval(4); + moNeighborComparator ncomp; + moSolNeighborComparator sncomp; + + moSimpleHCneutralExplorer test(nh, eval, ncomp, sncomp); + + //test qu'on ameliore bien a chaque itération + test.initParam(sol); + test(sol); + assert(test.accept(sol)); + test.move(sol); + assert(sol.fitness()==3); + assert(test.isContinue(sol)); + test.updateParam(sol); + + //les affichages permettent de voir qu'on choisit pas toujours les mm voisins améliorant (lancer plusieurs fois l'exe) + std::cout << sol << std::endl; + + test(sol); + assert(test.accept(sol)); + test.move(sol); + assert(sol.fitness()==2); + assert(test.isContinue(sol)); + test.updateParam(sol); + + std::cout << sol << std::endl; + + test(sol); + assert(test.accept(sol)); + test.move(sol); + assert(sol.fitness()==1); + assert(test.isContinue(sol)); + test.updateParam(sol); + + std::cout << sol << std::endl; + + test(sol); + assert(test.accept(sol)); + test.move(sol); + assert(sol.fitness()==0); + assert(test.isContinue(sol)); + test.updateParam(sol); + + test(sol); + assert(!test.accept(sol)); + assert(sol.fitness()==0); + assert(!test.isContinue(sol)); + test.updateParam(sol); + + + std::cout << "[t-moSimpleHCneutralExplorer] => OK" << std::endl; + + return EXIT_SUCCESS; +} + diff --git a/trunk/paradiseo-mo/test/t-moSolNeighborComparator.cpp b/trunk/paradiseo-mo/test/t-moSolNeighborComparator.cpp new file mode 100644 index 000000000..f3b735b99 --- /dev/null +++ b/trunk/paradiseo-mo/test/t-moSolNeighborComparator.cpp @@ -0,0 +1,72 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include +#include +#include +#include + +#include +#include + +int main(){ + + std::cout << "[t-moSolNeighborComparator] => START" << std::endl; + + moBitNeighbor neighbor; + eoBit sol; + + moSolNeighborComparator< moBitNeighbor > test; + + neighbor.fitness(3); + sol.fitness(2); + //test with a minimizing fitness, neighbor must not be better than sol + assert(!test(sol, neighbor)); + + //reversly + neighbor.fitness(2); + sol.fitness(3); + assert(test(sol, neighbor)); + + //test equals + assert(!test.equals(sol, neighbor)); + + neighbor.fitness(3); + assert(test.equals(sol, neighbor)); + + assert(test.className()=="moSolNeighborComparator"); + + std::cout << "[t-moSolNeighborComparator] => OK" << std::endl; + return EXIT_SUCCESS; +} diff --git a/trunk/paradiseo-mo/test/t-moSolVectorTabuList.cpp b/trunk/paradiseo-mo/test/t-moSolVectorTabuList.cpp new file mode 100644 index 000000000..7f792b40a --- /dev/null +++ b/trunk/paradiseo-mo/test/t-moSolVectorTabuList.cpp @@ -0,0 +1,154 @@ +/* + +Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + +Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can ue, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms. + +ParadisEO WebSite : http://paradiseo.gforge.inria.fr +Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include +#include "moTestClass.h" + +#include +#include +#include + +int main(){ + + std::cout << "[t-moSolVectorTabuList] => START" << std::endl; + + //test without countdown + moSolVectorTabuList test(2,0); + bitNeighbor n1; + bitNeighbor n2; + bitNeighbor n3; + bitNeighbor n4; + n1.index(0); + n2.index(1); + n3.index(2); + n4.index(3); + + eoBit sol1(4, true); + eoBit sol2(4, true); + eoBit sol3(4, true); + eoBit sol4(4, true); + + sol2[0]=false; + sol3[1]=false; + sol4[0]=false; + sol4[1]=false; + + //init + test.init(sol1); + + //ajout d'une sol tabu + test.add(sol1,n1); + + //verification des voisins de chaques sol + assert(test.check(sol2,n1)); + assert(!test.check(sol2,n2)); + assert(!test.check(sol2,n3)); + assert(!test.check(sol2,n4)); + + assert(!test.check(sol3,n1)); + assert(test.check(sol3,n2)); + assert(!test.check(sol3,n3)); + assert(!test.check(sol3,n4)); + + assert(!test.check(sol4,n1)); + assert(!test.check(sol4,n2)); + assert(!test.check(sol4,n3)); + assert(!test.check(sol4,n4)); + + test.init(sol1); + assert(!test.check(sol2,n1)); + assert(!test.check(sol3,n2)); + + test.update(sol1,n1); + + test.add(sol1,n1); + test.add(sol2,n1); + assert(test.check(sol2,n1)); + test.add(sol4,n1); + assert(!test.check(sol2,n1)); + assert(test.check(sol2,n2)); + + //test with a countdown at 3 + moSolVectorTabuList test2(2,2); + test2.init(sol1); + test2.add(sol1,n1); + assert(test2.check(sol2,n1)); + assert(!test2.check(sol2,n2)); + assert(!test2.check(sol2,n3)); + assert(!test2.check(sol2,n4)); + + assert(!test2.check(sol3,n1)); + assert(test2.check(sol3,n2)); + assert(!test2.check(sol3,n3)); + assert(!test2.check(sol3,n4)); + + assert(!test2.check(sol4,n1)); + assert(!test2.check(sol4,n2)); + assert(!test2.check(sol4,n3)); + assert(!test2.check(sol4,n4)); + + //coutdown sol1 -> 1 + test2.update(sol1,n1); + assert(test2.check(sol2,n1)); + assert(!test2.check(sol2,n2)); + assert(!test2.check(sol2,n3)); + assert(!test2.check(sol2,n4)); + + assert(!test2.check(sol3,n1)); + assert(test2.check(sol3,n2)); + assert(!test2.check(sol3,n3)); + assert(!test2.check(sol3,n4)); + + assert(!test2.check(sol4,n1)); + assert(!test2.check(sol4,n2)); + assert(!test2.check(sol4,n3)); + assert(!test2.check(sol4,n4)); + + //coutdown sol1 -> 0 : sol1 is no longer tabu + test2.update(sol1,n1); + assert(!test2.check(sol2,n1)); + assert(!test2.check(sol2,n2)); + assert(!test2.check(sol2,n3)); + assert(!test2.check(sol2,n4)); + + assert(!test2.check(sol3,n1)); + assert(!test2.check(sol3,n2)); + assert(!test2.check(sol3,n3)); + assert(!test2.check(sol3,n4)); + + assert(!test2.check(sol4,n1)); + assert(!test2.check(sol4,n2)); + assert(!test2.check(sol4,n3)); + assert(!test2.check(sol4,n4)); + + std::cout << "[t-moSolVectorTabuList] => OK" << std::endl; + + return EXIT_SUCCESS; +} + diff --git a/trunk/paradiseo-mo/test/t-moSolutionStat.cpp b/trunk/paradiseo-mo/test/t-moSolutionStat.cpp new file mode 100644 index 000000000..c17c67fe2 --- /dev/null +++ b/trunk/paradiseo-mo/test/t-moSolutionStat.cpp @@ -0,0 +1,64 @@ +/* + +Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + +Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can ue, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms. + +ParadisEO WebSite : http://paradiseo.gforge.inria.fr +Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include +#include "moTestClass.h" + +#include +#include +#include + +int main(){ + + std::cout << "[t-moSolutionStat] => START" << std::endl; + + eoBit s(3); + s[0]=true; + s[1]=true; + s[2]=false; + + s.fitness(17); + + moSolutionStat< eoBit > test; + + test(s); + //on verifie que la solution est bien enregistré + + assert(test.value()[0]); + assert(test.value()[1]); + assert(!test.value()[2]); + assert(test.value().fitness()==17); + + assert(test.className()=="moSolutionStat"); + + std::cout << "[t-moSolutionStat] => OK" << std::endl; + + return EXIT_SUCCESS; +} + diff --git a/trunk/paradiseo-mo/test/t-moTSExplorer.cpp b/trunk/paradiseo-mo/test/t-moTSExplorer.cpp new file mode 100644 index 000000000..ba72bdbd1 --- /dev/null +++ b/trunk/paradiseo-mo/test/t-moTSExplorer.cpp @@ -0,0 +1,165 @@ +/* + +Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + +Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can ue, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms. + +ParadisEO WebSite : http://paradiseo.gforge.inria.fr +Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include +#include +#include +#include +#include +#include "moTestClass.h" + +#include +#include +#include + +int main(){ + + std::cout << "[t-moTSExplorer] => START" << std::endl; + + //instansiation + eoBit sol(4, true); + sol.fitness(4); + bitNeighborhood nh(4); + bitNeighborhood emptyNH(0); + evalOneMax eval(4); + moNeighborComparator ncomp; + moSolNeighborComparator sncomp; + moDummyIntensification intens; + moDummyDiversification diver; + moSolVectorTabuList tabuList(4,0); + moBestImprAspiration aspir; + + moTSExplorer test(nh, eval, ncomp, sncomp, tabuList, intens, diver, aspir); + moTSExplorer test2(emptyNH, eval, ncomp, sncomp, tabuList, intens, diver, aspir); + + //test d'un voisinage vide + test2.initParam(sol); + test2(sol); + assert(!test2.accept(sol)); + + //test le comportement classique de la taboo + test.initParam(sol); + assert(aspir.getBest()==sol); + + test(sol); + test.updateParam(sol); + assert(aspir.getBest()==sol); + + //on ameliore et on stock une sol tabou 0111 + test(sol); + test.move(sol); + test.moveApplied(true); + test.updateParam(sol); + assert(aspir.getBest()==sol); + + //on ameliore et on stock une autre sol tabou 0011 + test(sol); + test.move(sol); + test.moveApplied(true); + test.updateParam(sol); + assert(aspir.getBest()==sol); + + //pareil on stock 0001 met pdt la recherche on se rend compte que 0111 est tabou + test(sol); + test.move(sol); + test.moveApplied(true); + test.updateParam(sol); + assert(aspir.getBest()==sol); + + //on modifie la sol en 1001(fitness 2) pour que la 1er sol exploré(0001) soit tabou + //De plus on change la solution mais elle est pas meilleure que la best so Far + sol[0]=true; + std::cout << sol << std::endl; + sol.fitness(2); + test(sol); + test.move(sol); + test.moveApplied(true); + test.updateParam(sol); + assert( sol[0] && !sol[1] && !sol[2] && !sol[3]); + sol[0]=false; + sol[3]=true; + assert(aspir.getBest()==sol); + + //test du isContinue + assert(test.isContinue(sol)); + + //test du terminate + test.initParam(sol); + sol[0]=true; + sol[1]=true; + sol[2]=true; + sol[3]=true; + sol.fitness(4); + test(sol); + test.move(sol); + test.moveApplied(true); + test.updateParam(sol); + assert( !sol[0] && sol[1] && sol[2] && sol[3]); + test.terminate(sol); + assert( !sol[0] && !sol[1] && !sol[2] && sol[3]); + + //test pour avoir que des mouvement taboo + eoBit sol2(2, true); + sol2.fitness(2); + bitNeighborhood nh2(2); + evalOneMax eval2(2); + + moTSExplorer test3(nh2, eval2, ncomp, sncomp, tabuList, intens, diver, aspir); + + test3.initParam(sol2); + test3(sol2); + test3.move(sol2); + test3.moveApplied(true); + test3.updateParam(sol2); + + test3(sol2); + test3.move(sol2); + test3.moveApplied(true); + test3.updateParam(sol2); + + test3(sol2); + test3.move(sol2); + test3.moveApplied(true); + test3.updateParam(sol2); + + test3(sol2); + test3.move(sol2); + test3.moveApplied(true); + test3.updateParam(sol2); + + //on a rempli la liste tabu pour que tout les voisins soit tabu + test3(sol2); + assert(!test3.accept(sol2)); + + + std::cout << "[t-moTSExplorer] => OK" << std::endl; + + return EXIT_SUCCESS; +} + diff --git a/trunk/paradiseo-mo/test/t-moTrueContinuator.cpp b/trunk/paradiseo-mo/test/t-moTrueContinuator.cpp new file mode 100644 index 000000000..c3ae5746d --- /dev/null +++ b/trunk/paradiseo-mo/test/t-moTrueContinuator.cpp @@ -0,0 +1,53 @@ +/* + + Copyright (C) DOLPHIN Project-Team, INRIA Lille - Nord Europe, 2006-2010 + + Sébastien Verel, Arnaud Liefooghe, Jérémie Humeau + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + ParadisEO WebSite : http://paradiseo.gforge.inria.fr + Contact: paradiseo-help@lists.gforge.inria.fr +*/ + +#include +#include "moTestClass.h" + +#include +#include + + +int main(){ + + std::cout << "[t-moTrueContinuator] => START" << std::endl; + + moTrueContinuator test; + Solution s; + + assert(test(s)); + + std::cout << "[t-moTrueContinuator] => OK" << std::endl; + return EXIT_SUCCESS; +} diff --git a/trunk/paradiseo-mo/tutorial/CMakeLists.txt b/trunk/paradiseo-mo/tutorial/CMakeLists.txt new file mode 100644 index 000000000..2fc13942e --- /dev/null +++ b/trunk/paradiseo-mo/tutorial/CMakeLists.txt @@ -0,0 +1 @@ +ADD_SUBDIRECTORY(oneMax) \ No newline at end of file diff --git a/trunk/paradiseo-mo/tutorial/oneMax/CMakeLists.txt b/trunk/paradiseo-mo/tutorial/oneMax/CMakeLists.txt new file mode 100644 index 000000000..8bf58768d --- /dev/null +++ b/trunk/paradiseo-mo/tutorial/oneMax/CMakeLists.txt @@ -0,0 +1 @@ +ADD_SUBDIRECTORY(application) \ No newline at end of file diff --git a/trunk/paradiseo-mo/tutorial/oneMax/application/CMakeLists.txt b/trunk/paradiseo-mo/tutorial/oneMax/application/CMakeLists.txt new file mode 100644 index 000000000..2053312af --- /dev/null +++ b/trunk/paradiseo-mo/tutorial/oneMax/application/CMakeLists.txt @@ -0,0 +1,25 @@ +INCLUDE_DIRECTORIES(${EO_SRC_DIR}/src + ${MO_SRC_DIR}/src + ${CMAKE_CURRENT_SOURCE_DIR}/../src) + +LINK_DIRECTORIES(${EO_BIN_DIR}/lib) + +ADD_EXECUTABLE(testSimpleHC testSimpleHC.cpp) +ADD_EXECUTABLE(testFirstImpr testFirstImpr.cpp) +ADD_EXECUTABLE(testRandomWalk testRandomWalk.cpp) +ADD_EXECUTABLE(testSimpleHCneutral testSimpleHCneutral.cpp) +ADD_EXECUTABLE(testHCneutral testHCneutral.cpp) +ADD_EXECUTABLE(testMetropolisHasting testMetropolisHasting.cpp) +#ADD_EXECUTABLE(testWithMove testWithMove.cpp) +ADD_EXECUTABLE(testSimpleTS testSimpleTS.cpp) +ADD_EXECUTABLE(testRandomNeutralWalk testRandomNeutralWalk.cpp) + +TARGET_LINK_LIBRARIES(testSimpleHC eoutils ga eo) +TARGET_LINK_LIBRARIES(testFirstImpr eoutils ga eo) +TARGET_LINK_LIBRARIES(testRandomWalk eoutils ga eo) +TARGET_LINK_LIBRARIES(testSimpleHCneutral eoutils ga eo) +TARGET_LINK_LIBRARIES(testHCneutral eoutils ga eo) +TARGET_LINK_LIBRARIES(testMetropolisHasting eoutils ga eo) +#TARGET_LINK_LIBRARIES(testWithMove eoutils ga eo) +TARGET_LINK_LIBRARIES(testSimpleTS eoutils ga eo) +TARGET_LINK_LIBRARIES(testRandomNeutralWalk eoutils ga eo) \ No newline at end of file diff --git a/trunk/paradiseo-mo/tutorial/oneMax/application/testFirstImpr.cpp b/trunk/paradiseo-mo/tutorial/oneMax/application/testFirstImpr.cpp new file mode 100644 index 000000000..af728719b --- /dev/null +++ b/trunk/paradiseo-mo/tutorial/oneMax/application/testFirstImpr.cpp @@ -0,0 +1,197 @@ +//----------------------------------------------------------------------------- +/** testFirstImpr.cpp + * + * SV - 12/01/10 + * + */ +//----------------------------------------------------------------------------- + +// standard includes +#define HAVE_SSTREAM + +#include // runtime_error +#include // cout +#include // ostrstream, istrstream +#include +#include + +// the general include for eo +#include +#include + +using namespace std; + +//----------------------------------------------------------------------------- +// fitness function +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +// REPRESENTATION +//----------------------------------------------------------------------------- +typedef eoBit Indi; +typedef moBitNeighbor Neighbor ; // incremental evaluation +typedef moRndWithoutReplNeighborhood Neighborhood ; + +void main_function(int argc, char **argv) +{ + /* ========================================================= + * + * Parameters + * + * ========================================================= */ + + // First define a parser from the command-line arguments + eoParser parser(argc, argv); + + // For each parameter, define Parameter, read it through the parser, + // and assign the value to the variable + + eoValueParam seedParam(time(0), "seed", "Random number seed", 'S'); + parser.processParam( seedParam ); + unsigned seed = seedParam.value(); + + // description of genotype + eoValueParam vecSizeParam(8, "vecSize", "Genotype size", 'V'); + parser.processParam( vecSizeParam, "Representation" ); + unsigned vecSize = vecSizeParam.value(); + + // the name of the "status" file where all actual parameter values will be saved + string str_status = parser.ProgramName() + ".status"; // default value + eoValueParam statusParam(str_status.c_str(), "status", "Status file"); + parser.processParam( statusParam, "Persistence" ); + + // do the following AFTER ALL PARAMETERS HAVE BEEN PROCESSED + // i.e. in case you need parameters somewhere else, postpone these + if (parser.userNeedsHelp()){ + parser.printHelp(cout); + exit(1); + } + if (statusParam.value() != ""){ + ofstream os(statusParam.value().c_str()); + os << parser;// and you can use that file as parameter file + } + + /* ========================================================= + * + * Random seed + * + * ========================================================= */ + + //reproducible random seed: if you don't change SEED above, + // you'll aways get the same result, NOT a random run + rng.reseed(seed); + + + /* ========================================================= + * + * Eval fitness function + * + * ========================================================= */ + + FuncOneMax eval(vecSize); + + + /* ========================================================= + * + * Initilisation of the solution + * + * ========================================================= */ + + // a Indi random initializer + eoUniformGenerator uGen; + eoInitFixedLength random(vecSize, uGen); + + + /* ========================================================= + * + * evaluation of a neighbor solution + * + * ========================================================= */ + + moFullEvalByModif fulleval(eval); + + //An eval by copy can be used instead of the eval by modif + //moFullEvalByCopy fulleval(eval); + + + /* ========================================================= + * + * Comparator of neighbors + * + * ========================================================= */ + + moNeighborComparator comparator; + moSolNeighborComparator solComparator; + + + /* ========================================================= + * + * the neighborhood of a solution + * + * ========================================================= */ + + Neighborhood neighborhood(vecSize); + + + /* ========================================================= + * + * a neighborhood explorer solution + * + * ========================================================= */ + + moFirstImprExplorer explorer(neighborhood, fulleval, comparator, solComparator); + + + /* ========================================================= + * + * the local search algorithm + * + * ========================================================= */ + + moTrueContinuator continuator;//always continue + + moLocalSearch< moFirstImprExplorer > localSearch(explorer, continuator, eval); + + /* ========================================================= + * + * execute the local search from random sollution + * + * ========================================================= */ + + Indi solution; + + random(solution); + + //Can be eval here, else it will be done at the beginning of the localSearch + //eval(solution); + + std::cout << "initial: " << solution << std::endl ; + + localSearch(solution); + + std::cout << "final: " << solution << std::endl ; + +} + +// A main that catches the exceptions + +int main(int argc, char **argv) +{ + try{ + main_function(argc, argv); + } + catch(exception& e){ + cout << "Exception: " << e.what() << '\n'; + } + return 1; +} diff --git a/trunk/paradiseo-mo/tutorial/oneMax/application/testHCneutral.cpp b/trunk/paradiseo-mo/tutorial/oneMax/application/testHCneutral.cpp new file mode 100644 index 000000000..a14367f7b --- /dev/null +++ b/trunk/paradiseo-mo/tutorial/oneMax/application/testHCneutral.cpp @@ -0,0 +1,201 @@ +//----------------------------------------------------------------------------- +/** testHCneutral.cpp + * + * SV - 24/01/10 + * + */ +//----------------------------------------------------------------------------- + +// standard includes +#define HAVE_SSTREAM + +#include // runtime_error +#include // cout +#include // ostrstream, istrstream +#include +#include + +// the general include for eo +#include +#include + +using namespace std; + +//----------------------------------------------------------------------------- +// fitness function +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +// REPRESENTATION +//----------------------------------------------------------------------------- +typedef eoBit Indi; +typedef moBitNeighbor Neighbor ; // incremental evaluation +typedef moOrderNeighborhood Neighborhood ; + +void main_function(int argc, char **argv) +{ + /* ========================================================= + * + * Parameters + * + * ========================================================= */ + + // First define a parser from the command-line arguments + eoParser parser(argc, argv); + + // For each parameter, define Parameter, read it through the parser, + // and assign the value to the variable + + eoValueParam seedParam(time(0), "seed", "Random number seed", 'S'); + parser.processParam( seedParam ); + unsigned seed = seedParam.value(); + + // description of genotype + eoValueParam vecSizeParam(8, "vecSize", "Genotype size", 'V'); + parser.processParam( vecSizeParam, "Representation" ); + unsigned vecSize = vecSizeParam.value(); + + eoValueParam stepParam(10, "nbStep", "Number of steps of the random walk", 'n'); + parser.processParam( stepParam, "Representation" ); + unsigned nbStep = stepParam.value(); + + // the name of the "status" file where all actual parameter values will be saved + string str_status = parser.ProgramName() + ".status"; // default value + eoValueParam statusParam(str_status.c_str(), "status", "Status file"); + parser.processParam( statusParam, "Persistence" ); + + // do the following AFTER ALL PARAMETERS HAVE BEEN PROCESSED + // i.e. in case you need parameters somewhere else, postpone these + if (parser.userNeedsHelp()){ + parser.printHelp(cout); + exit(1); + } + if (statusParam.value() != ""){ + ofstream os(statusParam.value().c_str()); + os << parser;// and you can use that file as parameter file + } + + /* ========================================================= + * + * Random seed + * + * ========================================================= */ + + //reproducible random seed: if you don't change SEED above, + // you'll aways get the same result, NOT a random run + rng.reseed(seed); + + + /* ========================================================= + * + * Eval fitness function + * + * ========================================================= */ + + FuncOneMax eval(vecSize); + + + /* ========================================================= + * + * Initilisation of the solution + * + * ========================================================= */ + + // a Indi random initializer + eoUniformGenerator uGen; + eoInitFixedLength random(vecSize, uGen); + + + /* ========================================================= + * + * evaluation of a neighbor solution + * + * ========================================================= */ + + moFullEvalByModif fulleval(eval); + + //An eval by copy can be used instead of the eval by modif + //moFullEvalByCopy fulleval(eval); + + + /* ========================================================= + * + * Comparator of neighbors + * + * ========================================================= */ + + moNeighborComparator comparator; + moSolNeighborComparator solComparator; + + + /* ========================================================= + * + * the neighborhood of a solution + * + * ========================================================= */ + + Neighborhood neighborhood(vecSize); + + + /* ========================================================= + * + * a neighborhood explorer solution + * + * ========================================================= */ + + moHCneutralExplorer explorer(neighborhood, fulleval, comparator, solComparator, nbStep); + + + /* ========================================================= + * + * the local search algorithm + * + * ========================================================= */ + + moTrueContinuator continuator;//always continue + + moLocalSearch< moHCneutralExplorer > localSearch(explorer, continuator, eval); + + /* ========================================================= + * + * execute the local search from random sollution + * + * ========================================================= */ + + Indi solution; + + random(solution); + + //Can be eval here, else it will be done at the beginning of the localSearch + //eval(solution); + + std::cout << "initial: " << solution << std::endl ; + + localSearch(solution); + + std::cout << "final: " << solution << std::endl ; + +} + +// A main that catches the exceptions + +int main(int argc, char **argv) +{ + try{ + main_function(argc, argv); + } + catch(exception& e){ + cout << "Exception: " << e.what() << '\n'; + } + return 1; +} diff --git a/trunk/paradiseo-mo/tutorial/oneMax/application/testMetropolisHasting.cpp b/trunk/paradiseo-mo/tutorial/oneMax/application/testMetropolisHasting.cpp new file mode 100644 index 000000000..c8518f20d --- /dev/null +++ b/trunk/paradiseo-mo/tutorial/oneMax/application/testMetropolisHasting.cpp @@ -0,0 +1,201 @@ +//----------------------------------------------------------------------------- +/** testMetropolisHasting.cpp + * + * SV - 22/01/10 + * + */ +//----------------------------------------------------------------------------- + +// standard includes +#define HAVE_SSTREAM + +#include // runtime_error +#include // cout +#include // ostrstream, istrstream +#include +#include + +// the general include for eo +#include +#include + +using namespace std; + +//----------------------------------------------------------------------------- +// fitness function +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +// REPRESENTATION +//----------------------------------------------------------------------------- +typedef eoBit Indi; +typedef moBitNeighbor Neighbor ; // incremental evaluation +typedef moRndWithReplNeighborhood Neighborhood ; + +void main_function(int argc, char **argv) +{ + /* ========================================================= + * + * Parameters + * + * ========================================================= */ + + // First define a parser from the command-line arguments + eoParser parser(argc, argv); + + // For each parameter, define Parameter, read it through the parser, + // and assign the value to the variable + + eoValueParam seedParam(time(0), "seed", "Random number seed", 'S'); + parser.processParam( seedParam ); + unsigned seed = seedParam.value(); + + // description of genotype + eoValueParam vecSizeParam(8, "vecSize", "Genotype size", 'V'); + parser.processParam( vecSizeParam, "Representation" ); + unsigned vecSize = vecSizeParam.value(); + + eoValueParam stepParam(10, "nbStep", "Number of steps of the random walk", 'n'); + parser.processParam( stepParam, "Representation" ); + unsigned nbStep = stepParam.value(); + + // the name of the "status" file where all actual parameter values will be saved + string str_status = parser.ProgramName() + ".status"; // default value + eoValueParam statusParam(str_status.c_str(), "status", "Status file"); + parser.processParam( statusParam, "Persistence" ); + + // do the following AFTER ALL PARAMETERS HAVE BEEN PROCESSED + // i.e. in case you need parameters somewhere else, postpone these + if (parser.userNeedsHelp()){ + parser.printHelp(cout); + exit(1); + } + if (statusParam.value() != ""){ + ofstream os(statusParam.value().c_str()); + os << parser;// and you can use that file as parameter file + } + + /* ========================================================= + * + * Random seed + * + * ========================================================= */ + + //reproducible random seed: if you don't change SEED above, + // you'll aways get the same result, NOT a random run + rng.reseed(seed); + + + /* ========================================================= + * + * Eval fitness function + * + * ========================================================= */ + + FuncOneMax eval(vecSize); + + + /* ========================================================= + * + * Initilisation of the solution + * + * ========================================================= */ + + // a Indi random initializer + eoUniformGenerator uGen; + eoInitFixedLength random(vecSize, uGen); + + + /* ========================================================= + * + * evaluation of a neighbor solution + * + * ========================================================= */ + + moFullEvalByModif fulleval(eval); + + //An eval by copy can be used instead of the eval by modif + //moFullEvalByCopy fulleval(eval); + + + /* ========================================================= + * + * Comparator of neighbors + * + * ========================================================= */ + + moNeighborComparator comparator; + moSolNeighborComparator solComparator; + + + /* ========================================================= + * + * the neighborhood of a solution + * + * ========================================================= */ + + Neighborhood neighborhood(vecSize); + + + /* ========================================================= + * + * a neighborhood explorer solution + * + * ========================================================= */ + + moMetropolisHastingExplorer explorer(neighborhood, fulleval, comparator, solComparator, nbStep); + + + /* ========================================================= + * + * the local search algorithm + * + * ========================================================= */ + + moTrueContinuator continuator;//always continue + + moLocalSearch< moMetropolisHastingExplorer > localSearch(explorer, continuator, eval); + + /* ========================================================= + * + * execute the local search from random sollution + * + * ========================================================= */ + + Indi solution; + + random(solution); + + //Can be eval here, else it will be done at the beginning of the localSearch + //eval(solution); + + std::cout << "initial: " << solution << std::endl ; + + localSearch(solution); + + std::cout << "final: " << solution << std::endl ; + +} + +// A main that catches the exceptions + +int main(int argc, char **argv) +{ + try{ + main_function(argc, argv); + } + catch(exception& e){ + cout << "Exception: " << e.what() << '\n'; + } + return 1; +} diff --git a/trunk/paradiseo-mo/tutorial/oneMax/application/testRandomNeutralWalk.cpp b/trunk/paradiseo-mo/tutorial/oneMax/application/testRandomNeutralWalk.cpp new file mode 100644 index 000000000..2c1b77b90 --- /dev/null +++ b/trunk/paradiseo-mo/tutorial/oneMax/application/testRandomNeutralWalk.cpp @@ -0,0 +1,278 @@ +//----------------------------------------------------------------------------- +/** testRandomNeutralWalk.cpp + * + * SV - 22/02/10 + * + */ +//----------------------------------------------------------------------------- + +// standard includes +#define HAVE_SSTREAM + +#include // runtime_error +#include // cout +#include // ostrstream, istrstream +#include +#include + +// the general include for eo +#include +#include + +using namespace std; + +//----------------------------------------------------------------------------- +// fitness function +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// REPRESENTATION +//----------------------------------------------------------------------------- +typedef eoBit Indi; +typedef moBitNeighbor Neighbor ; // incremental evaluation +typedef moRndWithoutReplNeighborhood Neighborhood ; + +void main_function(int argc, char **argv) +{ + /* ========================================================= + * + * Parameters + * + * ========================================================= */ + + // First define a parser from the command-line arguments + eoParser parser(argc, argv); + + // For each parameter, define Parameter, read it through the parser, + // and assign the value to the variable + + eoValueParam seedParam(time(0), "seed", "Random number seed", 'S'); + parser.processParam( seedParam ); + unsigned seed = seedParam.value(); + + // description of genotype + eoValueParam vecSizeParam(8, "vecSize", "Genotype size", 'V'); + parser.processParam( vecSizeParam, "Representation" ); + unsigned vecSize = vecSizeParam.value(); + + eoValueParam blockSizeParam(2, "blockSize", "Size of block in the royal road", 'k'); + parser.processParam( blockSizeParam, "Representation" ); + unsigned blockSize = blockSizeParam.value(); + + eoValueParam stepParam(10, "nbStep", "Number of steps of the random walk", 'n'); + parser.processParam( stepParam, "Representation" ); + unsigned nbStep = stepParam.value(); + + // the name of the "status" file where all actual parameter values will be saved + string str_status = parser.ProgramName() + ".status"; // default value + eoValueParam statusParam(str_status.c_str(), "status", "Status file"); + parser.processParam( statusParam, "Persistence" ); + + // do the following AFTER ALL PARAMETERS HAVE BEEN PROCESSED + // i.e. in case you need parameters somewhere else, postpone these + if (parser.userNeedsHelp()){ + parser.printHelp(cout); + exit(1); + } + if (statusParam.value() != ""){ + ofstream os(statusParam.value().c_str()); + os << parser;// and you can use that file as parameter file + } + + /* ========================================================= + * + * Random seed + * + * ========================================================= */ + + //reproducible random seed: if you don't change SEED above, + // you'll aways get the same result, NOT a random run + rng.reseed(seed); + + + /* ========================================================= + * + * Eval fitness function + * + * ========================================================= */ + + FuncRoyalRoad eval(vecSize / blockSize, blockSize); + + + /* ========================================================= + * + * Initilisazor of the solution + * + * ========================================================= */ + + // a Indi random initializer + eoUniformGenerator uGen; + eoInitFixedLength random(vecSize, uGen); + + + /* ========================================================= + * + * Evaluation of a neighbor solution + * + * ========================================================= */ + + moFullEvalByModif nhEval(eval); + + //An eval by copy can be used instead of the eval by modif + //moFullEvalByCopy nhEval(eval); + + + /* ========================================================= + * + * Comparator of neighbors + * + * ========================================================= */ + + moNeighborComparator comparator; + moSolNeighborComparator solComparator; + + + /* ========================================================= + * + * the neighborhood of a solution + * + * ========================================================= */ + + Neighborhood neighborhood(vecSize); + + + /* ========================================================= + * + * a neighborhood explorer solution + * + * ========================================================= */ + + moRandomNeutralWalkExplorer explorer(neighborhood, nhEval, solComparator, nbStep); + + + /* ========================================================= + * + * initial random solution + * + * ========================================================= */ + + Indi solution; + + random(solution); + + //Can be eval here, else it will be done at the beginning of the localSearch + eval(solution); + + /* ========================================================= + * + * the continuator and the checkpoint + * + * ========================================================= */ + + moTrueContinuator continuator;//always continue + + moCheckpoint checkpoint(continuator); + + moFitnessStat fStat; + + eoHammingDistance distance; + moDistanceStat distStat(distance, solution); // distance from the intial solution + + moOrderNeighborhood nh(vecSize); + moNeighborhoodStat< moOrderNeighborhood > neighborhoodStat(nh, nhEval, comparator, solComparator); + moMinNeighborStat< moOrderNeighborhood > minStat(neighborhoodStat); + moSecondMomentNeighborStat< moOrderNeighborhood > secondMomentStat(neighborhoodStat); + moMaxNeighborStat< moOrderNeighborhood > maxStat(neighborhoodStat); + + moNbSupNeighborStat< moOrderNeighborhood > nbSupStat(neighborhoodStat); + moNbInfNeighborStat< moOrderNeighborhood > nbInfStat(neighborhoodStat); + moNeutralDegreeNeighborStat< moOrderNeighborhood > ndStat(neighborhoodStat); + moSizeNeighborStat< moOrderNeighborhood > sizeStat(neighborhoodStat); + + eoValueParam genCounter(-1,"Gen"); + eoIncrementor increm(genCounter.value()); + + checkpoint.add(fStat); + checkpoint.add(distStat); + checkpoint.add(neighborhoodStat); + checkpoint.add(minStat); + checkpoint.add(secondMomentStat); + checkpoint.add(maxStat); + checkpoint.add(nbInfStat); + checkpoint.add(ndStat); + checkpoint.add(nbSupStat); + checkpoint.add(sizeStat); + checkpoint.add(increm); + + eoFileMonitor outputfile("out.dat", " "); + checkpoint.add(outputfile); + + outputfile.add(genCounter); + outputfile.add(fStat); + outputfile.add(distStat); + outputfile.add(minStat); + outputfile.add(secondMomentStat); + outputfile.add(maxStat); + outputfile.add(nbInfStat); + outputfile.add(ndStat); + outputfile.add(nbSupStat); + outputfile.add(sizeStat); + + /* ========================================================= + * + * the local search algorithm + * + * ========================================================= */ + + moLocalSearch< moRandomNeutralWalkExplorer > localSearch(explorer, checkpoint, eval); + + /* ========================================================= + * + * execute the local search from random sollution + * + * ========================================================= */ + + std::cout << "initial: " << solution << std::endl ; + + localSearch(solution); + + std::cout << "final: " << solution << std::endl ; + +} + +// A main that catches the exceptions + +int main(int argc, char **argv) +{ + try{ + main_function(argc, argv); + } + catch(exception& e){ + cout << "Exception: " << e.what() << '\n'; + } + return 1; +} diff --git a/trunk/paradiseo-mo/tutorial/oneMax/application/testRandomWalk.cpp b/trunk/paradiseo-mo/tutorial/oneMax/application/testRandomWalk.cpp new file mode 100644 index 000000000..6edd068db --- /dev/null +++ b/trunk/paradiseo-mo/tutorial/oneMax/application/testRandomWalk.cpp @@ -0,0 +1,243 @@ +//----------------------------------------------------------------------------- +/** testRandomWalk.cpp + * + * SV - 22/01/10 + * + */ +//----------------------------------------------------------------------------- + +// standard includes +#define HAVE_SSTREAM + +#include // runtime_error +#include // cout +#include // ostrstream, istrstream +#include +#include + +// the general include for eo +#include +#include + +using namespace std; + +//----------------------------------------------------------------------------- +// fitness function +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +// REPRESENTATION +//----------------------------------------------------------------------------- +typedef eoBit Indi; +typedef moBitNeighbor Neighbor ; // incremental evaluation +typedef moRndWithReplNeighborhood Neighborhood ; + +void main_function(int argc, char **argv) +{ + /* ========================================================= + * + * Parameters + * + * ========================================================= */ + + // First define a parser from the command-line arguments + eoParser parser(argc, argv); + + // For each parameter, define Parameter, read it through the parser, + // and assign the value to the variable + + eoValueParam seedParam(time(0), "seed", "Random number seed", 'S'); + parser.processParam( seedParam ); + unsigned seed = seedParam.value(); + + // description of genotype + eoValueParam vecSizeParam(8, "vecSize", "Genotype size", 'V'); + parser.processParam( vecSizeParam, "Representation" ); + unsigned vecSize = vecSizeParam.value(); + + eoValueParam stepParam(10, "nbStep", "Number of steps of the random walk", 'n'); + parser.processParam( stepParam, "Representation" ); + unsigned nbStep = stepParam.value(); + + // the name of the "status" file where all actual parameter values will be saved + string str_status = parser.ProgramName() + ".status"; // default value + eoValueParam statusParam(str_status.c_str(), "status", "Status file"); + parser.processParam( statusParam, "Persistence" ); + + // do the following AFTER ALL PARAMETERS HAVE BEEN PROCESSED + // i.e. in case you need parameters somewhere else, postpone these + if (parser.userNeedsHelp()){ + parser.printHelp(cout); + exit(1); + } + if (statusParam.value() != ""){ + ofstream os(statusParam.value().c_str()); + os << parser;// and you can use that file as parameter file + } + + /* ========================================================= + * + * Random seed + * + * ========================================================= */ + + //reproducible random seed: if you don't change SEED above, + // you'll aways get the same result, NOT a random run + rng.reseed(seed); + + + /* ========================================================= + * + * Eval fitness function + * + * ========================================================= */ + + FuncOneMax eval(vecSize); + + + /* ========================================================= + * + * Initilisation of the solution + * + * ========================================================= */ + + // a Indi random initializer + eoUniformGenerator uGen; + eoInitFixedLength random(vecSize, uGen); + + + /* ========================================================= + * + * evaluation of a neighbor solution + * + * ========================================================= */ + + moFullEvalByModif nhEval(eval); + + //An eval by copy can be used instead of the eval by modif + //moFullEvalByCopy nhEval(eval); + + + /* ========================================================= + * + * the neighborhood of a solution + * + * ========================================================= */ + + Neighborhood neighborhood(vecSize); + + + /* ========================================================= + * + * a neighborhood explorer solution + * + * ========================================================= */ + + moRandomWalkExplorer explorer(neighborhood, nhEval, nbStep); + + + /* ========================================================= + * + * the continuator and the checkpoint + * + * ========================================================= */ + + moTrueContinuator continuator;//always continue + + moCheckpoint checkpoint(continuator); + + moFitnessStat fStat; + eoHammingDistance distance; + Indi bestSolution(vecSize, true); + moDistanceStat distStat(distance, bestSolution); + // moSolutionStat solStat; + + checkpoint.add(fStat); + checkpoint.add(distStat); + // checkpoint.add(solStat); + + eoValueParam genCounter(-1,"Gen"); + eoIncrementor increm(genCounter.value()); + checkpoint.add(increm); + + eoFileMonitor outputfile("out.dat", " "); + checkpoint.add(outputfile); + + outputfile.add(genCounter); + outputfile.add(fStat); + outputfile.add(distStat); + // outputfile.add(solStat); + + Indi solution; // current solution of the search process + + /* + // to save the solution at each iteration + eoState outState; + + // Register the algorithm into the state (so it has something to save!! + + outState.registerObject(solution); + + // and feed the state to state savers + // save state every 10th iteration + eoCountedStateSaver stateSaver(10, outState, "iteration"); + + // Don't forget to add the two savers to the checkpoint + checkpoint.add(stateSaver); + */ + + /* ========================================================= + * + * the local search algorithm + * + * ========================================================= */ + + moLocalSearch< moRandomWalkExplorer > localSearch(explorer, checkpoint, eval); + + /* ========================================================= + * + * execute the local search from random sollution + * + * ========================================================= */ + + random(solution); + + //Can be eval here, else it will be done at the beginning of the localSearch + //eval(solution); + + std::cout << "initial: " << solution << std::endl ; + + localSearch(solution); + + std::cout << "final: " << solution << std::endl ; + +} + +// A main that catches the exceptions + +int main(int argc, char **argv) +{ + try{ + main_function(argc, argv); + } + catch(exception& e){ + cout << "Exception: " << e.what() << '\n'; + } + return 1; +} diff --git a/trunk/paradiseo-mo/tutorial/oneMax/application/testSimpleHC.cpp b/trunk/paradiseo-mo/tutorial/oneMax/application/testSimpleHC.cpp new file mode 100644 index 000000000..53da20692 --- /dev/null +++ b/trunk/paradiseo-mo/tutorial/oneMax/application/testSimpleHC.cpp @@ -0,0 +1,197 @@ +//----------------------------------------------------------------------------- +/** testSimpleHC.cpp + * + * SV - 12/01/10 + * + */ +//----------------------------------------------------------------------------- + +// standard includes +#define HAVE_SSTREAM + +#include // runtime_error +#include // cout +#include // ostrstream, istrstream +#include +#include + +// the general include for eo +#include +#include + +using namespace std; + +//----------------------------------------------------------------------------- +// fitness function +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +// REPRESENTATION +//----------------------------------------------------------------------------- +typedef eoBit Indi; +typedef moBitNeighbor Neighbor ; // incremental evaluation +typedef moOrderNeighborhood Neighborhood ; + +void main_function(int argc, char **argv) +{ + /* ========================================================= + * + * Parameters + * + * ========================================================= */ + + // First define a parser from the command-line arguments + eoParser parser(argc, argv); + + // For each parameter, define Parameter, read it through the parser, + // and assign the value to the variable + + eoValueParam seedParam(time(0), "seed", "Random number seed", 'S'); + parser.processParam( seedParam ); + unsigned seed = seedParam.value(); + + // description of genotype + eoValueParam vecSizeParam(8, "vecSize", "Genotype size", 'V'); + parser.processParam( vecSizeParam, "Representation" ); + unsigned vecSize = vecSizeParam.value(); + + // the name of the "status" file where all actual parameter values will be saved + string str_status = parser.ProgramName() + ".status"; // default value + eoValueParam statusParam(str_status.c_str(), "status", "Status file"); + parser.processParam( statusParam, "Persistence" ); + + // do the following AFTER ALL PARAMETERS HAVE BEEN PROCESSED + // i.e. in case you need parameters somewhere else, postpone these + if (parser.userNeedsHelp()){ + parser.printHelp(cout); + exit(1); + } + if (statusParam.value() != ""){ + ofstream os(statusParam.value().c_str()); + os << parser;// and you can use that file as parameter file + } + + /* ========================================================= + * + * Random seed + * + * ========================================================= */ + + //reproducible random seed: if you don't change SEED above, + // you'll aways get the same result, NOT a random run + rng.reseed(seed); + + + /* ========================================================= + * + * Eval fitness function + * + * ========================================================= */ + + FuncOneMax eval(vecSize); + + + /* ========================================================= + * + * Initilisation of the solution + * + * ========================================================= */ + + // a Indi random initializer + eoUniformGenerator uGen; + eoInitFixedLength random(vecSize, uGen); + + + /* ========================================================= + * + * evaluation of a neighbor solution + * + * ========================================================= */ + + moFullEvalByModif fulleval(eval); + + //An eval by copy can be used instead of the eval by modif + //moFullEvalByCopy fulleval(eval); + + + /* ========================================================= + * + * Comparator of neighbors + * + * ========================================================= */ + + moNeighborComparator comparator; + moSolNeighborComparator solComparator; + + + /* ========================================================= + * + * the neighborhood of a solution + * + * ========================================================= */ + + Neighborhood neighborhood(vecSize); + + + /* ========================================================= + * + * a neighborhood explorer solution + * + * ========================================================= */ + + moSimpleHCexplorer explorer(neighborhood, fulleval, comparator, solComparator); + + + /* ========================================================= + * + * the local search algorithm + * + * ========================================================= */ + + moTrueContinuator continuator;//always continue + + moLocalSearch< moSimpleHCexplorer > localSearch(explorer, continuator, eval); + + /* ========================================================= + * + * execute the local search from random sollution + * + * ========================================================= */ + + Indi solution; + + random(solution); + + //Can be eval here, else it will be done at the beginning of the localSearch + //eval(solution); + + std::cout << "initial: " << solution << std::endl ; + + localSearch(solution); + + std::cout << "final: " << solution << std::endl ; + +} + +// A main that catches the exceptions + +int main(int argc, char **argv) +{ + try{ + main_function(argc, argv); + } + catch(exception& e){ + cout << "Exception: " << e.what() << '\n'; + } + return 1; +} diff --git a/trunk/paradiseo-mo/tutorial/oneMax/application/testSimpleHCneutral.cpp b/trunk/paradiseo-mo/tutorial/oneMax/application/testSimpleHCneutral.cpp new file mode 100644 index 000000000..e193c0ab2 --- /dev/null +++ b/trunk/paradiseo-mo/tutorial/oneMax/application/testSimpleHCneutral.cpp @@ -0,0 +1,197 @@ +//----------------------------------------------------------------------------- +/** testSimpleHCneutral.cpp + * + * SV - 24/01/10 + * + */ +//----------------------------------------------------------------------------- + +// standard includes +#define HAVE_SSTREAM + +#include // runtime_error +#include // cout +#include // ostrstream, istrstream +#include +#include + +// the general include for eo +#include +#include + +using namespace std; + +//----------------------------------------------------------------------------- +// fitness function +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +// REPRESENTATION +//----------------------------------------------------------------------------- +typedef eoBit Indi; +typedef moBitNeighbor Neighbor ; // incremental evaluation +typedef moOrderNeighborhood Neighborhood ; + +void main_function(int argc, char **argv) +{ + /* ========================================================= + * + * Parameters + * + * ========================================================= */ + + // First define a parser from the command-line arguments + eoParser parser(argc, argv); + + // For each parameter, define Parameter, read it through the parser, + // and assign the value to the variable + + eoValueParam seedParam(time(0), "seed", "Random number seed", 'S'); + parser.processParam( seedParam ); + unsigned seed = seedParam.value(); + + // description of genotype + eoValueParam vecSizeParam(8, "vecSize", "Genotype size", 'V'); + parser.processParam( vecSizeParam, "Representation" ); + unsigned vecSize = vecSizeParam.value(); + + // the name of the "status" file where all actual parameter values will be saved + string str_status = parser.ProgramName() + ".status"; // default value + eoValueParam statusParam(str_status.c_str(), "status", "Status file"); + parser.processParam( statusParam, "Persistence" ); + + // do the following AFTER ALL PARAMETERS HAVE BEEN PROCESSED + // i.e. in case you need parameters somewhere else, postpone these + if (parser.userNeedsHelp()){ + parser.printHelp(cout); + exit(1); + } + if (statusParam.value() != ""){ + ofstream os(statusParam.value().c_str()); + os << parser;// and you can use that file as parameter file + } + + /* ========================================================= + * + * Random seed + * + * ========================================================= */ + + //reproducible random seed: if you don't change SEED above, + // you'll aways get the same result, NOT a random run + rng.reseed(seed); + + + /* ========================================================= + * + * Eval fitness function + * + * ========================================================= */ + + FuncOneMax eval(vecSize); + + + /* ========================================================= + * + * Initilisation of the solution + * + * ========================================================= */ + + // a Indi random initializer + eoUniformGenerator uGen; + eoInitFixedLength random(vecSize, uGen); + + + /* ========================================================= + * + * evaluation of a neighbor solution + * + * ========================================================= */ + + moFullEvalByModif fulleval(eval); + + //An eval by copy can be used instead of the eval by modif + //moFullEvalByCopy fulleval(eval); + + + /* ========================================================= + * + * Comparator of neighbors + * + * ========================================================= */ + + moNeighborComparator comparator; + moSolNeighborComparator solComparator; + + + /* ========================================================= + * + * the neighborhood of a solution + * + * ========================================================= */ + + Neighborhood neighborhood(vecSize); + + + /* ========================================================= + * + * a neighborhood explorer solution + * + * ========================================================= */ + + moSimpleHCneutralExplorer explorer(neighborhood, fulleval, comparator, solComparator); + + + /* ========================================================= + * + * the local search algorithm + * + * ========================================================= */ + + moTrueContinuator continuator;//always continue + + moLocalSearch< moSimpleHCneutralExplorer > localSearch(explorer, continuator, eval); + + /* ========================================================= + * + * execute the local search from random sollution + * + * ========================================================= */ + + Indi solution; + + random(solution); + + //Can be eval here, else it will be done at the beginning of the localSearch + //eval(solution); + + std::cout << "initial: " << solution << std::endl ; + + localSearch(solution); + + std::cout << "final: " << solution << std::endl ; + +} + +// A main that catches the exceptions + +int main(int argc, char **argv) +{ + try{ + main_function(argc, argv); + } + catch(exception& e){ + cout << "Exception: " << e.what() << '\n'; + } + return 1; +} diff --git a/trunk/paradiseo-mo/tutorial/oneMax/application/testSimpleTS.cpp b/trunk/paradiseo-mo/tutorial/oneMax/application/testSimpleTS.cpp new file mode 100644 index 000000000..6cdd51093 --- /dev/null +++ b/trunk/paradiseo-mo/tutorial/oneMax/application/testSimpleTS.cpp @@ -0,0 +1,203 @@ +//----------------------------------------------------------------------------- +/** testSimpleHC.cpp + * + * SV - 12/01/10 + * + */ +//----------------------------------------------------------------------------- + +// standard includes +#define HAVE_SSTREAM + +#include // runtime_error +#include // cout +#include // ostrstream, istrstream +#include +#include + +// the general include for eo +#include +#include + +using namespace std; + +//----------------------------------------------------------------------------- +// fitness function +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include + +// REPRESENTATION +//----------------------------------------------------------------------------- +typedef eoBit Indi; +typedef moBitNeighbor Neighbor ; // incremental evaluation +typedef moOrderNeighborhood Neighborhood ; + +void main_function(int argc, char **argv) +{ + /* ========================================================= + * + * Parameters + * + * ========================================================= */ + + // First define a parser from the command-line arguments + eoParser parser(argc, argv); + + // For each parameter, define Parameter, read it through the parser, + // and assign the value to the variable + + eoValueParam seedParam(time(0), "seed", "Random number seed", 'S'); + parser.processParam( seedParam ); + unsigned seed = seedParam.value(); + + // description of genotype + eoValueParam vecSizeParam(8, "vecSize", "Genotype size", 'V'); + parser.processParam( vecSizeParam, "Representation" ); + unsigned vecSize = vecSizeParam.value(); + + // the name of the "status" file where all actual parameter values will be saved + string str_status = parser.ProgramName() + ".status"; // default value + eoValueParam statusParam(str_status.c_str(), "status", "Status file"); + parser.processParam( statusParam, "Persistence" ); + + // do the following AFTER ALL PARAMETERS HAVE BEEN PROCESSED + // i.e. in case you need parameters somewhere else, postpone these + if (parser.userNeedsHelp()){ + parser.printHelp(cout); + exit(1); + } + if (statusParam.value() != ""){ + ofstream os(statusParam.value().c_str()); + os << parser;// and you can use that file as parameter file + } + + /* ========================================================= + * + * Random seed + * + * ========================================================= */ + + //reproducible random seed: if you don't change SEED above, + // you'll aways get the same result, NOT a random run + rng.reseed(seed); + + + /* ========================================================= + * + * Eval fitness function + * + * ========================================================= */ + + FuncOneMax fulleval(vecSize); + + + /* ========================================================= + * + * Initilisation of the solution + * + * ========================================================= */ + + // a Indi random initializer + eoUniformGenerator uGen; + eoInitFixedLength random(vecSize, uGen); + + + /* ========================================================= + * + * evaluation of a neighbor solution + * + * ========================================================= */ + + moFullEvalByModif eval(fulleval); + + //An eval by copy can be used instead of the eval by modif + //moFullEvalByCopy fulleval(eval); + + + /* ========================================================= + * + * Comparator of neighbors + * + * ========================================================= */ + + moNeighborComparator comparator; + moSolNeighborComparator solComparator; + + + /* ========================================================= + * + * the neighborhood of a solution + * + * ========================================================= */ + + Neighborhood neighborhood(vecSize); + + + /* ========================================================= + * + * a neighborhood explorer solution + * + * ========================================================= */ + + moSolVectorTabuList tl(10,10); + moDummyIntensification inten; + moDummyDiversification div; + moBestImprAspiration asp; + moTSExplorer explorer(neighborhood, eval, comparator, solComparator, tl, inten, div, asp); + + + /* ========================================================= + * + * the local search algorithm + * + * ========================================================= */ + + moTrueContinuator continuator;//always continue + + moLocalSearch< moTSExplorer > localSearch(explorer, continuator, fulleval); + + /* ========================================================= + * + * execute the local search from random sollution + * + * ========================================================= */ + + Indi solution; + + random(solution); + + //Can be eval here, else it will be done at the beginning of the localSearch + //eval(solution); + + std::cout << "initial: " << solution << std::endl ; + + localSearch(solution); + + std::cout << "final: " << solution << std::endl ; + +} + +// A main that catches the exceptions + +int main(int argc, char **argv) +{ + try{ + main_function(argc, argv); + } + catch(exception& e){ + cout << "Exception: " << e.what() << '\n'; + } + return 1; +} diff --git a/trunk/paradiseo-mo/tutorial/oneMax/application/testWithMove.cpp b/trunk/paradiseo-mo/tutorial/oneMax/application/testWithMove.cpp new file mode 100644 index 000000000..726f1fa05 --- /dev/null +++ b/trunk/paradiseo-mo/tutorial/oneMax/application/testWithMove.cpp @@ -0,0 +1,214 @@ +//----------------------------------------------------------------------------- +/** testSimpleHC.cpp + * + * SV - 12/01/10 + * + */ +//----------------------------------------------------------------------------- + +// standard includes +#define HAVE_SSTREAM + +#include // runtime_error +#include // cout +#include // ostrstream, istrstream +#include +#include + +// the general include for eo +#include +#include "ga.h" + +using namespace std; + +//----------------------------------------------------------------------------- +// fitness function +#include + +//#include +//#include + +#include + +// local search algorithm +#include + +// the simple HC explorer +#include + +// explore the neighborhood of a bit string in order +#include + +//#include + +#include + +#include +#include +#include +#include + +// REPRESENTATION +//----------------------------------------------------------------------------- +// define your individuals +typedef eoBit Indi; +//typedef OneMaxBitNeighbor Neighbor ; // incremental evaluation +typedef moMoveNeighbor, unsigned> Neighbor ; // full evaluation +typedef moMoveNeighborhood, unsigned> Neighborhood ; + +// GENERAL +//----------------------------------------------------------------------------- + +void main_function(int argc, char **argv) +{ + /* ========================================================= + * + * Parameters + * + * ========================================================= */ + + // First define a parser from the command-line arguments + eoParser parser(argc, argv); + + // For each parameter, define Parameter, read it through the parser, + // and assign the value to the variable + + eoValueParam seedParam(time(0), "seed", "Random number seed", 'S'); + parser.processParam( seedParam ); + unsigned seed = seedParam.value(); + + // description of genotype + eoValueParam vecSizeParam(8, "vecSize", "Genotype size", 'V'); + parser.processParam( vecSizeParam, "Representation" ); + unsigned vecSize = vecSizeParam.value(); + + string fileOut("out.dat"); + eoValueParam fileStatParam(fileOut.c_str(), "out", "A file to export results", 'o'); + parser.processParam( fileStatParam, "Persistence" ); + fileOut = fileStatParam.value(); + + // the name of the "status" file where all actual parameter values will be saved + string str_status = parser.ProgramName() + ".status"; // default value + eoValueParam statusParam(str_status.c_str(), "status", "Status file"); + parser.processParam( statusParam, "Persistence" ); + + // do the following AFTER ALL PARAMETERS HAVE BEEN PROCESSED + // i.e. in case you need parameters somewhere else, postpone these + if (parser.userNeedsHelp()) + { + parser.printHelp(cout); + exit(1); + } + if (statusParam.value() != "") + { + ofstream os(statusParam.value().c_str()); + os << parser; // and you can use that file as parameter file + } + + + /* ========================================================= + * + * Random seed + * + * ========================================================= */ + + //reproducible random seed: if you don't change SEED above, + // you'll aways get the same result, NOT a random run + rng.reseed(seed); + + + /* ========================================================= + * + * Eval fitness function + * + * ========================================================= */ + + FuncOneMax eval(vecSize); + + OneMaxIncrEval incrEval; + Neighbor::setIncrEval(incrEval); + + /* ========================================================= + * + * Initilisation of the solution + * + * ========================================================= */ + + // a Indi random initializer + eoUniformGenerator uGen; + eoInitFixedLength random(vecSize, uGen); + + /* ========================================================= + * + * evaluation of a neighbor solution + * + * ========================================================= */ + + // no need if incremental evaluation with OneMaxBitNeighbor + // Neighbor::setFullEvalFunc(eval); + + /* ========================================================= + * + * the neighborhood of a solution + * + * ========================================================= */ + BitMove_init init; + BitMove_next next; + + + Neighborhood neighborhood(init, next); + + /* ========================================================= + * + * a neighborhood explorator solution + * + * ========================================================= */ + + moSimpleHCexplorer explorer(neighborhood); + + /* ========================================================= + * + * the local search algorithm + * + * ========================================================= */ + + moTrueContinuator continuator; + + moLocalSearch< moSimpleHCexplorer > localSearch(explorer, continuator); + + /* ========================================================= + * + * execute the local search from random sollution + * + * ========================================================= */ + + Indi solution; + + random(solution); + + eval(solution); + + std::cout << "initial: " << solution << std::endl ; + + localSearch(solution); + + std::cout << "final: " << solution << std::endl ; + +} + +// A main that catches the exceptions + +int main(int argc, char **argv) +{ + + try + { + main_function(argc, argv); + } + catch(exception& e) + { + cout << "Exception: " << e.what() << '\n'; + } + + return 1; +} diff --git a/trunk/paradiseo-mo/tutorial/oneMax/src/bitMove.h b/trunk/paradiseo-mo/tutorial/oneMax/src/bitMove.h new file mode 100644 index 000000000..17415ebda --- /dev/null +++ b/trunk/paradiseo-mo/tutorial/oneMax/src/bitMove.h @@ -0,0 +1,34 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "bitMove.h" + +#ifndef __bitMove +#define __bitMove + +#include +#include + +template +class BitMove : public moMove { + +public : + +typedef EOT EOType; + + unsigned bit; + + BitMove() { + bit = 0; + } + + BitMove(unsigned _bit) : bit(_bit) { } + + + void operator () (EOT & chrom) + { + chrom[bit] = !chrom[bit]; + }; + +} ; + +#endif diff --git a/trunk/paradiseo-mo/tutorial/oneMax/src/bitMoveIncrEval.h b/trunk/paradiseo-mo/tutorial/oneMax/src/bitMoveIncrEval.h new file mode 100644 index 000000000..fce128de5 --- /dev/null +++ b/trunk/paradiseo-mo/tutorial/oneMax/src/bitMoveIncrEval.h @@ -0,0 +1,27 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "incrEval_funcNK.h" + +#ifndef __incr_eval_funcNK_h +#define __incr_eval_funcNK_h + +#include +#include "bitMove.h" + +template +class OneMaxIncrEval : public moMoveIncrEval < BitMove > { + +public : + OneMaxIncrEval(){ }; + + typename EOT::Fitness operator () (const BitMove & move, const EOT & chrom) { + if(chrom[move.bit]==0){ + return chrom.fitness()+1; +} + else{ + return chrom.fitness()-1; +} +}; +}; + +#endif diff --git a/trunk/paradiseo-mo/tutorial/oneMax/src/bitMove_init.h b/trunk/paradiseo-mo/tutorial/oneMax/src/bitMove_init.h new file mode 100644 index 000000000..a6254dca7 --- /dev/null +++ b/trunk/paradiseo-mo/tutorial/oneMax/src/bitMove_init.h @@ -0,0 +1,21 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "bitMove_init.h" +#ifndef __bitMove_init +#define __bitMove_init + +#include +#include "bitMove.h" + +template +class BitMove_init : public moMoveInit < BitMove > { + +public : + + void operator () (BitMove & __move, const EOT & genome) { + __move.bit = 0 ; + }; + +} ; + +#endif diff --git a/trunk/paradiseo-mo/tutorial/oneMax/src/bitMove_next.h b/trunk/paradiseo-mo/tutorial/oneMax/src/bitMove_next.h new file mode 100644 index 000000000..1950ad9f0 --- /dev/null +++ b/trunk/paradiseo-mo/tutorial/oneMax/src/bitMove_next.h @@ -0,0 +1,33 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +// "bitMove_next.h" + +#ifndef __bitMove_next_h +#define __bitMove_next_h + +#include +#include "bitMove.h" + +template +class BitMove_next : public moNextMove < BitMove > { + +public: + BitMove_next() + { + }; + + bool operator () (BitMove & __move, const EOT & genome) { + + if (__move.bit >= (genome.size() - 1)){ + return false ; +} + else { + __move.bit++; + return true ; + } + }; + + +} ; + +#endif diff --git a/trunk/paradiseo-mo/tutorial/oneMax/src/funcOneMax.h b/trunk/paradiseo-mo/tutorial/oneMax/src/funcOneMax.h new file mode 100644 index 000000000..b35057203 --- /dev/null +++ b/trunk/paradiseo-mo/tutorial/oneMax/src/funcOneMax.h @@ -0,0 +1,33 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +//----------------------------------------------------------------------------- +// funcOneMax.h +// 25/11/2009 : copy from FuncU.h +//----------------------------------------------------------------------------- + +#ifndef __FuncOneMax +#define __FuncOneMax + +template< class EOT > +class FuncOneMax : public eoEvalFunc +{ +private: + unsigned N; + +public: + FuncOneMax(unsigned n) : N(n) {}; + + ~FuncOneMax(void) {} ; + + void operator() (EOT & genome) { + unsigned sum = 0; + + for (int i = 0; i < N; i++) + sum += genome[i]; + + genome.fitness(sum); + } + +}; + +#endif diff --git a/trunk/paradiseo-mo/tutorial/oneMax/src/funcRoyalRoad.h b/trunk/paradiseo-mo/tutorial/oneMax/src/funcRoyalRoad.h new file mode 100644 index 000000000..d26e022a0 --- /dev/null +++ b/trunk/paradiseo-mo/tutorial/oneMax/src/funcRoyalRoad.h @@ -0,0 +1,40 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +#ifndef __funcRoyalRoad +#define __funcRoyalRoad + +#include + +template< class EOT > +class FuncRoyalRoad : public eoEvalFunc +{ + // number of blocks + unsigned n; + + // size of a block + unsigned k; + +public: + FuncRoyalRoad(unsigned _n, unsigned _k) : n(_n), k(_k) {}; + + ~FuncRoyalRoad(void) {} ; + + virtual void operator() (EOT & _solution) + { + unsigned sum = 0; + unsigned i, j; + + for (i = 0; i < n; i++) { + j = 0; + while (_solution[i * n + j] && j < k) j++; + + if (j == k) + sum++; + } + + _solution.fitness(sum); + }; + +}; + +#endif diff --git a/trunk/paradiseo-mo/tutorial/oneMax/src/oneMaxBitNeighbor.h b/trunk/paradiseo-mo/tutorial/oneMax/src/oneMaxBitNeighbor.h new file mode 100644 index 000000000..bfe93f767 --- /dev/null +++ b/trunk/paradiseo-mo/tutorial/oneMax/src/oneMaxBitNeighbor.h @@ -0,0 +1,38 @@ +#ifndef _oneMaxBitNeighbor_h +#define _oneMaxBitNeighbor_h + +#include +#include + +/* + contener of the neighbor information +*/ +template< class Fitness > +class OneMaxBitNeighbor : public moBitNeighbor +{ +public: + typedef eoBit EOType ; + + using moBitNeighbor::bit ; + + /* + * incremental evaluation of the solution for the oneMax problem + */ + virtual void eval(EOType & solution) { + if (solution[bit] == 0) + fitness(solution.fitness() + 1); + else + fitness(solution.fitness() - 1); + }; +}; + +#endif + + +// Local Variables: +// coding: iso-8859-1 +// mode: C++ +// c-file-offsets: ((c . 0)) +// c-file-style: "Stroustrup" +// fill-column: 80 +// End: