# 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_pointFunction
cyclic_proximal_point(M, f, proxes_f, p)
cyclic_proximal_point(M, mpo, p)

perform a cyclic proximal point algorithm.

Input

• M: a manifold $\mathcal M$
• f: a cost function $f:\mathcal M→ℝ$ to minimize
• proxes_f: an Array of proximal maps (Functions) (M,λ,p) -> q or (M, q, λ, p) -> q for the summands of $f$ (see evaluation)
• p: an initial value $p ∈ \mathcal M$

where f and the proximal maps proxes_f can also be given directly as a ManifoldProximalMapObjective mpo

Optional

All other keyword arguments are passed to decorate_state! for decorators or decorate_objective!, respectively. If you provide the ManifoldProximalMapObjective directly, these decorations can still be specified.

Output

the obtained (approximate) minimizer $p^*$, see get_solver_return for details

source
Manopt.cyclic_proximal_point!Function
cyclic_proximal_point!(M, F, proxes, p)
cyclic_proximal_point!(M, mpo, p)

perform a cyclic proximal point algorithm in place of p.

Input

• M: a manifold $\mathcal M$
• F: a cost function $F:\mathcal M→ℝ$ to minimize
• proxes: an Array of proximal maps (Functions) (M, λ, p) -> q or (M, q, λ, p) for the summands of $F$
• p: an initial value $p ∈ \mathcal M$

where f and the proximal maps proxes_f can also be given directly as a ManifoldProximalMapObjective mpo

for all options, see cyclic_proximal_point.

source

## 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

## State

Manopt.CyclicProximalPointStateType
CyclicProximalPointState <: AbstractManoptSolverState

stores options for the cyclic_proximal_point algorithm. These are the

Fields

• p: the current iterate
• stopping_criterion: a StoppingCriterion
• λ: (@(i) -> 1/i) a function for the values of $λ_k$ per iteration(cycle $ì$
• oder_type: (:LinearOrder) whether to use a randomly permuted sequence (:FixedRandomOrder), a per cycle permuted sequence (:RandomOrder) or the default linear one.

Constructor

CyclicProximalPointState(M, p)

Generate the options with the following keyword arguments

• stopping_criterion: (StopAfterIteration(2000)) a StoppingCriterion.
• λ: ( i -> 1.0 / i) a function to compute the $λ_k, k ∈ \mathbb N$,
• evaluation_order: (:LinearOrder) a Symbol indicating the order the proximal maps are applied.

cyclic_proximal_point