[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