I am solving a highly constrained (large number of constraints and large number of variables, but small degree of freedom) NLP problem, and for start, I was using Matlab's fmincon
- SQP algorithms. This works wonders, and in $95\%$ of the cases finds an optimal solution even with poor initial guesses.
Now - Matlab does not have built-in Automatic Differentiation (AD) technology (there are packages, but I was not always successful in getting my constraint set AD'd, so I use numerical derivatives), so as the size of the problems expands, I get slower and slower convergence. Then I started to re-implement the problem in Pyomo.
To my surprise, apart from ipopt, I did not find many open-source/freeware solvers for NLP problems. Ipopt performs very poorly as it struggles to find a feasible solution. It finds the right optimum in maybe $5\%$ of the cases. Now both ipopt and SQP are local solvers, so the solutions should not be that much different. I tried Matlab's own ipopt, as well as ipopt supplied by opti-toolbox. Both perform miserably compared to Matlab's SQP.
I am not sure if it's the ipopt settings - do you know any handles that could work for the highly constrained problems? I found that filterSQP could be called from pyomo, but not much literature outside. Also, it's not publicly available for use - one needs to get a license from Dundee university. Also, I saw basic_sqp.py
developed for numpy, but no reference on how to call it from pyomo.
If anyone has any experience with any sort of SQP algorithms (or non-ipopt solvers, especially active set implementation that would hopefully work in my case), it would really help a lot.
Many thanks!