Skip to content

0.6.0

Compare
Choose a tag to compare
@arcondello arcondello released this 28 Jun 21:51
· 46 commits to main since this release
12b5cfa

New Features

  • Make SpinReversalTransformComposite nonblocking.

  • Add a seed parameter to the constructor of SpinReversalTransformComposite.

  • Improve the performance of the Presolver constructor by avoiding an unnecessary copy.

  • Raise an InvalidModelError from Presolver when given a model with float("nan") bounds.

  • Raise an InvalidModelError from Presolver when given a model that has a constraint with float("nan") weight or rhs.

  • Add C++ Presolver::restore() method for restoring samples.

  • Add domain propagation to dwave::presolve::Presolver.

  • Add removing small biases to dwave::presolve::Presolver.

  • Support Numpy>=1.17.3, previously required NumPy>=1.20.0.

  • Add a presolve normalization step to replace inf biases, bounds, offsets, right-hand-sides, etc with a large finite number.

  • A newly instantiated Presolver will now have presolve techniques loaded by default.

  • Add TechniqueFlags enum to represent different presolve techniques.

  • Add C++ dwave::presolve::Presolver::add_techniques(), dwave::presolve::Presolver::set_techniques(), and dwave::presolve::Presolver::techniques() methods for manipulating the presolve techniques that will be used by the presolver.

  • Update Presolver.apply(), Presolver.normalize(), and Presolver.presolve() to release Python's global interpreter lock (GIL).

  • Reimplement the C++ Presolver using the PImpl pattern. This will make it easier to maintain binary compatibility going forward. See #89.

  • Add dwave::presolve::Presolve::normalize() C++ method.

  • Add dwave::presolve::Presolve::presolve() C++ method.

  • Raise an InvalidModelError from Presolver when given a model with float("nan") biases.

  • Add Presolver.feasibility() method to return a Feasibility enum. This can be used to test the feasibility of presolved models.

  • Add time_limit_s keyword argument to Presolver.presolve().

  • Add time_limit argument to C++ method dwave::presolve::Presolver::presolve().

  • Add Presolver.normalize() method. See #78.

  • Add Presolver.presolve() method. See #78.

Upgrade Notes

  • The wrapped C++ dwave::presolve::Presolver held by cyPresolver.cpppresolver is now stored as a pointer.

  • Remove C++ PostSolver class. See #90.

  • A newly instantiated Presolver will now have presolve techniques loaded by default. Previously it would have no techniques loaded and the user would need to also call Presolver.load_default_presolvers().

  • Remove the C++ dwave::presolve::Presolver::load_default_presolvers() method.

  • The C++ Presolver no longer has a header-only implementation.

  • Raise an InvalidModelError rather than a RuntimeError when presolving a detached model.

  • Change Presolver to no longer raise an InfeasibleModelError error for infeasible models.

  • Remove the InfeasibleModelError.

Deprecation Notes

  • Drop support for Python 3.7.

  • Deprecate Presolver.load_default_techniques(). Use Presolver.set_techniques(TechniqueFlags.Default) instead.