The toolbox is stable and can be used right away. Being research software, it is also perpetually work in progress. We welcome contributions, bug reports and feedback. Let us know what you think!
If you use the Matlab version of Manopt, please cite the paper. Notice the ‘o’ in Manopt is lowercase.
@Article{manopt, author = {Boumal, N. and Mishra, B. and Absil, P.-A. and Sepulchre, R.}, journal = {Journal of Machine Learning Research}, title = {{M}anopt, a {M}atlab Toolbox for Optimization on Manifolds}, year = {2014}, number = {42}, pages = {1455--1459}, volume = {15}, url = {https://www.manopt.org}}
Researchers develop new solvers and geometries all the time. It is important for them that their work be credited properly. Please cite the relevant papers for the solvers and geometries you are using, as they may have been contributed by different authors. See the comments at the beginning of the m-files for instructions. Likewise, please cite the PyManopt and Manopt.jl papers if you use the Python or Julia versions. Thank you.
Manopt won the ORBEL Wolsey Award 2014 for best operational research software developed as part of a PhD thesis.
This work is supported during 2022–2027 by the Swiss State Secretariat for Education, Research and Innovation (SERI) under contract number MB22.00027.
The GenRTR code by Chris Baker, Pierre-Antoine Absil and Kyle Gallivan was modified to become the trustregions solver. The latter is arguably the most important solver in the toolbox so far, hence Chris and his colleagues merit special credit. We thank them for releasing their excellent software under an open source license, which allowed us to build upon it.
Bart Vandereycken helped a lot in revising the geometry file fixedrankembeddedfactory, as per his paper. Eitan Levin added some numerical tweaks to the retraction that make it more robust close to “the brink” (matrices of lower rank), though also a bit slower to compute.
Roberto Tron contributed code for Riemannian geometries of the essential manifold, an important manifold in computer vision to handle relative camera information. He describes this geometry in his paper with Kostas Daniilidis.
Michael Psenka contributed the code for optimization over tensors with fixed tensor-train rank, accessible through fixedTTrankfactory, together with an example script. This geometry heavily relies on TTeMPS for all core functionalities except second-order optimization (specifically, M.ehess2rhess). TTeMPS is code distributed by Michael Steinlechner, Daniel Kressner and Bart Vandereycken. We thank them for releasing their excellent software under an open source license, which allowed us to build upon it. It is packaged in Manopt with small modifications.
Xiaowen Jiang worked in the group of Nicolas during the summer of 2021 to add support for automatic differentiation, based on Matlab’s Deep Learning Toolbox. This fantastic feature aligns well with Manopt’s overarching goal: to lower the entrance barrier for people who would like to give Riemannian optimization a try. It is available via manoptAD. Thanks a lot, Xiaowen!
Niklas Koep (sinxoverx), Nick Vannieuwenhoven (Storey-Liu for CG), Spencer Kraisler (Rodrigues formula, Lie identity), sfrcorne (rlbfgs invariant to positive scaling) brought welcome improvements after discussions on the github repo page.
Victor Liao worked on Manopt in the group of Nicolas during the summer of 2022 and contributed: a long-awaited refactoring of the trustregions solver to allow for various subproblem solvers, a rewrite of the truncated CG (tCG) subproblem solver to improve performance by recycling computations after a step rejection, a new global subproblem solver based on code by Yuji Nakatsukasa, a constant step-size line-search helper for gradient methods, a Lanczos-based TR subproblem solver, and various improvements (e.g., to tangentorthobasis).
Andreea Muşat contributed several improvements to solvers and factories.
Ivan Bioli added support for \(\beta\)-type rules and fixed Liu-Storey rule in conjugategradient.
Below are some third-party open-source codes that are or were used at some point:
The multitransp / multiprod pair is code by Paolo de Leva (no longer used: multiprod now calls pagemtimes);
multitrace is a wrapper around diagsum, which is code by Wynton Moore ;
The hashmd5 tool is a stripped version of more general hashing code (no longer available) by Michael Kleder. It is no longer used.
Manopt is meant to ease the sharing of geometries and solvers. If you developed a Riemannian geometry, a solver or some other tool for optimization on manifolds and would like it to be featured in Manopt,
You should include:
An implementation of your manifold / solver / tool in the Manopt format.
An example script to illustrate its features.
Ample in-code documentation.
We will gladly help: discussions can take place along your PR on github or prior to that on the forum.
The documentation page as well as the code will, of course, visibly reflect the authors of the contribution as well as relevant publications.
Contributors agree to the terms of the Contributor License Agreement. This agreement protects you as a contributor by making it clear that you retain your right to use your own contributions for any other purpose (you retain the copyrights). This agreement protects us as maintainers by authorizing us to distribute the toolbox under a unified license.
License
Manopt, a Matlab toolbox for optimization on manifolds, is copyright by Nicolas Boumal and is distributed under the terms of the GNU General Public License (GPL) version 3 (or later). Contributed and third-party code is copyrighted by their respective authors, but is distributed under a unified license for the whole Manopt toolbox.
In short, this means that everyone is free to use Manopt, to modify it and to redistribute it on a free basis. Manopt is not in the public domain; it is copyrighted and there are restrictions on its distribution (see the license and the related frequently asked questions). For example, you cannot integrate this version of Manopt (in full or in parts) in any closed-source software you plan to distribute (commercially or not). Please contact us for more information.
The documentation of Manopt (this website) is copyright by Nicolas Boumal, all rights reserved.
Related software
Manopt exists in three versions (which differ significantly):
Manopt itself usually refers to the Matlab version (this website).
PyManopt is a Python version led by Jamie Townsend, Niklas Koep and Sebastian Weichwald.
Manopt.jl is a Julia version led by Ronny Bergmann.
You may also be interested in the following:
GenRTR is the Generic Riemannian Trust-Region package for Matlab (it is included in modified form in Manopt).
ROPTLIB is a Riemannian optimization package in C++ (with mex interface to Matlab), by Wen Huang and Kyle Gallivan ; Ankit Rathore started a Python version.