[Ipopt] Indefinite Hessian

Altmannshofer, Simon simon.altmannshofer at tum.de
Wed Feb 8 04:44:23 EST 2012


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

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