<div align="center"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/JuliaManifolds/Manopt.jl/master/docs/src/assets/logo-text-readme-dark.png"> <img alt="Manifolds.jl logo with text on the side" src="https://raw.githubusercontent.com/JuliaManifolds/Manopt.jl/master/docs/src/assets/logo-text-readme.png"> </picture> </div>
Optimization Algorithm on Riemannian Manifolds.
For a function $f: ℳ → ℝ$ that maps from a Riemannian manifold ℳ to the real line, this package aims to solve
Find the minimizer p on ℳ, that is, 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
Getting started
In Julia you can get started by just typing
using Pkg; Pkg.add("Manopt");and then checkout the 🏔️ Get started with Manopt.jl tutorial.
You can also watch an introduction given at JuliaCon 2022
or look at the slides from the presentation here.
Related packages
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:octocat: GitHub repositoryManifoldsDiff.jl: a package to use (Euclidean) AD tools on manifolds, that also provides several differentials and gradients. :octocat: GitHub repositoryJuMP.jl: can be used as interface to solve an optimization problem with Manopt. See usage examples. :octocat: GitHub repository
Citation
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 please cite for example
@software{manoptjl-zenodo-mostrecent,
Author = {Ronny Bergmann},
Copyright = {MIT License},
Doi = {10.5281/zenodo.4290905},
Publisher = {Zenodo},
Title = {Manopt.jl},
Year = {2024},
}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 = {Axen, Seth D. and Baran, Mateusz and Bergmann, Ronny and Rzecki, Krzysztof},
ARTICLENO = {33},
DOI = {10.1145/3618296},
JOURNAL = {ACM Transactions on Mathematical Software},
MONTH = {dec},
NUMBER = {4},
TITLE = {Manifolds.jl: An Extensible Julia Framework for Data Analysis on Manifolds},
VOLUME = {49},
YEAR = {2023}
}as well. Note that all citations are in BibLaTeX format.
Manopt.jl belongs to the Manopt family:
- www.manopt.org: the MATLAB version of Manopt, see also their :octocat: GitHub repository
- www.pymanopt.org: the Python version of Manopt—providing also several AD backends, see also their :octocat: GitHub repository
Did you use Manopt.jl somewhere? Let us know! We'd love to collect those here as well.