PaGMO offers a generalization of the island model paradigm working for global and local optimization algorithms. Its main parallelization approach makes use of multiple threads, but MPI is also implemented and can be mixed in with multithreading. It provides a set of C++ classes and their exposition in Python language (PyGMO) as to allow the user to solve, in a parallel fashion, global optimization tasks in the form:
.... yes it is that good ... its framework is applicable to single-objective, multiple-objectives, continuous, integer, box-constrained, non linear constrained, stochastic, deterministic optimization!!!!
A number of algorithms are already implemented in PaGMO and thus immediately available after installation. The user can implement his own algorithms both in C++ and directly in Python. Check the algorithm documentation to verify whether a particolar problem class can be fed to it (i.e. box-constrained, mixed integer etc.):
Other algorithm are available via third parties libraries, and can be included activating the respective options in CMake, in particular:
When working only in Python the SciPy algorithms from the 'optimize module' are available too (see http://docs.scipy.org/doc/scipy/reference/optimize.html).
A number of global otimization problems are already implemented in PaGMO and thus immediately available after installation. The user can implement his own problems both in C++ or directly in Python.
To install PaGMO from source code you will need git and CMake installed in your system.
On Unix systems:
On Windows systems, the procedure is analogous (you will likely use the Windows CMake GUI instead of ccmake). We have so far tested compilation only using MinGW
Our suggestion in using PaGMO is to activate the option PyGMO and, after installation, start an interactive session with ipython. In the image below you see an example on how to solve the 100 dimensional pagmo::problem::schwefel using a pagmo::topology::ring evolution of 8 island (20 individuals each) using pagmo::algorithm::de (Differential Evolution) in a 4 CPU machine.
By default PaGMO parallelizes the optimization process by opening multiple local threads of execution, and hence the parallelism is confined to a single machine. For use in cluster environments, PaGMO can employ MPI (Message Passing Interface) to distribute the workload among multiple machines. Detailed instructions on how to enable and use the MPI support in PaGMO can be found in this page.