[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