# Changelog¶

## 2.11 (unreleased)¶

### New¶

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

### Changes¶

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

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

### New¶

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

### Fix¶

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

### Changes¶

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

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

### New¶

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

### Changes¶

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

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

### New¶

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

### Changes¶

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

## 2.6 (2017-11-18)¶

### Fix¶

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

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

### New¶

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

### Changes¶

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

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

• Various documentation fixes and improvements.

## 2.3 (2017-05-19)¶

### Changes¶

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

### Fix¶

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

## 2.2 (2017-05-12)¶

### New¶

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

• Add support for Ipopt (#92).

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

### Changes¶

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

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

### Fix¶

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