Exciting! ![]()
@franckgaga there’s a decent change that Uno with the SQP settings would beat Ipopt for MPC problems
I’m in a good position to know that a free and positive publicity is always appreciated for open source projects. I finished the implementation of exact Hessian support in ModelPredictiveControl.jl. I just tested UnoSolver.jl with filtersqp, a multiple shooting transcription, and exact Hessian computed by sparse ForwardDiff.jl on the inverted pendulum case study (unstable system + highly nonlinear/nonconvex). It’s about 2.1 times faster than Ipopt.jl, all other things being equal. Excellent work @cvanaret and @amontoison ! ![]()
![]()
![]()
The L-BFGS will be a nice addition in the case where Hessian is too expensive to compute. Even in the small-in-size case study above (in which sparse ForwardDiff.jl is typically well-suited), a fair amount of time is spent in the Hessian evaluation.
That’s awesome news @franckgaga!
Thanks for the feedback.
The underlying QP solver (BQPD) accepts Hessian-vector products, so if you think that they’re cheaper than forming the explicit Hessian for your application, feel free to give it a go.
Also, I’m curious to see how the (undocumented) funnelsqp preset performs. It replaces the filter method with a funnel method, which allows more non-monotonicity. Let me know!
It is not supported by the MOI.VectorNonlinearOracle for now, but maybe in the future. Still, it’s already a huge efficiency improvement compared to the old ways of doing this with @operator (computing individual Hessians for each components of the nonlinear constrain vectors and manually evaluating the weighted sum, while using splatting when there are multiple decision variables).
I just tested it on the same case study and it’s very similar in performance compared to filtersqp.