[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