High-level interfaces
While the internal structure of a manifold, an objective wrapped in a problem and a state allows for modular access, one should have an “easy access” that handles several things (semi-) automatically.
These are referred to as the high-level interfaces throughout this documentation. For example gradient_descent(M, f, grad_f; kwargs...) builds the just-mentioned internal structures based on providing a manifold M, a cost function f and a gradient grad_f.
By default these return the computed minimizer of the objective.
These interfaces are also unified to accept
- a
callbacks=keyword to attach callback functions at specific points during a solver run - a
debug=keyword to add debug output - an
evaluation=keyword to specify whether, for example, the gradient can be computed in-place, see the function section. - a
record=keyword to record elements - a
return_objective=keyword to return the objective in addition to the minimizer or state – for example to access function call statistics. - a
return_state=keyword to return the full solver state instead of just the minimizer, for example to access its fields afterwards - an
objective_type=keyword to specify gradients or Hessians to be:Euclideanand automatically convert them to Riemannian ones
Additionally there are several keyword arguments, for example for solvers with sub solvers sub_problem= and sub_state= to specify which solvers to use in these. These are then passed to the solver state upon construction.