diff --git a/.github/workflows/build_ubuntu_debug.yml b/.github/workflows/build_ubuntu_debug.yml deleted file mode 100644 index 58aac6a42..000000000 --- a/.github/workflows/build_ubuntu_debug.yml +++ /dev/null @@ -1,47 +0,0 @@ -name: Build Debug (Ubuntu) -on: [push, pull_request] - -env: - # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) - BUILD_TYPE: Debug - -jobs: - build: - # The CMake configure and build commands are platform agnostic and should work equally well on Windows or Mac. - # You can convert this to a matrix build if you need cross-platform coverage. - # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix - runs-on: ubuntu-latest - strategy: - matrix: - 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@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: | - sudo apt-get install libeigen3-dev libboost-dev - - - name: Configure - # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. - # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type - run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DEDO=ON -DEDO_USE_LIB=Eigen3 -DENABLE_CMAKE_EXAMPLE=ON -DENABLE_CMAKE_TESTING=ON - - - name: Build - # Build your program with the given configuration - run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} - - - name: Test - working-directory: ${{github.workspace}}/build - # Execute tests defined by the CMake configuration. - # See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail - run: ctest -C ${{env.BUILD_TYPE}} - diff --git a/.gitignore b/.gitignore index ef1e87e20..5de8ffbd3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,20 +1,11 @@ -# ignore generated files +# ignore html files *.html -*.pdf # ignore all textual files *.txt -*.swp -*.swo -.kak_history -*.log -*.csv -*.ods # ignore object and archive files *.[oa] -*.bak -*.tar* tags # ignore auto-saved files @@ -38,7 +29,4 @@ debug/* build/* website/EO_star.png website/paradiseo_logo.png -Release/* -Debug/* -Build/* diff --git a/AUTHORS b/AUTHORS index 47e9ce4b9..604157f80 100644 --- a/AUTHORS +++ b/AUTHORS @@ -1,52 +1,41 @@ Current maintainers =================== - +Arnaud Liefooghe +Clive Canape Johann Dreo +Sébastien Verel +Active developpers +================== +Alexandre Quemy +Benjamin Bouvier +Caner Candan +Pierre Savéant Past contributors ================= - atantar -Alesandro Sidero -Alexandre Quemy -Alix Zheng -Amine Aziz-Alaoui -Arnaud Liefooghe -Benjamin Bouvier -Bahri -Caner Candan -Clive Canape fatene Gustavo Romero Lopez jboisson Jeroen Eggermont Jochen Küpper -Joost +Joost Juan Julian Merelo Guervos Jérémie Humeau -Jxtopher Karima Boufaras -legillono -Leo Bertheas +legillon Louis Da Costa Loïc Jean David Arjanen Maarten Keijzer -Mammar Amara -Manu Marc Schoenauer Marie-Éleonore Mostepha Khouadjia Olivier König -Pierre Savéant Pedro Angel Castillo Valdivieso -Potalas -Ronald Pinho Steve Madere Sébastien Cahon -Sébastien Verel Thomas Legrand -Thibault Lasnier Victor Manuel Rivas Santos wcancino xohm diff --git a/CMakeLists.txt b/CMakeLists.txt index 52c1fa4a5..835847770 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,5 @@ # ParadiseO - ###################################################################################### ### 0) Check the CMake version ###################################################################################### @@ -13,24 +12,13 @@ cmake_minimum_required(VERSION 3.10 FATAL_ERROR) ## Name project("ParadisEO" - VERSION 3.1.3 + VERSION 3.0.0 DESCRIPTION "Evolutionary optimization framework" LANGUAGES C CXX) ## 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 @@ -63,16 +51,16 @@ include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/Target.cmake) ###################################################################################### ## Paths to sources of modules -set( EO_SRC_DIR "${PROJECT_SOURCE_DIR}/eo" CACHE INTERNAL "ParadisEO-EO source directory" FORCE) -set( EDO_SRC_DIR "${PROJECT_SOURCE_DIR}/edo" CACHE INTERNAL "ParadisEO-EDO source directory" FORCE) -set( MO_SRC_DIR "${PROJECT_SOURCE_DIR}/mo" CACHE INTERNAL "ParadisEO-MO source directory" FORCE) -set(MOEO_SRC_DIR "${PROJECT_SOURCE_DIR}/moeo" CACHE INTERNAL "ParadisEO-MOEO source directory" FORCE) -set( SMP_SRC_DIR "${PROJECT_SOURCE_DIR}/smp" CACHE INTERNAL "ParadisEO-SMP source directory" FORCE) -set( MPI_SRC_DIR "${PROJECT_SOURCE_DIR}/eo/src/mpi" CACHE INTERNAL "ParadisEO-MPI source directory" FORCE) +set( EO_SRC_DIR "${CMAKE_SOURCE_DIR}/eo" CACHE INTERNAL "ParadisEO-EO source directory" FORCE) +set( EDO_SRC_DIR "${CMAKE_SOURCE_DIR}/edo" CACHE INTERNAL "ParadisEO-EDO source directory" FORCE) +set( MO_SRC_DIR "${CMAKE_SOURCE_DIR}/mo" CACHE INTERNAL "ParadisEO-MO source directory" FORCE) +set(MOEO_SRC_DIR "${CMAKE_SOURCE_DIR}/moeo" CACHE INTERNAL "ParadisEO-MOEO source directory" FORCE) +set( SMP_SRC_DIR "${CMAKE_SOURCE_DIR}/smp" CACHE INTERNAL "ParadisEO-SMP source directory" FORCE) +set( MPI_SRC_DIR "${CMAKE_SOURCE_DIR}/eo/src/mpi" CACHE INTERNAL "ParadisEO-MPI source directory" FORCE) -set(PROBLEMS_SRC_DIR "${PROJECT_SOURCE_DIR}/problems" CACHE INTERNAL "Problems dependant source directory" FORCE) +set(PROBLEMS_SRC_DIR "${CMAKE_SOURCE_DIR}/problems" CACHE INTERNAL "Problems dependant source directory" FORCE) -set(CMAKE_BASE_SOURCE_DIR ${PROJECT_SOURCE_DIR}) +set(CMAKE_BASE_SOURCE_DIR ${CMAKE_SOURCE_DIR}) # All libraries are built in /lib/ set( EO_BIN_DIR "${CMAKE_BINARY_DIR}" CACHE INTERNAL "ParadisEO-EO binary directory" FORCE) @@ -92,34 +80,31 @@ set(SMP "false" CACHE BOOL "Build the SMP module") set(MPI "false" CACHE BOOL "Build the MPI module") ## EO Module -set(MODULE_NAME "Paradiseo") -set(DOXYGEN_CONFIG_DIR ${CMAKE_CURRENT_SOURCE_DIR}/doxygen) -# set(EO_MODULE_NAME "Evolving Objects") +set(EO_MODULE_NAME "Evolving Object") set(CMAKE_SOURCE_DIR ${EO_SRC_DIR}) add_subdirectory(${EO_SRC_DIR}) if(NOT EO_ONLY) ## MO Module - # set(MO_MODULE_NAME "Moving Objects") - # set(MODULE_NAME "Moving Objects") + set(MO_MODULE_NAME "Moving objects") set(CMAKE_SOURCE_DIR ${MO_SRC_DIR}) add_subdirectory(${MO_SRC_DIR}) ## EDO Module if(EDO) - # set(EDO_MODULE_NAME "Evolving Distribution Objects") + set(EDO_MODULE_NAME "Evolving Distribution Objects") set(CMAKE_SOURCE_DIR ${EDO_SRC_DIR}) add_subdirectory(${EDO_SRC_DIR}) endif() ## MOEO Module - # set(MOEO_MODULE_NAME "Multi-Objectives EO") + set(MOEO_MODULE_NAME "Multi-Objectives EO") set(CMAKE_SOURCE_DIR ${MOEO_SRC_DIR}) add_subdirectory(${MOEO_SRC_DIR}) ## SMP Module if(SMP) - # set(SMP_MODULE_NAME "Symmetric Multi-Processing") + set(SMP_MODULE_NAME "Symmetric Multi-Processing") set(CMAKE_SOURCE_DIR ${SMP_SRC_DIR}) add_subdirectory(${SMP_SRC_DIR}) endif() diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 6eff1e82f..000000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,84 +0,0 @@ - -Licenses -======== - -ParadisEO modules are using free software licenses, -any contribution should be licensed under the same license. - -| Module | License | Version | Copyleft | Patent-left | -|--------|---------|---------|----------|-------------| -| EO | LGPL | 2 | Lib only | No | -| EDO | LGPL | 2 | Lib only | No | -| MO | CeCILL | 2.1 | Yes | No | -| MOEO | CeCILL | 2.1 | Yes | No | -| SMP | CeCILL | 2.1 | Yes | No | - - -Contribution Workflow -===================== - -The maintainer(s) will try to answer under a couple of weeks, if not, do not hesitate to send an e-mail. - -If you're not familiar with Git and merge requests, start by cloning one of the main repository: -- `git clone https://github.com/nojhan/paradiseo.git` -- `git clone https://scm.gforge.inria.fr/anonscm/git/paradiseo/paradiseo.git` - - -Git workflow ------------- - -ParadisEO follows a classical Git workflow using merge requests. -In order to fix a bug or add a feature yourself, you would follow this process. - -```bash -cd paradiseo -git pull origin master # Always start with an up-to-date version. -git checkout -b # Always work on a dedicated branch. -# [ make some modifications… ] -git commit -mkdir build -cd build -cmake -DCMAKE_BUILD_TYPE=Debug -BUILD_TESTING=ON -DENABLE_CMAKE_TESTING=ON .. && make && ctest # Always test. -cd .. -git pull origin master # Always check that your modification still merges. -``` - -If everything went without error, you can either send the patch or submit a merge request. -To do so, you can either: -- submit a "pull request" on Github: [nojhan/paradiseo](https://github.com/nojhan/paradiseo), -- or send a patch on the [ParadisEO mailing list](https://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/paradiseo-users). - -See below for the details. - - -Github pull request -------------------- - -Once logged in Github, go to the [maintainer repository](https://github.com/nojhan/paradiseo) and click the "fork" button. -You should have your own copy of the ParadisEO project under your own name. -Then add it as an additional "remote" to your ParadisEO Git tree: `git remote add me `. -Then, checkout the branch holding the modifications you want to propose, check that it merges with the main repository -and push it on your own repository: -```bash -git checkout -git pull origin master -git push me -``` - -Then go to the maintainer's repository page, click on the "Pull request" tab, and on the "New pull request" button. -You should then select the maintainer's master branch on the left dropdown list, and your own `my_feature` on the right one. -Explain why the maintainer should merge your modifications and click the "Submit" button. - - -E-mail your patch ------------------ - -Generate a patch file from the difference between your branch and a fresh master: -```bash -git pull origin master -git diff master > my_feature.patch -``` - -Then send the `my_feature.patch` (along with your explanations about why the maintainer should merge your modifications) -to the [mailing list](https://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/paradiseo-users). - diff --git a/INSTALL b/INSTALL new file mode 100644 index 000000000..6f1d121a7 --- /dev/null +++ b/INSTALL @@ -0,0 +1,200 @@ + +========================================================================================== + INSTALLING PARADISEO +========================================================================================== + +There is several ways to install ParadisEO, according to your needs. + +========================================================================================== + WINDOWS +========================================================================================== + +On Windows, and for compatibility reason, ParadisEO supply support only for MinGW. +Feel free to test with another compiler and to send us you report. + +------------------------------------------------------------------------------------------ +1) WITH EXE +------------------------------------------------------------------------------------------ + +The simpliest way ton install ParadisEO on Windows is to use the NSIS installer. +We would like to draw your attention on the fact that the PATH variable will not +be affected by the installation in order to allow anybody to install ParadisEO +without administration right. To have further information about how to use ParadisEO +in your project, see the tutorial on ParadisEO website (http://paradiseo.gforge.inria.fr/). + +------------------------------------------------------------------------------------------ +2) WITH CMAKE +------------------------------------------------------------------------------------------ + +You can also install ParadisEO using CMake. For that you must have a compiler installed, +and obviously cmake. +Then, follow UNIX instructions. + +========================================================================================== + UNIX +========================================================================================== +------------------------------------------------------------------------------------------ +1. WITH CMAKE +------------------------------------------------------------------------------------------ +1.0 DEPENDENCIES +------------------------------------------------------------------------------------------ +Optionnal +- Doxygen for documentation +- lcov for coverage + +------------------------------------------------------------------------------------------ +1.1 FAST INSTALLATION +------------------------------------------------------------------------------------------ + +After getting ParadisEO sources from repository, you have to create a build directory in order to keep your file tree clean. + +> mkdir build +> cd build + +To make the installation easier, ParadisEO propose you two installation types which are "Full" and "Min". +Full corresponds examples / lessons, tests and obviously libraries. +Min corresponds to libraries and headers and it is the standard behavior. + +You can specified an installation type by adding the following declaration to cmake : + +> cmake .. -DINSTALL_TYPE=full +> cmake .. -DINSTALL_TYPE=min +which is equivalent to +> cmake .. + +Actually, by default the generator will be "Unix Makefiles" and cmake will try to look for a C++ compiler. +Be sure you have make installed, or choose an alternative according to your configuration. +To know available generators on your computer, type cmake -help. If you are on Windows and you use MinGW, you have to specify it explicitly by adding -G "MinGW Makefiles". + +To compile ParadisEO simply compile sources using your generator. For instance, if you are using Unix Makefiles, type make. + +------------------------------------------------------------------------------------------ +1.2 BUILD TYPE +------------------------------------------------------------------------------------------ + +There are 2 types of build : Release or Debug. +To explicitly change the type, add -DDEBUG=true, otherwise, it will be the Release type. + +------------------------------------------------------------------------------------------ +1.3 COMPILERS +------------------------------------------------------------------------------------------ + +You can change the compiler used by CMake with the following options : + +>-DCMAKE_C_COMPILER=/path/to/your/c/compiler + +>-DCMAKE_CXX_COMPILER=/path/to/your/c++/compiler + +------------------------------------------------------------------------------------------ +1.4 INSTALLATION +------------------------------------------------------------------------------------------ + +WARNING : This require administration rights. + +To install ParadisEO in standard paths (such as /usr/lib for lib and /usr/include for headers on UNIX-like) : + +> make install + +------------------------------------------------------------------------------------------ +2. SPECIFIC MODULE +------------------------------------------------------------------------------------------ +2.1 EO MODULE ONLY +------------------------------------------------------------------------------------------ + +If you want to compile and install only the Evolving Objects module, you can add to CMake the following option : + +> cmake .. -DEO_ONLY + +------------------------------------------------------------------------------------------ +2.1 SMP MODULE +------------------------------------------------------------------------------------------ + +WARNING : The SMP module requires gcc 4.7 or higher. This is due to the fact that it uses the new C++ standard. + +WARNING : At the moment, the SMP module does not work on Windows or Mac OS X since MinGW does not provide support for std::thread + and Apple does not supply a recent version of gcc (but you can try to compile gcc 4.7 by yourself). + +To enable the compilation of the SMP module, just add -DSMP=true to CMake : + +> cmake .. -DSMP=true + +Depending on your distribution, you might have to give to CMake the path of gcc and g++ 4.7. +This is the case for Ubuntu 12.04 LTS for instance. Please, check installation guide on ParadisEO website for more details. + +If you are in that case and assuming you have a standard path for gcc et g++ 4.7 : + +> cmake .. -DSMP=true -DCMAKE_C_COMPILER=/usr/bin/gcc-4.7 -DCMAKE_CXX_COMPILER=/usr/bin/g++-4.7 + +------------------------------------------------------------------------------------------ +2.2 PEO MODULE +------------------------------------------------------------------------------------------ + +WARNING : The PEO module requires libXML 2 and a MPI implementation such as MPICH2. + +To enable the compilation of the PEO module, just add -DPEO=true to CMake : + +> cmake .. -DPEO=true + +------------------------------------------------------------------------------------------ +2.3 EDO MODULE +------------------------------------------------------------------------------------------ + +WARNING : The EDO module requires either the Boost::ublas or the Eigen3 library. + +To enable the compilation of the EDO module, just add -DEDO=true to CMake : + +> cmake .. -DEDO=true + + +------------------------------------------------------------------------------------------ +3. DOCUMENTATION +------------------------------------------------------------------------------------------ + +There is 2 ways to build ParadisEO documentation : module by module, or all the documentation. + +Targets are : +doc for all documentations +doc-eo for building EO documentation +doc-mo for MO +doc-edo for MO +doc-moeo for MOEO +doc-smp for SMP + +Each documentation are generated separatly in the module build folder. +For instance, after the generation of the MO documentation, you will find it in build/paradise-mo/doc. + +------------------------------------------------------------------------------------------ +4. LESSONS / EXAMPLES +------------------------------------------------------------------------------------------ + +Examples and lessons are generated by default. +If you want to disable lessons manually, you have to specify -DENABLE_CMAKE_TESTING=false to CMake. +If you want to build a specific lesson or example, you can check the list of available targets with make help. + +All lessons are build on the same pattern : Lesson. +For instance, make moLesson4 will build the Lesson 4 from the MO module. +Easy, isn't it ? + +------------------------------------------------------------------------------------------ +5. TESTS +------------------------------------------------------------------------------------------ +5.1 CTESTS +------------------------------------------------------------------------------------------ + +By performing tests, you can check your installation. +Testing is disable by default, except if you build with the full install type. +To enable testing, define -DENABLE_CMAKE_TESTING=true when you launch cmake. + +To perform tests simply type ctest or make test. + +------------------------------------------------------------------------------------------ +5.2 REPORTING +------------------------------------------------------------------------------------------ + +Feel free to send us reports about building, installation, tests and profiling in order to help us to improve compatibilty and installation process. Sending reports is very simple : + +> ctest -D Experimental + +WARNING : Reports are anonymous. CTest will also send informations about your configuration such as OS, CPU frequency, etc. + + diff --git a/INSTALL.md b/INSTALL.md deleted file mode 100644 index a3fb4e1b7..000000000 --- a/INSTALL.md +++ /dev/null @@ -1,217 +0,0 @@ - -Summary -======= - -As Paradiseo is a development framework, you do not really need to install it on all your systems. -Just put it somewhere on your development computer, compile it from here and indicate where to find it to your favorite build system. - - -Build ------ - -Paradiseo is mainly developed for Linux, on which it is straightforward to install a C++ build chain. For example, on Ubuntu 18.04: -```bash -sudo apt install g++-8 cmake make libeigen3-dev libopenmpi-dev doxygen graphviz libgnuplot-iostream-dev -``` - -Paradiseo use the CMake build system, so building it should be as simple as: -```bash -mkdir build ; cd build ; cmake -DEDO=ON .. && make -j -``` - -The file `howto_build_paradiseo.apptainer.def` shows you how to install and build from scratch. -It is a definition file for the [Apptainer](https://apptainer.org/) container system, -which is often used on HPC clusters. - - -Develop -------- - -Download the quick start project template, edit the `CMakeLists.txt` file to indicate where to find Paradiseo and start developing your own solver. - -If you don't know CMake or a modern build system, you should still be able to build a stand-alone code from a `paradiseo/build` directory with something like: -```bash - c++ ../solver.cpp -I../eo/src -I../edo/src -DWITH_EIGEN=1 -I/usr/include/eigen3 -std=c++17 -L./lib/ -leo -leoutils -les -lga -o solver -``` - - -Install -------- - -If you want to install ParadisEO system-wide anyway: -```bash -cmake -D CMAKE_BUILD_TYPE=Release .. && sudo make install -``` - - -More details -============ - -As a templated framework, most of the ParadisEO code rely within headers and is thus compiled -by you when you build your own solver. - -However, in order to save some compilation time, -the EO and EDO modules are compiled within static libraries by the default build system. - -If you believe you have a working build chain and want to test if it works with ParadisEO, -you can try to build the tests and the examples. -Note that if some of them failed (but not all), you may still be able to build your own solver, -as you will most probably not use all ParadisEO features anyway. - - -Windows -------- - -Last time we checked, ParadisEO could only be built with MinGW. -Feel free to test with another compiler and to send us your report. - -As of today, we cannot guarantee that it will be easy to -install ParadisEO under Windows if you're a beginner. -There is still some (possibly outdated) help about oldest version on the [Website](http://paradiseo.gforge.inria.fr/). - -If you know how to install a working compiler and the dependencies, -you may follow the same steps than the Linux process below. - -If you are a beginner, we strongly suggest you install a Linux distribution -(either as an OS, as a virtual machine or using the Windows 10 compatibility layer). - - -Linux ------ - -### Dependencies - -In order to build the latest version of Paradiseo, you will need a C++ compiler supporting C++17. -So far, GCC and CLANG gave good results under Linux. You will also need the CMake and make build tools. - -Some features are only available if some dependencies are installed: -- Most of the EDO module depends on either uBlas or Eigen3. The recommended package is Eigen3, which enables the adaptive algorithms. -- Doxygen is needed to build the API documentation, and you should also install graphviz if you want the class relationship diagrams. -- GNUplot is needed to have the… GNUplot graphs at checkpoints. - -To install all those dependencies at once under Ubuntu (18.04), just type: -```bash -sudo apt install g++-8 cmake make libeigen3-dev libopenmpi-dev doxygen graphviz libgnuplot-iostream-dev. -``` - - -### Build - -The build chain uses the classical workflow of CMake. -The recommended method is to build in a specific, separated directory and call `cmake ..` from here. -CMake will prepare the compilation script for your system of choice which you can change with the `-G ` option (see your CMake doc for the list of available generators). - -Under Linux, the default is `make`, and a build command is straitghtforward: -```bash -mkdir build ; cd build ; cmake .. && make -j -``` - -There is, however, several build options which you may want to switch. -To see them, we recommend the use of a CMake gui, like ccmake or cmake-gui. -On the command line, you can see the available options with: `cmake -LH ..`. -Those options can be set with the `-D