Welcome to Manopt.jl
Manopt.Manopt
— Module🏔️ Manopt.jl: optimization on Manifolds in Julia.
- 📚 Documentation: manoptjl.org
- 📦 Repository: github.com/JuliaManifolds/Manopt.jl
- 💬 Discussions: github.com/JuliaManifolds/Manopt.jl/discussions
- 🎯 Issues: github.com/JuliaManifolds/Manopt.jl/issues
For a function $f:\mathcal M → ℝ$ defined on a Riemannian manifold $\mathcal M$ algorithms in this package aim to solve
\[\operatorname*{argmin}_{p ∈ \mathcal M} f(p),\]
or in other words: find the point $p$ on the manifold, where $f$ reaches its minimal function value.
Manopt.jl
provides a framework for optimization on manifolds as well as a Library of optimization algorithms in Julia. It belongs to the “Manopt family”, which includes Manopt (Matlab) and pymanopt.org (Python).
If you want to delve right into Manopt.jl
read the 🏔️ Get started: optimize. tutorial.
Manopt.jl
makes it easy to use an algorithm for your favourite manifold as well as a manifold for your favourite algorithm. It already provides many manifolds and algorithms, which can easily be enhanced, for example to record certain data or debug output throughout iterations.
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 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}
}
Note that both citations are in BibLaTeX format.
Main features
Optimization algorithms (solvers)
For every optimization algorithm, a solver is implemented based on a AbstractManoptProblem
that describes the problem to solve and its AbstractManoptSolverState
that set up the solver, and stores values that are required between or for the next iteration. Together they form a plan.
Manifolds
This project is build upon ManifoldsBase.jl, a generic interface to implement manifolds. Certain functions are extended for specific manifolds from Manifolds.jl, but all other manifolds from that package can be used here, too.
The notation in the documentation aims to follow the same notation from these packages.
Visualization
To visualize and interpret results, Manopt.jl
aims to provide both easy plot functions as well as exports. Furthermore a system to get debug during the iterations of an algorithms as well as record capabilities, for example to record a specified tuple of values per iteration, most prominently RecordCost
and RecordIterate
. Take a look at the 🏔️ Get started: optimize. tutorial on how to easily activate this.
Literature
If you want to get started with manifolds, one book is [Car92], and if you want do directly dive into optimization on manifolds, good references are [AMS08] and [Bou23], which are both available online for free
- [AMS08]
- P.-A. Absil, R. Mahony and R. Sepulchre. Optimization Algorithms on Matrix Manifolds (Princeton University Press, 2008), available online at press.princeton.edu/chapters/absil/.
- [Bou23]
- N. Boumal. An Introduction to Optimization on Smooth Manifolds. First Edition (Cambridge University Press, 2023).
- [Car92]
- M. P. do Carmo. Riemannian Geometry. Mathematics: Theory & Applications (Birkhäuser Boston, Inc., Boston, MA, 1992); p. xiv+300.