The Manopt.jl problem
An AbstractManoptProblem contains the manifold (domain) a problem is defined on and the objective that is to be minimized on that manifold. It can contain further elements, when this is necessary to phrase the problem.
Abstract problem
Manopt.AbstractManoptProblem — Type
AbstractManoptProblem{M<:AbstractManifold}Describe a Riemannian optimization problem with all static (not-changing) properties.
The most prominent features that should always be stated here are
- the
AbstractManifold$\mathcal{M}$ - the cost function $f: \mathcal{M} → ℝ$
Usually the cost should be within an AbstractManifoldObjective.
Access functions
Manopt.get_cost — Method
get_cost(amp::AbstractManoptProblem, p)Evaluate the cost function f stored within the AbstractManifoldObjective of an AbstractManoptProblem amp at the point p.
Manopt.get_gradient — Method
get_gradient(amp::AbstractManoptProblem, p)
get_gradient!(amp::AbstractManoptProblem, X, p)Evaluate the gradient of an AbstractManoptProblem amp at the point p.
This can also be computed in-place of X for the !-variant.
Manopt.get_hessian — Method
Y = get_hessian(amp::AbstractManoptProblem, p, X)
get_hessian!(amp::AbstractManoptProblem, Y, p, X)Evaluate the Hessian of an AbstractManoptProblem amp at p applied to a tangent vector X, computing $\operatorname{Hess}f(p)[X]$, which can also happen in-place of Y.
Manopt.get_manifold — Method
get_manifold(amp::AbstractManoptProblem)Return the manifold stored within an AbstractManoptProblem.
Manopt.get_objective — Method
get_objective(mp::AbstractManoptProblem, recursive=false)Return the objective AbstractManifoldObjective stored within an AbstractManoptProblem. If recursive is set to true, it additionally unwraps all decorators of the objective.
Manopt.get_preconditioner — Method
get_preconditioner(amp::AbstractManoptProblem, p, X)Evaluate the preconditioner of the objective of the AbstractManoptProblem amp at the point p, applied to the tangent vector X.
It usually is a symmetric, positive definite approximation of the inverse of the Hessian of the cost function f.
Manopt.get_subtrahend_gradient — Method
X = get_subtrahend_gradient(amp, p)
get_subtrahend_gradient!(amp, X, p)Evaluate the (sub)gradient of the subtrahend h from within the ManifoldDifferenceOfConvexObjective of an AbstractManoptProblem amp at the point p.
The evaluation is done in place of X for the !-variant. An objective using AllocatingEvaluation might still allocate memory within. When the non-mutating variant is called with an InplaceEvaluation, memory for the result is allocated.
Manopt.set_parameter! — Method
set_parameter!(amp::AbstractManoptProblem, element::Symbol, field::Symbol, value)Set a certain field/element from the AbstractManoptProblem amp to value. This function usually dispatches on Val(element). Instead of a single field, also a chain of elements can be provided, allowing access to encapsulated parts of the problem.
Main values for element are :Manifold and :Objective.
From the two ingredients here, you can find more information about
- the
ManifoldsBase.AbstractManifoldin ManifoldsBase.jl - the
AbstractManifoldObjectiveon the page about the objective.