Optimization Algorithm on Riemannian Manifolds.
For a function
Find the minimizer p on â„ł, i.e. the (or a) point where f attains its minimum.
Manopt.jl
provides
- A framework to implement arbitrary optimization algorithms on Riemannian Manifolds
- A library of optimization algorithms on Riemannian manifolds
- an easy-to-use interface for (debug) output and recording values during an algorithm run.
- several tools to investigate the algorithms, gradients, and optimality criteria
In Julia you can get started by just typing
using Pkg; Pkg.add("Manopt");
and then checkout the Get Started: Optimize! tutorial.
Manopt.jl is based on ManifoldsBase.jl
,
hence the algorithms can be used with any manifold following this interface for defining
a Riemannian manifold.
The following packages are related to Manopt.jl
Manifolds.jl
– a library of manifolds implemented usingManifoldsBase.jl
GitHub repositoryManifoldsDiff.jl
– a package to use (Euclidean) AD tools on manifolds, that also provides several differentials and gradients. GitHub repositoryJuMP.jl
can be used as interface to solve an optimization problem with Manopt. See usage examples. GitHub repository
If you use Manopt.jl
in your work, please cite the following
@article{Bergmann2022,
Author = {Ronny Bergmann},
Doi = {10.21105/joss.03866},
Journal = {Journal of Open Source Software},
Number = {70},
Pages = {3866},
Publisher = {The Open Journal},
Title = {Manopt.jl: Optimization on Manifolds in {J}ulia},
Volume = {7},
Year = {2022},
}
To refer to a certain version or the source code in general we recommend to cite for example
@software{manoptjl-zenodo-mostrecent,
Author = {Ronny Bergmann},
Copyright = {MIT License},
Doi = {10.5281/zenodo.4290905},
Publisher = {Zenodo},
Title = {Manopt.jl},
Year = {2022},
}
for the most recent version or a corresponding version specific DOI, see the list of all versions.
If you are also using Manifolds.jl
please consider to cite
@article{AxenBaranBergmannRzecki:2023,
AUTHOR = {Seth D. Axen and Mateusz Baran and Ronny Bergmann and Krzysztof Rzecki},
DOI = {10.1145/3618296},
EPRINT = {2021.08777},
EPRINTTYPE = {arXiv},
JOURNAL = {AMS Transactions on Mathematical Software},
NOTE = {accepted for publication},
TITLE = {Manifolds.jl: An Extensible {J}ulia Framework for Data Analysis on Manifolds},
YEAR = {2023}
}
as well. Note that all citations are in BibLaTeX format.
Manopt.jl
belongs to the Manopt family:
- manopt.org – The Matlab version of Manopt, see also their GitHub repository
- pymanopt.org – The Python version of Manopt – providing also several AD backends, see also their GitHub repository
but there are also more packages providing tools on manifolds:
- Jax Geometry (Python/Jax) for differential geometry and stochastic dynamics with deep learning
- Geomstats (Python with several backends) focusing on statistics and machine learning GitHub repository
- Geoopt (Python & PyTorch) – Riemannian ADAM & SGD. GitHub repository
- McTorch (Python & PyToch) – Riemannian SGD, Adagrad, ASA & CG.
- ROPTLIB (C++) a Riemannian OPTimization LIBrary GitHub repository
- TF Riemopt (Python & TensorFlow) Riemannian optimization using TensorFlow
Did you use Manopt.jl
somewhere? Let us know! We'd love to collect those here as well.