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
Cyclic Proximal Pointcyclic_proximal_point.jlProximalProblem, CyclicProximalPointOptions
Douglas–RachfordDouglasRachford.jlProximalProblem, DouglasRachfordOptions
Gradient Descentgradient_descent.jlGradientProblem, GradientDescentOptions
Frank-Wolfe algorithmFrankWolfe.jlGradientProblem, FrankWolfeOptions
Nelder-MeadNelderMead.jlCostProblem, NelderMeadOptions
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 Method

TruncatedConjugateGradientOptions The Riemannian Trust-Regions Solver | 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 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.