2.18.0 (2021-08-03)


  • pagmo now officially supports 64-bit ARM and PowerPC processors (#481).


  • pagmo’s build system now honours the CMAKE_INSTALL_LIBDIR setting on Linux to determine the library installation path (#482).

  • Various internal changes/improvements in the serialisation functions (#480).


  • Do not force the static runtime on MSVC when building pagmo as a static library (#474).

2.17.0 (2021-03-05)


  • Enable support in the build system for the latest TBB version (oneTBB) (#469).

2.16.1 (2020-12-22)


  • The pagmo conda package now enables Ipopt on Windows (#460).


  • pagmo now requires CMake >= 3.8 (#458).


2.16.0 (2020-09-25)


  • pagmo can now be built as a static library (#426).

  • Add a flag to build pagmo with link-time optimizations (#413).

  • The thread_island UDI now can use a thread pool (#409).


  • NLopt support in pagmo now requires version 2.6 or greater (#451).

  • Eigen3 support in pagmo now requires version 3.3 or greater (#451).

  • BREAKING: pagmo now requires C++17 (#414, #415).

  • Rework the way in which binary data is included in the CEC2013/CEC2014 problem suites. As a result, these problems are now available on all platforms (#412).

  • Various internal simplifications to the implementation of the type-erased classes (#411).


  • Various build system fixes/improvements (#451).

  • Fix an indexing bug in the PSO implementation (#448).

  • Fix build failure with Boost 1.74 (#447).

  • Fixes in SBX and polynomial mutation (#436).

  • Avoid quadratic complexity in pagmo::population::push_back() (#434).

  • Fix build with recent Ipopt versions (#412).

2.15.0 (2020-04-02)


  • The type-erased wrappers now have additional member functions to interact at runtime with the contained user-defined objects. Specifically, it is now possible to fetch void pointers to the user-defined objects without knowing their type, and to query at runtime the std::type_index of the user-defined objects (#410).

  • The default get_name() implementations for the type-erased wrappers now return the demangled C++ name on most platforms (#410).

  • Add a pagmo::base_bgl_topology::get_edge_weight() function to fetch the weight of an edge in a BGL topology (#407).

  • Add the free_form topology (#405).

  • User-defined topologies can now (optionally) implement a conversion function to a Boost graph object (#405).


  • Introduce a workaround for an issue present on some compiler/standard library combinations, where the dynamic_cast used in the extract() implementations would fail when crossing the boundaries between dlopen()-ed libraries (#410).

  • Build fixes for recent CMake versions (#410).

  • Various doc fixes (#410, #405).

2.14.0 (2020-03-04)


  • IMPORTANT: pygmo has been split off into a separate project. Please see the website for pygmo’s documentation and changelog.

  • pagmo’s core classes now support pretty-printing in the xeus-cling notebook (#397).

  • Implement a setter for the migration database of an archipelago (#390).


  • Various performance improvements for the Pareto dominance utilities (#394).


  • Fix an error message in the CEC2009 test suite (#402).

2.13.0 (2020-01-10)


  • The batch fitness evaluation functionality has been completed on the Python side. This includes 2 new batch fitness evaluation schemes usable with Pythonic problems (mp_bfe and ipyparallel_bfe), and additional testing (#380).

  • The pagmo::not_implemented_error C++ exception is now correctly translated to the NotImplementedError Python exception (#380).


  • BREAKING: as anticipated, Python 2 support has been removed from pygmo. pygmo now requires Python 3.4 or later.

  • Allow to specify arguments to the construction of both the client and the view in ipyparallel_island (#380). Note that this is a BREAKING change for non-standard usages of ipyparallel_island.

  • The hypervolume code has been moved to the compiled pagmo library (#376).


  • Fix a bug in the hypervolume utilities when NaNs are encountered (#383).

  • Fix an ambiguous archipelago constructor (#381).

  • Fix a compilation warning in debug mode when using recent Boost versions (#377).

2.12.0 (2019-12-18)


  • The pagmo::pso_gen algorithm can now use the batch fitness evaluation scheme (#348).

  • Implement the multi-objective hypervolume-based ant colony optimizer (MHACO) (#326).

  • Implement the NSPSO algorithm (#314).


  • BREAKING: the mechanism for managing the interaction of an ipyparallel_island with an ipyparallel cluster has changed. Please refer to the documentation for details (#368).


  • Fix a missing inline and a few wrong include files in the serialization header (#355).

  • Various build system/doc fixes (#372, #363, #361, #350, #354).

2.11.4 (2019-09-29)


  • Fix an indexing bug in the pagmo::pso_gen algorithm (#349).

  • Fix various fitness comparisons when nan values are involved (#346, #347).

2.11.3 (2019-09-09)


  • pygmo.archipelago.push_back() now also accepts island objects as input arguments (#342).


  • BREAKING: the machinery for the translation between C++ and Python of vectors of unsigned integral types (e.g., sparsity patterns, individual IDs, etc.) now requires that, on the Python side, NumPy arrays are created with the appropriate unsigned integral dtype (i.e., uint64 in most cases). Previously, pagmo would accept also signed integral dtypes (#342).


  • Various improvements, fixes and cleanups in the translation of C++ vectors to/from Python (#342).

  • Fix the printing of islands which contain MO problems (#342).

  • Various doc improvements and fixes (#340).

2.11.2 (2019-08-21)


  • Fix the MinGW pip builds (#338).

  • Fix the default value for the NSGA2 eta_m parameter in the Python exposition (#338).

2.11.1 (2019-08-09)


  • Fix a migration issue when multi-objective problems are involved (#334).

  • Various docstring fixes (#334).

2.11 (2019-08-07)


  • NSGA2 can optionally use the batch fitness evaluation framework (#308).

  • Implement the WFG test suite (#298).

  • Migration framework (#296).

  • Various additions to the C++ API of user-defined classes (#294).

  • Ipopt is now included in the linux pip packages (#293).

  • Implement an uninstall target in the build system when using the CMake Unix Makefiles generator (#282).

  • Implement the Grey Wolf Optimizer algorithm (#268).

  • Add CircleCI to the continuous integration pipeline (#266).

  • Implement the Extended Ant Colony Optimization algorithm (#249).

  • Implement the Lennard-Jones and Golomb ruler problems (#247).

  • Batch fitness evaluation framework (#226).


  • Various improvements to the MinGW pip packages: the toolchain and the dependencies have been updated, support for Python 3.7 has been added (#292).

  • BREAKING: unconditionally disable the CEC2013/CEC2014 problem suites on OSX and MinGW, as they cause build issues (#266, #292).

  • BREAKING: the serialization backend was switched from the Cereal library to the Boost.serialization library. This change has no consequences for Python users, nor for C++ users who use pagmo’s CMake machinery. For those C++ users who don’t use CMake, this means that in order to use pagmo it is now necessary to link to the Boost.serialization library (#278).

  • BREAKING: pagmo is not any more a header-only library, it has now a compiled component. This change has no consequences for Python users, nor for C++ users who use pagmo’s CMake machinery. For those C++ users who don’t use CMake, this means that in order to use pagmo it is now necessary to link to a compiled library (#278).

  • Various performance improvements in the population API (#250).

  • BREAKING: pygmo.problem and pygmo.algorithm cannot be used as UDPs and UDAs any more. This change makes the behaviour of pygmo consistent with the behaviour of pagmo (#248).


  • Fix a bug in pygmo’s plotting utils (#330).

  • Fix a bug in PSO’s error handling (#323).

  • Fix a bug in MOEA/D when m_neighbours<2 (#320).

  • Fix type mismatches in the constrained/MO utils (#315).

  • Fix a potential deadlock when setting/getting an island’s population/algorithm (#309).

  • Fix a build failure when pagmo is configured without Eigen3 (#281).

  • Fix a build failure in the Ipopt algorithm wrapper when using the Debian/Ubuntu Ipopt packages (#266).

  • Fix a few test suite build failures in debug mode when using recent Clang versions (#266).

  • Fix the behaviour of NSGA2 and MOEAD when the problem has equal lower/upper bounds (#244).

  • Various documentation, build system and unit testing fixes/improvements (#243, #245, #248, #257, #262, #265, #266, #279, #287, #288, #327, #328).

  • The fork_island UDI now properly cleans up zombie processes (#242).

2.10 (2019-01-02)


  • Enable the py27m build variant for the manylinux packages (#239).

  • It is now possible to select a serialization backend other than cloudpickle. The other available backends are the standard pickle module and dill (#229).

  • The Python multiprocessing island mp_island can now optionally spawn a new process for each evolution, rather than using a process pool (#221).

  • Python user-defined classes can now be extracted from their type-erased containers using the Python object type (#219). This allows extraction without knowing the exact type of the object being extracted.


  • Avoid linking pygmo to the Python library on OSX with clang. This may fix the Fatal Python error: take_gil: NULL tstate errors which are occasionally reported by users (#230).

  • Correct the detection of the Boost libraries’ version in the build system (#230).

  • The Python multiprocessing island mp_island should now be more robust with respect to serialization errors in problems/algorithms (#229).

  • Tentative fix for a pygmo build failure in Cygwin (#221).

  • Various documentation fixes and enhancements (#217, #218, #220, #221).

2.9 (2018-08-31)


  • Implement the UDI extraction functionality for island (#207).

  • Implement the fork_island UDI (#205).

  • pip pygmo package for Python 3.7 (Linux) (#196).

  • Implement the decorator_problem Python meta-problem (#195).

  • Various documentation additions (#194).


  • The build system now respects the CMAKE_CXX_STANDARD CMake setting (#207).

  • Ensure that, in thread_island, the algorithm used for the evolution replaces the original algorithm at the end of the evolution (#203).

  • The pip pygmo package for Python 3.4 (Linux) has been dropped (#196).


  • Fix a missing inline specifier (#206).

  • Fix a bunch of missing includes in pagmo.hpp (#202).

  • Fixes for compiler warnings in GCC 8 (#197).

  • Various documentation, build system and CI fixes and enhancements (#195, #196, #204, #205, #207).

2.8 (2018-07-12)


  • Implement the CEC2014 problem suite (#188, #189).

  • It is now possible to explicitly shut down the process pool of mp_island (#187).

  • Start using intersphinx in the documentation (used at the moment for hyperlinking to the Python online documentation) (#187).

  • The constraints’ tolerances for a problem can now be set via a scalar in pygmo (#185).


  • Update the copyright date to 2018 (#190).

  • BREAKING: user-defined islands in Python must now return the algorithm object used for the evolution in addition to the evolved population (#186). This change ensures that the state of an algorithm executed on a pythonic island is now correctly propagated back to the original algorithm object at the end of an evolution.


  • Fix a compilation failure involving the IHS algorithm (#192).

  • Fix a bug in the Python exposition of the DE algorithm (#183).

  • Various documentation and CI fixes and improvements (#183, #185, #190, #191).

2.7 (2018-04-13)


  • Implement the particle swarm optimization generational (GPSO) algorithm (#161).

  • Implement the exponential natural evolution strategies (xNES) algorithm (#142).

  • Implement the improved harmony search (IHS) algorithm (#141).


  • Update pygmo’s dependencies in the manylinux builds to the latest versions (#144).

2.6 (2017-11-18)


  • Fix a bug in NSGA2 when the bounds of the problem contain negative values (#139).

  • Various documentation fixes and improvements (#139).

2.5 (2017-11-12)


  • Fix meta-problems not forwarding the integer dimension (#134).

  • Various continuous integration fixes (#134, #136).

  • Various build fixes for recent GCC versions (#129).

  • Various documentation fixes and improvements (#121).

2.4 (2017-06-09)


  • Initial release of the pagmo/pygmo C++ software-development kit (SDK). The purpose of the SDK is to make the process of writing C++ extensions for pagmo/pygmo as easy as possible. The SDK is a beta-quality feature at this time, and it is lightly documented - no tutorials are available yet. Please come to the gitter channel and ask there if you are interested in it (#110).

  • Improve support for integer and mixed integer optimization (#115).


  • pygmo now depends on pagmo, and it is now effectively a separate package. That is, in order to compile and install pygmo from source, you will need first to install the pagmo C++ headers. Users of pip/conda are not affected by this change (as pip and conda manage dependencies automatically).

  • BREAKING: as a consequence of the overhaul of (mixed) integer programming support in pagmo, the problem’s integer part is no longer available as an argument when constructing algorithms such as pagmo::sga and pagmo::nsga2, it must instead be specified in the definition of the UDP via the optional get_nix() method.


  • Fix a bug in the plotting submodule (#118).

  • Various documentation fixes and improvements.

2.3 (2017-05-19)


  • Move from dill to cloudpickle as a serialization backend. This fixes various serialization issues reported in #106.


  • Various documentation fixes and improvements (#103, #104, #107).

2.2 (2017-05-12)


  • New tutorials (Schwefel and constrained problems) (#91).

  • Add support for Ipopt (#92).

  • Implement the simple genetic algorithm (SGA) (#93).


  • Rename, fix and improve the implementation of various archipelago-related methods (#94).

  • Remove the use of atomic counters in the problem (#79).


  • Various documentation fixes/improvements, headers sanitization, etc.