Capabilities#
Overview#
Support for a wide array of types of optimisation problems (continuous, integer, single and multiobjective, constrained and unconstrained, with or without derivatives, stochastic, etc.).
A comprehensive library of algorithms, including global and local solvers, metaheuristics, single and multiobjective algorithms, wrappers for thirdparty solvers (e.g., NLopt, Ipopt, etc.).
Comprehensive support for coarsegrained parallelisation via the generalised island model. In the island model, multiple optimisation instances run in parallel (possibly on different machines) and exchange information as the optimisation proceeds, improving the overall timetosolution and allowing to harness the computational power of modern computer architectures (including massivelyparallel highperformance clusters).
Support for finegrained parallelisation (i.e., at the level of single objective function evaluations) in selected algorithms via the batch fitness evaluation framework. This allows to speedup single optimisations via parallel processing (e.g., multithreading, highperformance clusters, GPUs, SIMD vectorization, etc.).
A library of readytouse optimisation problems for algorithmic testing and performance evaluation (Rosenbrock, Rastrigin, LennardJones, etc.).
A library of optimisationoriented utilities (e.g., hypervolume computation, nondominated sorting, plotting, etc.).
List of algorithms#
This is the list of user defined algorithms (UDAs) currently
provided with pagmo. These are classes that
can be used to construct a pagmo::algorithm
, which will
then provide a unified interface to access the algorithm’s functionalities.
Generally speaking, algorithms can solve only specific problem classes. In the tables below, we use the following flags to signal which problem types an algorithm can solve:
S = Singleobjective
M = Multiobjective
C = Constrained
U = Unconstrained
I = Integer programming
sto = Stochastic
Note that algorithms that do not directly support integer programming will still work on integer problems (i.e., they will optimise the relaxed problem). Note also that it is possible to use metaproblems to turn constrained problems into unconstrained ones, and multiobjective problems into singleobjective ones.
Heuristic Global Optimization#
Common Name 
Docs of the C++ class 
Capabilities 

Extended Ant Colony Optimization (GACO) 
SCUI 

Differential Evolution (DE) 
SU 

Selfadaptive DE (jDE and iDE) 
SU 

Selfadaptive DE (de_1220 aka pDE) 
SU 

Grey wolf optimizer (GWO) 
SU 

Improved Harmony Search 
SMCUI 

Particle Swarm Optimization (PSO) 
SU 

Particle Swarm Optimization Generational (GPSO) 
SUsto 

(N+1)ES Simple Evolutionary Algorithm 
SUsto 

Simple Genetic Algorithm 
SUIsto 

Corana’s Simulated Annealing (SA) 
SU 

Artificial Bee Colony (ABC) 
SU 

Covariance Matrix Adaptation Evo. Strategy (CMAES) 
SUsto 

Exponential Evolution Strategies (xNES) 
SUsto 

Nondominated Sorting GA (NSGA2) 
MUI 

Multiobjective EA with Decomposition (MOEA/D) 
MU 

Multiobjective EA with Decomposition Generational (GMOEA/D) 
MU 

Multiobjective Hypervolumebased ACO (MHACO) 
MUI 

Nondominated Sorting PSO (NSPSO) 
MU 
Local optimization#
Common Name 
Docs of the C++ class 
Capabilities 

Compass Search (CS) 
SCU 

COBYLA (from NLopt) 
SCU 

BOBYQA (from NLopt) 
SU 

NEWUOA + bound constraints (from NLopt) 
SU 

PRAXIS (from NLopt) 
SU 

NelderMead simplex (from NLopt) 
SU 

Subplex (from NLopt) 
SU 

MMA (Method of Moving Asymptotes) (from NLopt) 
SCU 

CCSA (from NLopt) 
SCU 

SLSQP (from NLopt) 
SCU 

Lowstorage BFGS (from NLopt) 
SU 

Preconditioned truncated Newton (from NLopt) 
SU 

Shifted limitedmemory variablemetric (from NLopt) 
SU 

Ipopt 
SCU 

SNOPT (in pagmo_plugins_non_free affiliated package) 
SCU 

WORHP (in pagmo_plugins_non_free affiliated package) 
SCU 
Metaalgorithms#
Common Name 
Docs of the C++ class 
Capabilities 1 

Monotonic Basin Hopping (MBH) 
SCU 

Cstrs SelfAdaptive 
SC 

Augmented Lagrangian algorithm (from NLopt) 2 
SCU 
Footnotes
 1
The capabilities of the metaalgorithms depend also on the capabilities of the algorithms they wrap. If, for instance, a metaalgorithm supporting constrained problems is constructed from an algorithm which does not support constrained problems, the resulting metaalgorithms will not be able to solve constrained problems.
 2
The Augmented Lagrangian algorithm can be used only in conjunction with other NLopt algorithms.
List of problems#
This is the list of user defined problems (UDPs) currently provided with pagmo.
These are classes that can be used to construct a pagmo::problem
,
which will
then provide a unified interface to access the problem’s functionalities.
In the tables below, we classify optimisation problems according to the following flags:
S = Singleobjective
M = Multiobjective
C = Constrained
U = Unconstrained
I = Integer programming
sto = Stochastic
Scalable problems#
Common Name 
Docs of the C++ class 
Type 

Ackley 
SU 

Golomb Ruler 
SCI 

Griewank 
SU 

Hock Schittkowski 71 
SC 

Inventory 
SUsto 

Lennard Jones 
SU 

Luksan Vlcek 1 
SC 

Rastrigin 
SU 

MINLP Rastrigin 
SUI 

Rosenbrock 
SU 

Schwefel 
SU 
Problem suites#
Common Name 
Docs of the C++ class 
Type 

CEC2006 
SC 

CEC2009 
SC 

CEC2013 
SU 

CEC2014 
SU 

ZDT 
MU 

DTLZ 
MU 

WFG 
MU 
Metaproblems#
Metaproblems are UDPs that take another UDP as input, yielding a new UDP which modifies the behaviour and/or the properties of the original problem in a variety of ways.
Common Name 
Docs of the C++ class 

Decompose 

Translate 

Unconstrain 
List of islands#
This is the list of user defined islands (UDIs)
currently provided with pagmo. These are classes that
can be used to construct a pagmo::island
,
which will then
provide a unified interface to access the island’s functionalities.
In the pagmo jargon, an island is an entity tasked with managing the asynchronous evolution of a population via an algorithm in the generalised island model. Different UDIs enable different parallelisation strategies (e.g., multithreading, multiprocessing, cluster architectures, etc.).
Common Name 
Docs of the C++ class 

Thread island 

Fork island 
List of batch fitness evaluators#
This is the list of user defined batch fitness
evaluators (UDBFEs)
currently provided with pagmo. These are classes that
can be used to construct a pagmo::bfe
,
which will then
provide a unified interface to access the evaluator’s
functionalities.
In the pagmo jargon, a batch fitness evaluator implements the capability of evaluating a group of decision vectors in a parallel and/or vectorised fashion. Batch fitness evaluators are used to implement finegrained parallelisation in pagmo (e.g., parallel initialisation of populations, or parallel fitness evaluations within the inner loop of an algorithm).
Common Name 
Docs of the C++ class 

Default BFE 

Thread BFE 