Capabilities ============ Overview -------- * Support for a wide array of types of optimisation problems (continuous, integer, single and multi-objective, constrained and unconstrained, with or without derivatives, stochastic, etc.). * A comprehensive library of algorithms, including global and local solvers, meta-heuristics, single and multi-objective algorithms, wrappers for third-party solvers (e.g., `NLopt `__, `Ipopt `__, etc.). * Comprehensive support for coarse-grained 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 time-to-solution and allowing to harness the computational power of modern computer architectures (including massively-parallel high-performance clusters). * Support for fine-grained parallelisation (i.e., at the level of single objective function evaluations) in selected algorithms via the batch fitness evaluation framework. This allows to speed-up single optimisations via parallel processing (e.g., multithreading, high-performance clusters, GPUs, SIMD vectorization, etc.). * A library of ready-to-use optimisation problems for algorithmic testing and performance evaluation (Rosenbrock, Rastrigin, Lennard-Jones, etc.). * A library of optimisation-oriented utilities (e.g., hypervolume computation, non-dominated 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 :cpp:class:`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 = Single-objective * M = Multi-objective * 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 :ref:`meta-problems ` to turn constrained problems into unconstrained ones, and multi-objective problems into single-objective ones. Heuristic Global Optimization ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ============================================================ ========================================= ========================= Common Name Docs of the C++ class Capabilities ============================================================ ========================================= ========================= Extended Ant Colony Optimization (GACO) :cpp:class:`pagmo::gaco` S-CU-I Differential Evolution (DE) :cpp:class:`pagmo::de` S-U Self-adaptive DE (jDE and iDE) :cpp:class:`pagmo::sade` S-U Self-adaptive DE (de_1220 aka pDE) :cpp:class:`pagmo::de1220` S-U Grey wolf optimizer (GWO) :cpp:class:`pagmo::gwo` S-U Improved Harmony Search :cpp:class:`pagmo::ihs` SM-CU-I Particle Swarm Optimization (PSO) :cpp:class:`pagmo::pso` S-U Particle Swarm Optimization Generational (GPSO) :cpp:class:`pagmo::pso_gen` S-U-sto (N+1)-ES Simple Evolutionary Algorithm :cpp:class:`pagmo::sea` S-U-sto Simple Genetic Algorithm :cpp:class:`pagmo::sga` S-U-I-sto Corana's Simulated Annealing (SA) :cpp:class:`pagmo::simulated_annealing` S-U Artificial Bee Colony (ABC) :cpp:class:`pagmo::bee_colony` S-U Covariance Matrix Adaptation Evo. Strategy (CMA-ES) :cpp:class:`pagmo::cmaes` S-U-sto Exponential Evolution Strategies (xNES) :cpp:class:`pagmo::xnes` S-U-sto Non-dominated Sorting GA (NSGA2) :cpp:class:`pagmo::nsga2` M-U-I Multi-objective EA with Decomposition (MOEA/D) :cpp:class:`pagmo::moead` M-U Multi-objective EA with Decomposition Generational (GMOEA/D) :cpp:class:`pagmo::moead_gen` M-U Multi-objective Hypervolume-based ACO (MHACO) :cpp:class:`pagmo::maco` M-U-I Non-dominated Sorting PSO (NSPSO) :cpp:class:`pagmo::nspso` M-U ============================================================ ========================================= ========================= Local optimization ^^^^^^^^^^^^^^^^^^ ====================================================== ============================================================================================= =============== Common Name Docs of the C++ class Capabilities ====================================================== ============================================================================================= =============== Compass Search (CS) :cpp:class:`pagmo::compass_search` S-CU COBYLA (from NLopt) :cpp:class:`pagmo::nlopt` S-CU BOBYQA (from NLopt) :cpp:class:`pagmo::nlopt` S-U NEWUOA + bound constraints (from NLopt) :cpp:class:`pagmo::nlopt` S-U PRAXIS (from NLopt) :cpp:class:`pagmo::nlopt` S-U Nelder-Mead simplex (from NLopt) :cpp:class:`pagmo::nlopt` S-U Subplex (from NLopt) :cpp:class:`pagmo::nlopt` S-U MMA (Method of Moving Asymptotes) (from NLopt) :cpp:class:`pagmo::nlopt` S-CU CCSA (from NLopt) :cpp:class:`pagmo::nlopt` S-CU SLSQP (from NLopt) :cpp:class:`pagmo::nlopt` S-CU Low-storage BFGS (from NLopt) :cpp:class:`pagmo::nlopt` S-U Preconditioned truncated Newton (from NLopt) :cpp:class:`pagmo::nlopt` S-U Shifted limited-memory variable-metric (from NLopt) :cpp:class:`pagmo::nlopt` S-U Ipopt :cpp:class:`pagmo::ipopt` S-CU SNOPT (in pagmo_plugins_non_free affiliated package) `pagmo::snopt7 `__ S-CU WORHP (in pagmo_plugins_non_free affiliated package) `pagmo::worhp `__ S-CU ====================================================== ============================================================================================= =============== Meta-algorithms ^^^^^^^^^^^^^^^ ====================================================== ============================================ ========================== Common Name Docs of the C++ class Capabilities [#meta_capa]_ ====================================================== ============================================ ========================== Monotonic Basin Hopping (MBH) :cpp:class:`pagmo::mbh` S-CU Cstrs Self-Adaptive :cpp:class:`pagmo::cstrs_self_adaptive` S-C Augmented Lagrangian algorithm (from NLopt) [#auglag]_ :cpp:class:`pagmo::nlopt` S-CU ====================================================== ============================================ ========================== .. rubric:: Footnotes .. [#meta_capa] The capabilities of the meta-algorithms depend also on the capabilities of the algorithms they wrap. If, for instance, a meta-algorithm supporting constrained problems is constructed from an algorithm which does *not* support constrained problems, the resulting meta-algorithms will *not* be able to solve constrained problems. .. [#auglag] 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 :cpp:class:`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 = Single-objective * M = Multi-objective * C = Constrained * U = Unconstrained * I = Integer programming * sto = Stochastic Scalable problems ^^^^^^^^^^^^^^^^^ ========================================================== ========================================= =============== Common Name Docs of the C++ class Type ========================================================== ========================================= =============== Ackley :cpp:class:`pagmo::ackley` S-U Golomb Ruler :cpp:class:`pagmo::golomb_ruler` S-C-I Griewank :cpp:class:`pagmo::griewank` S-U Hock Schittkowski 71 :cpp:class:`pagmo::hock_schittkowski_71` S-C Inventory :cpp:class:`pagmo::inventory` S-U-sto Lennard Jones :cpp:class:`pagmo::lennard_jones` S-U Luksan Vlcek 1 :cpp:class:`pagmo::luksan_vlcek1` S-C Rastrigin :cpp:class:`pagmo::rastrigin` S-U MINLP Rastrigin :cpp:class:`pagmo::minlp_rastrigin` S-U-I Rosenbrock :cpp:class:`pagmo::rosenbrock` S-U Schwefel :cpp:class:`pagmo::schwefel` S-U ========================================================== ========================================= =============== Problem suites ^^^^^^^^^^^^^^^ ================================== ============================================ =============== Common Name Docs of the C++ class Type ================================== ============================================ =============== CEC2006 :cpp:class:`pagmo::cec2006` S-C CEC2009 :cpp:class:`pagmo::cec2009` S-C CEC2013 :cpp:class:`pagmo::cec2013` S-U CEC2014 :cpp:class:`pagmo::cec2014` S-U ZDT :cpp:class:`pagmo::zdt` M-U DTLZ :cpp:class:`pagmo::dtlz` M-U WFG :cpp:class:`pagmo::wfg` M-U ================================== ============================================ =============== .. _available_meta_problems: Meta-problems ^^^^^^^^^^^^^ Meta-problems 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 :cpp:class:`pagmo::decompose` Translate :cpp:class:`pagmo::translate` Unconstrain :cpp:class:`pagmo::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 :cpp:class:`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 :cpp:class:`pagmo::thread_island` Fork island :cpp:class:`pagmo::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 :cpp:class:`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 fine-grained 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 :cpp:class:`pagmo::default_bfe` Thread BFE :cpp:class:`pagmo::thread_bfe` ========================================================== =========================================