# Solvers

Solvers can be applied to Problems with solver specific Options.

# List of Algorithms

The following algorithms are currently available

SolverFileProblem & Option
Alternating Gradient Descentalterating_gradient_descent.jlAlternatingGradientProblem, AlternatingGradientDescentOptions
Chambolle-PockChambolle-Pock.jlPrimalDualProblem, ChambollePockOptions
Conjugate Gradient Descentcyclic_proximal_point.jlProximalProblem, CyclicProximalPointOptions
Cyclic Proximal Pointconjugate_gradient_descent.jlGradientProblem, ConjugateGradientDescentOptions
Douglas–RachfordDouglasRachford.jlProximalProblem, DouglasRachfordOptions
Exact Penalty Methodexact_penalty_method.jlConstrainedProblem, ExactPenaltyMethodOptions
Frank-Wolfe algorithmFrankWolfe.jlGradientProblem, FrankWolfeOptions
Gradient Descentgradient_descent.jlGradientProblem, GradientDescentOptions
Nelder-MeadNelderMead.jlCostProblem, NelderMeadOptions
Augmented Lagrangian Methodaugmented_Lagrangian_method.jlConstrainedProblem, AugmentedLagrangianMethodOptions
Particle Swarmparticle_swarm.jlCostProblem, ParticleSwarmOptions
Primal-dual Riemannian semismooth Newton AlgorithmPrimalDualSemismoothNewtonProblem
Quasi-Newton Methodquasi_newton.jlGradientProblem, QuasiNewtonOptions
Steihaug-Toint Truncated Conjugate-Gradient Methodtruncated_conjugate_gradient_descent.jlHessianProblem
Subgradient Methodsubgradient_method.jlSubGradientProblem, SubGradientMethodOptions
Stochastic Gradient Descentstochastic_gradient_descent.jlStochasticGradientProblem, StochasticGradientDescentOptions

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 and recording values.

## Technical Details

The main function a solver calls is

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.

Manopt.get_solver_returnFunction
get_solver_return(O::Options)

determine the result value of a call to a solver. By default this returns the same as get_solver_result, i.e. the last iterate or (approximate) minimizer.

get_solver_return(O::ReturnOptions)

return the internally stored options of the ReturnOptions instead of the minimizer. This means that when the options are decorated like this, the user still has to call get_solver_result on the internal options separately.

source