Cyclic proximal point
The Cyclic Proximal Point (CPP) algorithm aims to minimize
\[F(x) = \sum_{i=1}^c f_i(x)\]
assuming that the proximal maps $\operatorname{prox}_{λ f_i}(x)$ 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
— Functioncyclic_proximal_point(M, f, proxes_f, p; kwargs...)
cyclic_proximal_point(M, mpo, p; kwargs...)
cyclic_proximal_point!(M, f, proxes_f; kwargs...)
cyclic_proximal_point!(M, mpo; 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 (Function
s)(M,λ,p) -> q
or(M, q, λ, p) -> q
for the summands of $f$ (seeevaluation
)
where f
and the proximal maps proxes_f
can also be given directly as a ManifoldProximalMapObjective
mpo
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.evaluation_order=:Linear
: whether to use a randomly permuted sequence (:FixedRandom
:, a per cycle permuted sequence (:Random
) or the default linear one.λ=iter -> 1/iter
: a function returning the (square summable but not summable) sequence of $λ_i$stopping_criterion=
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!
— Functioncyclic_proximal_point(M, f, proxes_f, p; kwargs...)
cyclic_proximal_point(M, mpo, p; kwargs...)
cyclic_proximal_point!(M, f, proxes_f; kwargs...)
cyclic_proximal_point!(M, mpo; 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 (Function
s)(M,λ,p) -> q
or(M, q, λ, p) -> q
for the summands of $f$ (seeevaluation
)
where f
and the proximal maps proxes_f
can also be given directly as a ManifoldProximalMapObjective
mpo
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.evaluation_order=:Linear
: whether to use a randomly permuted sequence (:FixedRandom
:, a per cycle permuted sequence (:Random
) or the default linear one.λ=iter -> 1/iter
: a function returning the (square summable but not summable) sequence of $λ_i$stopping_criterion=
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.
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 either requires
- An
inverse_retract!
(M, X, p, q)
; it is recommended to set thedefault_inverse_retraction_method
to a favourite retraction. If this default is set, ainverse_retraction_method=
orinverse_retraction_method_dual=
(for $\mathcal N$) does not have to be specified or thedistance
(M, p, q)
for said default inverse retraction.
State
Manopt.CyclicProximalPointState
— TypeCyclicProximalPointState <: AbstractManoptSolverState
stores options for the cyclic_proximal_point
algorithm. These are the
Fields
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$oder_type
: whether to use a randomly permuted sequence (:FixedRandomOrder
), a per cycle permuted sequence (:RandomOrder
) or the default linear one.
Constructor
CyclicProximalPointState(M::AbstractManifold; kwargs...)
Generate the options
Input
M::
AbstractManifold
: a Riemannian manifold $\mathcal M$
Keyword arguments
evaluation_order=:LinearOrder
: soecify theorder_type
λ=i -> 1.0 / i
a 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
(2000)
: a functor indicating that the stopping criterion is fulfilled
See also
Debug functions
Manopt.DebugProximalParameter
— TypeDebugProximalParameter <: DebugAction
print the current iterates proximal point algorithm parameter given by AbstractManoptSolverState
s o.λ
.
Record functions
Manopt.RecordProximalParameter
— TypeRecordProximalParameter <: RecordAction
record the current iterates proximal point algorithm parameter given by in AbstractManoptSolverState
s o.λ
.
Literature
- [Bac14]
- M. Bačák. Computing medians and means in Hadamard spaces. SIAM Journal on Optimization 24, 1542–1566 (2014), arXiv:1210.2145.