Welcome to Manopt.jl
Manopt.Manopt
— ModuleManopt.jl
– Optimization on Manifolds in Julia.
For a function $f:\mathcal M → ℝ$ defined on a Riemannian manifold $\mathcal M$ we aim to solve
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 Get 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.
If you are using Manopt.jl
in a publication, please refer to this or the one specific to the version you used, for example with the following BibLaTeX entry to refer to the latest version
@software{Manoptjl,
doi = {10.5281/zenodo.4290905},
author = {Bergmann, Ronny},
title = {Manopt.jl},
year = {2021},
howpublished={\url{https://manoptjl.org}},
version = {0.3.0}
}
Main Features
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.
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.
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 Get started: Optimize! tutorial how to easily activate this.
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.
Literature
If you want to get started with manifolds, one book is [do Carmo, 1992], and if you want do directly dive into optimization on manifolds, my favourite reference is [Absil, Mahony, Sepulchre, 2008], which is also available online for free.

[Absil, Mahony, Sepulchre, 2008]
P.A. Absil, R. Mahony and R. Sepulchre,
Optimization Algorithms on Matrix Manifolds , Princeton University Press, 2008, doi: 10.1515/9781400830244, open access. 
[doCarmo, 1992]
M. P. do Carmo,
Riemannian Geometry , Birkhäuser Boston, 1992, ISBN: 0817634908.