Proximal point method
Manopt.proximal_point — Functionproximal_point(M, prox_f, p=rand(M); kwargs...)
proximal_point(M, mpmo, p=rand(M); kwargs...)
proximal_point!(M, prox_f, p; kwargs...)
proximal_point!(M, mpmo, p; kwargs...)Perform the proximal point algoritm from [FO02] which reads
\[p^{(k+1)} = \operatorname{prox}_{λ_kf}(p^{(k)})\]
Input
M::AbstractManifold: a Riemannian manifold $\mathcal M$prox_f: a proximal map(M,λ,p) -> qor(M, q, λ, p) -> qfor the summands of $f$ (seeevaluation)
Keyword arguments
evaluation=AllocatingEvaluation(): specify whether the functions that return an array, for example a point or a tangent vector, work by allocating its result (AllocatingEvaluation) or whether they modify their input argument to return the result therein (InplaceEvaluation). Since usually the first argument is the manifold, the modified argument is the second.f=nothing: a cost function $f: \mathcal M→ℝ$ to minimize. For running the algorithm, $f$ is not required, but for example when recording the cost or using a stopping criterion that requires a cost function.λ= k -> 1.0: a function returning the (square summable but not summable) sequence of $λ_i$stopping_criterion=StopAfterIteration(200)|StopWhenChangeLess(1e-12)): a functor indicating that the stopping criterion is fulfilled
All other keyword arguments are passed to decorate_state! for state decorators or decorate_objective! for objective decorators, respectively.
Output
The obtained approximate minimizer $p^*$. To obtain the whole final state of the solver, see get_solver_return for details, especially the return_state= keyword.
Manopt.proximal_point! — Functionproximal_point(M, prox_f, p=rand(M); kwargs...)
proximal_point(M, mpmo, p=rand(M); kwargs...)
proximal_point!(M, prox_f, p; kwargs...)
proximal_point!(M, mpmo, p; kwargs...)Perform the proximal point algoritm from [FO02] which reads
\[p^{(k+1)} = \operatorname{prox}_{λ_kf}(p^{(k)})\]
Input
M::AbstractManifold: a Riemannian manifold $\mathcal M$prox_f: a proximal map(M,λ,p) -> qor(M, q, λ, p) -> qfor the summands of $f$ (seeevaluation)
Keyword arguments
evaluation=AllocatingEvaluation(): specify whether the functions that return an array, for example a point or a tangent vector, work by allocating its result (AllocatingEvaluation) or whether they modify their input argument to return the result therein (InplaceEvaluation). Since usually the first argument is the manifold, the modified argument is the second.f=nothing: a cost function $f: \mathcal M→ℝ$ to minimize. For running the algorithm, $f$ is not required, but for example when recording the cost or using a stopping criterion that requires a cost function.λ= k -> 1.0: a function returning the (square summable but not summable) sequence of $λ_i$stopping_criterion=StopAfterIteration(200)|StopWhenChangeLess(1e-12)): a functor indicating that the stopping criterion is fulfilled
All other keyword arguments are passed to decorate_state! for state decorators or decorate_objective! for objective decorators, respectively.
Output
The obtained approximate minimizer $p^*$. To obtain the whole final state of the solver, see get_solver_return for details, especially the return_state= keyword.
State
Manopt.ProximalPointState — TypeProximalPointState{P} <: AbstractGradientSolverStateFields
p::P: a point on the manifold $\mathcal M$ storing the current iteratestop::StoppingCriterion: a functor indicating that the stopping criterion is fulfilledλ: a function for the values of $λ_k$ per iteration(cycle $k$
Constructor
ProximalPointState(M::AbstractManifold; kwargs...)Initialize the proximal point method solver state, where
Input
M::AbstractManifold: a Riemannian manifold $\mathcal M$
Keyword arguments
λ=k -> 1.0a function to compute the $λ_k, k ∈ \mathcal N$,p=rand(M): a point on the manifold $\mathcal M$ to specify the initial valuestopping_criterion=StopAfterIteration(100): a functor indicating that the stopping criterion is fulfilled
See also
- [FO02]
- O. Ferreira and P. R. Oliveira. Proximal point algorithm on Riemannian manifolds. Optimization. A Journal of Mathematical Programming and Operations Research 51, 257–270 (2002).