Giter Site home page Giter Site logo

manopt's Introduction

Welcome to the Manopt GIT repository

Manopt is a Matlab toolbox for optimization on manifolds. For a description of the project, documentation, examples and more, see:

https://www.manopt.org.

There, you can also find links to the Python and Julia versions of Manopt.

How do I get the latest code?

Manopt is released in numbered versions from time to time. For most users, it is easiest to download the latest numbered version from

https://www.manopt.org/downloads.html.

Alternatively, you can get the latest version of the code from GitHub directly of course.

Contributions are welcome!

Where can I learn more about optimization on manifolds?

Check out these two books, freely available online:

Cheers,

Nicolas and Bamdev

manopt's People

Contributors

bamdevm avatar bonans avatar bwzhu97 avatar eitangl avatar emassart avatar g-heidel avatar ivanbioli avatar jbriales avatar karkhaneei avatar kellertuer avatar michael-psenka avatar nicolasboumal avatar nkoep avatar qrebjock avatar sfrcorne avatar spencerkraisler avatar victorliao1 avatar xiaowen-jiang avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

manopt's Issues

Coordinate Descent

@NicolasBoumal,

Is there a quick workaround for having a solver that alternatively minimizes the parameters X={x_i}_i on a product manifold? I am talking about for instance a trust-region solver that can perform alternating updates between two matrices one on Stiefel and one on EDM. There might be two ways to accomplish this: (1) Tangent Subspace Descent as in (https://arxiv.org/pdf/1912.10627.pdf) or (2) Running one step of update per each manifold (and thus x_i) in a sequential manner.

fixedTTrank M.randvec / M.tangent / checkmanifold issue with dimension

The following code fails to produce 0 (or even something numerically close to zero):

clc; clear all; close all;
M = fixedTTrankfactory([2 2 2 2], [1 2 2 2 1]);
X = M.rand()
V = M.randvec(X)
norm(M.tangent(X, V) - V)  % should be zero, but it's 0.5

This might be related to the fact that when we run checkmanifold(M), we see that the dimension test fails. Perhaps the vectors generated by M.randvec(X) are not quite tangent?

TTeMPS tensorprod now collides with R2022a builtin

Hello, thanks so much for your work on Manopt!

Minor issue - the function tensorprod inside the ttfixedrank/TTeMPS_1.1 folder now collides with the new R2022a built-in [ https://www.mathworks.com/help/matlab/ref/tensorprod.html ].

I'd be happy to submit a PR with all the references renamed to something. Perhaps tt_tensorprod or tensormatrixprod?

Thanks!
Dan

Strong Wolfe Conditions

Nicolas,

First thanks for building ManOpt. It's just great. I have been looking into the source code, but could not figure out whether the strong Wolfe conditions are employed at any stage/version of the line search algorithms. As far as I know, this is essential for achieving descent in the L-BFGS algorithm. Or are there other line-search methods in ManOpt that can ensure this?

All the best,

Optimize parallel transport on positive matrices

I just notices that the parallel transport on the positive numbers, see

function zeta = parallel_transport(X, Y, eta)
E = sqrt(Y./X);
zeta = E.*eta.*E;
end

can be optimised: Since that is an element wise operation, the multiplication commutes and can just be done by

    function zeta = parallel_transport(X, Y, eta)
        zeta = eta.*Y./X;
    end

and could maybe even set as default?

Long clone times

Hi everyone!
I noticed manopt may take a long time to clone. Looking closer at the repo distribution, I see most of the content (22.5/24.8MB) is due to web/ and releases/. This is quite inconvenient for people (like me) packaging manopt as a local submodule in their projects (for solving dependencies).
Given the size of this project, I think it might be great to move those two heavy components (not directly related to the manopt functionality) to independent repositories (maybe NicolasBoumal/manopt-web and NicolasBoumal/manopt-releases). Worst case you can have those repositories as submodules in NicolasBoumal/manopt, although I would discourage that altogether.
Let me know what you think :)

Visibility of further (external) algorithms

I recently came across a statement in (added link https://arxiv.org/abs/2304.01467 - that I forgot in the first version), that claimed “there is no publicly released Riemannian solvers for [constraint problems].” when they talked about about ALM/EPM/FW. While they might not have speant so much time researching this, currently ALM/EPM are in this repository from Changshuo Liu.
I today also came across this interior point method code, which looks interesting.

Sure integrating both here bears its problems maybe, but they could be linked in the docs somewhere?

M.vec in fixedTTrankfactory "index out of bounds"

The following code fails:

M = fixedTTrankfactory([2 2 2 2], [1 2 2 2 1]);
X = M.rand()
V = M.randvec(X)
v = M.vec(X, V) % fails

with the follow error message:

Index exceeds the number of array elements (4).
Error in fixedTTrankfactory/vec (line 277)
            ind_step = numel(Z.dU{index}); 

Possible issue with randvec(.) For rotations matrices

Here is the following code:
G = rotations factory(3); g = G.rand(); v = G.randvec(g)
When ran, I found that v is a skew-symmetric matrix, which is a tangent vector at the identity of SO3. However G.randvec() shouldn't be a skew-symmetric matrix, it should be v=g*xi, where xi is some skew-symmetric matrix.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.