From b63f6342538c901f9e9cbfc29a0aa7c97e722e3e Mon Sep 17 00:00:00 2001 From: nojhan Date: Sun, 3 May 2020 18:43:09 +0200 Subject: [PATCH] update README --- README.md | 147 ++++-- website/index.html | 4 +- website/paradiseo_logo_200px_dark.png | Bin 0 -> 11880 bytes website/paradiseo_logo_dark.svg | 629 ++++++++++++++++++++++++++ 4 files changed, 739 insertions(+), 41 deletions(-) create mode 100644 website/paradiseo_logo_200px_dark.png create mode 100644 website/paradiseo_logo_dark.svg diff --git a/README.md b/README.md index cdba1774b..8f9152b25 100644 --- a/README.md +++ b/README.md @@ -1,69 +1,138 @@ -# ParadisEO: A C++ evolutionary computation framework to build parallel stochastic optimization solvers +# Paradiseo: a Heuristic Optimization Framework -## Release +Paradiseo is an open-source ***full-featured evolutionary computation framework*** which main purpose is to help you write ***your own stochastic optimization algorithms***, insanely fast. -The actual release is paradiseo-2.0 +It focus on the efficiency of the implementation of solvers, by providing: +- a ***modular design*** for several types of paradigms, +- the ***largest codebase*** of existing components, +- tools for ***automated design and selection*** of algorithms, +- a focus on ***speed*** and several ***parallelization*** options. -## Installation +![Paradiseo logo](https://github.com/nojhan/paradiseo/blob/master/website/paradiseo_logo_200px_dark.png) -The basic installation procedure must be done in a separatly folder in order to keep your file tree clean. +# Rationale -Create a directory to build and access it: +## Black-box and Gray-box Optimization Problems -``` -$ mkdir build && cd build -``` +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. -Compile the project into the directory with ```cmake```: -``` -$ cmake .. -$ make -``` +## Metaheuristics / Evolutionary Algorithms -Take a coffee ;) +Paradiseo targets the design of metaheuristics solvers using +computational intelligence methods, a subdomain of artificial intelligence. -**Congratulations!! ParadiseEO is installed!** +## Why choosing Paradiseo? -Please refer to paradisEO website or INSTALL file for further information about installation types and options. +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. ---- +> **Paradiseo provides the *largest mature codebase* of state-of-the-art algorithms, and is focused on (automatically) find the *most efficient solvers*.** -## Directory Structure +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. -* __AUTHORS__: Authors list; +However, you should keep in mind that: -* __cmake__: Directory of cmake files; +- Metaheuristics do seem very easy to implement in textbooks, but the state-of-the art versions of efficient algorithms can be a lot more complex. +- It is usually easy to get something to actually run, but it is far more difficult to get an efficient solver. +- Metaheuristics performances on a given problem are very sensitive to small variations in the parameter setting or the choice of some operators. Which render large experimental plans and algorithm selection compulsory to attain peak efficiency. -* __CMakeLists.txt__: Definitions for building process; +> **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*.** -* __CTestConfig.cmake__: Definitions for testing process; +> Paradiseo is the fastest framework on the market, which is a crucial feature for modern and robust approach to solver design and validation. -* __INSTALL__: Steps and options of the installation process; +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. -* __LICENSE__: License contents; +However, we argue that: -* __eo__: Specific directory of the EO (Evolving Objects) module; +- During the design phase of your solver, you will need to estimate its performance against synthetic benchmarks that are fast to compute. In that case, fast computation means fast design iterations. And it's even more true if you plan to use automated design to find the best solver for your problem. +- Modern C++ makes use of the very same high-level abstractions you would find in more accepted languages like Python. Sure, the syntax is cumbersome, but you will not see it after a while, given that you will work at the algorithm level. +- C++ provides full type checking and the largest set of tooling for any modern language, which are your first line of defense against long-term bugs. Sure, it sometimes gives you the impression that you fight against the compiler, but chasing subtle interface bugs across a complex Python code is even harder. -* __mo__: Specific directory of the MO (Moving Objects) module; +# Features -* __moeo__: Specific directory of the MOEO (Multi-Objective Optimization) module; +## Component-based Design -* __problems__: classical problems evaluation functions. +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. ---- -## Notes +If you have a classical problem for which available code exists (for example if you have a black-box problem with real-valued variables), you will just choose operators to form an algorithm and connect it to your evaluation function (which computes the quality of a given solution). -ParadisEO uses EO, a templates-based, ANSI-C++ compliant evolutionary computation library. It contains classes for almost any kind of evolutionary computation you might come up to - at least for the ones we could think of. +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. -EO Website: http://eodev.sourceforge.net/. +## Large Choice of Components -ParadisEO Website: http://paradiseo.gforge.inria.fr/ +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. -EO is distributed under the GNU Lesser General Public License: http://www.gnu.org/copyleft/lesser.html +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. -Please read README file of each extracted directory if you have problems for the installation. +## Portability ---- -**Contact** +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. + + +# Code + +The latest stable version is on the official Git repository of INRIA: `git clone git://scm.gforge.inria.fr/paradiseo/paradiseo.git` + +## 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. + +A free working build chain under Windows seems always difficult to find. Paradiseo 2.0.1 was successfully tested with MinGW (minus the PEO module), but it's unsure if it still work for recent versions. If you managed to build under Windows, your feedback would be appreciated. + +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: `sudo apt install g++-8 cmake make libeigen3-dev libopenmpi-dev doxygen graphviz libgnuplot-iostream-dev`. + +## Compilation + +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 the CMake doc for the list of available generators). + +Under Linux, the default is make, and a build command is straitghtforward: `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