Closed msparapa closed 5 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.
@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.
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.