From 77148b5a972fb76cfc66a4ed3cbbc72ce1440d9e Mon Sep 17 00:00:00 2001 From: Alessandro Sidero <75628365+Alessandro624@users.noreply.github.com> Date: Mon, 24 Feb 2025 19:07:10 +0100 Subject: [PATCH 01/12] fix(MPI): resolved cyclic inclusion and MPI issue --- eo/src/mpi/implMpi.h | 474 +++++++++++++++++++++---------------------- 1 file changed, 236 insertions(+), 238 deletions(-) diff --git a/eo/src/mpi/implMpi.h b/eo/src/mpi/implMpi.h index d52b84b26..0efb89a75 100644 --- a/eo/src/mpi/implMpi.h +++ b/eo/src/mpi/implMpi.h @@ -22,7 +22,7 @@ Authors: #ifndef __EO_IMPL_MPI_HPP__ #define __EO_IMPL_MPI_HPP__ -#include "eoMpi.h" +#include #include "../serial/eoSerial.h" /** @@ -43,290 +43,288 @@ Authors: */ namespace eo { -namespace mpi -{ - /** - * @ingroup Parallel - * @{ - */ - - /** - * @brief Constant indicating that a message can come from any process. - */ - extern const int any_source; - - /** - * @brief Constant indicating that a message can come from any tag (channel). - */ - extern const int any_tag; - - /** - * @brief Wrapper class to have a MPI environment. - * - * Instead of calling MPI_Init and MPI_Finalize, it is only necessary to instantiate - * this class once, in the global context. - */ - class environment + namespace mpi { - public: + /** + * @ingroup Parallel + * @{ + */ /** - * @brief Inits MPI context. + * @brief Constant indicating that a message can come from any process. + */ + extern const int any_source; + + /** + * @brief Constant indicating that a message can come from any tag (channel). + */ + extern const int any_tag; + + /** + * @brief Wrapper class to have a MPI environment. * - * @param argc Number of params in command line (same as one in main) - * @param argv Strings containing params (same as one in main) + * Instead of calling MPI_Init and MPI_Finalize, it is only necessary to instantiate + * this class once, in the global context. */ - environment(int argc, char**argv); - - /** - * @brief Closes MPI context. - */ - ~environment(); - }; - - struct MPI_Status { - int count; - int cancelled; - int MPI_SOURCE; - int MPI_TAG; - int MPI_ERROR; - }; - - /** - * @brief Wrapper class for MPI_Status - * - * Consists only in a C++ wrapper class, giving getters on status attributes. - */ - class status - { + class environment + { public: + /** + * @brief Inits MPI context. + * + * @param argc Number of params in command line (same as one in main) + * @param argv Strings containing params (same as one in main) + */ + environment(int argc, char **argv); + + /** + * @brief Closes MPI context. + */ + ~environment(); + }; + + /* struct MPI_Status + { + int count; + int cancelled; + int MPI_SOURCE; + int MPI_TAG; + int MPI_ERROR; + }; */ /** - * @brief Converts a MPI_Status into a status. + * @brief Wrapper class for MPI_Status + * + * Consists only in a C++ wrapper class, giving getters on status attributes. */ - status( const MPI_Status & s ); + class status + { + public: + /** + * @brief Converts a MPI_Status into a status. + */ + status(const MPI_Status &s); - /** - * @brief Returns the tag of the associated communication. - */ - int tag() { return _tag; } + /** + * @brief Returns the tag of the associated communication. + */ + int tag() { return _tag; } - /** - * @brief Indicates which error number we obtained in the associated communication. - */ - int error() { return _error; } + /** + * @brief Indicates which error number we obtained in the associated communication. + */ + int error() { return _error; } - /** - * @brief Returns the MPI rank of the source of the associated communication. - */ - int source() { return _source; } + /** + * @brief Returns the MPI rank of the source of the associated communication. + */ + int source() { return _source; } private: int _source; int _tag; int _error; - }; + }; - /** - * @brief Main object, used to send / receive messages, get informations about the rank and the size of the world, - * etc. - */ - class communicator - { + /** + * @brief Main object, used to send / receive messages, get informations about the rank and the size of the world, + * etc. + */ + class communicator + { public: + /** + * Creates the communicator, using the whole world as a MPI_Comm. + * + * @todo Allow the user to precise which MPI_Comm to use + */ + communicator(); - /** - * Creates the communicator, using the whole world as a MPI_Comm. - * - * @todo Allow the user to precise which MPI_Comm to use - */ - communicator( ); + ~communicator(); - ~communicator(); + /** + * @brief Returns the MPI rank of the current process. + */ + int rank(); - /** - * @brief Returns the MPI rank of the current process. - */ - int rank(); + /** + * @brief Returns the size of the MPI cluster. + */ + int size(); - /** - * @brief Returns the size of the MPI cluster. - */ - int size(); + /* + * SEND / RECV INT + */ - /* - * SEND / RECV INT - */ + /** + * @brief Sends an integer to dest on channel "tag". + * + * @param dest MPI rank of the receiver + * @param tag MPI tag of message + * @param n The integer to send + */ + void send(int dest, int tag, int n); - /** - * @brief Sends an integer to dest on channel "tag". - * - * @param dest MPI rank of the receiver - * @param tag MPI tag of message - * @param n The integer to send - */ - void send( int dest, int tag, int n ); + /* + * @brief Receives an integer from src on channel "tag". + * + * @param src MPI rank of the sender + * @param tag MPI tag of message + * @param n Where to save the received integer + */ + void recv(int src, int tag, int &n); - /* - * @brief Receives an integer from src on channel "tag". - * - * @param src MPI rank of the sender - * @param tag MPI tag of message - * @param n Where to save the received integer - */ - void recv( int src, int tag, int& n ); + /* + * SEND / RECV STRING + */ - /* - * SEND / RECV STRING - */ + /** + * @brief Sends a string to dest on channel "tag". + * + * @param dest MPI rank of the receiver + * @param tag MPI tag of message + * @param str The std::string to send + */ + void send(int dest, int tag, const std::string &str); - /** - * @brief Sends a string to dest on channel "tag". - * - * @param dest MPI rank of the receiver - * @param tag MPI tag of message - * @param str The std::string to send - */ - void send( int dest, int tag, const std::string& str ); + /* + * @brief Receives a string from src on channel "tag". + * + * @param src MPI rank of the sender + * @param tag MPI tag of message + * @param std::string Where to save the received string + */ + void recv(int src, int tag, std::string &str); - /* - * @brief Receives a string from src on channel "tag". - * - * @param src MPI rank of the sender - * @param tag MPI tag of message - * @param std::string Where to save the received string - */ - void recv( int src, int tag, std::string& str ); + /* + * SEND / RECV Objects + */ - /* - * SEND / RECV Objects - */ + /** + * @brief Sends an eoserial::Persistent to dest on channel "tag". + * + * @param dest MPI rank of the receiver + * @param tag MPI tag of message + * @param persistent The object to send (it must absolutely implement eoserial::Persistent) + */ + void send(int dest, int tag, const eoserial::Persistent &persistent); - /** - * @brief Sends an eoserial::Persistent to dest on channel "tag". - * - * @param dest MPI rank of the receiver - * @param tag MPI tag of message - * @param persistent The object to send (it must absolutely implement eoserial::Persistent) - */ - void send( int dest, int tag, const eoserial::Persistent & persistent ); - - /** - * @brief Sends an array of eoserial::Persistent to dest on channel "tag". - * - * @param dest MPI rank of the receiver - * @param tag MPI tag of message - * @param table The array of eoserial::Persistent objects - * @param size The number of elements to send (no check is done, the user has to be sure that the size won't - * overflow!) - */ - template< class T > - void send( int dest, int tag, T* table, int size ) - { - // Puts all the values into an array - eoserial::Array* array = new eoserial::Array; - - for( int i = 0; i < size; ++i ) + /** + * @brief Sends an array of eoserial::Persistent to dest on channel "tag". + * + * @param dest MPI rank of the receiver + * @param tag MPI tag of message + * @param table The array of eoserial::Persistent objects + * @param size The number of elements to send (no check is done, the user has to be sure that the size won't + * overflow!) + */ + template + void send(int dest, int tag, T *table, int size) { - array->push_back( table[i].pack() ); + // Puts all the values into an array + eoserial::Array *array = new eoserial::Array; + + for (int i = 0; i < size; ++i) + { + array->push_back(table[i].pack()); + } + + // Encapsulates the array into an object + eoserial::Object *obj = new eoserial::Object; + obj->add("array", array); + std::stringstream ss; + obj->print(ss); + delete obj; + + // Sends the object as a string + send(dest, tag, ss.str()); } - // Encapsulates the array into an object - eoserial::Object* obj = new eoserial::Object; - obj->add( "array", array ); - std::stringstream ss; - obj->print( ss ); - delete obj; + /* + * @brief Receives an eoserial::Persistent object from src on channel "tag". + * + * @param src MPI rank of the sender + * @param tag MPI tag of message + * @param persistent Where to unpack the serialized object? + */ + void recv(int src, int tag, eoserial::Persistent &persistent); - // Sends the object as a string - send( dest, tag, ss.str() ); - } - - /* - * @brief Receives an eoserial::Persistent object from src on channel "tag". - * - * @param src MPI rank of the sender - * @param tag MPI tag of message - * @param persistent Where to unpack the serialized object? - */ - void recv( int src, int tag, eoserial::Persistent & persistent ); - - /* - * @brief Receives an array of eoserial::Persistent from src on channel "tag". - * - * @param src MPI rank of the sender - * @param tag MPI tag of message - * @param table The table in which we're saving the received objects. It must have been allocated by the user, - * as no allocation is performed here. - * @param size The number of elements to receive (no check is done, the user has to be sure that the size won't - * overflow!) - */ - template< class T > - void recv( int src, int tag, T* table, int size ) - { - // Receives the string which contains the object - std::string asText; - recv( src, tag, asText ); - - // Parses the object and retrieves the table - eoserial::Object* obj = eoserial::Parser::parse( asText ); - eoserial::Array* array = static_cast( (*obj)["array"] ); - - // Retrieves all the values from the array - for( int i = 0; i < size; ++i ) + /* + * @brief Receives an array of eoserial::Persistent from src on channel "tag". + * + * @param src MPI rank of the sender + * @param tag MPI tag of message + * @param table The table in which we're saving the received objects. It must have been allocated by the user, + * as no allocation is performed here. + * @param size The number of elements to receive (no check is done, the user has to be sure that the size won't + * overflow!) + */ + template + void recv(int src, int tag, T *table, int size) { - eoserial::unpackObject( *array, i, table[i] ); + // Receives the string which contains the object + std::string asText; + recv(src, tag, asText); + + // Parses the object and retrieves the table + eoserial::Object *obj = eoserial::Parser::parse(asText); + eoserial::Array *array = static_cast((*obj)["array"]); + + // Retrieves all the values from the array + for (int i = 0; i < size; ++i) + { + eoserial::unpackObject(*array, i, table[i]); + } + delete obj; } - delete obj; - } - /* - * Other methods - */ + /* + * Other methods + */ - /** - * @brief Wrapper for MPI_Probe - * - * Waits for a message to come from process having rank src, on the channel - * tag. - * - * @param src MPI rank of the sender (any_source if it can be any sender) - * @param tag MPI tag of the expected message (any_tag if it can be any tag) - */ - status probe( int src = any_source, int tag = any_tag ); + /** + * @brief Wrapper for MPI_Probe + * + * Waits for a message to come from process having rank src, on the channel + * tag. + * + * @param src MPI rank of the sender (any_source if it can be any sender) + * @param tag MPI tag of the expected message (any_tag if it can be any tag) + */ + status probe(int src = any_source, int tag = any_tag); - /** - * @brief Wrapper for MPI_Barrier - * - * - */ - void barrier(); + /** + * @brief Wrapper for MPI_Barrier + * + * + */ + void barrier(); private: int _rank; int _size; - char* _buf; // temporary buffer for sending and receiving strings. Avoids reallocations + char *_buf; // temporary buffer for sending and receiving strings. Avoids reallocations int _bufsize; // size of the above temporary buffer - }; + }; - /** - * @brief Wrapper for MPI_Bcast - * - * Broadcasts an integer value on the communicator comm, from the process having the MPI rank root. - * - * @param comm The communicator on which to broadcast - * @param value The integer value to send - * @param root The MPI rank of the broadcaster - * - * @todo Actually comm isn't used and broadcast is performed on the whole MPI_COMM_WORLD. TODO: Use comm instead - */ - void broadcast( communicator & comm, int value, int root ); + /** + * @brief Wrapper for MPI_Bcast + * + * Broadcasts an integer value on the communicator comm, from the process having the MPI rank root. + * + * @param comm The communicator on which to broadcast + * @param value The integer value to send + * @param root The MPI rank of the broadcaster + * + * @todo Actually comm isn't used and broadcast is performed on the whole MPI_COMM_WORLD. TODO: Use comm instead + */ + void broadcast(communicator &comm, int value, int root); - /** - * @} - */ -} // namespace mpi + /** + * @} + */ + } // namespace mpi } // namespace eo -# endif //__EO_IMPL_MPI_HPP__ +#endif //__EO_IMPL_MPI_HPP__ From 7c88ec4fa7af22bd485c7e446c7d07ff2838475d Mon Sep 17 00:00:00 2001 From: nojhan Date: Fri, 10 Feb 2023 09:47:58 +0100 Subject: [PATCH 02/12] feat(EO): allow overriding fitness accessors May be useful for debugging, by tracing when fitness assignement occurs. --- eo/src/EO.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eo/src/EO.h b/eo/src/EO.h index 09bb2d20d..9c29dbbce 100644 --- a/eo/src/EO.h +++ b/eo/src/EO.h @@ -95,7 +95,7 @@ public: /** Set fitness. At the same time, validates it. * @param _fitness New fitness value. */ - void fitness(const Fitness& _fitness) + virtual void fitness(const Fitness& _fitness) { repFitness = _fitness; invalidFitness = false; From 172798a637ffa66878fb96f34cc2eefc1369fb57 Mon Sep 17 00:00:00 2001 From: nojhan Date: Fri, 10 Feb 2023 11:54:45 +0100 Subject: [PATCH 03/12] revert 399b22266 (virtual fitness interface temptative) Incompatible with MOEO's change of interface. --- eo/src/EO.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eo/src/EO.h b/eo/src/EO.h index 9c29dbbce..09bb2d20d 100644 --- a/eo/src/EO.h +++ b/eo/src/EO.h @@ -95,7 +95,7 @@ public: /** Set fitness. At the same time, validates it. * @param _fitness New fitness value. */ - virtual void fitness(const Fitness& _fitness) + void fitness(const Fitness& _fitness) { repFitness = _fitness; invalidFitness = false; From cfcd6e22bb2081fa9f730c4ee0e07d04b1c8fe55 Mon Sep 17 00:00:00 2001 From: Jxtopher <39927513+Jxtopher@users.noreply.github.com> Date: Fri, 28 Mar 2025 22:30:30 +0100 Subject: [PATCH 04/12] Ccache setup The goal is to speed up recompilation using ccache. Ccache is a tool that speeds up recompilation of C/C++ code. It does this by caching the results of previous compilations. When you recompile code, ccache checks if it has already compiled the same code with the same compiler flags. If so, it uses the cached result instead of recompiling. --- .github/workflows/build_ubuntu_debug.yml | 9 ++++++++- CMakeLists.txt | 11 +++++++++++ README.md | 1 + 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build_ubuntu_debug.yml b/.github/workflows/build_ubuntu_debug.yml index b68744cb2..58aac6a42 100644 --- a/.github/workflows/build_ubuntu_debug.yml +++ b/.github/workflows/build_ubuntu_debug.yml @@ -16,8 +16,15 @@ jobs: compiler: [g++-10, g++-9, g++-8, g++-7, clang-6, clang-7, clang-8, clang-9, clang-10, clang-11, clang-12] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 + - name: Caching objects + id: cache-objects + uses: actions/cache@v4 + with: + path: ~/.cache/ccache + key: ${{ runner.os }}-${{env.BUILD_TYPE}}-${{ matrix.compiler }}-objects + - name: Install Dependencies shell: bash run: | diff --git a/CMakeLists.txt b/CMakeLists.txt index 5bec9ae43..1b364f35f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,6 +20,17 @@ project("ParadisEO" ## Language set(CMAKE_CXX_STANDARD 17) +## ccache +find_program(CCACHE_PROGRAM ccache) + +if (CCACHE_PROGRAM) + message(NOTICE "-- ccache is enabled (found here: ${CCACHE_PROGRAM})") + set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "\"${CCACHE_PROGRAM}\"") + set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK "\"${CCACHE_PROGRAM}\"") +else () + message(NOTICE "-- ccache has not been found") +endif () + ###################################################################################### ### 2) Check dependencies diff --git a/README.md b/README.md index 686b08334..ff158606d 100644 --- a/README.md +++ b/README.md @@ -211,6 +211,7 @@ If you `ENABLE_CMAKE_EXAMPLE`, it will also build the examples. If may want to make build scripts more verbose (especially when building the doc) by enabling `CMAKE_VERBOSE_MAKEFILE`. +If `ccache` installed in your environment, library recompilation times can be significantly reduced. To clear all cached objects, execute `ccache -C`. ## Licenses From 22275e434b078bfb5bc480c77f74685aecb4395b Mon Sep 17 00:00:00 2001 From: Johann Dreo Date: Mon, 7 Apr 2025 14:16:37 +0200 Subject: [PATCH 05/12] fix several warnings Probably fixes a bug in es/CMA, which has been deprecated for a long time in favor of the EDO module anyway. --- eo/src/eoEasyPSO.h | 16 ++++++------- eo/src/eoSyncEasyPSO.h | 30 ++++++++++++------------- eo/src/es/CMAParams.cpp | 3 +++ eo/src/gp/parse_tree.h | 7 ++++++ eo/src/mpi/implMpi.cpp | 2 +- eo/src/utils/pipecom.cpp | 6 ++--- eo/src/utils/pipecom.h | 4 ++-- moeo/src/do/make_checkpoint_moeo.h | 2 +- moeo/src/do/make_ea_moeo.h | 2 +- moeo/src/metric/moeoHyperVolumeMetric.h | 4 ++-- moeo/tutorial/Lesson1/Sch1.cpp | 4 ++-- smp/src/PPExpander.h | 2 +- smp/src/island.cpp | 4 ++++ smp/src/island.h | 3 ++- smp/tutorial/Lesson1/QAPGA.h | 2 ++ 15 files changed, 53 insertions(+), 38 deletions(-) diff --git a/eo/src/eoEasyPSO.h b/eo/src/eoEasyPSO.h index 87c27cad3..25f030595 100644 --- a/eo/src/eoEasyPSO.h +++ b/eo/src/eoEasyPSO.h @@ -174,18 +174,18 @@ protected: // if the flight does not need to be used, use the dummy flight instance class eoDummyFlight:public eoFlight < POT > { - public: - eoDummyFlight () {} - void operator () (POT &) {} - }dummyFlight; + public: + eoDummyFlight () {} + void operator() (POT &) override {} + } dummyFlight; // if the initializer does not need to be used, use the dummy one instead class eoDummyInitializer:public eoInitializerBase < POT > { - public: - eoDummyInitializer () {} - void operator () (POT &) {} - }dummyInit; + public: + eoDummyInitializer () {} + void operator() () override {} + } dummyInit; }; /** diff --git a/eo/src/eoSyncEasyPSO.h b/eo/src/eoSyncEasyPSO.h index 11640af53..183148896 100644 --- a/eo/src/eoSyncEasyPSO.h +++ b/eo/src/eoSyncEasyPSO.h @@ -230,27 +230,25 @@ protected: // if the eval does not need to be used, use the dummy eval instance class eoDummyEval : public eoEvalFunc - { - public: - void operator()(POT &) - {} - } - dummyEval; - - class eoDummyFlight:public eoFlight < POT > { - public: - eoDummyFlight () {} - void operator () (POT &) {} - }dummyFlight; + public: + void operator()(POT &) override {} + } dummyEval; + + class eoDummyFlight:public eoFlight < POT > + { + public: + eoDummyFlight () {} + void operator() (POT &) override {} + } dummyFlight; // if the initializer does not need to be used, use the dummy one instead class eoDummyInitializer:public eoInitializerBase < POT > { - public: - eoDummyInitializer () {} - void operator () (POT &) {} - }dummyInit; + public: + eoDummyInitializer () {} + void operator() () override {} + } dummyInit; }; /** @example t-eoSyncEasyPSO.cpp diff --git a/eo/src/es/CMAParams.cpp b/eo/src/es/CMAParams.cpp index 2862cdd1a..d27204f97 100644 --- a/eo/src/es/CMAParams.cpp +++ b/eo/src/es/CMAParams.cpp @@ -113,16 +113,19 @@ CMAParams::CMAParams(eoParser& parser, unsigned dimensionality) { for (unsigned i = 0; i < weights.size(); ++i) { weights[i] = mu - i; } + break; } case 2: { weights = 1.; + break; } default : { for (unsigned i = 0; i < weights.size(); ++i) { weights[i] = log(mu+1.)-log(i+1.); } + break; } } diff --git a/eo/src/gp/parse_tree.h b/eo/src/gp/parse_tree.h index 84ec04d35..6b9ab80ae 100644 --- a/eo/src/gp/parse_tree.h +++ b/eo/src/gp/parse_tree.h @@ -468,8 +468,11 @@ private : switch(new_arity) { case 3 : args[2].copy(s.args[2]); args[2].parent = this; // no break! + [[fallthrough]]; case 2 : args[1].copy(s.args[1]); args[1].parent = this; + [[fallthrough]]; case 1 : args[0].copy(s.args[0]); args[0].parent = this; + [[fallthrough]]; case 0 : break; default : { @@ -523,7 +526,9 @@ private : switch(arity()) { case 3 : args[2].parent = 0; // no break! + [[fallthrough]]; case 2 : args[1].parent = 0; + [[fallthrough]]; case 1 : args[0].parent = 0; break; case 0 : break; default : @@ -542,7 +547,9 @@ private : switch(arity()) { case 3 : args[2].parent = this; // no break! + [[fallthrough]]; case 2 : args[1].parent = this; + [[fallthrough]]; case 1 : args[0].parent = this; break; case 0 : break; default : diff --git a/eo/src/mpi/implMpi.cpp b/eo/src/mpi/implMpi.cpp index 2dd1ca0d5..d045da3ac 100644 --- a/eo/src/mpi/implMpi.cpp +++ b/eo/src/mpi/implMpi.cpp @@ -161,7 +161,7 @@ namespace mpi MPI_Barrier( MPI_COMM_WORLD ); } - void broadcast( communicator & comm, int value, int root ) + void broadcast( communicator & /*comm*/, int value, int root ) { MPI_Bcast( &value, 1, MPI_INT, root, MPI_COMM_WORLD ); } diff --git a/eo/src/utils/pipecom.cpp b/eo/src/utils/pipecom.cpp index a175112f9..bef9ae2ce 100644 --- a/eo/src/utils/pipecom.cpp +++ b/eo/src/utils/pipecom.cpp @@ -42,16 +42,16 @@ int Check( PCom *com ) } -PCom * PipeComOpen( char *prog ) +PCom * PipeComOpen( const char *prog ) { char *args[2]; - args[0] = prog; + args[0] = strdup( prog ); args[1] = NULL; return PipeComOpenArgv( prog, args ); } -PCom * PipeComOpenArgv( char *prog, char *argv[] ) +PCom * PipeComOpenArgv( const char *prog, char *argv[] ) { int toFils[2]; int toPere[2]; diff --git a/eo/src/utils/pipecom.h b/eo/src/utils/pipecom.h index 56b031708..16685225c 100644 --- a/eo/src/utils/pipecom.h +++ b/eo/src/utils/pipecom.h @@ -23,8 +23,8 @@ typedef struct PipeCommunication { } PCom; -extern PCom *PipeComOpen( char *prog ); -extern PCom *PipeComOpenArgv( char *prog, char *argv[] ); +extern PCom *PipeComOpen( const char *prog ); +extern PCom *PipeComOpenArgv( const char *prog, char *argv[] ); extern int PipeComSend( PCom *to, const char *line ); extern int PipeComSendn( PCom *to, const char *data, int n ); diff --git a/moeo/src/do/make_checkpoint_moeo.h b/moeo/src/do/make_checkpoint_moeo.h index 188c340ea..98bb1e2a1 100644 --- a/moeo/src/do/make_checkpoint_moeo.h +++ b/moeo/src/do/make_checkpoint_moeo.h @@ -66,7 +66,7 @@ bool testDirRes(std::string _dirName, bool _erase); * @param _archive the archive of non-dominated solutions */ template < class MOEOT > -eoCheckPoint < MOEOT > & do_make_checkpoint_moeo (eoParser & _parser, eoState & _state, eoEvalFuncCounter < MOEOT > & _eval, eoContinue < MOEOT > & _continue, eoPop < MOEOT > & _pop, moeoArchive < MOEOT > & _archive) +eoCheckPoint < MOEOT > & do_make_checkpoint_moeo (eoParser & _parser, eoState & _state, eoEvalFuncCounter < MOEOT > & /*_eval*/, eoContinue < MOEOT > & _continue, eoPop < MOEOT > & _pop, moeoArchive < MOEOT > & _archive) { eoCheckPoint < MOEOT > & checkpoint = _state.storeFunctor(new eoCheckPoint < MOEOT > (_continue)); /* the objective vector type */ diff --git a/moeo/src/do/make_ea_moeo.h b/moeo/src/do/make_ea_moeo.h index aee4dcd0d..76559e198 100644 --- a/moeo/src/do/make_ea_moeo.h +++ b/moeo/src/do/make_ea_moeo.h @@ -85,7 +85,7 @@ * @param _archive the archive of non-dominated solutions */ template < class MOEOT > -moeoEA < MOEOT > & do_make_ea_moeo(eoParser & _parser, eoState & _state, eoEvalFunc < MOEOT > & _eval, eoContinue < MOEOT > & _continue, eoGenOp < MOEOT > & _op, moeoArchive < MOEOT > & _archive) +moeoEA < MOEOT > & do_make_ea_moeo(eoParser & _parser, eoState & _state, eoEvalFunc < MOEOT > & _eval, eoContinue < MOEOT > & _continue, eoGenOp < MOEOT > & _op, moeoArchive < MOEOT > & /*_archive*/) { /* the objective vector type */ diff --git a/moeo/src/metric/moeoHyperVolumeMetric.h b/moeo/src/metric/moeoHyperVolumeMetric.h index dc65ac4c9..ce1ee0c1c 100644 --- a/moeo/src/metric/moeoHyperVolumeMetric.h +++ b/moeo/src/metric/moeoHyperVolumeMetric.h @@ -55,7 +55,7 @@ class moeoHyperVolumeMetric : public moeoVectorUnaryMetric < ObjectiveVector , d * @param _normalize allow to normalize data (default true) * @param _rho coefficient to determine the reference point. */ - moeoHyperVolumeMetric(bool _normalize=true, double _rho=1.1): normalize(_normalize), rho(_rho), ref_point(NULL){ + moeoHyperVolumeMetric(bool _normalize=true, double _rho=1.1): normalize(_normalize), rho(_rho) { bounds.resize(ObjectiveVector::Traits::nObjectives()); // initialize bounds in case someone does not want to use them for (unsigned int i=0; i } template - U& findValueImpl(T& t, Arg&... arg, std::true_type) + U& findValueImpl(T& t, Arg&... /*arg*/, std::true_type) { return t; } diff --git a/smp/src/island.cpp b/smp/src/island.cpp index 783d42d75..eb8fa85ca 100644 --- a/smp/src/island.cpp +++ b/smp/src/island.cpp @@ -59,6 +59,10 @@ paradiseo::smp::Island::Island(eoPop& _pop, IntPolicy _pop, _intPolicy, _migPolicy, args...) { } +template