[Ipopt] Indefinite Hessian

Andreas Waechter awaechter.iems at gmail.com
Wed Feb 15 18:18:13 EST 2012


Hi Simon,

The issue might be that the Hessian matrix that Ipopt considers is the 
Hessian of the original objective function plus the ("primal-dual") 
Hessian of the barrier terms (see Eqn. (11) in the Ipopt implementation 
paper in Math Prog).  Even if the first Hessian is indefinite, the sum 
of the two might be positive definite.

It is surprising nevertheless that the algorithm doesn't make good 
progress in the output you provided.  First, I suggest you make sure 
that your derivatives are correct (you can use Ipopt's derivative 
checker).  Other than that, you might want to see what happens if you 
choose a smaller initial value for the barrier parameter (mu_init option).

As for the warm start: In contrast to what the header file for the C 
interface currently says, the warm start should work.  Here is the 
updated part of the header file (will be corrected in later Ipopt releases):

------------------------------- 8< 
------------------------------------------

   /** Function calling the Ipopt optimization algorithm for a problem
       previously defined with CreateIpoptProblem.  The return
       specified outcome of the optimization procedure (e.g., success,
       failure etc).
    */
   IPOPT_EXPORT(enum ApplicationReturnStatus) IpoptSolve(
       IpoptProblem ipopt_problem
                          /** Problem that is to be optimized.  Ipopt
                              will use the options previously specified with
                              AddIpoptOption (etc) for this problem. */
     , Number* x          /** Input:  Starting point
                              Output: Optimal solution */
     , Number* g          /** Values of constraint at final point
                              (output only - ignored if set to NULL) */
     , Number* obj_val    /** Final value of objective function
                              (output only - ignored if set to NULL) */
     , Number* mult_g     /** Input: Initial values for the constraint
                                     multipliers (only if warm start option
                                     is chosen)
                              Output: Final multipliers for constraints
                                      (ignored if set to NULL) */
     , Number* mult_x_L   /** Input: Initial values for the multipliers for
                                     lower variable bounds (only if warm 
start
                                     option is chosen)
                              Output: Final multipliers for lower variable
                                      bounds (ignored if set to NULL) */
     , Number* mult_x_U   /** Input: Initial values for the multipliers for
                                     upper variable bounds (only if warm 
start
                                     option is chosen)
                              Output: Final multipliers for upper variable
                                      bounds (ignored if set to NULL) */
     , UserDataPtr user_data
                          /** Pointer to user data.  This will be
                              passed unmodified to the callback
                              functions. */
   );


------------------------------- 8< 
------------------------------------------

But don't expect too much from the warm start - it is difficult to warm 
start interior point methods really effectively...


Hope this helps,

Andreas Waechter

Associate Professor
Department of Industrial Engineering and Management Sciences
McCormick School of Engineering
Northwestern University
Evanston, IL 60208
USA


On 02/08/2012 03:44 AM, Altmannshofer, Simon wrote:
>
> 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
>
> ******************************************************************************
>
[.... Message was getting too long ....]
>
> 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>
>
>
>
> _______________________________________________
> Ipopt mailing list
> Ipopt at list.coin-or.org
> http://list.coin-or.org/mailman/listinfo/ipopt
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.coin-or.org/pipermail/ipopt/attachments/20120215/19e8d9cf/attachment-0001.html>


More information about the Ipopt mailing list