NicolasL-S / SpeedMapping.jl

General fixed point mapping acceleration and optimization in Julia
MIT License
15 stars 3 forks source link

Compare w/ other Fixed Point solvers? #8

Open azev77 opened 1 year ago

azev77 commented 1 year ago

@s-baumann have https://github.com/s-baumann/FixedPointAcceleration.jl 8 acceleration algorithms:

@francescoalemanno has https://github.com/francescoalemanno/FixedPoint.jl

NicolasL-S commented 1 year ago

Thanks for the good suggestion. In fact I did compare SpeedMapping.jl with FixedPointAcceleration.jl for many problems. But I didn't know about FixedPoint.jl. Here are my impressions so far: In terms of implementation, SpeedMapping seems more lightweight than FixedPointAcceleration.jl and it has useful features like box constraints and the ability to do optimization. It is also quite stable as an algorithm. But in terms of number of iterations, Anderson Acceleration provides faster acceleration in several cases. Plus I find his implementation generally very good for numerical stability. So my advice for now would be: if your maps can be computed easily or you may benefit from bound checks (if some parameters can't be zero for instance), then SpeedMapping is a good option. But if your maps take a long time to compute such that the matrix inversion and the general overhead is not as taxing in comparison, then FixedPointAcceleration.jl with Anderson is probably the way to go. I'll check out FixedPoint.jl when I have the chance (sadly quite busy at the moment).

azev77 commented 1 year ago

Sounds good. Would be nice if (at some point) you can post code for a comparison. Maybe w/ brief note: this algorithm is better for this type of problem, that alg is better for that type of prob...

ChrisRackauckas commented 9 months ago

We have wrapped it in NonlinearSolve.jl and we have started adding it to the SciMLBenchmarks. Here's one with it in there: https://docs.sciml.ai/SciMLBenchmarksOutput/dev/NonlinearProblem/quadratic_nonlinear/ . It seems to be pretty good stuff. FixedPointAcceleration.jl should be added to that shortly.