High dual infeasibilities in IPOPT lead to convergence issues

I am using JuMP.jl to develop NLOptControl.jl to solve optimal control problems and I have dealt with an IPOPT issue for some time now, where the dual infeasibility of my constraints are very high and eventually the problems converge to a local point of infeasibility. But, when I extract this “infeasible solution” it looks perfectly fine (it does not violate any of the constraints). A few months back, I would adjust the convergence criteria so that it works, but the values that I had previously found worked no longer work. And since I am developing this tool, I don’t want the user to have to worry too much about tuning these things. Any thoughts?

P.S.
A similar question was raised some time ago about this issue here

http://list.coin-or.org/pipermail/ipopt/2007-February/000700.html

but, the problem that they hypothesized it was would not be an issue for me because I am using the hessian and not the BFGS approximation of the hessian.

I think that’s a goal that you might want to drop: solving nonlinear optimization problems requires tuning parameters and playing around with the solution to make sure it’s correct.

The issue is that even for the simplest control problems that I can find I have to tune the infeasibility tolerances quite a bite to get the solver to converge on a feasible point. So, I am also worried that there may be an issue with IPOPT or perhaps the way that I am setting up these problems.

It’s more likely your problem formulation that is giving the solver issues. I’ve been using Ipopt for nonlinear model predictive control regularly for the last 6-7 years, and all cases of feasibility problems or convergence issues I ever encountered were due to issues in the problem formulation. Ipopt’s quite robust at solving well-posed problems.

@tkelman you where absolutely correct! IPOPT was not at fault it was me.

I have a Julia package (alpha stage - contribution and bugs are welcome) to explore to infeasible equations. As a modeler, I find this very helpful when debugging initialization procedures.

https://github.com/adowling2/DegeneracyHunter.jl

1 Like

Can you please tell what you did for this fix ? I am running into similar issues.