Skip to content
Permalink
master
Switch branches/tags
Go to file
 
 
Cannot retrieve contributors at this time

[Solvers](@id SolversSection)

CurrentModule = Manopt

Solvers can be applied to Problems 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)