Welcome to Manopt.jl


Manopt.jl – Optimization on Manifolds in Julia.


For a function $f\colon\mathcal M \to \mathbb R$ defined on a Riemannian manifold $\mathcal M$ we aim to solve

\[\operatorname*{argmin}_{x\in\mathcal M} f(x),\]

or in other words: find the point $x$ on the manifold, where $f$ reaches its minimal function value.

Manopt.jl provides a framework for optimization on manifolds. Based on Manopt and MVIRT, both implemented in Matlab, this toolbox provide an easy access to optimization methods on manifolds for Julia, including example data and visualization methods.

If you want to delve right into Manopt.jl check out the Getting Started: Optimize! tutorial.

Manopt.jl makes it easy to use an algorithm for your favorite manifold as well as a manifold for your favorite algorithm. It already provides many manifolds and algorithms, which can easily be enhanced, for example to record certain data or display information throughout iterations.

Main Features

1. Manifolds Manifolds consist of three elements: a Manifold type that stores general information about the manifold, for example a name, or for example in order to generate a randomMPoint, an MPoint storing data to represent a point on the manifold, for example a vector or a matrix, and a TVector string data to represent a point in a tangent space $T_x\mathcal M$ of such an MPoint. If a manifold has certain properties, for example if it is a matrix manifold or a Lie group, see for example the binary operator . For a list of available manifolds, see the list of manifolds

2. Functions on Manifolds Several functions are available, implemented on an arbitrary manifold, cost functions, differentials, and gradients as well as proximal maps, but also several jacobi Fields and their adjoints.

3. Optimization Algorithms (Solvers) For every optimization algorithm, a solver is implemented based on a Problem that describes the problem to solve and its Options that set up the solver, store interims values. Together they form a plan.

4. 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, i.e. to record a specified tuple of values per iteration, most prominently RecordCost and RecordIterate. Take a look at the Getting Started: Optimize! tutorial how to easily activate this.

All four parts are accompanied by a documentation that can also be accessed from within Julia REPL and provides detailed information, e.g. the formula for an exponential or logarithmic map on the manifold of symmetric positive definite matrices or literature references for an algorithm like cyclicProximalPoint.


During this documentation, we refer to a variable with e.g. both x and $x$ depending on whether the context refers to a code fragment or a mathematical formula, respectively.

Symbolused for
$\mathcal M, \mathcal N$a manifold
$d,d_1,\ldots,d_n$dimension(s) of a manifold
$x,y,z,x_1,\ldots,x_n$points on a manifold
$T_x\mathcal M$the tangent space of $x\in\mathcal M$
$\xi,\nu,\eta,\xi_1,\ldots,\xi_n$tangent vectors, might be extended by the base point, i.e. $\xi_x$
$\log_xy$logarithmic map
$\exp_x\xi$exponential map
$g(t; x,y)$geodesic connecting $x,y\in\mathcal M$ with $t\in [0,1]$
$\langle \cdot, \cdot\rangle_x$Riemannian inner product on $T_x\mathcal M$
$\operatorname{PT}_{x\to y}\xi$parallel transport of $\xi\in T_x\mathcal M$ from $x$ to $y$ along $g(\cdot;x,y)$


If you notice a typo, have a question or would like even to contribute, give me a note at manopt@ronnybergmann.net or visit the GitHub repository to clone/fork the repository.