A Manopt Problem
A problem describes all static data of an optimisation task and has as a super type
Manopt.AbstractManoptProblem
— TypeAbstractManoptProblem{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$ (cf. ManifoldsBase.jl#AbstractManifold) - the cost function $f\colon \mathcal M → ℝ$
Usually the cost should be within an AbstractManifoldObjective
.
Manopt.get_objective
— Functionget_objective(mp::AbstractManoptProblem)
return the objective AbstractManifoldObjective
stored within an AbstractManoptProblem
.
Manopt.get_manifold
— Functionget_manifold(amp::AbstractManoptProblem)
return the manifold stored within an AbstractManoptProblem
Usually, such a problem is determined by the manifold or domain of the optimisation and the objective with all its properties used within an algorithm – see The Objective. For that we can just use
Manopt.DefaultManoptProblem
— TypeDefaultManoptProblem{TM <: AbstractManifold, Objective <: AbstractManifoldObjective}
Model a default manifold problem, that (just) consists of the domain of optimisation, that is an AbstractManifold
and an AbstractManifoldObjective
The exception to these are the primal dual-based solvers (Chambolle-Pock and the PD Semismooth Newton]), which both need two manifolds as their domain(s), hence thre also exists a
Manopt.TwoManifoldProblem
— TypeTwoManifoldProblem{
MT<:AbstractManifold,NT<:AbstractManifold,O<:AbstractManifoldObjective
} <: AbstractManoptProblem{MT}
An abstract type for primal-dual-based problems.
From the two ingredients here, you can find more information about
- the
AbstractManifold
in ManifoldsBase.jl - the
AbstractManifoldObjective
on the page about the objective.