[Coin-ipopt] Ipopt with Automatic Differentiation
Andreas Waechter
andreasw at watson.ibm.com
Wed May 2 13:57:44 EDT 2007
Hi Kipp,
My apologies for a late reply - I'm trying to catch up (slowly) with my
email.
The order in which things are computed in Ipopt is as follows:
1. During the line search, Ipopt evaluates only the values of the
objective and constraint functions - at this point, it does not ask for
any derivatives, since the trial step might be rejected and in that case
don't want to compute the derivatives.
2. Once a trial step has been accepted, Ipopt currently asks first for the
values of the first derivatives, and then computes the multipliers, and
finally at a later point asks for the Hessian information.
In principle, we could reorder things so that the new values for the
multipliers are computed before any derivatives are requested, and we
could tell Ipopt to call some method in the (T)NLP to tell it about the
multipliers. Then, later on, the TNLP can compute first AND second
derivatives at the same time whenever the first request for first
derivatives comes in, and it could buffer any information until it is
really requested by Ipopt.
However, currently, this is not how things are set up.
Is that eseentially what you were asking for?
Thanks
Andreas
On Sat, 28 Apr 2007, Kipp Martin wrote:
> Hi:
>
> I am using the Ipopt callback functions and hooking them to the Coin
> Automatic Differentiation project CppAD. I think an efficient way to
> calculate the Hessian of the Lagrangian function is to:
>
> 1. Do a zero order forward sweep (this will give the objective function
> values and constraint values at the current iterate and provide the necessary
> information for eval_f and eval_g).
>
> 2. Loop over each primal variable x_{i} and do a first order forward sweep.
> This will give column i of the Jacobian.
>
> 3. Inside the same loop over each primal variable do a second order reverse
> sweep immediately after the first order forward sweep and get row (column) i
> of the Hessian of the Lagrangian. However, in order to do this I need to know
> the value of the Lagrange multipliers. These values are not available
> eval_grad, they are only available in eval_h after the Jacobian has been
> calculated, but I would like to do both operations at the same time.
>
> Is there a way to get access to the Lagrange multiplier vector lambda at each
> iteration?
>
> Thanks
>
>
> --
> Kipp Martin
> Professor of Operations Research
> and Computing Technology
> University of Chicago
> Graduate School of Business
> 5807 South Woodlawn Avenue
> Chicago IL 60637
> 773-702-7456
> http://gsbkip.chicagogsb.edu
> http://www.coin-or.org/
> _______________________________________________
> Coin-ipopt mailing list
> Coin-ipopt at list.coin-or.org
> http://list.coin-or.org/mailman/listinfo/coin-ipopt
>
More information about the Coin-ipopt
mailing list