Rapid-Design-of-Systems-Laboratory / beluga

General purpose indirect trajectory optimization
Other
26 stars 6 forks source link

Enable use of different root-solvers in bvpsol #110

Closed msparapa closed 5 years ago

msparapa commented 6 years ago

I was trying to merge in #89 and I was able to get some more complicated problems to converge, but simpler ones, like brachistochrone, didn't converge. I'm not entirely sure if I did this incorrectly or the root-solver just wasn't suited for the problem. Regardless, we should implement a feature that allows a user to select a root-solver to be used (Armijo line search, SQP, golden search, etc...) since I don't believe there will be a single solver that works best.

SeanMatthewNolan commented 6 years ago

I'll check into that because though I am all for having different methods as options, the line search has always worked better for me. The only iffy thing that I have seen is comes from the fact that propagation of equations is a fuzzy type of function evaluation making the residual not actually continuous. Tweaking tolerances usually works, but this shows some underlying difficulties in general.

msparapa commented 5 years ago

@SeanMatthewNolan This should be mostly good to go now. Just a heads up, with no extra arguments the solver will default to using SLSQP from scipy.optimize.minimize. In the input file, you can set

shooting_solver = beluga.bvp_algorithm('Shooting', algorithm='traditional')

and it will use the older algorithm we had before. I noticed that SQP was better for more difficult problems, but simple problems like Brachistochrone seemed really finicky, especially with ICRM. You can change algorithm='traditional' to be anything from scipy.optimize.minimize. I've only tested SLSQP and the other algorithms don't seem suited for our problem, but nevertheless the option is there. Adding in Armijo line search should be significantly easier now with this framework set up.

Also I found a bug and fixed #116 in this same branch. Multiple shooting seems really efficient now.