<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: optimize! tutorial.
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.