Skip to content

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 24 Jun 18:02
4fb0485

Manopt v0.6.0

Diff since v0.5.39

This is a breaking change since the JuMP extension is dropped.
We also unified a few of the internal solver state constructors.

Added

  • A robustified version of the Riemannian Levenberg Marquardt algorithm (#617)
  • An option to disable the warm start the conjugate residual currently does when used as a subsolver.
  • nonpositive_curvature_behavior for QuasiNewtonLimitedMemoryDirectionUpdate that determines how transported (y, s) vector pairs are treated after transport; if their inner product gets too low, it may lead to non-positive-definite Hessians which needs to be avoided. This resolves issue (#549). (#554)
  • GeneralizedCauchyDirectionSubsolver for handling direction selection in the presence of box (Hyperrectangle) constraints in quasi-Newton methods. This allows for L-BFGS-B-style box constraint handling. (#554)
  • New stopping criteria: StopWhenRelativeAPosterioriCostChangeLessOrEqual and StopWhenProjectedNegativeGradientNormLess. (#554).
  • HagerZhangLinesearch stepsize, a state-of-the-art line search for smooth objectives with cubic interpolation and adaptive Wolfe condition checking. (#554)
  • Stopping criteria can now be initialized using initialize_stepsize!, similar to solvers. (#554)
  • The ConjugateResidualState now has a warm_start= option when used multiple times, for example in every iteration as a subsolver, to reuse the last state from the previous run.

Changed

  • In the Riemannian Levenberg Marquardt algorithmt the η parameter has been renamed to candidate_acceptance_threshold, β to damping_increase_factor and β_reduction to damping_reduction_factor. (#617)
  • the constructor for the Levenberg-Marquardt state has been unified with the remaining states, to take the sub_problem and sub_state arguments as second and third positional arguments, respectively. (#617)
  • the keyword initial_jacobian_f within LevenbergMarquardt is unified in naming to the residual values vector and called initial_jacobian_matrices. If you call LevenbergMarquardt with a single vector component, also a single matrix is allowed. (#617)
  • an internal field of the solver state of Levenberg-Marqwuardt was called jacobian_f the same as the functions whose result it meant to cache if applicable. To distinguish both, the field is now called jacobian_matrices. (#617)
  • the max_stepsize(M) on the SymmetricPositiveDefinite manifold was changed from returning Inf, which is the mathematical maximal stepsize to returning the square root of the maximum (floating point) value to avoid numerical instabilities.
  • title of "How to define the cost in the embedding" tutorial (#615)

Fixed

  • Fixed show methods of various state and stopping criteria to properly handle both repr and multiline printing (#569)
  • Unified all show methods and their human readable analoga status_summary throughout the package (#569)
  • Fixed some text descriptions of a few stopping criteria.
  • unify naming of fields, debugDictionary of the debug state is now called debug_dictionary
  • the NesterovRule now also stores an actual AbstractRetractionMethod instead of implicitly always using the default one.
  • Line searches consistently respect stop_when_stepsize_exceeds keyword argument as a hard limit. (#554)
  • StopWhenChangeLess falsely claimed to indicate convergence. This is now fixed. (#554)
  • miscellaneous broken links in the documentation. (#614)

Removed

  • The extension to JuMP. A replacement as a separate package is planned when the support for variables beyond vectors is more accessible in JuMP
  • the plotting functions to Asymptote. They can now be found in the separate package ManifoldAsymptote.jl
    this way, Manopt.jl has less dependencies, especially the color and colorschemes dependencies are dropped
  • linear_subsolver! = was removed from the LevenbergMarquardt solver interface, since it is imprecise. If you use a closed form solver before, specify it by passing the function to sub_problem and set sub_state to the corresponding evaluation type

Merged pull requests:

Closed issues:

  • Allow specifying a small positive constant as the lower limit of y-s products in QN (#549)
  • Properly add methods to show to have valid repr (#560)