Proximal bundle method
Manopt.proximal_bundle_method — Functionproximal_bundle_method(M, f, ∂f, p=rand(M), kwargs...)
proximal_bundle_method!(M, f, ∂f, p, kwargs...)perform a proximal bundle method $p^{(k+1)} = \operatorname{retr}_{p^{(k)}}(-d_k)$, where $\operatorname{retr}$ is a retraction and
\[d_k = \frac{1}{\mu_k} \sum_{j\in J_k} λ_j^k \mathrm{P}_{p_k←q_j}X_{q_j},\]
with $X_{q_j} ∈ ∂f(q_j)$, $p_k$ the last serious iterate, $\mu_k$ a proximal parameter, and the $λ_j^k$ as solutions to the quadratic subproblem provided by the sub solver, see for example the proximal_bundle_method_subsolver.
Though the subdifferential might be set valued, the argument ∂f should always return one element from the subdifferential, but not necessarily deterministic.
For more details see [HNP23].
Input
M::AbstractManifold: a Riemannian manifold $\mathcal M$f: a cost function $f: \mathcal M→ ℝ$ implemented as(M, p) -> v∂f: a state to specify the sub solver to use. For a closed form solution, this indicates the type of function.p: a point on the manifold $\mathcal M$
Keyword arguments
α₀=1.2: initialization value forα, used to updateηbundle_size=50: the maximal size of the bundleδ=1.0: parameter for updatingμ: if $δ < 0$ then $μ = \log(i + 1)$, else $μ += δ μ$ε=1e-2: stepsize-like parameter related to the injectivity radius of the manifoldevaluation=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.inverse_retraction_method=default_inverse_retraction_method(M, typeof(p)): an inverse retraction $\operatorname{retr}^{-1}$ to use, see the section on retractions and their inversesm=0.0125: a real number that controls the decrease of the cost functionμ=0.5: initial proximal parameter for the subproblemretraction_method=default_retraction_method(M, typeof(p)): a retraction $\operatorname{retr}$ to use, see the section on retractionsstopping_criterion=StopWhenLagrangeMultiplierLess(1e-8)|StopAfterIteration(5000): a functor indicating that the stopping criterion is fulfilledsub_problem=proximal_bundle_method_subsolver`: specify a problem for a solver or a closed form solution function, which can be allocating or in-place.sub_state=AllocatingEvaluation: a state to specify the sub solver to use. For a closed form solution, this indicates the type of function.vector_transport_method=default_vector_transport_method(M, typeof(p)): a vector transport $\mathcal T_{⋅←⋅}$ to use, see the section on vector transports
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_bundle_method! — Functionproximal_bundle_method(M, f, ∂f, p=rand(M), kwargs...)
proximal_bundle_method!(M, f, ∂f, p, kwargs...)perform a proximal bundle method $p^{(k+1)} = \operatorname{retr}_{p^{(k)}}(-d_k)$, where $\operatorname{retr}$ is a retraction and
\[d_k = \frac{1}{\mu_k} \sum_{j\in J_k} λ_j^k \mathrm{P}_{p_k←q_j}X_{q_j},\]
with $X_{q_j} ∈ ∂f(q_j)$, $p_k$ the last serious iterate, $\mu_k$ a proximal parameter, and the $λ_j^k$ as solutions to the quadratic subproblem provided by the sub solver, see for example the proximal_bundle_method_subsolver.
Though the subdifferential might be set valued, the argument ∂f should always return one element from the subdifferential, but not necessarily deterministic.
For more details see [HNP23].
Input
M::AbstractManifold: a Riemannian manifold $\mathcal M$f: a cost function $f: \mathcal M→ ℝ$ implemented as(M, p) -> v∂f: a state to specify the sub solver to use. For a closed form solution, this indicates the type of function.p: a point on the manifold $\mathcal M$
Keyword arguments
α₀=1.2: initialization value forα, used to updateηbundle_size=50: the maximal size of the bundleδ=1.0: parameter for updatingμ: if $δ < 0$ then $μ = \log(i + 1)$, else $μ += δ μ$ε=1e-2: stepsize-like parameter related to the injectivity radius of the manifoldevaluation=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.inverse_retraction_method=default_inverse_retraction_method(M, typeof(p)): an inverse retraction $\operatorname{retr}^{-1}$ to use, see the section on retractions and their inversesm=0.0125: a real number that controls the decrease of the cost functionμ=0.5: initial proximal parameter for the subproblemretraction_method=default_retraction_method(M, typeof(p)): a retraction $\operatorname{retr}$ to use, see the section on retractionsstopping_criterion=StopWhenLagrangeMultiplierLess(1e-8)|StopAfterIteration(5000): a functor indicating that the stopping criterion is fulfilledsub_problem=proximal_bundle_method_subsolver`: specify a problem for a solver or a closed form solution function, which can be allocating or in-place.sub_state=AllocatingEvaluation: a state to specify the sub solver to use. For a closed form solution, this indicates the type of function.vector_transport_method=default_vector_transport_method(M, typeof(p)): a vector transport $\mathcal T_{⋅←⋅}$ to use, see the section on vector transports
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.ProximalBundleMethodState — TypeProximalBundleMethodState <: AbstractManoptSolverStatestores option values for a proximal_bundle_method solver.
Fields
α: curvature-dependent parameter used to updateηα₀: initialization value forα, used to updateηapprox_errors: approximation of the linearization errors at the last serious stepbundle: bundle that collects each iterate with the computed subgradient at the iteratebundle_size: the maximal size of the bundlec: convex combination of the approximation errorsd: descent directionδ: parameter for updatingμ: if $δ < 0$ then $μ = \log(i + 1)$, else $μ += δ μ$ε: stepsize-like parameter related to the injectivity radius of the manifoldη: curvature-dependent term for updating the approximation errorsinverse_retraction_method::AbstractInverseRetractionMethod: an inverse retraction $\operatorname{retr}^{-1}$ to use, see the section on retractions and their inversesλ: convex coefficients that solve the subproblemm: the parameter to test the decrease of the costμ: (initial) proximal parameter for the subproblemν: the stopping parameter given by $ν = - μ |d|^2 - c$p::P: a point on the manifold $\mathcal M$ storing the current iteratep_last_serious: last serious iterateretraction_method::AbstractRetractionMethod: a retraction $\operatorname{retr}$ to use, see the section on retractionsstop::StoppingCriterion: a functor indicating that the stopping criterion is fulfilledtransported_subgradients: subgradients of the bundle that are transported top_last_seriousvector_transport_method::AbstractVectorTransportMethodP: a vector transport $\mathcal T_{⋅←⋅}$ to use, see the section on vector transportsX::T: a tangent vector at the point $p$ on the manifold $\mathcal M$storing a subgradient at the current iteratesub_problem::Union{AbstractManoptProblem, F}: specify a problem for a solver or a closed form solution function, which can be allocating or in-place.sub_state::Union{AbstractManoptProblem, F}: a state to specify the sub solver to use. For a closed form solution, this indicates the type of function.
Constructor
ProximalBundleMethodState(M::AbstractManifold, sub_problem, sub_state; kwargs...)
ProximalBundleMethodState(M::AbstractManifold, sub_problem=proximal_bundle_method_subsolver; evaluation=AllocatingEvaluation(), kwargs...)Generate the state for the proximal_bundle_method on the manifold M
Keyword arguments
α₀=1.2bundle_size=50δ=1.0ε=1e-2μ=0.5m=0.0125retraction_method=default_retraction_method(M, typeof(p)): a retraction $\operatorname{retr}$ to use, see the section on retractionsinverse_retraction_method=default_inverse_retraction_method(M, typeof(p)): an inverse retraction $\operatorname{retr}^{-1}$ to use, see the section on retractions and their inversesp=rand(M): a point on the manifold $\mathcal M$ to specify the initial valuestopping_criterion=StopWhenLagrangeMultiplierLess(1e-8)|StopAfterIteration(5000): a functor indicating that the stopping criterion is fulfilledsub_problem=proximal_bundle_method_subsolver`: specify a problem for a solver or a closed form solution function, which can be allocating or in-place.sub_state=AllocatingEvaluation: a state to specify the sub solver to use. For a closed form solution, this indicates the type of function.vector_transport_method=default_vector_transport_method(M, typeof(p)): a vector transport $\mathcal T_{⋅←⋅}$ to use, see the section on vector transportsX=zero_vector(M, p)specify the type of tangent vector to use.
Helpers and internal functions
Manopt.proximal_bundle_method_subsolver — Functionλ = proximal_bundle_method_subsolver(M, p_last_serious, μ, approximation_errors, transported_subgradients)
proximal_bundle_method_subsolver!(M, λ, p_last_serious, μ, approximation_errors, transported_subgradients)solver for the subproblem of the proximal bundle method.
The subproblem for the proximal bundle method is
\[\begin{align*} \operatorname*{arg\,min}_{λ ∈ ℝ^{\lvert L_l \rvert} & \frac{1}{2 μ_l} \Bigl \lVert \sum_{j ∈ L_l}^{} λ_j \mathrm{P}_{p_k←q_j} X_{q_j}\Bigr Vert^2 + \sum_{j ∈ L_l}^{} "λ_j \, c_j^k \\ \text{s. t.} \quad & \sum_{j ∈ L_l}^{} λ_j = 1, \quad λ_j ≥ 0 \quad \text{for all } j ∈ L_l, \end{align*}\]
where $L_l = \{k\}$ if $q_k$ is a serious iterate, and $L_l = L_{l-1} ∪ \{k\}$ otherwise. See [HNP23].
A default subsolver based on RipQP.jl and QuadraticModels is available if these two packages are loaded.
Literature
- [HNP23]
- N. Hoseini Monjezi, S. Nobakhtian and M. R. Pouryayevali. A proximal bundle algorithm for nonsmooth optimization on Riemannian manifolds. IMA Journal of Numerical Analysis 43, 293–325 (2023).