[Ipopt] Indefinite Hessian
Altmannshofer, Simon
simon.altmannshofer at tum.de
Wed Feb 8 04:44:23 EST 2012
Hello,
I am using IPOPT to solve the NLP arising in Nonlinear Model Predictive Control. IPOPT was compiled with MS Visual Studio 10 according to the documentation. In order to access IPOPT in MATLAB/Simulink the C Interface is used.
At the starting point, the user-supplied hessian is indefinite (checked with MATLAB's chol(hessian)). According to the implementation IPOPT should add a multiple of the unity matrix to the indefinite hessian. Unfortunately this is not done and the objective function is only reduced slightly. See the output :
List of user-set options:
Name Value used
hessian_approximation = exact yes
max_iter = 10 yes
output_file = ipopt yes
print_user_options = yes yes
******************************************************************************
This program contains Ipopt, a library for large-scale nonlinear optimization.
Ipopt is released as open source code under the Eclipse Public License (EPL).
For more information visit http://projects.coin-or.org/Ipopt
******************************************************************************
This is Ipopt version 3.9stable, running with linear solver ma27.
Number of nonzeros in equality constraint Jacobian...: 0
Number of nonzeros in inequality constraint Jacobian.: 0
Number of nonzeros in Lagrangian Hessian.............: 45150
Total number of variables............................: 300
variables with only lower bounds: 0
variables with lower and upper bounds: 300
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 9.8696044e+006 0.00e+000 1.00e+002 -1.0 0.00e+000 - 0.00e+000 0.00e+000 0
1 9.2476193e+006 0.00e+000 9.65e+001 -1.0 1.43e+000 - 9.62e-001 1.00e+000f 1
2 8.6650164e+006 0.00e+000 9.27e+001 -1.0 1.39e+000 - 1.00e+000 1.00e+000f 1
3 8.1192261e+006 0.00e+000 8.87e+001 -1.0 1.21e+000 - 1.00e+000 1.00e+000f 1
4 7.6084135e+006 0.00e+000 8.50e+001 -1.0 1.40e+000 - 1.00e+000 1.00e+000f 1
5 7.1293098e+006 0.00e+000 8.17e+001 -1.0 1.24e+000 - 1.00e+000 1.00e+000f 1
6 6.6799462e+006 0.00e+000 7.85e+001 -1.0 1.22e+000 - 1.00e+000 1.00e+000f 1
7 6.2582696e+006 0.00e+000 7.55e+001 -1.0 1.22e+000 - 1.00e+000 1.00e+000f 1
8 5.8623887e+006 0.00e+000 7.28e+001 -1.0 1.25e+000 - 1.00e+000 1.00e+000f 1
9 5.4905752e+006 0.00e+000 7.04e+001 -1.0 1.33e+000 - 1.00e+000 1.00e+000f 1
iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls
10 5.1412512e+006 0.00e+000 6.84e+001 -1.0 1.40e+000 - 1.00e+000 1.00e+000f 1
Number of Iterations....: 10
(scaled) (unscaled)
Objective...............: 1.6480135408498565e+005 5.1412511506722849e+006
Dual infeasibility......: 6.8365045374688762e+001 2.1327608025424806e+003
Constraint violation....: 0.0000000000000000e+000 0.0000000000000000e+000
Complementarity.........: 1.0000000000036685e-001 3.1196655993735813e+000
Overall NLP error.......: 6.8365045374688762e+001 2.1327608025424806e+003
Number of objective function evaluations = 11
Number of objective gradient evaluations = 11
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 = 10
Total CPU secs in IPOPT (w/o function evaluations) = 0.148
Total CPU secs in NLP function evaluations = 4.480
EXIT: Maximum Number of Iterations Exceeded.
The same problem was also solved with MATLAB's fmincon. The gradient and hessian are exactly the same, but the result is different (see objective function):
First-order Norm of
Iter F-count f(x) Feasibility optimality step
0 1 9.869604e+006 0.000e+000 3.117e+003
1 3 3.304693e+006 0.000e+000 2.153e+003 2.789e+002
2 4 1.474439e+006 0.000e+000 2.133e+003 1.759e+002
3 5 4.765775e+005 0.000e+000 1.655e+003 1.079e+002
4 6 1.159478e+005 0.000e+000 9.911e+002 9.736e+001
5 7 4.110189e+004 0.000e+000 6.411e+002 5.950e+001
6 8 1.365444e+004 0.000e+000 3.948e+002 5.898e+001
7 9 5.660985e+003 0.000e+000 2.668e+002 5.086e+001
8 10 2.314725e+003 0.000e+000 1.779e+002 5.414e+001
9 11 5.767229e+002 0.000e+000 9.207e+001 6.265e+001
10 12 3.626214e+001 0.000e+000 1.861e+001 7.382e+001
My questions are:
1) Why does IPOPT not recognize the indefinite hessian matrix? What possible options might clear this problem? With the BFGS formula for the hessian everything works fine. But we want to use the exact hessian.
2) Does the warm start option also work with the C Interface?
Best Regards
Simon
-----------------------------------------------------
Dipl.-Ing. Simon Altmannshofer
Lehrstuhl für Regelungstechnik
Technische Universität München
Boltzmannstraße 15
85748 Garching bei München
Tel.: +49 (89) 289-15679
Fax: +49 (89) 289-15653
E-Mail: simon.altmannshofer at tum.de<mailto:tobias.kloiber at tum.de>
Internet: www.rt.mw.tum.de<http://www.rt.mw.tum.de>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.coin-or.org/pipermail/ipopt/attachments/20120208/9d71bef4/attachment-0001.html>
More information about the Ipopt
mailing list