Manopt is developed by Nicolas Boumal and Bamdev Mishra. The toolbox originated as a project of the RANSO group, led by Pierre-Antoine Absil, Yurii Nesterov and Rodolphe Sepulchre. The purpose of Manopt is to facilitate experimentation with optimization on manifolds, as well as sharing geometries and algorithms. This blog post gives a quick tour.

A reference book for optimization on manifolds is Optimization Algorithms on Matrix Manifolds, which is available online for free.

This toolbox is stable and can be used right away. Being research software, it is also work in progress. We welcome contributions, bug reports and feedback. Let us know what you think!

If you use the toolbox, please cite the Manopt paper published in the Journal of Machine Learning Research (notice the 'o' in Manopt is lowercase):

  author  = {Boumal, N. and Mishra, B. and Absil,
P.-A. and Sepulchre, R.},
  title   = {{M}anopt, a {M}atlab Toolbox for Optimization on Manifolds},
  journal = {Journal of Machine Learning Research},
  year    = {2014},
  volume  = {15},
  pages   = {1455--1459},
  url     = {}

Solvers and geometries are being developed by researchers 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. 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 were present for this delightful day. See picture below.

RANSO Workshop, Sept. 25, 2015

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) provides helpful support and guidance.

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, Low-Rank Matrix Completion by Riemannian Optimization.

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 Riemannian conjugate gradient method for complex singular value decomposition problem.

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, On the quotient representation for the essential manifold.

Sarod Yatawatta contributed a factory for complex, Hermitian positive semidefinite matrices of fixed rank, symfixedrankYYcomplexfactory. This geometry appears in his paper, Radio interferometric calibration using a Riemannian manifold.

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, Riemannian preconditioning for tensor completion. 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 a few improvements to the code via pull requests on GitHub.

Here is a list of open-source code that proved useful to develop the toolbox:

  • The multitransp / multiprod pair is code by Paolo de Leva ;
  • multitrace is a wrapper around diagsum, which is code by Wynton Moore ;
  • The hashmd5 core tool is a stripped version of more general hashing code by Michael Kleder (not available anymore).

We see a growing number of papers in various disciplines where researchers use Manopt. A list is available on Google Scholar. We single out a few projects we think illustrate some of the flexibility of the toolbox:

  • Artiom Kovnatsky, Klaus Glashoff and Michael M. Bronstein proposed MADMM: a generic algorithm for non-smooth optimization on manifolds. This is essentially ADMM, where one of the steps is smooth optimization on a manifold ; that step is performed using Manopt.
  • Reshad Hosseini and Suvrit Sra released a paper entitled Manifold Optimization for Gaussian Mixture Models. They address the important problem of estimating the distribution of data, when it is assumed to be sampled from a mixture (linear combination) of Gaussian distributions. See their MixEst project page for code and more. The same authors also developed the Geometric Optimization Toolbox (GOPT), aimed at optimization over the manifold of positive definite matrices. This includes a Riemannian BFGS algorithm.
  • Vris Yuen-Lam Cheung, Dmitriy Drusvyatskiy, Nathan Krislock and Henry Wolkowicz consider a sensor network localization problem. They propose a smart way of obtaining a cheap initial guess, then refine this ballpark estimate to high accuracy with Manopt. They find that neither works very well without the other. The general idea of combining smart spectral or convex formulations to obtain rough (but controllable) estimates, then refining these using Manopt, is successful in many applications.
  • David Rosen, Luca Carlone, Afonso Bandeira and John Leonard use Manopt for synchronization over the special Euclidean group, which they use to tackle simultaneous localization and mapping in robotics. Their code is on GitHub and it can sometimes produce optimality certificates, on real data, despite non-convexity.

Manopt is meant to ease the sharing of geometries and solvers. If you developed a Riemannian geometry or a solver for optimization on manifolds and would like it to be featured in Manopt, please contact us.

We will ask for an implementation of your manifold / solver in the Manopt format and an example script to illustrate its features. The documentation page as well as the code will, of course, visibly reflect the authors of the contribution. The documentation will feature links to their personal pages and relevant publications. We will gladly help.

Contributors will be asked to 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.

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.

A number of tools have proven invaluable for putting together this website and, most importantly, the documentation: