[Ipopt-tickets] [Ipopt] #212: Failed In Restoration Phase

Ipopt coin-trac at coin-or.org
Wed Jul 24 05:21:33 EDT 2013


#212: Failed In Restoration Phase
---------------------------+-------------------------------
  Reporter:  darknesswind  |      Owner:  stefan
      Type:  defect        |     Status:  assigned
  Priority:  normal        |  Component:  Ipopt
   Version:  3.11          |   Severity:  normal
Resolution:                |   Keywords:  restoration phase
---------------------------+-------------------------------
Changes (by stefan):

 * cc: stefan@… (removed)
 * owner:  ipopt-team => stefan
 * status:  new => assigned


Comment:

 I can reproduce the issue.

 It seems that Ipopt has problems to find a good step
 {{{
 **************************************************
 *** Finding Acceptable Trial Point for Iteration 167:
 **************************************************

 --> Starting line search in iteration 167 <--
 Mu has changed in line search - resetting watchdog counters.
 The current filter has 0 entries.
 minimal step size ALPHA_MIN = 0.000000E+00
 Starting checks for alpha (primal) = 1.00e+00
 Checking acceptability for trial step size alpha_primal_test=
 1.000000e+00:
   New values of barrier function     =                     inf  (reference
 -4.9859053495411052e+02):
   New values of constraint violation =  0.0000000000000000e+00  (reference
 0.0000000000000000e+00):
 Checking Armijo Condition...
 Failed...
 Trying second order correction number 1
 Factorization successful.
 Checking acceptability for trial step size alpha_primal_test=
 1.000000e+00:
   New values of barrier function     =                     inf  (reference
 -4.9859053495411052e+02):
   New values of constraint violation =  0.0000000000000000e+00  (reference
 0.0000000000000000e+00):
 Checking Armijo Condition...
 Failed...
 }}}
 ...
 {{{
 Starting checks for alpha (primal) = 4.94e-324
 Checking acceptability for trial step size
 alpha_primal_test=4.940656e-324:
   New values of barrier function     =                     inf  (reference
 -4.9859053495411052e+02):
   New values of constraint violation =  0.0000000000000000e+00  (reference
 0.0000000000000000e+00):
 Checking sufficient reduction...
 Rejecting trial point because barrier objective function increasing too
 rapidly (from      -4.985905349541105e+02 to                         inf)
 Failed...
 --> Starting soft restoration phase <--
 Trying soft restoration phase step with step length  1.000000e+00
 Checking acceptability for trial step size alpha_primal_test=
 0.000000e+00:
   New values of barrier function     =                     inf  (reference
 -4.9859053495411052e+02):
   New values of constraint violation =  0.0000000000000000e+00  (reference
 0.0000000000000000e+00):
 Checking sufficient reduction...
 Rejecting trial point because barrier objective function increasing too
 rapidly (from      -4.985905349541105e+02 to                         inf)
 Failed...
   Primal-dual error at current point:   7.5708365058778242e+01
   Primal-dual error at trial point  :   7.5831627511772624e+01
   Trial step rejected.
 Restoration phase is called at point that is almost feasible,
   with constraint violation 0.000000e+00. Abort.
 }}}

 If I give him an exact Hessian, things look much better (current trunk,
 ma27):
 {{{
 iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du
 alpha_pr  ls
    0 -3.8359121e+05 0.00e+00 8.76e+01  -1.0 0.00e+00    -  0.00e+00
 0.00e+00   0
    1 -3.8041199e+05 0.00e+00 4.31e+01  -1.0 5.37e-01    -  6.87e-01 1.84e-
 02f  1
    2 -3.8106664e+05 0.00e+00 5.55e-01  -1.0 1.62e+00    -  9.87e-01
 1.00e+00f  1
    3 -3.7984077e+05 0.00e+00 7.07e-02  -1.0 1.62e+02    -  7.68e-01
 1.00e+00f  1
    4 -2.7340833e+05 0.00e+00 2.35e+01  -1.0 1.89e+04    -  3.54e-02
 1.00e+00f  1
    5  8.8969762e+05 0.00e+00 2.51e+02  -1.0 1.84e+05    -  1.31e-01 9.76e-
 01f  1
    6  9.4057197e+05 0.00e+00 2.13e+02  -1.0 6.19e+03    -  1.80e-01 9.78e-
 01f  1
    7  1.8639946e+06 0.00e+00 3.13e+02  -1.0 2.39e+01   2.0 1.46e-03 4.00e-
 02f  1
    8  1.8750022e+06 0.00e+00 2.85e+02  -1.0 1.75e+00   2.4 1.00e+00 5.45e-
 03f  1
    9  1.8746079e+06 0.00e+00 4.00e-02  -1.0 8.79e+01    -  1.00e+00 2.50e-
 01f  3
 iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du
 alpha_pr  ls
   10  1.8768356e+06 0.00e+00 5.49e-05  -2.5 7.75e+01    -  1.00e+00
 1.00e+00f  1
   11  1.8768728e+06 0.00e+00 1.25e-08  -3.8 1.38e+00    -  1.00e+00
 1.00e+00f  1
   12  1.8768750e+06 0.00e+00 4.32e-11  -5.7 8.00e-02    -  1.00e+00
 1.00e+00f  1
   13  1.8768750e+06 0.00e+00 1.14e-13  -8.6 9.92e-04    -  1.00e+00
 1.00e+00f  1

 Number of Iterations....: 13

                                    (scaled)                 (unscaled)
 Objective...............:  -5.1071429877569062e+02
 1.8768750480006628e+06
 Dual infeasibility......:   1.1368683772161603e-13
 4.1779912862693886e-10
 Constraint violation....:   0.0000000000000000e+00
 0.0000000000000000e+00
 Complementarity.........:   2.5059256792487587e-09
 -9.2092768712391866e-06
 Overall NLP error.......:   2.5059256792487587e-09
 4.1779912862693886e-10
 }}}

 Here is the code that implements the Hessian:
 {{{
 //return the structure or values of the hessian
 bool HS071_NLP::eval_h(Index n, const Number* x, bool new_x,
                        Number obj_factor, Index m, const Number* lambda,
                        bool new_lambda, Index nele_hess, Index* iRow,
                        Index* jCol, Number* values)
 {
     if( values == NULL )
     {
           Index k = 0;
           for (Index i = 0; i < n; ++i)
                   for (Index j = 0; j <= i; ++j)
                   {
                           iRow[k] = i;
                           jCol[k] = j;
                           ++k;
                   }
     }
     else
     {
         values[0] = obj_factor * 0.7 * (x[1] + x[2] + x[3] - 175000) * 2;

         values[1] = obj_factor * 0.7 * (2 * x[0] + 3);
         values[2] = 0;

         values[3] = obj_factor * 0.7 * (2 * x[0] + 3);
         values[4] = 0;
         values[5] = 0;

         values[6] = obj_factor * 0.7 * (2 * x[0] + 3);
         values[7] = 0;
         values[8] = 0;
         values[9] = 0;
     }

   return true;
 }
 }}}

-- 
Ticket URL: <https://projects.coin-or.org/ticket/212#comment:1>
Ipopt <http://projects.coin-or.org/Ipopt>
Interior-point optimizer for nonlinear programs.



More information about the Ipopt-tickets mailing list