Ipopt finished with status Restoration_Failed

Just FYI, despite being on the latest released version of Julia and JuMP, you seem to be using deprecated syntax; you should probably change your code to the new syntax. Also, as @mauro3 noted, please do provide a minimal runnable example, or at the very least one with minimal dependencies. Presumably, PyPlot isn’t needed to show this behavior. As a result, I haven’t actually run your code.

From the Ipopt docs:

Restoration Failed:
Console Message:
EXIT: Restoration Failed!
This indicates that the restoration phase failed to find a feasible point that was acceptable to the
filter line search for the original problem. This could happen if the problem is highly degenerate,
does not satisfy the constraint qualification, or if your NLP code provides incorrect derivative
information

(emphasis mine)

I’d check for bad derivatives first, since it’s easiest to debug. Since you seem to be using only ‘standard’ functions in your nonlinear expressions, automatic differentiation should be providing Ipopt with correct gradients. But to be more confident that gradients are correct, you can pass the keyword arguments derivative_test = "first-order", or derivative_test = "second-order", and check_derivatives_for_naninf = "yes" into the IpoptSolver constructor.

There’s a good chance that the problem has numerical issues though. I see some divisions in your constraints that could very well lead to bad behavior, and atans in the magic tire formula could lead to vanishing derivatives. The ifelse’s look scary as well.

2 Likes