Nettoyage

git-svn-id: svn://scm.gforge.inria.fr/svnroot/paradiseo@1823 331e1502-861f-0410-8da2-ba01fb791d7f
This commit is contained in:
jhumeau 2010-05-26 15:18:59 +00:00
commit f7490eeadd
51 changed files with 444 additions and 1385 deletions

View file

@ -1,4 +1,4 @@
# Doxyfile 1.5.3
# Doxyfile 1.5.8
# This file describes the settings to be used by the documentation system
# doxygen (www.doxygen.org) for a project
@ -14,11 +14,11 @@
# 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.
# 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
@ -54,10 +54,11 @@ CREATE_SUBDIRS = NO
# 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, Finnish, French, German, Greek, Hungarian,
# Italian, Japanese, Japanese-en (Japanese with English messages), Korean,
# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian,
# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
# 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
@ -164,13 +165,6 @@ QT_AUTOBRIEF = NO
MULTILINE_CPP_IS_BRIEF = NO
# If the DETAILS_AT_TOP tag is set to YES then Doxygen
# will output the detailed description near the top, like JavaDoc.
# If set to NO, the detailed description appears after the member
# documentation.
DETAILS_AT_TOP = 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.
@ -205,14 +199,37 @@ ALIASES =
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.
# 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
# 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 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
@ -220,11 +237,26 @@ OPTIMIZE_OUTPUT_JAVA = NO
BUILTIN_STL_SUPPORT = NO
# If you use Microsoft's C++/CLI language, you should set this option to YES to
# 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
@ -240,6 +272,32 @@ DISTRIBUTE_GROUP_DOC = NO
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
#---------------------------------------------------------------------------
@ -274,10 +332,11 @@ EXTRACT_LOCAL_CLASSES = YES
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.
# 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
@ -356,11 +415,17 @@ SORT_MEMBER_DOCS = NO
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 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.
@ -417,9 +482,22 @@ SHOW_USED_FILES = YES
SHOW_DIRECTORIES = NO
# 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
# 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 <command> <input-file>, where <command> is the value of
# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
# provided by doxygen. Whatever the program writes to standard output
@ -427,6 +505,15 @@ SHOW_DIRECTORIES = NO
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
#---------------------------------------------------------------------------
@ -489,10 +576,11 @@ WARN_LOGFILE =
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.
# 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
@ -501,7 +589,7 @@ INPUT_ENCODING = UTF-8
# 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
# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
FILE_PATTERNS = *.cpp \
*.h \
@ -535,9 +623,10 @@ EXCLUDE_SYMLINKS = NO
EXCLUDE_PATTERNS =
# 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
# (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 =
@ -572,14 +661,17 @@ IMAGE_PATH =
# by executing (via popen()) the command <filter> <input-file>, where <filter>
# is the value of the INPUT_FILTER tag, and <input-file> 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
# 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:
# 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.
@ -599,9 +691,7 @@ FILTER_SOURCE_FILES = NO
# 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. If you have enabled CALL_GRAPH or CALLER_GRAPH
# then you must also enable this option. If you don't then doxygen will produce
# a warning and turn it on anyway
# VERBATIM_HEADERS is set to NO.
SOURCE_BROWSER = YES
@ -616,22 +706,23 @@ INLINE_SOURCES = NO
STRIP_CODE_COMMENTS = YES
# If the REFERENCED_BY_RELATION tag is set to YES (the default)
# 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 (the default)
# 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 documentstion.
# 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
@ -720,13 +811,6 @@ HTML_STYLESHEET =
HTML_ALIGN_MEMBERS = YES
# 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 compressed HTML help file (.chm)
# of the generated HTML documentation.
GENERATE_HTMLHELP = NO
# 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
@ -735,6 +819,39 @@ GENERATE_HTMLHELP = NO
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
@ -755,6 +872,12 @@ HHC_LOCATION =
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.
@ -766,6 +889,55 @@ BINARY_TOC = NO
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
# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">Qt Help Project / Custom Filters</a>.
QHP_CUST_FILTER_ATTRS =
# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's
# filter section matches.
# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">Qt Help Project / Filter Attributes</a>.
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.
@ -777,12 +949,20 @@ DISABLE_INDEX = NO
ENUM_VALUES_PER_LINE = 4
# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
# generated containing a tree-like index structure (just like the one that
# 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.
# 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
@ -792,6 +972,14 @@ GENERATE_TREEVIEW = YES
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
#---------------------------------------------------------------------------
@ -1004,8 +1192,10 @@ GENERATE_PERLMOD = NO
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
# 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.
@ -1092,14 +1282,16 @@ SKIP_FUNCTION_MACROS = YES
# 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 ...
#
# TAGFILES = file1 file2 ...
# Adding location for the tag files is done as follows:
# TAGFILES = file1=loc1 "file2 = loc2" ...
#
# 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)
# 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.
@ -1141,10 +1333,11 @@ PERL_PATH = /usr/bin/perl
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.
# 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 =
@ -1161,6 +1354,29 @@ HIDE_UNDOC_RELATIONS = YES
HAVE_DOT = NO
# 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
@ -1205,19 +1421,19 @@ INCLUDE_GRAPH = YES
INCLUDED_BY_GRAPH = YES
# If the CALL_GRAPH, SOURCE_BROWSER and HAVE_DOT tags 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.
# 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 = NO
# If the CALLER_GRAPH, SOURCE_BROWSER 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.
# 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
@ -1228,13 +1444,13 @@ 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
# 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
# generated by dot. Possible values are png, jpg, or gif
# If left blank png will be used.
DOT_IMAGE_FORMAT = png
@ -1250,12 +1466,12 @@ DOT_PATH =
DOTFILE_DIRS =
# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
# 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
# MAX_DOT_GRAPH_NOTES then the graph will not be shown at all. Also note
# 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
@ -1271,10 +1487,10 @@ DOT_GRAPH_MAX_NODES = 50
MAX_DOT_GRAPH_DEPTH = 0
# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
# background. This is disabled by default, which results in a white background.
# 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).
# 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
@ -1298,7 +1514,7 @@ GENERATE_LEGEND = YES
DOT_CLEANUP = YES
#---------------------------------------------------------------------------
# Configuration::additions related to the search engine
# Options related to the search engine
#---------------------------------------------------------------------------
# The SEARCHENGINE tag specifies whether or not a search engine should be

View file

@ -1,147 +0,0 @@
/*
* <make_ls_moeo.h>
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
*
* Arnaud Liefooghe
*
* 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 MAKE_LS_MOEO_H_
#define MAKE_LS_MOEO_H_
#include <eoContinue.h>
#include <eoEvalFunc.h>
#include <eoGenOp.h>
#include <utils/eoParser.h>
#include <utils/eoState.h>
#include <algo/moeoIBMOLS.h>
#include <algo/moeoIteratedIBMOLS.h>
#include <algo/moeoLS.h>
#include <archive/moeoArchive.h>
#include <fitness/moeoBinaryIndicatorBasedFitnessAssignment.h>
#include <fitness/moeoExpBinaryIndicatorBasedFitnessAssignment.h>
#include <metric/moeoNormalizedSolutionVsSolutionBinaryMetric.h>
#include <move/moeoMoveIncrEval.h>
/**
* This functions allows to build a moeoLS from the parser
* @param _parser the parser
* @param _state to store allocated objects
* @param _eval the funtions evaluator
* @param _moveIncrEval the incremental evaluation
* @param _continue the stopping crietria
* @param _op the variation operators
* @param _opInit the initilization operator
* @param _moveInit the move initializer
* @param _nextMove the move incrementor
* @param _archive the archive of non-dominated solutions
*/
template < class MOEOT, class Move >
moeoLS < MOEOT, eoPop<MOEOT> & > & do_make_ls_moeo (
eoParser & _parser,
eoState & _state,
eoEvalFunc < MOEOT > & _eval,
moeoMoveIncrEval < Move > & _moveIncrEval,
eoContinue < MOEOT > & _continue,
eoMonOp < MOEOT > & _op,
eoMonOp < MOEOT > & _opInit,
moMoveInit < Move > & _moveInit,
moNextMove < Move > & _nextMove,
moeoArchive < MOEOT > & _archive
)
{
/* the objective vector type */
typedef typename MOEOT::ObjectiveVector ObjectiveVector;
/* the fitness assignment strategy */
std::string & fitnessParam = _parser.getORcreateParam(std::string("IndicatorBased"), "fitness",
"Fitness assignment strategy parameter: IndicatorBased...", 'F',
"Evolution Engine").value();
std::string & indicatorParam = _parser.getORcreateParam(std::string("Epsilon"), "indicator",
"Binary indicator to use with the IndicatorBased assignment: Epsilon, Hypervolume", 'i',
"Evolution Engine").value();
double rho = _parser.getORcreateParam(1.1, "rho", "reference point for the hypervolume indicator",
'r', "Evolution Engine").value();
double kappa = _parser.getORcreateParam(0.05, "kappa", "Scaling factor kappa for IndicatorBased",
'k', "Evolution Engine").value();
moeoBinaryIndicatorBasedFitnessAssignment < MOEOT > * fitnessAssignment;
if (fitnessParam == std::string("IndicatorBased"))
{
// metric
moeoNormalizedSolutionVsSolutionBinaryMetric < ObjectiveVector, double > *metric;
if (indicatorParam == std::string("Epsilon"))
{
metric = new moeoAdditiveEpsilonBinaryMetric < ObjectiveVector >;
}
else if (indicatorParam == std::string("Hypervolume"))
{
metric = new moeoHypervolumeBinaryMetric < ObjectiveVector > (rho);
}
else
{
std::string stmp = std::string("Invalid binary quality indicator: ") + indicatorParam;
throw std::runtime_error(stmp.c_str());
}
fitnessAssignment = new moeoExpBinaryIndicatorBasedFitnessAssignment < MOEOT> (*metric, kappa);
}
else
{
std::string stmp = std::string("Invalid fitness assignment strategy: ") + fitnessParam;
throw std::runtime_error(stmp.c_str());
}
_state.storeFunctor(fitnessAssignment);
// number of iterations
unsigned int n = _parser.getORcreateParam(1, "n", "Number of iterations for population Initialization", 'n', "Evolution Engine").value();
// LS
std::string & lsParam = _parser.getORcreateParam(std::string("I-IBMOLS"), "ls",
"Local Search: IBMOLS, I-IBMOLS (Iterated-IBMOLS)...", 'L',
"Evolution Engine").value();
moeoLS < MOEOT, eoPop<MOEOT> & > * ls;
if (lsParam == std::string("IBMOLS"))
{
ls = new moeoIBMOLS < MOEOT, Move > (_moveInit, _nextMove, _eval, _moveIncrEval, *fitnessAssignment, _continue);
;
}
else if (lsParam == std::string("I-IBMOLS"))
{
ls = new moeoIteratedIBMOLS < MOEOT, Move > (_moveInit, _nextMove, _eval, _moveIncrEval, *fitnessAssignment, _continue, _op, _opInit, n);
}
else
{
std::string stmp = std::string("Invalid fitness assignment strategy: ") + fitnessParam;
throw std::runtime_error(stmp.c_str());
}
_state.storeFunctor(ls);
// that's it !
return *ls;
}
#endif /*MAKE_LS_MOEO_H_*/

View file

@ -41,7 +41,7 @@
#include <eoPop.h>
#include <eoEvalFunc.h>
#include <fitness/moeoSingleObjectivization.h>
#include <scalarStuffs/fitness/moeoSingleObjectivization.h>
/*
* Fitness assignment scheme which use weight foreach objectives

View file

@ -40,7 +40,7 @@
#define MOEOCONSTRAINTFITNESSASSIGNMENT_H_
#include <eoPop.h>
#include <fitness/moeoSingleObjectivization.h>
#include <scalarStuffs/fitness/moeoSingleObjectivization.h>
#include <utils/moeoObjectiveVectorNormalizer.h>
/*

View file

@ -41,6 +41,7 @@
#include <comparator/moeoParetoObjectiveVectorComparator.h>
#include <metric/moeoMetric.h>
#include <metric/moeoVecVsVecEpsilonBinaryMetric.h>
/**
* moeoVecVsVecAdditiveEpsilonBinaryMetric is the implementation of moeoVecVsVecEpsilonBinaryMetric whose calculate an additive epsilon indicator

View file

@ -42,55 +42,44 @@
#include <eo>
#include <algo/moeoAlgo.h>
#include <algo/moeoASEEA.h>
#include <algo/moeoEA.h>
#include <algo/moeoEasyEA.h>
#include <algo/moeoIBEA.h>
#include <algo/moeoMOGA.h>
#include <algo/moeoNSGA.h>
#include <algo/moeoNSGAII.h>
#include <algo/moeoPopAlgo.h>
#include <algo/moeoSEEA.h>
#include <algo/moeoASEEA.h>
#include <algo/moeoSPEA2.h>
#include <algo/moeoHC.h>
#include <algo/moeoTS.h>
#include <algo/moeoVNS.h>
#include <algo/moeoSA.h>
#include <algo/moeoILS.h>
#include <algo/moeoVFAS.h>
#include <algo/moeoPopLS.h>
#include <algo/moeoUnifiedDominanceBasedLS.h>
#include <algo/moeoPLS1.h>
#include <algo/moeoPLS2.h>
#include <algo/moeoPopAlgo.h>
#include <algo/moeoPopLS.h>
#include <algo/moeoSEEA.h>
#include <algo/moeoSPEA2.h>
#include <algo/moeoUnifiedDominanceBasedLS.h>
#include <archive/moeoArchive.h>
#include <archive/moeoArchiveIndex.h>
#include <archive/moeoBoundedArchive.h>
#include <archive/moeoEpsilonHyperboxArchive.h>
#include <archive/moeoFitDivBoundedArchive.h>
#include <archive/moeoFixedSizeArchive.h>
#include <archive/moeoIndexedArchive.h>
#include <archive/moeoImprOnlyBoundedArchive.h>
#include <archive/moeoSPEA2Archive.h>
#include <archive/moeoUnboundedArchive.h>
#include <archive/moeoImprOnlyBoundedArchive.h>
#include <archive/moeoFitDivBoundedArchive.h>
#include <archive/moeoEpsilonHyperboxArchive.h>
#include <archive/moeoQuadTree.h>
#include <archive/moeoQuickUnboundedArchiveIndex.h>
#include <comparator/moeoAggregativeComparator.h>
#include <comparator/moeoComparator.h>
#include <comparator/moeoDiversityThenFitnessComparator.h>
#include <comparator/moeoEpsilonObjectiveVectorComparator.h>
#include <comparator/moeoFitnessComparator.h>
#include <comparator/moeoFitnessThenDiversityComparator.h>
#include <comparator/moeoGDominanceObjectiveVectorComparator.h>
#include <comparator/moeoObjectiveVectorComparator.h>
#include <comparator/moeoObjectiveObjectiveVectorComparator.h>
#include <comparator/moeoObjectiveVectorComparator.h>
#include <comparator/moeoOneObjectiveComparator.h>
#include <comparator/moeoParetoObjectiveVectorComparator.h>
#include <comparator/moeoPtrComparator.h>
#include <comparator/moeoStrictObjectiveVectorComparator.h>
#include <comparator/moeoWeakObjectiveVectorComparator.h>
#include <comparator/moeoFitnessComparator.h>
#include <core/MOEO.h>
#include <core/moeoBitVector.h>
@ -104,14 +93,10 @@
#include <distance/moeoDistance.h>
#include <distance/moeoDistanceMatrix.h>
#include <distance/moeoObjSpaceDistance.h>
#include <distance/moeoEuclideanDistance.h>
#include <distance/moeoManhattanDistance.h>
#include <distance/moeoNormalizedDistance.h>
#include <distance/moeoAchievementScalarizingFunctionDistance.h>
#include <distance/moeoAugmentedAchievementScalarizingFunctionDistance.h>
#include <distance/moeoAugmentedWeightedChebychevDistance.h>
#include <distance/moeoWeightedChebychevDistance.h>
#include <distance/moeoObjSpaceDistance.h>
#include <diversity/moeoCrowdingDiversityAssignment.h>
#include <diversity/moeoDiversityAssignment.h>
@ -121,17 +106,14 @@
#include <diversity/moeoNearestNeighborDiversityAssignment.h>
#include <diversity/moeoSharingDiversityAssignment.h>
#include <explorer/moeoHCMoveLoopExpl.h>
#include <explorer/moeoTSMoveLoopExpl.h>
#include <explorer/moeoPopNeighborhoodExplorer.h>
#include <explorer/moeoExhaustiveNeighborhoodExplorer.h>
#include <explorer/moeoFirstImprovingNeighborhoodExplorer.h>
#include <explorer/moeoSimpleSubNeighborhoodExplorer.h>
#include <explorer/moeoNoDesimprovingNeighborhoodExplorer.h>
#include <explorer/moeoPopNeighborhoodExplorer.h>
#include <explorer/moeoSimpleSubNeighborhoodExplorer.h>
#include <explorer/moeoSubNeighborhoodExplorer.h>
#include <fitness/moeoAchievementFitnessAssignment.h>
#include <fitness/moeoAggregationFitnessAssignment.h>
#include <fitness/moeoBinaryIndicatorBasedFitnessAssignment.h>
#include <fitness/moeoConstraintFitnessAssignment.h>
@ -145,47 +127,80 @@
#include <fitness/moeoExpBinaryIndicatorBasedFitnessAssignment.h>
#include <fitness/moeoFitnessAssignment.h>
#include <fitness/moeoIndicatorBasedFitnessAssignment.h>
#include <fitness/moeoReferencePointIndicatorBasedFitnessAssignment.h>
#include <fitness/moeoScalarFitnessAssignment.h>
#include <fitness/moeoSingleObjectivization.h>
#include <fitness/moeoUnaryIndicatorBasedFitnessAssignment.h>
#include <fitness/moeoAchievementScalarizingFunctionMetricFitnessAssignment.h>
#include <fitness/moeoAugmentedAchievementScalarizingFunctionMetricFitnessAssignment.h>
#include <fitness/moeoWeightedChebychevMetricFitnessAssignment.h>
#include <fitness/moeoAugmentedWeightedChebychevMetricFitnessAssignment.h>
#include <fitness/moeoIncrEvalSingleObjectivizer.h>
#include <hybridization/moeoDMLSGenUpdater.h>
#include <hybridization/moeoDMLSMonOp.h>
#include <metric/moeoAdditiveEpsilonBinaryMetric.h>
#include <metric/moeoContributionMetric.h>
#include <metric/moeoDistanceMetric.h>
#include <metric/moeoEntropyMetric.h>
#include <metric/moeoHypervolumeBinaryMetric.h>
#include <metric/moeoHyperVolumeDifferenceMetric.h>
#include <metric/moeoHyperVolumeMetric.h>
#include <metric/moeoMetric.h>
#include <metric/moeoNormalizedSolutionVsSolutionBinaryMetric.h>
#include <metric/moeoVecVsVecEpsilonBinaryMetric.h>
#include <metric/moeoVecVsVecAdditiveEpsilonBinaryMetric.h>
#include <metric/moeoVecVsVecEpsilonBinaryMetric.h>
#include <metric/moeoVecVsVecMultiplicativeEpsilonBinaryMetric.h>
#include <metric/moeoDistanceMetric.h>
#include <replacement/moeoElitistReplacement.h>
#include <replacement/moeoEnvironmentalReplacement.h>
#include <replacement/moeoGenerationalReplacement.h>
#include <replacement/moeoReplacement.h>
#include <scalarStuffs/algo/moeoHC.h>
#include <scalarStuffs/algo/moeoILS.h>
#include <scalarStuffs/algo/moeoSA.h>
#include <scalarStuffs/algo/moeoSolAlgo.h>
#include <scalarStuffs/algo/moeoTS.h>
#include <scalarStuffs/algo/moeoVFAS.h>
#include <scalarStuffs/algo/moeoVNS.h>
#include <scalarStuffs/archive/moeoArchiveIndex.h>
#include <scalarStuffs/archive/moeoIndexedArchive.h>
#include <scalarStuffs/archive/moeoQuadTree.h>
#include <scalarStuffs/archive/moeoQuadTreeArchive.h>
#include <scalarStuffs/archive/moeoQuickUnboundedArchiveIndex.h>
#include <scalarStuffs/distance/moeoAchievementScalarizingFunctionDistance.h>
#include <scalarStuffs/distance/moeoAugmentedAchievementScalarizingFunctionDistance.h>
#include <scalarStuffs/distance/moeoAugmentedWeightedChebychevDistance.h>
#include <scalarStuffs/distance/moeoWeightedChebychevDistance.h>
#include <scalarStuffs/explorer/moeoHCMoveLoopExpl.h>
#include <scalarStuffs/explorer/moeoTSMoveLoopExpl.h>
#include <scalarStuffs/fitness/moeoAchievementFitnessAssignment.h>
#include <scalarStuffs/fitness/moeoAchievementScalarizingFunctionMetricFitnessAssignment.h>
#include <scalarStuffs/fitness/moeoAugmentedAchievementScalarizingFunctionMetricFitnessAssignment.h>
#include <scalarStuffs/fitness/moeoAugmentedWeightedChebychevMetricFitnessAssignment.h>
#include <scalarStuffs/fitness/moeoIncrEvalSingleObjectivizer.h>
#include <scalarStuffs/fitness/moeoMetricFitnessAssignment.h>
#include <scalarStuffs/fitness/moeoSingleObjectivization.h>
#include <scalarStuffs/fitness/moeoWeightedChebychevMetricFitnessAssignment.h>
#include <scalarStuffs/weighting/moeoAnytimeWeightStrategy.h>
#include <scalarStuffs/weighting/moeoAugmentedQexploreWeightStrategy.h>
#include <scalarStuffs/weighting/moeoDichoWeightStrategy.h>
#include <scalarStuffs/weighting/moeoDummyRefPointStrategy.h>
#include <scalarStuffs/weighting/moeoDummyWeightStrategy.h>
#include <scalarStuffs/weighting/moeoFixedTimeBothDirectionWeightStrategy.h>
#include <scalarStuffs/weighting/moeoFixedTimeOneDirectionWeightStrategy.h>
#include <scalarStuffs/weighting/moeoQexploreWeightStrategy.h>
#include <scalarStuffs/weighting/moeoRandWeightStrategy.h>
#include <scalarStuffs/weighting/moeoVariableRefPointStrategy.h>
#include <scalarStuffs/weighting/moeoVariableWeightStrategy.h>
#include <selection/moeoDetArchiveSelect.h>
#include <selection/moeoDetTournamentSelect.h>
#include <selection/moeoExhaustiveUnvisitedSelect.h>
#include <selection/moeoNumberUnvisitedSelect.h>
#include <selection/moeoRandomSelect.h>
#include <selection/moeoRouletteSelect.h>
#include <selection/moeoSelectFromPopAndArch.h>
#include <selection/moeoSelectOne.h>
#include <selection/moeoSelectors.h>
#include <selection/moeoStochTournamentSelect.h>
#include <selection/moeoDetArchiveSelect.h>
#include <selection/moeoUnvisitedSelect.h>
#include <selection/moeoExhaustiveUnvisitedSelect.h>
#include <selection/moeoNumberUnvisitedSelect.h>
#include <utils/moeoArchiveObjectiveVectorSavingUpdater.h>
#include <utils/moeoArchiveUpdater.h>
@ -194,19 +209,7 @@
#include <utils/moeoBinaryMetricSavingUpdater.h>
#include <utils/moeoConvertPopToObjectiveVectors.h>
#include <utils/moeoDominanceMatrix.h>
#include <utils/moeoObjectiveVectorNormalizer.h>
#include <utils/moeoObjVecStat.h>
#include <utils/moeoAnytimeWeightStrategy.h>
#include <utils/moeoDummyRefPointStrategy.h>
#include <utils/moeoDummyWeightStrategy.h>
#include <utils/moeoRandWeightStrategy.h>
#include <utils/moeoVariableWeightStrategy.h>
#include <utils/moeoVariableRefPointStrategy.h>
#include <utils/moeoQexploreWeightStrategy.h>
#include <utils/moeoAugmentedQexploreWeightStrategy.h>
#include <utils/moeoFixedTimeOneDirectionWeightStrategy.h>
#include <utils/moeoFixedTimeBothDirectionWeightStrategy.h>
#include <utils/moeoDichoWeightStrategy.h>
#endif /*MOEO_*/

View file

@ -0,0 +1,99 @@
/*
<moeoHC.h>
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)
François Legillon
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 __moeoHC_h
#define __moeoHC_h
#include <scalarStuffs/explorer/moeoHCMoveLoopExpl.h>
#include <scalarStuffs/fitness/moeoSingleObjectivization.h>
#include <scalarStuffs/fitness/moeoIncrEvalSingleObjectivizer.h>
#include <scalarStuffs/algo/moeoSolAlgo.h>
#include <moHC.h>
//! Hill Climbing (HC)
/*!
Class which describes the algorithm for a hill climbing.
Adapts the moHC for a multi-objective problem using a moeoSingleObjectivization.
M is for Move
*/
template <class M>
class moeoHC : public moeoSolAlgo < typename M::EOType >
{
public:
typedef typename M::EOType MOEOT;
typedef typename MOEOT::ObjectiveVector ObjectiveVector;
typedef typename MOEOT::Fitness Fitness;
//! Full constructor.
/*!
All the boxes are given in order the HC to use a moHCMoveLoopExpl.
\param _move_initializer a move initialiser.
\param _next_move_generator a neighborhood explorer.
\param _incremental_evaluation a (generally) efficient evaluation function.
\param _move_selection a move selector.
\param _singler a singleObjectivizer to translate objectiveVectors into fitness
*/
moeoHC (moMoveInit < M > & _move_initializer, moNextMove < M > & _next_move_generator,
moMoveIncrEval < M,ObjectiveVector > & _incremental_evaluation, moMoveSelect < M > & _move_selection, moeoSingleObjectivization < MOEOT > & _singler) :
incrEval((new moeoIncrEvalSingleObjectivizer<MOEOT,M>(_singler,_incremental_evaluation))),
moveLoop(new moeoHCMoveLoopExpl<M>(_move_initializer,_next_move_generator,*(incrEval),_move_selection)),
algo(*(moveLoop), (_singler))
{}
//! Function which launches the HC
/*!
The HC has to improve a current solution.
As the moSA and the mo TS, it can be used for HYBRIDATION in an evolutionnary algorithm.
\param _solution a current solution to improve.
\return true.
*/
bool operator()(MOEOT &_solution){
if (_solution.invalidObjectiveVector()) {
(*incrEval)(_solution);
}else{
}
return algo(_solution);
}
private:
moeoIncrEvalSingleObjectivizer<MOEOT,M> *incrEval;
moeoHCMoveLoopExpl<M> *moveLoop;
//! the actual algo
moHC<M> algo;
};
#endif

View file

@ -0,0 +1,156 @@
/*
<moeoILS.h>
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)
François Legillon
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 _moeoILS_h
#define _moeoILS_h
#include <moComparator.h>
#include <moILS.h>
#include <scalarStuffs/algo/moeoHC.h>
#include <scalarStuffs/algo/moeoTS.h>
#include <scalarStuffs/algo/moeoSA.h>
#include <eoEvalFunc.h>
#include <scalarStuffs/algo/moeoSolAlgo.h>
#include <moHCMoveLoopExpl.h>
#include <scalarStuffs/fitness/moeoSingleObjectivization.h>
#include <scalarStuffs/explorer/moeoHCMoveLoopExpl.h>
//! Iterated Local Search (ILS)
/*!
Class which describes the algorithm for a iterated local search.
Adapts the moILS for a multi-objective problem using a moeoSingleObjectivization.
M is for Move
*/
template < class M >
class moeoILS:public moeoSolAlgo < typename M::EOType >
{
public:
typedef typename M::EOType MOEOT;
typedef typename MOEOT::ObjectiveVector ObjectiveVector;
typedef typename MOEOT::Fitness Fitness;
//! Generic constructor
/*!
Generic constructor using a moAlgo
\param _algorithm The solution based heuristic to use.
\param _continue The stopping criterion.
\param _acceptance_criterion The acceptance criterion.
\param _perturbation The pertubation generator.
\param _full_evaluation The evaluation function.
*/
moeoILS (moeoSolAlgo<MOEOT> & _algorithm, moSolContinue <MOEOT> & _continue, moComparator<MOEOT> & _acceptance_criterion,
eoMonOp<MOEOT> & _perturbation, moeoSingleObjectivization<MOEOT> & _full_evaluation):
algo(_algorithm,_continue,_acceptance_criterion,_perturbation,_full_evaluation)
{}
//! Constructor for using a moHC
/*!
\param _move_initializer The move initialisation (for the moHC).
\param _next_move_generator The move generator (for the moHC).
\param _incremental_evaluation The partial evaluation function (for the moHC).
\param _singler a singleObjectivizer to translate objectiveVectors into fitness
\param _move_selection The move selection strategy (for the moHC).
\param _continue The stopping criterion.
\param _acceptance_criterion The acceptance criterion.
\param _perturbation The pertubation generator.
*/
moeoILS (moMoveInit < M > & _move_initializer, moNextMove < M > & _next_move_generator,
moMoveIncrEval < M,ObjectiveVector > & _incremental_evaluation, moeoSingleObjectivization<MOEOT> &_singler,moMoveSelect < M > & _move_selection,
moSolContinue <MOEOT> & _continue, moComparator<MOEOT> & _acceptance_criterion,
eoMonOp<MOEOT> & _perturbation):
subAlgo(new moeoHC<M>(_move_initializer,_next_move_generator,_incremental_evaluation,_move_selection,_singler)),
algo(*subAlgo,_continue,_acceptance_criterion,_perturbation,_singler)
{}
//! Constructor for using a moTS for the moAlgo
/*!
\param _move_initializer The move initialisation (for the moTS).
\param _next_move_generator The move generator (for the moTS).
\param _incremental_evaluation The partial evaluation function (for the moTS).
\param _singler a singleObjectivizer to translate objectiveVectors into fitness
\param _tabu_list The tabu list (for the moTS !!!!).
\param _aspiration_criterion The aspiration criterion (for the moTS).
\param _moTS_continue The stopping criterion (for the moTS).
\param _continue The stopping criterion.
\param _acceptance_criterion The acceptance criterion.
\param _perturbation The pertubation generator.
*/
moeoILS (moMoveInit <M> & _move_initializer, moNextMove <M> & _next_move_generator,moMoveIncrEval <M,ObjectiveVector> & _incremental_evaluation, moeoSingleObjectivization<MOEOT> &_singler, moTabuList <M> & _tabu_list,moAspirCrit <M> & _aspiration_criterion, moSolContinue <MOEOT> & _moTS_continue,moSolContinue <MOEOT> & _continue, moComparator<MOEOT> & _acceptance_criterion, eoMonOp<MOEOT> & _perturbation):
subAlgo(new moeoTS<M>(_move_initializer,_next_move_generator,_incremental_evaluation,_tabu_list,_aspiration_criterion,_moTS_continue,_singler)),
algo((*subAlgo),_continue,_acceptance_criterion,_perturbation,_singler)
{}
//! Constructor for using a moSA for the moAlgo
/*!
\param _random_move_generator The random move generator (for the moSA).
\param _incremental_evaluation The partial evaluation function (for the moSA).
\param _singler a singleObjectivizer to translate objectiveVectors into fitness
\param _moSA_continue The stopping criterion (for the moSA).
\param _initial_temperature The initial temperature (for the moSA).
\param _cooling_schedule The cooling schedule (for the moSA).
\param _continue The stopping criterion.
\param _acceptance_criterion The acceptance criterion.
\param _perturbation The pertubation generator.
*/
moeoILS (moRandMove<M> & _random_move_generator, moMoveIncrEval <M,ObjectiveVector> & _incremental_evaluation,moeoSingleObjectivization<MOEOT> &_singler, moSolContinue <MOEOT> & _moSA_continue,double _initial_temperature, moCoolingSchedule & _cooling_schedule, moSolContinue <MOEOT> & _continue,moComparator<MOEOT> & _acceptance_criterion, eoMonOp<MOEOT> & _perturbation):
subAlgo(new moeoSA<M>(_random_move_generator, _incremental_evaluation, _moSA_continue, _initial_temperature,_cooling_schedule, _singler)),
algo(*subAlgo,_continue, _acceptance_criterion, _perturbation, _singler)
{}
//! Function which launches the ILS
/*!
The ILS has to improve a current solution.
\param _solution a current solution to improve.
\return true.
*/
bool operator()(MOEOT &_solution){
// std::cout<<"moeoILS"<<std::endl;
return algo(_solution);
}
private:
moeoSolAlgo<MOEOT> *subAlgo;
//! the actual algo
moILS<M> algo;
};
#endif

View file

@ -0,0 +1,85 @@
/*
<moeoSA.h>
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)
François Legillon
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 __moeoSA_h
#define __moeoSA_h
#include <eoEvalFunc.h>
#include <scalarStuffs/algo/moeoSolAlgo.h>
#include <moTSMoveLoopExpl.h>
#include <scalarStuffs/fitness/moeoSingleObjectivization.h>
#include <scalarStuffs/explorer/moeoTSMoveLoopExpl.h>
#include <moSA.h>
//! Simulated annealing (SA)
/*!
Generic algorithm that describes a Simulated Annealing algorithm.
Adapts the moSA for a multi-objective problem using a moeoSingleObjectivization.
M is for Move
*/
template < class M >
class moeoSA:public moeoSolAlgo < typename M::EOType >
{
public:
typedef typename M::EOType MOEOT;
typedef typename MOEOT::ObjectiveVector ObjectiveVector;
typedef typename MOEOT::Fitness Fitness;
moeoSA (moRandMove < M > & _random_move_generator, moMoveIncrEval < M,ObjectiveVector > & _incremental_evaluation,
moSolContinue < MOEOT > & _continue, double _initial_temperature, moCoolingSchedule & _cooling_schedule,
moeoSingleObjectivization<MOEOT> &_singler):
incrEval(_singler,_incremental_evaluation),
algo(_random_move_generator,incrEval,_continue,_initial_temperature,_cooling_schedule, _singler)
{}
/*!
Algorithm of the SA
As a moHC, it can be used for HYBRIDATION in an evolutionary algorithm.
\param _solution a solution to improve.
\return TRUE.
*/
bool operator()(MOEOT &_solution){
return algo(_solution);
}
private:
moeoIncrEvalSingleObjectivizer<MOEOT,M> incrEval;
//! the actual algo
moSA<M> algo;
};
#endif

View file

@ -0,0 +1,55 @@
/*
* <moeoSolAlgo.h>
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
*
* Arnaud Liefooghe
* Jérémie Humeau
* François Legillon
*
* 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 MOEOSOLALGO_H_
#define MOEOSOLALGO_H_
#include <eoAlgo.h>
#include <algo/moeoAlgo.h>
#include <moAlgo.h>
/**
* Abstract class for Solution based multi-objective evolutionary algorithms.
*/
template < class MOEOT >
class moeoSolAlgo : public moAlgo<MOEOT>, public moeoAlgo
{
};
#endif /*MOEOSOLALGO_H_*/

View file

@ -0,0 +1,102 @@
/*
<moeoTS.h>
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)
François Legillon
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 __moeoTS_h
#define __moeoTS_h
#include <moTS.h>
#include <eoEvalFunc.h>
#include <scalarStuffs/algo/moeoSolAlgo.h>
#include <scalarStuffs/fitness/moeoSingleObjectivization.h>
#include <scalarStuffs/explorer/moeoTSMoveLoopExpl.h>
//! Tabu Search (TS)
/*!
Generic algorithm that describes a tabu search.
Adapts the moTS for a multi-objective problem using a moeoSingleObjectivization.
M is for Move
*/
template < class M >
class moeoTS:public moeoSolAlgo < typename M::EOType >
{
public:
typedef typename M::EOType MOEOT;
typedef typename MOEOT::ObjectiveVector ObjectiveVector;
typedef typename MOEOT::Fitness Fitness;
//! Full constructor.
/*!
All the boxes are given in order the TS to use a moTSMoveLoopExpl.
\param _move_initializer a move initialiser.
\param _next_move_generator a neighborhood explorer.
\param _incremental_evaluation a (generally) efficient evaluation function.
\param _tabu_list The tabu list.
\param _aspiration_criterion An aspiration criterion.
\param _continue The stopping criterion.
\param _singler a singleObjectivizer to translate objectiveVectors into fitness
*/
moeoTS (moMoveInit < M > & _move_initializer, moNextMove < M > & _next_move_generator,
moMoveIncrEval < M, typename MOEOT::ObjectiveVector > & _incremental_evaluation, moTabuList < M > & _tabu_list,
moAspirCrit < M > & _aspiration_criterion, moSolContinue < MOEOT > & _continue,
moeoSingleObjectivization<MOEOT> &_singler):
incrEval(_singler,_incremental_evaluation),
moveLoop(_move_initializer,_next_move_generator,incrEval,_tabu_list,_aspiration_criterion),
algo(moveLoop,_continue,_singler)
{}
//! Function which launchs the Tabu Search
/*!
Algorithm of the tabu search.
As a moSA or a moHC, it can be used for HYBRIDATION in an evolutionary algorithm.
For security a lock (pthread_mutex_t) is closed during the algorithm.
\param _solution a solution to improve.
\return TRUE.
*/
bool operator()(MOEOT &_solution){
return algo(_solution);
}
private:
moeoIncrEvalSingleObjectivizer<MOEOT,M> incrEval;
moeoTSMoveLoopExpl<M> moveLoop;
//! the actual algo
moTS<M> algo;
};
#endif

View file

@ -0,0 +1,160 @@
/*
<moeoVFAS.h>
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)
François Legillon
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 _moeoVFAS_h
#define _moeoVFAS_h
#include <moComparator.h>
#include <eoEvalFunc.h>
#include <scalarStuffs/algo/moeoSolAlgo.h>
#include <scalarStuffs/fitness/moeoSingleObjectivization.h>
#include <fitness/moeoAggregationFitnessAssignment.h>
#include <scalarStuffs/explorer/moeoHCMoveLoopExpl.h>
#include <scalarStuffs/weighting/moeoVariableWeightStrategy.h>
#include <scalarStuffs/weighting/moeoVariableRefPointStrategy.h>
#include <scalarStuffs/weighting/moeoDummyWeightStrategy.h>
#include <scalarStuffs/weighting/moeoDummyRefPointStrategy.h>
//! Variable fitness assignment search (vfas)
/*!
Search using multiple fitness assignment to search solution to a multi objective problem
*/
template < class M >
class moeoVFAS:public moeoPopAlgo < typename M::EOType >
{
public:
typedef typename M::EOType MOEOT;
typedef typename MOEOT::ObjectiveVector ObjectiveVector;
typedef typename MOEOT::Fitness Fitness;
/**
* constructor using a moAlgo and a vector of weight
* take a base vector of weight, and modify it to relaunch the algo with a diferent fitness
* use a selectOne to determine which moeot should be the base for the algo launch
* use a eoPop to keep result from each iteration
* @param _algorithm The solution based heuristic to use. It should at least use the fitness value at some point.
* @param _continue The stopping criterion.
* @param _select a selector to choose on which moeot we use the algorithm
* @param _weights a vector containing the base weights, which will be changed at each iteration.
* @param _eval The evaluation function.
* @param _wstrat the strategy to change weights (should be constructed with the same weights as the fitness)
*/
moeoVFAS (moeoSolAlgo<MOEOT> & _algorithm, eoContinue <MOEOT> & _continue,moeoSelectOne<MOEOT> &_select,
std::vector<double> &_weights, eoEvalFunc< MOEOT > &_eval , moeoVariableWeightStrategy<MOEOT> &_wstrat ):
algo(_algorithm),cont(_continue), select(_select), weights(_weights),eval(_eval),refPoint(defaultRefPoint), wstrat(_wstrat), rstrat(defaultRstrat)
{}
/**
* constructor using a moAlgo an ObjectiveVector and a vector of weight
* take a base vector of weight, and modify it to relaunch the algo with a diferent fitness
* use a selectOne to determine which moeot should be the base for the algo launch
* use a eoPop to keep result from each iteration
* @param _algorithm The solution based heuristic to use. It should at least use the fitness value at some point.
* @param _continue The stopping criterion.
* @param _select a selector to choose on which moeot we use the algorithm
* @param _weights a vector containing the base weights, which will be changed at each iteration.
* @param _refPoint a reference point changed at each iteration
* @param _eval The evaluation function.
* @param _wstrat the strategy to change weights (should be constructed with the same weights as the fitness)
* @param _rstrat the strategy to change the reference point
*/
moeoVFAS (moeoSolAlgo<MOEOT> & _algorithm, eoContinue <MOEOT> & _continue,moeoSelectOne<MOEOT> &_select,
std::vector<double> &_weights, ObjectiveVector &_refPoint, eoEvalFunc< MOEOT > &_eval , moeoVariableWeightStrategy<MOEOT> &_wstrat , moeoVariableRefPointStrategy<MOEOT>& _rstrat):
algo(_algorithm),cont(_continue), select(_select), weights(_weights),eval(_eval),refPoint(_refPoint),wstrat(_wstrat), rstrat(_rstrat)
{}
/**
* constructor without the weights
* @param _algorithm The solution based heuristic to use. It should at least use the fitness value at some point.
* @param _continue The stopping criterion.
* @param _select a selector to choose on which moeot we use the algorithm
* @param _eval The evaluation function.
* @param _wstrat the strategy to change weights (should be constructed with the same weights as the fitness)
*/
moeoVFAS (moeoSolAlgo<MOEOT> & _algorithm, eoContinue <MOEOT> & _continue,moeoSelectOne<MOEOT> &_select,
eoEvalFunc< MOEOT > &_eval, moeoVariableWeightStrategy<MOEOT> &_wstrat):
algo(_algorithm),cont(_continue), select(_select), weights(defaultWeights), eval(_eval), refPoint(defaultRefPoint), wstrat(defaultWstrat), rstrat(defaultRstrat)
{
weights.resize(MOEOT::ObjectiveVector::nObjectives(),1.0/MOEOT::ObjectiveVector::nObjectives());
}
/**
* launch the algorithm
* @param _pop the initial population on which algo will be launched
**/
virtual void operator()(eoPop<MOEOT> &_pop){
uniform_generator<double> rngGen(0.0,1.0);
for (unsigned int i=0;i<_pop.size();i++){
if (_pop[i].invalidObjectiveVector())
eval(_pop[i]);
}
moeoObjectiveVectorNormalizer<MOEOT> norm(_pop);
moeoAggregationFitnessAssignment<MOEOT> fitness(weights,eval);
bool res=false;
fitness(_pop);
MOEOT moeot(select(_pop));
wstrat(weights,moeot);
rstrat(refPoint,moeot);
do {
norm.update_by_pop(_pop);
fitness(_pop);
moeot=(select(_pop));
res=algo(moeot)||res;
_pop.push_back(moeot);
std::cout<<moeot.objectiveVector()<<std::endl;
wstrat(weights,moeot);
rstrat(refPoint,moeot);
}while(cont(_pop));
}
private:
moeoSolAlgo<MOEOT> &algo;
eoContinue<MOEOT> &cont;
moeoSelectOne<MOEOT> &select;
std::vector<double> &weights;
std::vector<double> defaultWeights;
eoEvalFunc<MOEOT> &eval;
ObjectiveVector &refPoint;
ObjectiveVector defaultRefPoint;
moeoVariableWeightStrategy<MOEOT> &wstrat;
moeoVariableRefPointStrategy<MOEOT> &rstrat;
moeoDummyRefPointStrategy<MOEOT> defaultRstrat;
moeoDummyWeightStrategy<MOEOT> defaultWstrat;
};
#endif

View file

@ -0,0 +1,86 @@
/*
<moeoVNS.h>
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)
François Legillon
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 _moeoVNS_h
#define _moeoVNS_h
#include <moAlgo.h>
#include <eoEvalFunc.h>
#include <scalarStuffs/algo/moeoSolAlgo.h>
#include <moHCMoveLoopExpl.h>
#include <scalarStuffs/fitness/moeoSingleObjectivization.h>
#include <scalarStuffs/explorer/moeoHCMoveLoopExpl.h>
//! Variable Neighbors Search (VNS)
/*!
Class which describes the algorithm for a Variable Neighbors Search.
Adapts the moVNS for a multi-objective problem using a moeoSingleObjectivization.
M is for Move
*/
template < class MOEOT >
class moeoVNS:public moeoSolAlgo < MOEOT >
{
public:
// typedef typename M::EOType MOEOT;
typedef typename MOEOT::ObjectiveVector ObjectiveVector;
typedef typename MOEOT::Fitness Fitness;
//! Generic constructor
/*!
Generic constructor using a moExpl
\param _explorer Vector of Neighborhoods.
\param _full_evaluation The singleObjectivization containing a full eval.
*/
moeoVNS(moExpl< MOEOT> & _explorer, moeoSingleObjectivization < MOEOT> & _full_evaluation): algo(_explorer,_full_evaluation) {}
//! Function which launches the VNS
/*!
The VNS has to improve a current solution.
\param _solution a current solution to improve.
\return true.
*/
bool operator()(MOEOT &_solution){
return algo(_solution);
}
private:
//! the actual algo
moVNS<MOEOT> algo;
};
#endif

View file

@ -0,0 +1,83 @@
#ifndef MOEOARCHIVEINDEX_H_
#define MOEOARCHIVEINDEX_H_
#include <eoPop.h>
#include <archive/moeoArchive.h>
/**
* Inteface for Archive Indexes
*/
template < class MOEOT >
class moeoArchiveIndex
{
public:
//type of MOEOT Objective vector
typedef typename MOEOT::ObjectiveVector ObjectiveVector;
/**type for a modification that will have to be applied to the archive
* each item concern one ObjectiveVector, designated by itemObjective
**/
struct modif{
public:
//Objective vector of the concerned item
ObjectiveVector itemObjective;
//oldIdx is the index of the item in the vector before the modification (in the archive itself, not in the index)
int oldIdx;
//newIdx is the new index of the item in the vector after the modification (in the archive itself, not in the index)
//-1 if deletion has to occur
int newIdx;
/**
* ctor for a deletion
* @param _obj the objectiveVector of the concerned entry
* @param _oldIdx the current index of the concerned entry in the vector (before deletion)
*/
modif(ObjectiveVector& _obj, int _oldIdx):itemObjective(_obj),oldIdx(_oldIdx),newIdx(-1){}
/**
* ctor for a move
* @param _obj the objectiveVector of the concerned entry
* @param _oldIdx the current index of the concerned entry in the vector (before moving)
* @param _newIdx the index of the concerned entry in the vector after moving
**/
modif(ObjectiveVector& _obj, int _oldIdx,int _newIdx):itemObjective(_obj),oldIdx(_oldIdx),newIdx(_newIdx){}
};
/**
* principal method for the index, add a moeot to the index
* @param _moeot the MOEOT we try to insert
* @param _insert should we really insert the moeot, or just check if we have to
* @return a pair, the first is a boolean indicating if the insertion can occur, the second a vector of modification
**/
virtual std::pair<bool,std::vector<modif> > operator()(const MOEOT& _moeot, bool _insert=true)=0;
/*
* method for adding a population of moeot to the the index
* @param _pop the population of MOEOT we try to insert
* @param _insert should we really insert the moeot, or just check if we have to
* @return a pair, the first is how many moeot can be inserted, the second a vector of modification that would have to occur to insert
*/
// virtual std::pair<bool,std::vector<modif> > operator()(const eoPop<MOEOT>& _pop, bool _insert=true)=0;
/**
* when updates will be necessary to keep indexes of archive and index synced, the archive will launch this method
* @param _update the update to do, see modif documentation
* @return false if no problem occured
*/
virtual bool update( modif& _update)=0;
/**
* creates a modif that move the item ObjectiveVector placed at idx oldIdx in the archive to newIdx, or delete it if newIdx=-1
* @param _obj the objectiveVector we want to move
* @param _oldIdx the index of the item we want to move in the vector
* @param _newIdx the new index for the item, -1 if we want it deleted
**/
static modif make_modif(ObjectiveVector &_obj,int _oldIdx,int _newIdx=-1){
modif res(_obj,_oldIdx,_newIdx);
return res;
}
};
#endif /*MOEOARCHIVEINDEX_H_*/

View file

@ -0,0 +1,110 @@
#ifndef MOEOINDEXEDARCHIVE_H_
#define MOEOINDEXEDARCHIVE_H_
#include <eoPop.h>
#include <archive/moeoArchive.h>
#include <scalarStuffs/archive/moeoArchiveIndex.h>
/**
* Archive used for 2 dimension vectors which remove pareto dominated values
* Use an moeoArchiveIndex
*/
template < class MOEOT >
class moeoIndexedArchive : public moeoArchive < MOEOT >
{
public:
using eoPop < MOEOT > :: size;
using eoPop < MOEOT > :: operator[];
using eoPop < MOEOT > :: pop_back;
/**
* The type of an objective vector for a solution
*/
typedef typename MOEOT::ObjectiveVector ObjectiveVector;
/**
* Default ctor.
* The moeoObjectiveVectorComparator used to compare solutions is based on Pareto dominance
*/
moeoIndexedArchive(moeoArchiveIndex<MOEOT>& _index) : index(_index) {}
/**
* Updates the archive with a given individual _moeo
* @param _moeo the given individual
*/
bool operator()(const MOEOT & _moeo){
std::pair<bool,std::vector<typename moeoArchiveIndex<MOEOT>::modif> > res=index(_moeo);
if (!(res.first)){
return false;
}
else{
for (unsigned int i=0;i<res.second.size();i++){
apply_modif(res.second[i]);
}
push_back(_moeo);
return true;
}
}
/**
* Updates the archive with a given population _pop
* @param _pop the given population
*/
bool operator()(const eoPop < MOEOT > & _pop)
{
bool res=false;
for (unsigned int i=0;i<_pop.size();i++){
res=operator()(_pop[i])||res;
}
return res;
}
protected:
/**
* apply a modification
* @param _modif the modification to apply
**/
void apply_modif(typename moeoArchiveIndex<MOEOT>::modif &_modif){
if (_modif.newIdx==-1){
int oldIdx=size()-1;
(*this)[_modif.oldIdx]=(*this)[size()-1];
ObjectiveVector obj=(*this)[_modif.oldIdx].objectiveVector();
typename moeoArchiveIndex<MOEOT>::modif upd(obj,oldIdx,_modif.oldIdx);
index.update(upd);
pop_back();
}
}
//not used yet...
void apply_modif(std::vector<typename moeoArchiveIndex<MOEOT>::modif> &_modifs){
unsigned int num_to_delete=0;
for (unsigned int i=0;i<_modifs.size();i++){
if (_modifs[i].newIdx==-1){
num_to_delete++;
int oldIdx=size()-1;
(*this)[_modifs[i].oldIdx]=(*this)[size()-1];
ObjectiveVector obj=(*this)[_modifs[i].oldIdx].objectiveVector();
typename moeoArchiveIndex<MOEOT>::modif upd(obj,oldIdx,_modifs[i].oldIdx);
index.update(upd);
}
}
for (unsigned int i=0;i<num_to_delete;i++)
pop_back();
}
private:
moeoArchiveIndex<MOEOT> &index;
};
#endif /*MOEOINDEXEDARCHIVE_H_*/

View file

@ -0,0 +1,527 @@
/*
* <moeoQuadTree.h>
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
*
* 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 MOEOQUADTREE_H_
#define MOEOQUADTREE_H_
#include <comparator/moeoParetoObjectiveVectorComparator.h>
#include <scalarStuffs/archive/moeoArchiveIndex.h>
template < class ObjectiveVector >
class QuadTreeNode{
public:
QuadTreeNode(ObjectiveVector& _objVec):objVec(_objVec),subTree(){}
QuadTreeNode(const QuadTreeNode& _source):objVec(_source.objVec),subTree(_source.subTree){}
QuadTreeNode& operator=(const QuadTreeNode& _src){
(*this).objVec=_src.objVec;
(*this).subTree=subTree;
(*this).inserted=_src.is_inserted();
if(inserted) (*this).index=_src.get_index();
return *this;
}
ObjectiveVector& getVec(){
return objVec;
}
/**
* @param _kSuccesor the k_successor of _child regarding this Node
* @param _child the child to link at the index _kSuccessor
* @return true if _child is inserted, false if there is already a child for this index
*/
bool setChild(unsigned int _kSuccesor, QuadTreeNode<ObjectiveVector>* _child){
bool res = false;
if((*this).subTree[_kSuccesor] == NULL){
res=true;
(*this).subTree[_kSuccesor]= _child;
}
return res;
}
std::map<unsigned int, QuadTreeNode<ObjectiveVector>*>& getSubTree(){
return (*this).subTree;
}
void set_index(int idx){
inserted=true;
index=idx;
}
unsigned int get_index(){
if (!inserted) std::cerr<<"moeoQuadTree getting index of a non-inserted node"<<std::endl;
return index;
}
bool is_inserted(){
return inserted;
}
private:
ObjectiveVector objVec;
std::map<unsigned int, QuadTreeNode<ObjectiveVector>*> subTree;
unsigned int index;
bool inserted;
};
template < class MOEOT >
class moeoQuadTree : public moeoArchiveIndex<MOEOT> {
typedef typename MOEOT::ObjectiveVector ObjectiveVector;
typedef typename std::map<unsigned int, QuadTreeNode<ObjectiveVector>*>::iterator QuadTreeIterator;
typedef typename moeoArchiveIndex<MOEOT>::modif modif;
public:
moeoQuadTree():root(NULL),current_size(0){
bound=pow(2,ObjectiveVector::nObjectives())-1;
comparator=new moeoParetoObjectiveVectorComparator<ObjectiveVector>();
}
~moeoQuadTree(){
delete(comparator);
}
/**
* insert a _moeot in the index if it can be inserted
* @param @_moeot the individual ton insert
* @param _insert not used, should be changed...
*/
std::pair<bool,std::vector<modif> > operator()(const MOEOT& _moeot, bool _insert=true){
std::pair<bool,std::vector<modif> > res;
insert(_moeot.objectiveVector(),res);
if (res.first){
current_size=current_size+1-res.second.size();
}
return res;
};
/**
* apply the modif
* @param _update the modif to apply (move only)
* @return false if no problem occured
**/
bool update( modif& _update){
QuadTreeNode<ObjectiveVector>* node=find_node(_update.itemObjective,getRoot());
if (node==NULL) return true;
node->set_index(_update.newIdx);
return false;
}
/**
* @paramm _obj the Objective Vector to insert into the tree.
* @return true if it is inserted
*/
void insert(ObjectiveVector _obj, std::pair<bool, std::vector<modif> > &res){
//create a new node
QuadTreeNode<ObjectiveVector>* tmp = new QuadTreeNode<ObjectiveVector>(_obj);
//if the tree is empty, we have a new root!
if(isEmpty()){
root=tmp;
tmp->set_index(0);
res.first=true;
}
//else try to insert the new node in the tree
else{
res.first = insert_aux(tmp, root, NULL, 0, res.second);
if(res.first) tmp->set_index(size()-1);
}
}
/**
* @param _newnode the node to insert
* @param _tmproot the temporary root
* @param _parent the parent of _tmproot
* @param _succ the index of _parent where the _tmproot is linked
* @return true if the _newnode is inserted
*/
bool insert_aux(QuadTreeNode<ObjectiveVector>* _newnode, QuadTreeNode<ObjectiveVector>* _tmproot, QuadTreeNode<ObjectiveVector>* _parent, unsigned int _succ, std::vector<modif> &modifs){
bool res=false;
bool dominated=false;
unsigned int succ=k_succ(_newnode->getVec(), _tmproot->getVec());
if(succ==bound){
//_newnode is dominated by _tmproot
delete(_newnode);
}
else if(succ==0){
//_newnode dominates _tmproot
replace(_newnode, _tmproot, _parent, _succ, modifs);
res=true;
}
else{
//dominance test1 (test if _newnode is dominated by the childs of _tmproot)
if(!(_tmproot->getSubTree().empty())){
QuadTreeIterator it=_tmproot->getSubTree().begin();
while(!dominated && (it != _tmproot->getSubTree().end())){
if((*it).second != NULL){
if( ((*it).first < succ) && (((succ ^ bound) & ((*it).first ^ bound)) == (succ ^ bound)) ){
dominated = test1(_newnode, (*it).second);
}
}
it++;
}
}
if(dominated){
//_newnode is dominated by a node of the subtree
delete(_newnode);
}
else{
//dominance test2 (test if _newnode dominates the childs of _tmproot)
QuadTreeIterator it=_tmproot->getSubTree().begin();
while(it != _tmproot->getSubTree().end()){
if((*it).second != NULL){
if( (succ < (*it).first) && ((succ & (*it).first) == succ)){
test2(_newnode, (*it).second, _tmproot, (*it).first, modifs);
}
}
it++;
}
//insertion
if(_tmproot->setChild(succ, _newnode)){
//the child is inserted
res=true;
}
else{
//else if the child is not inserted, insert it in the subtree
res=insert_aux(_newnode, _tmproot->getSubTree()[succ], _tmproot, succ , modifs);
}
}
}
return res;
}
/*
* @param _objVec1
* @param _objVec2
* @return the k-successor of _objVec1 with respect to _objVec2
*/
unsigned int k_succ(const ObjectiveVector& _objVec1, const ObjectiveVector& _objVec2){
unsigned int res=0;
if(!(*comparator)(_objVec2, _objVec1)){
for(unsigned int i=0; i < ObjectiveVector::nObjectives(); i++){
if( (ObjectiveVector::minimizing(i) && ((_objVec1[i] - _objVec2[i]) >= (-1.0 * 1e-6 ))) ||
(ObjectiveVector::maximizing(i) && ((_objVec1[i] - _objVec2[i]) <= 1e-6 ))){
res+=pow(2,ObjectiveVector::nObjectives()-i-1);
}
}
}
return res;
}
/*
* replace the root by a new one
* @param _newnode thee new root
* @param _tmproot the old root
* @param _parent the parent of _tmproot
* @param _succ the index of _parent where the _tmproot is linked
*/
void replace(QuadTreeNode<ObjectiveVector>* _newnode, QuadTreeNode<ObjectiveVector>* _tmproot, QuadTreeNode<ObjectiveVector>* _parent, unsigned int _succ, std::vector<modif> & res){
if(!(_tmproot->getSubTree().empty())){
//reconsider each son of the old root
QuadTreeIterator it;
for(it=(_tmproot->getSubTree()).begin(); it != (_tmproot->getSubTree()).end(); it++){
if((*it).second!=NULL){
reconsider(_newnode, (*it).second, res);
}
}
}
//replace the old root by the new one
if(_parent==NULL){
root=_newnode;
}
else{
_parent->getSubTree()[_succ]=_newnode;
}
//kill the old root
modif new_modif(_tmproot->getVec(),_tmproot->get_index());
res.push_back(new_modif);
delete(_tmproot);
}
/**
* @param _newroot the new root
* @param _child a node to reconsider regarding tthe _newroot
*/
void reconsider(QuadTreeNode<ObjectiveVector>* _newroot, QuadTreeNode<ObjectiveVector>* _child, std::vector<modif> & res){
unsigned int succ;
//reconsider all child of _child
if(!(_child->getSubTree().empty())){
QuadTreeIterator it;
for(it=(_child->getSubTree()).begin(); it != (_child->getSubTree()).end(); it++){
if((*it).second != NULL){
QuadTreeNode<ObjectiveVector>* tmp=(*it).second;
_child->getSubTree()[(*it).first]=NULL;
reconsider(_newroot, tmp, res );
}
}
}
succ=k_succ(_child->getVec(),_newroot->getVec());
//if _child is dominated by the newroot, delete it
if(succ==bound){
modif new_modif(_child->getVec(),_child->get_index());
res.push_back(new_modif);
delete(_child);
}
//else reinsert it in the tree rooted at _newroot
else if(_newroot->getSubTree()[succ] != NULL){
reinsert(_newroot->getSubTree()[succ],_child);
}
else{
_newroot->setChild(succ, _child);
}
}
/**
* reinsert _node2 into _node1
* @param _node1 first node
* @param _node2 second node
*/
void reinsert(QuadTreeNode<ObjectiveVector>* _node1, QuadTreeNode<ObjectiveVector>* _node2){
//first resinsert all child of the second node into node1
if(_node1 != _node2){
unsigned int succ;
if(!(_node2->getSubTree().empty())){
QuadTreeIterator it;
for(it=(_node2->getSubTree()).begin(); it != (_node2->getSubTree()).end(); it++){
if((*it).second != NULL){
QuadTreeNode<ObjectiveVector>* tmp=(*it).second;
_node2->getSubTree()[(*it).first]=NULL;
reinsert(_node1, tmp);
}
}
}
//insert node2 into node1
succ=k_succ(_node2->getVec(),_node1->getVec());
if(_node1->getSubTree()[succ] != NULL){
reinsert(_node1->getSubTree()[succ],_node2);
}
else{
_node1->setChild(succ, _node2);
}
}
}
/**
* remove a node
* @param _node the node to remove
* @param _parent its parent
* @param _succ the index of _parent where the _node is linked
*/
void remove(QuadTreeNode<ObjectiveVector>* _node, QuadTreeNode<ObjectiveVector>* _parent, unsigned int _succ, std::vector<modif> & res){
unsigned int k=1;
QuadTreeNode<ObjectiveVector>* tmp=NULL;
_parent->getSubTree()[_succ]=NULL;
while((k < (bound -1)) && _node->getSubTree()[k]==NULL){
k++;
}
if(_node->getSubTree()[k]!=NULL){
tmp =_node->getSubTree()[k];
_parent->setChild(_succ, tmp);
}
k++;
while(k < (bound -1)){
if(_node->getSubTree()[k]!=NULL){
reinsert(tmp ,_node->getSubTree()[k]);
}
k++;
}
modif new_modif(_node->getVec(),_node->get_index());
res.push_back(new_modif);
delete(_node);
}
/**
* test if _node1 is dominated by _node2 (and recursivly by its childs)
* @param _node1 first node
* @param _node2 second node
*/
bool test1(QuadTreeNode<ObjectiveVector>* _node1, QuadTreeNode<ObjectiveVector>* _node2){
bool res = false;
unsigned int succ;
succ=k_succ(_node1->getVec(), _node2->getVec());
if(succ==bound){
res=true;
}
else{
QuadTreeIterator it=_node2->getSubTree().begin();
while(!res && (it != _node2->getSubTree().end())){
if((*it).second!=NULL){
if( ((succ ^ bound) & ((*it).first ^ bound)) == (succ^bound)){
res = res || test1(_node1, (*it).second);
}
}
it++;
}
}
return res;
}
/**
* test if _node1 dominates _node2 (and recursivly its childs)
* @param _node1 first node
* @param _node2 second node
*/
void test2(QuadTreeNode<ObjectiveVector>* _node1, QuadTreeNode<ObjectiveVector>* _node2, QuadTreeNode<ObjectiveVector>* _parent, unsigned int _succ, std::vector<modif> & res){
unsigned int succ;
succ=k_succ(_node1->getVec(), _node2->getVec());
if(succ==0){
remove(_node2, _parent, _succ, res);
if(_parent->getSubTree()[_succ]!=NULL)
test2(_node1, _parent->getSubTree()[_succ], _parent, _succ, res);
}
else{
QuadTreeIterator it=_node2->getSubTree().begin();
while(it != _node2->getSubTree().end()){
if((*it).second!=NULL){
if( (succ & (*it).first) == succ){
test2(_node1, (*it).second, _node2, (*it).first, res);
}
}
it++;
}
}
}
//************* A REVOIR ************
void printTree(){
QuadTreeIterator it;
if(!isEmpty()){
std::cout << "root: " << root->getVec() << " -> ";
if(!(root->getSubTree().empty())){
for(it=(root->getSubTree()).begin(); it != (root->getSubTree()).end(); it++){
if((*it).second!=NULL)
std::cout << (*it).second->getVec() << " ; ";
}
std::cout << std::endl;
for(it=(root->getSubTree()).begin(); it != (root->getSubTree()).end(); it++){
if((*it).second!=NULL){
printChild((*it).second, (*it).first);
std::cout << std::endl;
}
}
}
}
}
void printChild(QuadTreeNode<ObjectiveVector>* _child, unsigned int _key){
QuadTreeIterator it;
std::cout << "[" << _key << " : " << _child->getVec() << "] -> ";
if(!(_child->getSubTree().empty())){
for(it=(_child->getSubTree()).begin(); it != (_child->getSubTree()).end(); it++){
if((*it).second!=NULL)
std::cout << (*it).second->getVec() << " ; ";
}
std::cout << std::endl;
for(it=(_child->getSubTree()).begin(); it != (_child->getSubTree()).end(); it++){
if((*it).second!=NULL){
printChild((*it).second, (*it).first);
std::cout << std::endl;
}
}
}
}
//***********************************
/**
* @return if the tree is empty or not
*/
bool isEmpty(){
return root==NULL;
}
/**
* @return a pointer on the root of the tree
*/
QuadTreeNode<ObjectiveVector>* getRoot(){
return root;
}
/**
* the number of individual currently indexed
* @return the tree size
*/
unsigned int size(){
return current_size;
}
private:
/**
* to find a node from his objectiveVector
* @param _obj the objective to find
* @param current the node in which we are looking (to be able to recurse)
* @return the node with obj as objectiveVector, or null if it's not found
*/
QuadTreeNode<ObjectiveVector>* find_node(ObjectiveVector &_obj, QuadTreeNode<ObjectiveVector>* current){
if (current->getVec()==_obj) return current;
else{
int succ=k_succ(current->getVec(),_obj);
if(current->getSubTree()[succ]!=NULL)
return find_node(_obj,current->getSubTree()[succ]);
else{
return NULL;
}
}
}
//pointer on the root of the tree
QuadTreeNode<ObjectiveVector>* root;
//size max of an index
unsigned int bound;
//Pareto comparator
moeoParetoObjectiveVectorComparator<ObjectiveVector>* comparator;
//current tree size
int current_size;
};
#endif /*MOEOQUADTREE_H_*/

View file

@ -0,0 +1,103 @@
/*
* <moeoQuadTreeArchive.h>
* Copyright (C) DOLPHIN Project-Team, INRIA Lille-Nord Europe, 2006-2008
* (C) OPAC Team, LIFL, 2002-2008
*
* Arnaud Liefooghe
* Jeremie 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
*
*/
//-----------------------------------------------------------------------------
// moeoEpsilonHyperboxArchive.h
//-----------------------------------------------------------------------------
#ifndef MOEOQUADTREEARCHIVE_H_
#define MOEOQUADTREEARCHIVE_H_
#include <eoPop.h>
/**
* This class represents an epsilon hyperbox archive.
*/
template < class MOEOT >
class moeoQuadTreeArchive : public moeoArchive < MOEOT >
{
public:
using moeoArchive < MOEOT > :: size;
using moeoArchive < MOEOT > :: resize;
using moeoArchive < MOEOT > :: operator[];
using moeoArchive < MOEOT > :: back;
using moeoArchive < MOEOT > :: pop_back;
using moeoArchive < MOEOT > :: push_back;
using moeoArchive < MOEOT > :: begin;
using moeoArchive < MOEOT > :: end;
using moeoArchive < MOEOT > :: replace;
/**
* The type of an objective vector for a solution
*/
typedef typename MOEOT::ObjectiveVector ObjectiveVector;
moeoQuadTreeArchive() : moeoArchive < MOEOT >(){}
/**
* Updates the archive with a given individual _moeo
* @param _moeo the given individual
* @return if the _moeo is added to the archive
*/
bool operator()(const MOEOT & _moeo){
return false;
}
/**
* Updates the archive with a given population _pop
* @param _pop the given population
* @return if at least one _pop[i] is added to the archive
*/
bool operator()(const eoPop < MOEOT > & _pop){
bool res, tmp = false;
for(unsigned int i=0; i<_pop.size(); i++){
tmp = (*this)(_pop[i]);
res = res || tmp;
}
return res;
}
};
#endif /*MOEOQUADTREEARCHIVE_H_*/

View file

@ -0,0 +1,235 @@
#ifndef MOEOQUICKUNBOUNDEDARCHIVEINDEX_H_
#define MOEOQUICKUNBOUNDEDARCHIVEINDEX_H_
#include <eoPop.h>
#include <archive/moeoArchive.h>
#include <comparator/moeoObjectiveVectorComparator.h>
#include <comparator/moeoParetoObjectiveVectorComparator.h>
#include <algorithm>
#include <iostream>
/**
* Archive used for 2 dimension vectors which remove pareto dominated values
* the index is ordered following the first objective
*/
template < class MOEOT >
class moeoQuickUnboundedArchiveIndex : public moeoArchiveIndex < MOEOT >
{
public:
/**
* The type of an objective vector for a solution
*/
typedef typename MOEOT::ObjectiveVector ObjectiveVector;
typedef typename moeoArchiveIndex<MOEOT>::modif modif;
// typedef typename moeoArchiveIndex < MOEOT> :: s_update s_update;
/**
* Default ctor. Pareto !!!!
* The moeoObjectiveVectorComparator used to compare solutions is based on Pareto dominance
*/
moeoQuickUnboundedArchiveIndex() : index() {}
/**
* Ctor
* @param _comparator the moeoObjectiveVectorComparator used to compare solutions
*/
//moeoQuickUnboundedArchive(moeoObjectiveVectorComparator < ObjectiveVector > & _comparator) : moeoArchive < MOEOT >(_comparator),index() {}
/**struct for an entry of the index
* obj is the objective vector of the vector[indice]
*/
struct entree{
entree(ObjectiveVector _obj, int _indice):obj(_obj),indice(_indice){}
bool operator == (const entree a){
return obj==a.obj;
}
ObjectiveVector obj;
int indice;
};
/**
* equivalent to "number one element should be on top of number two element" in the list by looking to the first obj
*/
struct CompareByFirst
: std::binary_function< bool, entree, entree > {
bool operator ()(
const entree& elem1,
const entree& elem2
) const {
if (ObjectiveVector::minimizing(0)){
return elem1.obj[0] > elem2.obj[0];
}
else{
return elem1.obj[0] < elem2.obj[0];
}
}
}cbf;
/**
* equivalent to "number one element should be on top of number two element" in the list by looking to the 2nd obj
*/
struct CompareByLast
: std::binary_function< bool, entree, entree > {
bool operator ()(
const entree& elem1,
const entree& elem2
) const {
if (ObjectiveVector::minimizing(1)){
return elem1.obj[1] < elem2.obj[1];
}
else{
return elem1.obj[1] > elem2.obj[1];
}
}
}cbl;
struct CompareByLast2
: std::binary_function< bool, MOEOT, MOEOT > {
bool operator ()(
const MOEOT& elem1,
const MOEOT& elem2
) const {
if (ObjectiveVector::minimizing(1)){
return elem1.objectiveVector()[1] < elem2.objectiveVector()[1];
}
else{
return elem1.objectiveVector()[1] > elem2.objectiveVector()[1];
}
}
}cbl2;
/**
* type for the index
*/
typedef typename std::set<entree,CompareByLast> MOEOTIndex;
/**
* iterator from the index
*/
typedef typename std::set<entree,CompareByLast>::iterator MOEOTIndexIte;
/**
* iterator for gcc stop being annoying
*/
typedef typename std::set<MOEOT>::iterator set_ite;
/**
updates the index following a modif
@param _update the modification to apply
@return false
*/
bool update(modif& _update){
entree oldEnt(_update.itemObjective,_update.oldIdx);
entree newEnt(_update.itemObjective,_update.newIdx);
index.erase(oldEnt);
index.insert(newEnt);
return false;
}
/*
std::pair<bool,std::vector<modif> > operator()(const eoPop<MOEOT>& _pop, bool _insert=true){
std::cout<<"OH, HI, je fais quelque chose"<<std::endl;
std::pair < bool, std::vector<modif> > res;
res.first=false;
std::vector <modif> tmp;
for (unsigned int i=0;i<_pop.size();i++){
std::cout<<"once va être créé"<<std::endl;
std::pair<bool,std::vector<modif> > once=operator()(_pop[i],_insert);
if (once.first){
std::cout<<"once vrai taille "<<once.second.size()<<std::endl;
std::copy(once.second.begin(),once.second.end(),res.second.end());
res.first=true;
}
}
return res;
};
*/
virtual std::pair<bool,std::vector<modif> > operator()(const MOEOT& _moeo, bool _insert=true){
return insert(_moeo,_insert);
}
/**
* inserts a _moeo in the index
* @param _moeo the MOEOT to insert
* @param _insert if _insert is false we only ask the index, and dont modify it
* @return a pair composed by a boolean indicating if the moeot can be inserted, and a list of modif to do so
*/
virtual std::pair<bool,std::vector<modif> > insert(const MOEOT& _moeo, bool _insert=true){
// std::cout<<"entree dans l'algo avec "<<_moeo.objectiveVector()<<std::endl;
MOEOTIndexIte it,it2,it4;
std::pair<bool,std::vector<modif> > res;
std::vector<entree> to_er;
res.first=false;
if (index.empty()){
std::cout<<"empty donc ok"<<std::endl;
if (_insert)
index.insert(entree(_moeo.objectiveVector(),index.size()));
res.first=true;
return res;
}
it=index.lower_bound(entree(_moeo.objectiveVector(),-1));
if (it==index.end()) {
it--;
if (!comparator(_moeo.objectiveVector(),(*it).obj)){
std::cout<<"fin et ok"<<std::endl;
if (_insert)
index.insert(entree(_moeo.objectiveVector(),index.size()));
res.first=true;
}else {
std::cout<<"fin et ko"<<std::endl;
}
return res;
}
if ((_moeo.objectiveVector()==(*it).obj) or (comparator(_moeo.objectiveVector(),(*it).obj))){
std::cout<<"middle ko bas"<<std::endl;
return res;
}
if (it!=index.begin()){
it2=it;
it2--;
if (comparator(_moeo.objectiveVector(),(*it2).obj)){
std::cout<<"middle ko haut"<<std::endl;
return res;
}
}
it2=it;
while (it2!=index.end() && comparator((*it2).obj,_moeo.objectiveVector())){
it2++;
}
for (it4=it;it4!=it2;it4++){
std::cout<<"ajout d'un truc à del"<<std::endl;
ObjectiveVector cpy=(*it4).obj;
int cpy_idx=(*it4).indice;
modif new_modif(cpy,cpy_idx);
res.second.push_back(new_modif);
to_er.push_back(*it4);
}
if (_insert){
for (unsigned int i=0;i<to_er.size();i++){
index.erase(to_er[i]);
}
index.insert(entree(_moeo.objectiveVector(),index.size()));
}
res.first=true;
std::cout<<"sortie avec insertion"<<std::endl;
return res;
}
protected:
private:
MOEOTIndex index;
moeoParetoObjectiveVectorComparator<ObjectiveVector> comparator;
};
#endif /*MOEOQUICKUNBOUNDEDARCHIVE_H_*/

View file

@ -0,0 +1,109 @@
/*
* <moeoAchievementScalarizingFunctionDistance.h>
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
*
* Jeremie Humeau
* Arnaud Liefooghe
* François Legillon
*
* 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 MOEOASFADIST_H_
#define MOEOASFADIST_H_
#include <utils/moeoObjectiveVectorNormalizer.h>
/**
Achievment scalarizing function aproach to calculate a distance
*/
template < class MOEOT>
class moeoAchievementScalarizingFunctionDistance : public moeoObjSpaceDistance< MOEOT >
{
public:
typedef typename MOEOT::ObjectiveVector ObjectiveVector;
typedef typename MOEOT::Fitness Fitness;
/**
constructor with a normalizer
@param _rho
@param _weight the weight to apply to each dimension
@param _normalizer the normalizer
*/
moeoAchievementScalarizingFunctionDistance(unsigned int _rho, const ObjectiveVector& _weight, moeoObjectiveVectorNormalizer<MOEOT>& _normalizer): normalizer(_normalizer), weight(_weight), rho(_rho){}
/**
constructor without a normalizer
@param _rho
@param _weight the weight to apply to each dimension
*/
moeoAchievementScalarizingFunctionDistance(unsigned int _rho, const ObjectiveVector& _weight): normalizer(defaultNormalizer), weight(_weight), rho(_rho){}
/**
fonction which calculate the distance
@param _obj the point to evaluate
@param _reference the reference to calculate the distance from
@return the fitness conrresponding to the distance
*/
const Fitness operator()(const ObjectiveVector& _reference, const ObjectiveVector& _obj){
unsigned int dim=_obj.size();
ObjectiveVector tmp1(_reference);
ObjectiveVector tmp2(_obj);
Fitness max=iteration(tmp2,tmp1,0,_obj.minimizing(0));
Fitness res=max;
for (unsigned i=0;i<dim;i++){
res=iteration(_obj,_reference,i,_obj.minimizing(i));
if (max<res)
max=res;
}
return max;
}
private:
moeoObjectiveVectorNormalizer<MOEOT> defaultNormalizer;
moeoObjectiveVectorNormalizer<MOEOT> &normalizer;
const ObjectiveVector &weight;
double rho;
Fitness iteration(const ObjectiveVector &obj, const ObjectiveVector& reference, int dim, bool mini){
ObjectiveVector obj_norm=normalizer(obj);
ObjectiveVector ref_norm=normalizer(reference);
Fitness res;
if (mini){
res=(obj_norm[dim]-ref_norm[dim]);
}else{
res=(ref_norm[dim]-obj_norm[dim]);
}
res=weight[dim]*res;
return res;
}
};
#endif

View file

@ -0,0 +1,111 @@
/*
* <moeoAugmentedAchievmentScalarizingFunctionDistance.h>
* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007
* (C) OPAC Team, LIFL, 2002-2007
*
* Jeremie Humeau
* Arnaud Liefooghe
* Legillon François
*
* 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 MOEOASFAORDIST_H_
#define MOEOASFAORDIST_H_
#include <eo>
#include <moeo>
#include <cmath>
/**
Order representing Achievment scalarizing function aproach to calculate a metric
*/
template < class MOEOT>
class moeoAugmentedAchievementScalarizingFunctionDistance : public moeoObjSpaceDistance< MOEOT >
{
public:
typedef typename MOEOT::ObjectiveVector ObjectiveVector;
typedef typename MOEOT::Fitness Fitness;
/**
constructor with a normalizer
@param _rho
@param _weight the weight to apply to each dimansion
@param _normalizer the normalizer
*/
moeoAugmentedAchievementScalarizingFunctionDistance(unsigned int _rho,const ObjectiveVector &_weight,moeoObjectiveVectorNormalizer<MOEOT> &_normalizer): normalizer(_normalizer),weight(_weight),rho(_rho)
{}
/**
constructor without a normalizer
@param _rho
@param _weight the weight to apply to each dimansion
*/
moeoAugmentedAchievementScalarizingFunctionDistance(unsigned int _rho,const ObjectiveVector &_weight): normalizer(defaultNormalizer),weight(_weight),rho(_rho)
{}
/**
fonction which apply the metric to calculate a fitness
@param _reference the reference point to calculate the distance
@param _obj the point to evaluate
@return the fitness conrresponding to the distance
*/
const Fitness operator()(const ObjectiveVector &_reference,const ObjectiveVector &_obj){
unsigned int dim=_obj.size();
Fitness res=0;
Fitness max=iteration(_obj,_reference,0,_obj.minimizing(0));
for (unsigned i=0;i<dim;i++){
Fitness tmp=iteration(_obj,_reference,i,_obj.minimizing(i));
if (max<tmp)
max=tmp;
res+=tmp;
}
return res+rho*max;
}
private:
moeoObjectiveVectorNormalizer<MOEOT> defaultNormalizer;
moeoObjectiveVectorNormalizer<MOEOT> &normalizer;
const ObjectiveVector &weight;
double rho;
Fitness iteration(const ObjectiveVector &obj,const ObjectiveVector &reference,int dim,bool mini){
ObjectiveVector obj_norm=normalizer(obj);
ObjectiveVector ref_norm=normalizer(reference);
Fitness res;
if (mini){
res=obj_norm[dim]-ref_norm[dim];
}else{
res=ref_norm[dim]-obj_norm[dim];
}
res=weight[dim]*res;
return res;
}
};
#endif

Some files were not shown because too many files have changed in this diff Show more