2.11 (unreleased)


  • 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).


  • 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).

  • 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 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).

  • 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)



  • 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.