[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