About

The purpose of Manopt is to facilitate experimentation with optimization on manifolds, as well as sharing geometries and algorithms.

The Matlab version of Manopt is developed by Nicolas Boumal and Bamdev Mishra. The toolbox originated in 2012 within the RANSO group, led by Pierre-Antoine Absil, Yurii Nesterov and Rodolphe Sepulchre. See also PyManopt.org and Manoptjl.org for information about the Python and Julia versions of Manopt.

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.

The RANSO group organized a one-day workshop on Riemannian and nonsmooth optimization in Louvain-la-Neuve on Sept. 25, 2015. Most people involved with Manopt at the time were present for this delightful day.

Authorship and contributors

The original design, code and documentation of the toolbox is due to Nicolas Boumal. The design of the toolbox was imagined with Pierre Borckmans, who also contributed the PSO solver. The main developers are Nicolas and Bamdev Mishra. The RANSO group (Pierre-Antoine Absil, Yurii Nesterov and Rodolphe Sepulchre) provided helpful support and guidance at the onset.

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.

Hiroyuki Sato contributed the complex version of the Stiefel manifold, stiefelcomplexfactory as well as the complex Grassmann manifold, grassmanncomplexfactory. These geometries are partly exposed in his paper.

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.

Sarod Yatawatta contributed a factory for complex, Hermitian positive semidefinite matrices of fixed rank, symfixedrankYYcomplexfactory. This geometry appears in a paper.

Hiroyuki Kasai, together with Bamdev, contributed fixedrankfactory_tucker_preconditioned, a geometry for tensors in Tucker format with fixed multilinear rank. This and the accompanying example is based on their paper. Both, together with Hiroyuki Sato, also contributed the stochasticgradient solver.

Changshuo Liu contributed the Riemannian limited-memory BFGS solver, rlbfgs.

Margherita Porcelli and Bruno Iannazzo contributed the Barzilai-Borwein solver, barzilaiborwein.

Jesus Briales contributed valuable improvements to the code via pull requests on GitHub.

Ahmed Douik contributed factories for doubly stochastic matrices, symmetric (multinomialsymmetricfactory) and non-symmetric (multinomialdoublystochasticfactory), as well as an example (doubly_stochastic_denoising) and documentation for these.

Naman Agarwal, Brian Bullins and Coralia Cartis, together with Nicolas, contributed an implementation for the new solver arc (adaptive regularization with cubics), and Bryan Zhu contributed the nonlinear CG-based subproblem solver.

Gennadij Heidel contributed a factory for tensors of fixed multilinear rank in Tucker format: fixedranktensorembeddedfactory.

Estelle Massart contributed code to symfixedrankYYfactory.

Ronny Bergmann contributed code to multinomialfactory, added checkinverseretraction, and more.

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.

Quentin Rebjock contributed poincareballfactory, desingularizationfactory, and more.

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.

How to contribute

Please send a pull request on github for all contributions, big and small.

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.

About the website

This website is statically generated with Quarto and uses MathJax to display math.