-
Notifications
You must be signed in to change notification settings - Fork 21
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Community discussions using Optim.jl and Manifolds.jl together #1242
Comments
Also, see discussion in RoME JuliaRobotics/RoME.jl#244 |
Which routines are you thinking about? |
TL;DR
At minimum I think I have the a similar question: what is the minimum set of functions to use / integrate / support Manifolds / Manopt / Optim, and make it easy for newcomers to contribute to the general Julia ecosystem. It probably boils down to the same user functions that Manopt.jl needs from a bespoke user manifold (assuming We currently depend heavily on both NLsolve and Optim, but are finding problems with even basic We already provide a bunch of the standard manifolds for use in (aka "variables and factors" for) robotics and SLAM. We are now working to instead adopt Manifolds.jl as The Standard, rather than doing our own half-baked internal manifolds effort. So we are adopting and extending the abstractions that already exist in Manifolds, Manopt, Optim, Flux, etc. But the learning curve on how to use Manifolds.jl has been hard, hence the tutorial docs and will finish those soon (JuliaManifolds/Manifolds.jl#355). What is IncrementalInference.jl (IIF): it provides tree-based non-Gaussian probabilistic (i.e. sum-product) inference. IIF extends Optim, Manifolds, NLsolve, (soon Manopt too), and many other packages. Note, however, it's a significant change for IIF to move exclusively to Manopt and dropping Optim, and is an unlikely path -- but we want the features :-) I hope Optim 920 can help show the gaps between Manifolds.jl and Optim.jl so I and others can help fix if we can (and help Manopt.jl). |
I don‘t follow completely here integrate what/where. Use Manifolds/Manopt/Optim here? for Manifolds/Manopt just work on
For me the SE(2) test case you are referring to – ... sorry I can‘t follow what the test is even doing, there are no comments just a lot of commented out lines, so I don‘t see which algorithm/solver you plan to use for example. From that test case I don‘t even see where you use optimization – Pose2Pose? Often if you do euclidean optimization (e.g. gradient descent) on a manifold you are basically lost, for sure. Finally concerning manifolds.jl – feel free to reach out if you are stuck on learning something. And if we can – together – extend our library of available manifolds and/or improve documentation/examples/tutorials for the current ones, that would be great :) |
Oh sorry, I mean this package IncrementalInference.jl (IIF) also provides a general API for users to extend. The work now is to integrate with ManifoldsBase properly using either Manopt or Optim with minimal duplication. I'm avoiding going into details, perhaps easiest is just to see where IIF currently calls out to either Optim or NLsolve (will likely add Manopt here too): IncrementalInference.jl/src/NumericalCalculations.jl Lines 38 to 68 in f37ef01
Yeah, too much detail to explain here, perhaps just take note of the current This is what I'm fixing now, to have either Optim or Manopt do the retract internally, but knowing how users should overload in the general case.
Agreed. I'll just add that IIF is based on graphical models where "variables" and "factors" are the fundamental abstractions. So the connect between all this should read something like
Thanks, yes I definitely want to help. Let me get a bit further, feel I'm getting closer. It will go much faster once the first design pattern is figured out and written down on paper to reference. Problem here is everyone recognizes something, but the end-to-end story is still way too dis-separate and all-over-the-place -- I'm trying to boil it down and get the abstractions squared in a recognizable way. |
I am still not sure, which algorithms you use for the second case, but we have a quasi-Newton with BFGS in if |
Nelder Mead With the parametric batch solution (still under development) we currently support passing in any algorithm choice to Optim. We default to BFGS with forward AD and a hacky manifold just to fix "Circular". IncrementalInference.jl/src/ParametricUtils.jl Lines 263 to 274 in f37ef01
|
We need to build a bridge between Manifolds and Optimization routines. This issue is just a place to list ongoing conversations that are already happening in the community.
The text was updated successfully, but these errors were encountered: