-
Notifications
You must be signed in to change notification settings - Fork 106
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
Implementation roadmap #1
Comments
An awesome list. Somewhere on my harddrive I have an lsqr.jl file I could contribute, if interested. |
I would say that all the stationary methods are obsolete (they are only useful now as a component of multigrid). CGN (conjugate-gradient on the normal equations) seems hardly used these days; the fact that it squares the condition number makes it useless for large systems. I don't see the point of the simple power method and friends; it seems subsumed by restarted Arnoldi (it is just the special case of restarting every iteration). I don't see the point of implementing non-restarted Arnoldi or Lanczos (these are just the special case of a large restart period). |
Great list. I guess the non-restarted methods are more starting points for the restarted methods. |
For the same reason, we only want restarted GMRES (of which there are several variants, if I recall correctly). |
Note that I added LOPCG to the list; this is one of the best iterative eigensolvers for Hermitian systems in my experience (and has the added benefit of supporting preconditioning). |
Also, the solvers for ordinary eigenproblems are merely special cases of the solvers for generalized eigenproblems, so we shouldn't have to implement both variants in most cases. With a little care in implementation, it should be possible to have negliglble performance penalty in the case where the right-hand side operator is the identity, since |
This is an amazing issue ❤️ |
A bcgstab was posted here: JuliaLang/julia#4723 |
We do not know about its license. For starters, the one from templates should be good. |
As @stevengj pointed out in the original discussion (JuliaLang/LinearAlgebra.jl#29), the state of the art for biconjugate gradients is the BiCGSTAB(l) (or ell?) variant. I purposely left the original BiCGSTAB algorithm off the list for that reason. |
I spent a few minutes transcribing symbol-for-symbol the BiCGSTAB(ell) algorithm in this gist. Unicode combining diacritics make it laughably easy to do this transcription. You can see clearly where when Obviously this is subject to testing, etc. |
A number of comments
|
@timholy 's https://github.com/timholy/Grid.jl provides restriction and interpolation operators on grids. |
With regard to the usefulness of CGN and CGS I would point to this paper: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.210.62 |
I'd be interested to see some of the symmetric indefinite methods MINRES, SYMMLQ, MINRES-QLP (http://www.stanford.edu/group/SOL/software.html) |
I tried the gauss-seidel function of the package as smoother for multigrid. The implementation given doesn't account for sparse matrices and is thus not usable in such contexts (large, sparse). |
@thraen: You might want to look into the function |
Thanks a lot for pointing that out! On Wed, Jun 10, 2015 at 8:39 AM, Lars Ruthotto notifications@github.com
|
Is it worthwhile to add Aitken's delta-squared process into the list? |
I noticed that this package was listed for Julia GSOC 2016. Mike Innes suggested that I pipe up here if I wanted to help. Is anybody here able and willing to serve as a mentor? |
@klkeys Thanks for your interest. I'd be thrilled to have someone help out with this package! One of the biggest challenges is to unify the various methods available in similar packages like https://github.com/lruthotto/KrylovMethods.jl and https://github.com/JuliaOptimizers/Krylov.jl. In some sense, this package has been more experimental in nature whereas the other two have been more focused on efficient implementations that work well for practical applications. Now that we (or at least, I) have some experience in writing these algorithms, I'd be very interested to figure out a common API across all the various solvers available. cc: @lruthotto @dpo |
I'd be glad to help work out a common API and a convergence of the packages in terms of efficiency. I'm not sure how much time I'll have to work on it myself during this summer, but I'd be happy to provide input as much as I can. Please keep me posted if you start a discussion somewhere. |
I'm very interested in working out a good common API as well. I'm currently quite happy with the API in |
Will anyone work on Julia GSOC 2016 ? It should be nice to have a common API to easily switch between the different implementations or to merge them. For example,
cc: @cortner related issue and JuliaLang/julia#71 |
I think MINRES should be added to this list. |
@zimoun: We chose to provide the preconditioner as a function handle that computes the inverse, for example, Something we could to in KrylovMethods is to allow @ChrisRackauckas : There is a basic version of minres in KrylovMethods (https://github.com/lruthotto/KrylovMethods.jl/blob/master/src/minres.jl) which might be a good starting point. |
My own perspective: in optimisation you need more than just M(x). You need to provide But I would argue even in linear algebra you may want to create some abstraction. E.g., is the preconditioner right- or left-preconditioned? Maybe I am overcomplicating it. I do think for |
I agree that we should distinguish between left and right preconditioners. How about having two variables, for example, Regarding the abstraction issue: Can you give me an example when you need to multiply with the preconditioner? |
Basically to compute distance, but I only need the inner products for that. So now that you pressure me to think about it, I am not sure whether it was just sloppiness on my part. I will think about it some more, but it is possible that only But don't you need |
For preconditioner (KSP) objects in PETSc.jl, we provide We also provide a function to do |
@cortner: Thanks for your encouragement and suggestions. I just pushed some changes to the branch and switched more methods over to the new call to What still remains is the option of left vs. right preconditioning in CG and other methods as well as preconditioning in |
Personally, I like EDIT: Unless I hear otherwise I now think that the first bullet-point is crucial?! @stevengj: would you be willing to comment? Although
|
Would an Algebraic Multigrid be considered for this package? |
I've written a simple wrapper for pyamg which I was hoping to integrate but if you have something better, I'd be very interest d. P.S.: I now made it public at: |
PyAMG is a pretty solid solver. |
I think we should get a native Julia version, but PyAMG will work really well in the meantime. Good job! |
Thank you - I'll be happy to register the package then. |
Talking about native julia implementation of mulitgrid methods. @erantreister has started putting out a package here: https://github.com/JuliaInv/Multigrid.jl We're still working on some details, but it'll be in good shape soon. Always open to feedback/suggestions. |
I am now almost certain that we should use I would really appreciate to get this confirmed (or contradicted) by somebody who has a deeper understanding of Julia than I do. |
I really don't see the point in introducing a new a special linear solve function just for preconditioners. Applying the preconditioner is a linear solve and |
@andreasnoack Thank you - I agree it would be good to stick with this. |
Hello all! First thank you, I am a frequent user/abuser of this package! (I hope this is a good thread for this post) 1- I was wondering if you have any plans to support the LinearMaps.jl package as a general interface, instead of MatrixFcn which tries to accomplish the same, with less options. I have been using LinearMaps instead of MatrixFcn with IterativeSolvers, and for the most part, it works. 2- When the preconditioners are passed as a function (as in gmres for example), it is better to assume that the inverse is passed directly so Pinv*x replaces Pl\x in the code, or have the two options, maybe. For most of the things I do, the linear operators are large scale and beyond building explicitly. 3- I also cannot wait till this package is integrated with different optimization packages to replace all direct solvers. It will open many doors for large scale optimization. Again, thanks for the developers, |
Hey, I'd like to work on this for GSOC 2017 if yalls would be fine with that. I think I'd have fun with it. I'm not sure yet whether I'd be able to do GSOC full time since I have work obligations, but if not, I'd still love to do this part time for free |
Hi all, I would like to work on this project as well for GSoC 2017. What are the current priorities? Implementing more iterative solvers? Integration with LinearMaps.jl? Some ideas I have: implementing (eigen)solvers listed above such as Jacobi-Davidson, BiCGStab(l), IRAM (but there are already some old & open PRs on this); an maybe add some new flavours to existing methods like [thick restarted / augmented subspace / deflated] GMRES. All these latter methods are based on the idea that the Krylov subspace obtained at the end of a cycle contains very useful spectral data which can be exploited in the next cycle; potentially restoring superlinear convergence behaviour observed in full GMRES. |
From my point of view (as a potential user) I would be interested most in preconditioners (ILU, AMG). |
Hi Bart, |
Aha, good to know, thanks! |
How about the recently developed Alternating Anderson Richardson (AAR) method? Alternating Anderson-Richardson method: An efficient alternative to preconditioned Krylov methods for large, sparse linear systems https://arxiv.org/pdf/1606.08740.pdf |
[WIP] Tolerance increase and systematic tolerance setting
It would be nice to have an updated roadmap in light of the new developments in Julia's iterative solvers ecosystem. |
Just submitted a PR for QMR |
A comprehensive listing of methods in the references.
Please remove any methods are impractical/obsolete and add methods worth implementing to the list.
Linear systems
(Generalized) eigenproblems
Singular value decomposition
References
[1] Low-priority methods: they are quite expensive per iteration.
The text was updated successfully, but these errors were encountered: