[Coin-ipopt] Call for help

Andreas Waechter andreasw at watson.ibm.com
Thu Dec 27 12:42:30 EST 2007

Hi Roy,

What you observe is that the algorithm has trouble to proceed.  Usually, 
when this happens, Ipopt pulls the emergency break and uses the 
restoration phase to find less infeasbile points.  However, in this case, 
the current iterate is already feasible.

This can happen, if

- your functions are not smooth (i.e., twice differentiable),
- the problem is very badly scaled,
- the problem fails to satisfy a "constraint qualification"

That last possibility (which is most probably what is going on) means that 
your constraints are somewhat nasty, and don't satisfy the assumption 
under which Ipopt's convergence properties have been proven.

When I look the the summary of the infeasibilities of your problem, I see 
that the scaled dual infeasibility is 1.5625000000000000e-02. This is not 
particularly small.  However, if we look at the overall NLP error, it is 
reported as 1.0028497388717635e-12, and this certainly satisfies the 
convergence tolerance.

So, what is happening here?  First, what Ipopt reports as "scaled" errors 
are the norms etc taken from the quantities as Ipopt sees them; remember 
that Ipopt might do some scaling of problem functions before it solves a 
problem, and the "unscaled" column tells what the norms are for the 
original problem formulation.

Now, the overall (scaled) NLP error, which is usually the quantity used in 
the convergence test, is computed as shown in equation (5) in the Ipopt 
paper (http://www.research.ibm.com/people/a/andreasw/papers/ipopt.pdf). 
Note the scaling term s_d under the part for the dual infeasibility.  The 
dual infeasibility itself has the value of 1.5625e-02, but since the 
overall NLP error is so small, the s_d scaling parameter must be very 
large in your case.  Looking at how s_d is computed, you can see that this 
means that your constraint or bound multipliers must be becoming very 

This indicates that your problem does not satisfy a constraint 
qualification (LICQ); most NLP solver will have trouble with this, since 
this essentially means that the first order optimality conditions that the 
NLP solver tries to satisfy, cannot be satisfied.

I recommend that you have a look at the constraints and try to find out 
if your include redundant constraints - deleting those would probably help 
a lot.

Alternatively, you can also just change the convergence criteria for 
Ipopt:  The reason that Ipopt does not stop, even though the error is with 
1e-12 definitely below the convergence tolerance of 1e-8, is that Ipopt 
additionally requires that tolerance for the dual infeasibility (without 
the s_d scaling) is less than 1e-4.  You can increase this value with the 
dual_inf_tol option, and e.g., set it to 1.  (I will also just change the 
default now to 1.)

I hope this helps,


On Sat, 22 Dec 2007, Roy Chen wrote:

> Hi, there
> I have the following problems when I ran the problem:
> In iteration 132, 7 Slacks too small, adjusting variable bounds
> In iteration 133, 7 Slacks too small, adjusting variable bounds
> In iteration 135, 7 Slacks too small, adjusting variable bounds
> In iteration 136, 7 Slacks too small, adjusting variable bounds
> In iteration 137, 7 Slacks too small, adjusting variable bounds
> In iteration 139, 7 Slacks too small, adjusting variable bounds
> In iteration 140, 7 Slacks too small, adjusting variable bounds
> In iteration 141, 7 Slacks too small, adjusting variable bounds
> In iteration 143, 7 Slacks too small, adjusting variable bounds
> Restoration phase is called at point that is almost feasible,
>  with constraint violation 3.205075e-12. Abort.
> Number of Iterations....: 144
>                                   (scaled)                 (unscaled)
> Objective...............:  -7.9195441218271328e+04   -2.6926450014212250e+05
> Dual infeasibility......:   1.5625000000000000e-02 
> Constraint violation....:   0.0000000000000000e+00    0.0000000000000000e+00
> Complementarity.........:   1.4323837401800188e-09    4.8701047166120633e-09
> Overall NLP error.......:   1.0028497388717635e-12
> 5.3124999999999999e-02
> Number of objective function evaluations             = 923
> Number of objective gradient evaluations             = 146
> Number of equality constraint evaluations            = 923
> Number of inequality constraint evaluations          = 923
> Number of equality constraint Jacobian evaluations   = 146
> Number of inequality constraint Jacobian evaluations = 146
> Number of Lagrangian Hessian evaluations             = 145
> Total CPU secs in IPOPT (w/o function evaluations)   =      1.141
> Total CPU secs in NLP function evaluations           =      0.179
> EXIT: Restoration Failed!
> Restoration failed or stop at tiny step: we don't know about optimality, but
> we have feasibility!!
> --- Reading solution for model inv_case2
> --- s6-p6-c6-seg3-ipopt-nonit.gms(399) 4 Mb 1 Error
> *** Status: Execution error(s)
> --- Job s6-p6-c6-seg3-ipopt-nonit.gms Stop 12/22/07 02:38:15 elapsed 0:0
> What should I do with the IPOPT option file to eliminate this error
> Best,
> Roy

More information about the Coin-ipopt mailing list