Paradiseo: a Heuristic Optimization Framework
Quick start ⤒
+Download
Download the latest stable release.Or clone the latest version: git clone git://scm.gforge.inria.fr/paradiseo/paradiseo.git
Build
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.
@@ -138,12 +145,17 @@mkdir build ; cd build ; cmake .. && make -j
For more details, see the building Paradiseo section.
+Develop
Download the quick start project template, edit the CMakeLists.txt file to indicate where to find Paradiseo and start developing your own solver.
To show you how does a Paradiseo code look, you will find below a minimal implementation of the popular CMA-ES algorithm.
+To show you how does a Paradiseo code look, you will find here a minimal implementation of the popular CMA-ES algorithm.
+ +The code is presented without comments, to keep it short, but it is yet full-featured, as you will see if you compile it within the build directory, with c++ cmaes.cpp -I../eo/src -I../edo/src -DWITH_EIGEN=1 -I/usr/include/eigen3 -std=c++17 -L./lib/ -leo -leoutils -les -o cmaes and run ./cmaes --help
@@ -221,8 +233,7 @@
-The code is presented without comments, to keep it short, but it is yet full-featured, as you will see if you compile it and run ./cmaes --help
Get help
If you need immediate support or have any question, the best way to get @@ -231,33 +242,52 @@
Alternatively, you can join us on the official chatroom. You can try our webchat interface, or if you already use IRC, you can directly connect to the irc.freenode.org/#paradiseo multi-user chatroom with your favorite client.
+Rationale ⤒
+Black-box and Gray-box Optimization Problems
Paradiseo targets the development of solvers for mathematical optimization problems for which you cannot compute gradients. The classical use case is the automated design or configuration of some system which is simulated.
+It supports mono-objective and multi-objective functions, partial evaluation, several generic way to represent solutions and have all the tools for using your own representation.
Paradiseo does not provides tools for modelling your problem, but makes it easy to find the best algorithm to solve it.
Metaheuristics / Evolutionary Algorithms
Paradiseo targets the design of metaheuristics solvers using computational intelligence methods, a subdomain of artificial intelligence.
+It was originally designed for Evolutionary Algorithms, but rapidly evolved to provide abstractions for several "grammars" for other metaheuristics (or search heuristics, or whatever you call them). As of today, it provides: evolutionary algorithms (evolution strategies, genetic algorithms, etc.), particle swarm optimization, local searches (greedy search, simulated annealing, etc.), estimation of distribution algorithms (covariance-matrix adaptation, etc.).
Why choosing Paradiseo?
Learning a full-featured framework like Paradiseo very often seems overkill. However, we would like to stress out that you may forget some points while jumping to this conclusion.
+Full-featured
Paradiseo provides the largest mature codebase of state-of-the-art algorithms, and is focused on (automatically) find the most efficient solvers.
+The most classical impediment to the use of Paradiseo is that you just want to check if your problem can actually be solved with heuristics. You feel that it would be a loss of time to learn complex stuff if it ends being useless.
@@ -270,8 +300,14 @@ Fortunately, Paradiseo have the largest codebase of the market, hardened along 20 years of development of tens of solvers. Additionally, it provides the tools to rapidly search for the best combination of algorithms to solve your problem, even searching for this combination automatically.Efficient
Paradiseo is the fastest framework on the market, which is a crucial feature for modern and robust approach to solver design and validation.
+Another classical criticism against Paradiseo is that C++ is hard and that a fast language is useless because speed is not a concern when your objective function is dominating all the runtime.
@@ -283,28 +319,38 @@How fast is Paradiseo?
+As indicated in the previous section, this speed is crucially useful for algorithm design and algorithm selection.
+ +You can expect that validating an algorithm implemented with Paradiseo will be up to 10 times faster than its (heavily optimized) Python counterpart.
To give an order of magnitude:
- If you use the "official" vanilla implementation of CMA-ES in Python/Numpy solving the BBOB problem suite through the COCO plateform, running the whole benchmark will take approximately 10 minutes on a single Intel Core i5 @ 2.50GHz with a colid state disk.
- The same experiment, running the Paradiseo implementation using the seamless binding to the IOHprofiler BBOB implementation, will take 1 minute.
Those measures are for a sequential execution, both implementation are able to run in parallel mode.
CMA-ES solves numeric problems with quadratic complexity regarding the number of dimensions. If you target simpler algorithms, they will be faster but one can expect a similar behaviour.
The pycma used for the comparison rely on numpy for the heavy parts of the computations. If you use a pure Python implementation, the difference will be far greater.
Features ⤒
+Component-based Design
Designing an algorithm with Paradiseo consists in choosing what components (called operators) you want to use for your specific needs, just as building a structure with Lego blocks.
@@ -320,8 +366,9 @@If your problem is a bit more exotic, you will have to code a class that encodes how solutions to your problem are represented, and perhaps a few more. For instance, you may want ad-hoc variations operators, but most of the other operators (selection, replacement, stopping criteria, command-line interface, etc.) are already available in Paradiseo.
+One of the very powerful feature of Paradiseo is that its design targets easy combination of operators. Is is, for instance, straightforward to plug several different continuation operators in the stopping criterion slot of algorithms.
@@ -339,9 +386,10 @@Large Choice of Components
Paradiseo is organized in several modules, either providing different "grammars" for different algorithms, either providing high-level features. All modules follows the same architecture design and are interoperable with the others, so that you can easily choose the subset of features you need.
@@ -356,7 +404,9 @@It is, for instance, easy to start with a simple local search, then add multi-objective capabilities, then shared-memory parallelization, then hybridization with an evolutionary algorithm and finally plug everything in an objective function so as to optimize the parameters with a particle swarm optimizer.
+Below is an abridged list of components available in the EO module (only):
@@ -431,14 +481,17 @@Portability
Paradiseo is mainly developed under Linux operating systems, where its dependencies and the C++ toolchain are easy to install. Recent versions have been tested with gcc and clang compilers.
Stable versions should however work on Windows and any Unix-like operating system with a standard-conforming C++ development system.
+Previous versions of Paradiseo have been tested on the following platforms: @@ -464,7 +517,9 @@ +
VS other Frameworks
The following tables show how Paradiseo compares to other active open-source frameworks, to the best of our knowledge (updated on 2019-10-18).
@@ -726,10 +781,14 @@Gathering and maintaining this information is not easy, so take them with a grain of salt, and if you see errors in those tables, please contact us.
+Documentation ⤒
+ - +Presentations Slides
The following documents aim to provide general overviews of the different Paradiseo's modules. They are based on different pdf files which offer complementary view on both theoritical aspects and pratical use.
@@ -947,37 +1007,39 @@ undiscovered knowledge. +Tutorials
Examples on the differents metaheuristics are available in "tutorials" directory of each module of Paradiseo. Here you can find the corresponding explications.
Tutorials on EO (evolutionary algorithms module)
-- EO Lesson1-5 Implement a GA -
- EO Lesson6 first part Implement a real PSO algorithm -
- EO Lesson6 second part Implement a binary PSO algorithm
+
- EO Lesson1-5 Implement a GA +
- EO Lesson6 first part Implement a real PSO algorithm +
- EO Lesson6 second part Implement a binary PSO algorithm
Tutorials on MO (local search module)
-- MO Lesson1 Hill Climber -
- MO Lesson2 Neighborhoods (classical and indexed) -
- MO Lesson3 Simulated Annealing and Checkpointing -
- MO Lesson4 Tabu Search -
- MO Lesson5 Iterated Local Search -
- MO Lesson6 Fitness Landscapes Analysis -
- MO Lesson7 Hybrid Lesson
+
- MO Lesson1 Hill Climber +
- MO Lesson2 Neighborhoods (classical and indexed) +
- MO Lesson3 Simulated Annealing and Checkpointing +
- MO Lesson4 Tabu Search +
- MO Lesson5 Iterated Local Search +
- MO Lesson6 Fitness Landscapes Analysis +
- MO Lesson7 Hybrid Lesson
Tutorials on MOEO (multi-objective module)
-- MOEO Lesson1 Implement NSGA, NSGA-II and IBEA for the SCH1 problem -
- MOEO Lesson2 Evolutionary Algorithms for the flow-shop scheduling problem -
- MOEO Lesson3 Evolutionary Algorithms with a user-friendly parameter file -
- MOEO Lesson4 Dominance-based Local Search for the flow-shop scheduling problem -
Tutorials SMP: new -
- SMP Lesson1 Algorithm wrapping with Master / Workers model
+
- MOEO Lesson1 Implement NSGA, NSGA-II and IBEA for the SCH1 problem +
- MOEO Lesson2 Evolutionary Algorithms for the flow-shop scheduling problem +
- MOEO Lesson3 Evolutionary Algorithms with a user-friendly parameter file +
- MOEO Lesson4 Dominance-based Local Search for the flow-shop scheduling problem +
Tutorials SMP: new +
- SMP Lesson1 Algorithm wrapping with Master / Workers model
Tutorials on parallelization
@@ -990,30 +1052,32 @@ undiscovered knowledge. 2. components and basics, 3. advanced island model manipulations.
- - PEO Intro Technical introduction - -
- PEO Lesson2 Multistart over an evolutionary algorithm -
- PEO Lesson3 Parallel evaluation - -
- PEO Lesson5 Island model - - - - - - - - +
- PEO Intro Technical introduction + +
- PEO Lesson2 Multistart over an evolutionary algorithm +
- PEO Lesson3 Parallel evaluation + +
- PEO Lesson5 Island model + + + + + + + +
Utilities
-- Utils Lesson1 Using configuration files -
- Utils Lesson2 Using statistics
+
- Utils Lesson1 Using configuration files +
- Utils Lesson2 Using statistics
API documentation
The heart of Paradiseo is a set of classes implementing operators. Each module has a separate API documentation. If you want to browse the features and find which class to use, this is the right entry point
@@ -1028,7 +1092,9 @@ undiscovered knowledge.Note that if you want to find the API documentation for the version you have at hand, just build the make doc target and open paradiseo/<build>/<module>/doc/html/index.html in your web browser.
Examples of real solvers
If you want to see examples of real solvers: @@ -1038,11 +1104,17 @@ undiscovered knowledge.
Code ⤒
+Downloads
The current stable release is version 2.0.1: ParadisEO 2.0.1. Some other releases (older or newer) can be found on GitHub/paradiseo/releases.
@@ -1057,10 +1129,10 @@ undiscovered knowledge.Builds
- -Dependencies
+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.
@@ -1081,8 +1153,10 @@ undiscovered knowledge.To install all those dependencies at once under Ubuntu (18.04), just type: sudo apt install g++-8 cmake make libeigen3-dev libopenmpi-dev doxygen graphviz libgnuplot-iostream-dev.
+Compilation
+Compilation
The build chain uses the classical workflow of CMake. The recommended method is to build in a specific, separated directory @@ -1111,7 +1185,9 @@ undiscovered knowledge.
If you ENABLE_CMAKE_TESTING and BUILD_TESTING, it will be the tests, which you can run with the "ctest" command.
If you ENABLE_CMAKE_EXAMPLE, it will also build the examples.
Licenses
Paradiseo is distributed under the @@ -1120,16 +1196,20 @@ undiscovered knowledge.
Note that those licenses places copyleft restrictions on a program created with Paradiseo, but does not apply these restrictions to other software that would links with the program.
-Contribute
Paradiseo development is open and contributions are welcomed.
The official bug tracker is available on the project page. But you may be more confortable using the issue tracker of Johann Dreo's project page on GitHub.
If you have any question about contributing: subscribe to our (low traffic) mailing-list.
+