[Ipopt] Stopping criteria

Andreas Waechter andreasw at watson.ibm.com
Tue Apr 20 12:13:42 EDT 2010


Hi Drosos,

Ipopt has a bunch of termination tests.  A standard one where all 
quantities need to go below some thresholds (the precise definition is in 
the Ipopt paper), and some notion of "acceptable" points - here, Ipopt 
stops if (for a number of iterations, see the acceptable_iter option) the 
overall tolerancs OR individual tolerances for all criteris (dual 
infeasibility, feasbility, complementarity) are below their "acceptable" 
tolerances, together with a measure of relative progress in the objective 
function (see acceptable_obj_change_tol).

In your case, it seems that the dual infeasibility does not become small - 
if you want to have Ipopt stop anyway because of slow progress in the 
objective, you probably need to increase acceptable_dual_inf_tol.

Well, in any case, what is a little ocncerning in your output is that your 
problems has no constraints except for bounds, and that your objective 
function goes UP :-( and you get a worse solution than at the beginning 
(the explanation is probably that the barrier terms for the bounds are 
actually decreasing when the variables go away form their bounds, so the 
barrier objective function is being reduced, but the overall outcome is 
still that your final objective is larger than your feasible starting 
point... :-( ).  Is it possible that your objective function is 
"exploding" when some variables go to their bounds?  Did you verify that 
the derivatives are correct?  Also, you might want to try 
bound_mult_init_max=mu-based.  But without knowing the details of the 
problem it is difficult to say what is going on.  You may want to try some 
other NLP solvers on the NEOS Optimization Server (in case you have an 
AMPL or GAMS model), maybe they work better...

Regards,

Andreas

On Mon, 12 Apr 2010, Drosos Kourounis wrote:

> Dear Andreas,
>
> for another test case, I see the following. As you can see the problem has essentially converged at the first 7 decimal digits at iteration # 27, or one could be even satisfied from the 25th iteration. I really do not know how to let IPOPT stop when the relative changes in my objective are less than a threshold and ||d|| has also dropped below some threshold. I do not need inf_du to converge. How can I set the convergence criteria for IPOPT to be based only on the relative changes of my objective and ||d|| ? Is that possible?
>
> Thanks in advance,
>   Drosos.
>
>
> ******************************************************************************
> This program contains Ipopt, a library for large-scale nonlinear optimization.
> Ipopt is released as open source code under the Common Public License (CPL).
>         For more information visit http://projects.coin-or.org/Ipopt
> ******************************************************************************
>
> This is Ipopt version 3.8.1, running with linear solver pardiso.
>
> Number of nonzeros in equality constraint Jacobian...:        0
> Number of nonzeros in inequality constraint Jacobian.:        0
> Number of nonzeros in Lagrangian Hessian.............:        0
>
> Total number of variables............................:       18
>                     variables with only lower bounds:        0
>                variables with lower and upper bounds:       18
>                     variables with only upper bounds:        0
> Total number of equality constraints.................:        0
> Total number of inequality constraints...............:        0
>        inequality constraints with only lower bounds:        0
>   inequality constraints with lower and upper bounds:        0
>        inequality constraints with only upper bounds:        0
>
> iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
>   0  2.8714270e+06 0.00e+00 7.86e+03   0.0 0.00e+00    -  0.00e+00 0.00e+00   0
>   1  3.9243961e+06 0.00e+00 5.67e+03   3.5 7.43e+03    -  1.49e-02 4.00e-03f  1
>   2  3.9620362e+06 0.00e+00 5.46e+03   2.6 3.58e+02    -  1.00e+00 3.33e-03f  1
>   3  4.5992098e+06 0.00e+00 9.28e+04   2.1 1.66e+02    -  4.00e-01 4.98e-02f  1
>   4  4.6469130e+06 0.00e+00 4.63e+04  -3.0 5.83e+01    -  5.52e-01 2.07e-02f  1
>   5  4.8829708e+06 0.00e+00 1.43e+04   3.0 8.43e+01    -  1.00e+00 6.24e-02f  1
>   6  4.9248188e+06 0.00e+00 9.55e+03   3.3 2.33e+02    -  4.47e-01 1.05e-01f  1
>   7  5.0208268e+06 0.00e+00 1.22e+04   3.0 1.35e+01    -  1.00e+00 7.42e-01f  1
>   8  5.0456178e+06 0.00e+00 2.50e+03   2.9 1.62e+00    -  8.87e-01 9.98e-01f  1
>   9  5.0520071e+06 0.00e+00 2.83e+03   1.9 1.73e+00    -  1.00e+00 1.00e+00f  1
> iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
>  10  5.0211695e+06 0.00e+00 6.91e+03   4.1 2.44e+01    -  3.08e-01 1.52e-01f  1
>  11  5.0112771e+06 0.00e+00 3.56e+03   3.5 3.70e+00    -  1.00e+00 1.00e+00f  1
>  12  5.0297759e+06 0.00e+00 4.10e+03   2.8 1.07e+01    -  1.00e+00 5.17e-01f  1
>  13  5.0403445e+06 0.00e+00 1.44e+04   2.1 4.22e+00    -  9.93e-01 5.82e-01f  1
>  14  5.0410974e+06 0.00e+00 1.27e+04   1.4 4.60e+00    -  1.33e-01 3.45e-02f  1
>  15  5.0509431e+06 0.00e+00 9.47e+02   1.4 1.96e+00    -  1.00e+00 6.82e-01f  1
>  16  5.0551972e+06 0.00e+00 7.16e+02   0.7 7.76e-01    -  8.07e-01 8.40e-01f  1
>  17  5.0557683e+06 0.00e+00 1.22e+03   0.3 8.15e-01    -  1.00e+00 1.00e+00f  1
>  18  5.0555192e+06 0.00e+00 3.22e+02   1.4 1.28e-01    -  9.63e-01 1.00e+00f  1
>  19  5.0556192e+06 0.00e+00 2.24e+02   1.3 2.40e-01    -  1.00e+00 1.00e+00f  1
> iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
>  20  5.0560854e+06 0.00e+00 1.63e+03   0.6 3.32e+00    -  9.92e-01 1.00e+00f  1
>  21  5.0565864e+06 0.00e+00 2.80e+03   0.4 4.26e+01    -  1.00e+00 1.49e-01f  1
>  22  5.0566050e+06 0.00e+00 2.45e+03  -0.6 6.95e-01    -  1.00e+00 9.12e-02f  1
>  23  5.0566924e+06 0.00e+00 1.64e+03  -1.9 2.27e-02    -  1.00e+00 9.80e-01f  1
>  24  5.0567265e+06 0.00e+00 5.92e+02  -3.1 4.05e-02    -  1.00e+00 7.89e-01f  1
>  25  5.0567309e+06 0.00e+00 5.59e+02  -4.2 1.45e-02    -  1.00e+00 5.29e-01f  1
>  26  5.0567324e+06 0.00e+00 2.03e+02  -4.4 1.35e-01    -  1.00e+00 1.18e-01f  4
>  27  5.0567334e+06 0.00e+00 1.67e+02  -4.7 5.40e-03    -  1.00e+00 9.87e-01f  1
>  28  5.0567335e+06 0.00e+00 3.25e+02  -5.1 1.11e-02    -  1.00e+00 4.77e-01f  2
>  29  5.0567338e+06 0.00e+00 1.25e+02  -6.6 3.55e-03    -  1.00e+00 9.92e-01f  1
> iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
>  30  5.0567339e+06 0.00e+00 3.90e+01  -8.1 1.06e-03    -  1.00e+00 9.70e-01f  1
>  31  5.0567339e+06 0.00e+00 6.64e+01  -9.8 1.32e-03    -  1.00e+00 9.93e-01f  1
> In iteration 31, 7 Slacks too small, adjusting variable bounds
>  32  5.0567339e+06 0.00e+00 3.84e+01 -11.6 3.79e-04    -  1.00e+00 9.62e-01f  1
> In iteration 32, 15 Slacks too small, adjusting variable bounds
>  33  5.0567339e+06 0.00e+00 3.83e+01 -13.2 1.52e-04    -  1.00e+00 9.92e-01f  1
> In iteration 33, 15 Slacks too small, adjusting variable bounds
>  34  5.0567339e+06 0.00e+00 6.62e+01 -14.5 8.12e-03    -  1.00e+00 7.81e-03f  8
> In iteration 34, 16 Slacks too small, adjusting variable bounds
>  35  5.0567339e+06 0.00e+00 3.82e+01 -15.8 5.35e-05    -  1.00e+00 8.50e-01f  1
> In iteration 35, 16 Slacks too small, adjusting variable bounds
>  36  5.0567339e+06 0.00e+00 3.82e+01 -17.6 3.01e-05    -  1.00e+00 1.00e+00f  1
> In iteration 36, 16 Slacks too small, adjusting variable bounds
>  37  5.0567339e+06 0.00e+00 6.61e+01 -18.8 2.24e-02    -  1.00e+00 4.88e-04f 12
> In iteration 37, 16 Slacks too small, adjusting variable bounds
>  38  5.0567339e+06 0.00e+00 3.82e+01 -20.7 5.01e-05    -  1.00e+00 1.25e-01f  4
> In iteration 38, 16 Slacks too small, adjusting variable bounds
>  39  5.0567339e+06 0.00e+00 3.82e+01 -20.8 8.42e-06    -  1.00e+00 5.00e-01f  2
> In iteration 39, 16 Slacks too small, adjusting variable bounds
> iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
>  40  5.0567339e+06 0.00e+00 6.61e+01 -20.8 2.84e-06    -  1.00e+00 5.00e-01f  2
> In iteration 40, 16 Slacks too small, adjusting variable bounds
>  41  5.0567339e+06 0.00e+00 3.82e+01 -22.7 4.20e-07    -  1.00e+00 2.50e-01f  3
> In iteration 41, 16 Slacks too small, adjusting variable bounds
>  42  5.0567339e+06 0.00e+00 3.82e+01 -22.8 1.91e-06    -  1.00e+00 1.00e+00f  1
> In iteration 42, 16 Slacks too small, adjusting variable bounds
>  43  5.0567339e+06 0.00e+00 3.82e+01 -22.8 8.95e-07    -  1.00e+00 1.00e+00f  1
> In iteration 43, 16 Slacks too small, adjusting variable bounds
>  44  5.0567339e+06 0.00e+00 3.82e+01 -22.8 6.62e-03    -  1.00e+00 7.63e-06f 18
> In iteration 44, 16 Slacks too small, adjusting variable bounds
>  45  5.0567339e+06 0.00e+00 6.61e+01 -22.8 2.98e-08    -  1.00e+00 3.12e-02f  6
> In iteration 45, 16 Slacks too small, adjusting variable bounds
>  46  5.0567339e+06 0.00e+00 3.82e+01 -22.8 2.64e-08    -  1.00e+00 1.00e+00f  1
> In iteration 46, 16 Slacks too small, adjusting variable bounds
>  47  5.0567339e+06 0.00e+00 3.82e+01 -22.8 1.49e-07    -  1.00e+00 3.12e-02f  6
> In iteration 47, 16 Slacks too small, adjusting variable bounds
>  48  5.0567339e+06 0.00e+00 3.82e+01 -22.8 2.50e-09    -  1.00e+00 5.00e-01f  2
> In iteration 48, 16 Slacks too small, adjusting variable bounds
>  49  5.0567339e+06 0.00e+00 3.82e+01 -22.8 2.50e-09    -  1.00e+00 1.00e+00f  1
> In iteration 49, 16 Slacks too small, adjusting variable bounds
> iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
>  50  5.0567339e+06 0.00e+00 6.61e+01 -22.8 5.03e-10    -  1.00e+00 1.00e+00f  1
>
> Number of Iterations....: 50
>
>                                   (scaled)                 (unscaled)
> Objective...............:  -5.0567339037239701e+06    5.0567339037239701e+06
> Dual infeasibility......:   6.6146365102737036e+01    6.6146365102737036e+01
> Constraint violation....:   0.0000000000000000e+00    0.0000000000000000e+00
> Complementarity.........:   1.5037586163036707e-23   -1.5037586163036707e-23
> Overall NLP error.......:   1.9705007854092584e+00    6.6146365102737036e+01
>
>
> Number of objective function evaluations             = 156
> Number of objective gradient evaluations             = 51
> Number of equality constraint evaluations            = 0
> Number of inequality constraint evaluations          = 0
> Number of equality constraint Jacobian evaluations   = 0
> Number of inequality constraint Jacobian evaluations = 0
> Number of Lagrangian Hessian evaluations             = 0
> Total CPU secs in IPOPT (w/o function evaluations)   =      0.320
> Total CPU secs in NLP function evaluations           =  39858.891
>
> EXIT: Maximum Number of Iterations Exceeded.
>
> _______________________________________________
> Ipopt mailing list
> Ipopt at list.coin-or.org
> http://list.coin-or.org/mailman/listinfo/ipopt
>
>



More information about the Ipopt mailing list