Cyclic proximal point
The Cyclic Proximal Point (CPP) algorithm aims to minimize
\[f(p) = \sum_{i=1}^c f_i(p)\]
assuming that the proximal maps $\operatorname{prox}_{λ f_i}(p)$ are given in closed form or can be computed efficiently (at least approximately).
The algorithm then cycles through these proximal maps, where the type of cycle might differ and the proximal parameter $λ_k$ changes after each cycle $k$.
For a convergence result on Hadamard manifolds see Bačák [Bac14].
Manopt.cyclic_proximal_point — Function
cyclic_proximal_point(M, f, proxes_f, p; kwargs...)
cyclic_proximal_point(M, mpo, p; kwargs...)
cyclic_proximal_point!(M, f, proxes_f, p; kwargs...)
cyclic_proximal_point!(M, mpo, p; kwargs...)perform a cyclic proximal point algorithm. This can be done in-place of p.
Input
M::AbstractManifold: a Riemannian manifold $\mathcal{M}$f: a cost function $f: \mathcal{M}→ℝ$ to minimizeproxes_f: an Array of proximal maps (Functions)(M,λ,p) -> qor(M, q, λ, p) -> qfor the summands of $f$ (seeevaluation)
where f and the proximal maps proxes_f can also be given directly as a ManifoldProximalMapObjective mpo
Keyword arguments
callbacks::D = Dict{Symbol,Function}(): provided callback functions given either as a single function(symbol, problem, state, k)called in every hook or as a (vector of) pairs:hook => function, which are processed byprocess_callbacks_arg. As key you can either pass single symbol or an array of symbols to indicate a callback should be added in multiple placesevaluation::AbstractEvaluationType=AllocatingEvaluation(): specify whether the functions that return an array, for example a point or a tangent vector, work by allocating their 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.evaluation_order=:Linear: specify whether to use a fixed randomly permuted sequence (:FixedRandom), a per cycle newly permuted sequence (:Random), or the default:Linearorder.λ=k -> 1/k: a function returning the (square summable but not summable) sequence of $λ_k$stopping_criterion::StoppingCriterion=StopAfterIteration(5000)|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.cyclic_proximal_point! — Function
cyclic_proximal_point(M, f, proxes_f, p; kwargs...)
cyclic_proximal_point(M, mpo, p; kwargs...)
cyclic_proximal_point!(M, f, proxes_f, p; kwargs...)
cyclic_proximal_point!(M, mpo, p; kwargs...)perform a cyclic proximal point algorithm. This can be done in-place of p.
Input
M::AbstractManifold: a Riemannian manifold $\mathcal{M}$f: a cost function $f: \mathcal{M}→ℝ$ to minimizeproxes_f: an Array of proximal maps (Functions)(M,λ,p) -> qor(M, q, λ, p) -> qfor the summands of $f$ (seeevaluation)
where f and the proximal maps proxes_f can also be given directly as a ManifoldProximalMapObjective mpo
Keyword arguments
callbacks::D = Dict{Symbol,Function}(): provided callback functions given either as a single function(symbol, problem, state, k)called in every hook or as a (vector of) pairs:hook => function, which are processed byprocess_callbacks_arg. As key you can either pass single symbol or an array of symbols to indicate a callback should be added in multiple placesevaluation::AbstractEvaluationType=AllocatingEvaluation(): specify whether the functions that return an array, for example a point or a tangent vector, work by allocating their 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.evaluation_order=:Linear: specify whether to use a fixed randomly permuted sequence (:FixedRandom), a per cycle newly permuted sequence (:Random), or the default:Linearorder.λ=k -> 1/k: a function returning the (square summable but not summable) sequence of $λ_k$stopping_criterion::StoppingCriterion=StopAfterIteration(5000)|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.CyclicProximalPointState — Type
CyclicProximalPointState <: AbstractManoptSolverStatestores options for the cyclic_proximal_point algorithm. These are the
Fields
callbacks::D: provided callback functions given as a dictionary with symbols as keysp::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$order_type: specify whether to use a fixed randomly permuted sequence (:FixedRandom), a per cycle newly permuted sequence (:Random), or the default:Linearorder.
Constructor
CyclicProximalPointState(M::AbstractManifold; kwargs...)Generate the options
Input
M::AbstractManifold: a Riemannian manifold $\mathcal{M}$
Keyword arguments
callbacks::D = Dict{Symbol,Function}(): provided callback functions given as a dictionary with symbols as keysevaluation_order=:Linear: specify whether to use a fixed randomly permuted sequence (:FixedRandom), a per cycle newly permuted sequence (:Random), or the default:Linearorder.λ=k -> 1.0 / k: a function to compute $λ_k$ for $k ∈ ℕ$,p::P =rand(M): a point on the manifold $\mathcal{M}$ to specify the initial valuestopping_criterion::StoppingCriterion=StopAfterIteration(2000): a functor indicating that the stopping criterion is fulfilled
See also
Technical details
The cyclic_proximal_point solver requires no additional functions to be available for your manifold, besides the ones you use in the proximal maps.
By default, one of the stopping criteria is StopWhenChangeLess, which requires
- An
inverse_retract!(M, X, p, q); it is recommended to set thedefault_inverse_retraction_methodto a favorite inverse retraction. If this default is set, aninverse_retraction_method=does not have to be specified. Alternatively, thedistance(M, p, q)can be used.
Literature
- [Bac14]
- M. Bačák. Computing medians and means in Hadamard spaces. SIAM Journal on Optimization 24, 1542–1566 (2014), arXiv:1210.2145.