[Solvers](@id SolversSection)
CurrentModule = Manopt
Solvers can be applied to Problem
s with solver
specific Options
.
List of Algorithms
The following algorithms are currently available
Solver | File | Problem & Option |
---|---|---|
[Alternating Gradient Descent](@ref AlternatingGradientDescentSolver) | alterating_gradient_descent.jl |
AlternatingGradientProblem , AlternatingGradientDescentOptions |
[Chambolle-Pock](@ref ChambollePockSolver) | Chambolle-Pock.jl |
PrimalDualProblem , ChambollePockOptions |
[Cyclic Proximal Point](@ref CPPSolver) | cyclic_proximal_point.jl |
ProximalProblem , CyclicProximalPointOptions |
[Douglas–Rachford](@ref DRSolver) | DouglasRachford.jl |
ProximalProblem , DouglasRachfordOptions |
[Gradient Descent](@ref GradientDescentSolver) | gradient_descent.jl |
GradientProblem , GradientDescentOptions |
[Nelder-Mead](@ref NelderMeadSolver) | NelderMead.jl |
CostProblem , NelderMeadOptions |
[Particle Swarm](@ref ParticleSwarmSolver) | particle_swarm.jl |
CostProblem , ParticleSwarmOptions |
[Quasi-Newton Method](@ref quasiNewton) | quasi_newton.jl |
GradientProblem , QuasiNewtonOptions |
[Subgradient Method](@ref SubgradientSolver) | subgradient_method.jl |
SubGradientProblem , SubGradientMethodOptions |
[Steihaug-Toint Truncated Conjugate-Gradient Method](@ref tCG) | truncated_conjugate_gradient_descent.jl |
HessianProblem , TruncatedConjugateGradientOptions |
[The Riemannian Trust-Regions Solver](@ref trust_regions) | trust_regions.jl |
HessianProblem , TrustRegionsOptions |
Note that the solvers (or their Options
to be precise) can also be decorated to enhance your algorithm by general additional properties, see [debug output](@ref DebugSection) and [recording values](@ref RecordSection).
Technical Details
The main function a solver calls is
solve(p::Problem, o::Options)
which is a framework, that you in general should not change or redefine. It uses the following methods, which also need to be implemented on your own algorithm, if you want to provide one.
initialize_solver!
step_solver!
get_solver_result
stop_solver!(p::Problem, o::Options, i::Int)