# [Ipopt] Gradient estimation in IPOPT

Martijn Disse M.W.Disse at student.tudelft.nl
Fri Aug 24 05:06:05 EDT 2012

```Dear all,

I am working on the HS071 optimization problem. I want to replace the explicit expressions for the Gradient, Hessian and Jocabian with a finite-difference approxiamation. Once I know how to do this, I will implement this on a more complex problem.

I am running Ipopt 3.9stable with the default ma27 solver and the C interface IpStdCInterface.h. I have no problems with setting the Hessian and the Jacobian approximation (see below). Allthough I was not expecting I could use the Jacobian approximation with the ma27 solver, especially since it is not mentioned as an IPOPT option in the online documentation. (Documentation online is not clear and I can only find info on jacobian approximation at http://www.coin-or.org/Bonmin/option_pages/options_list_ipopt.html)

Hence 2 questions remain:

1.  How can I implement a gradient estimation using finite-differences?
2.  How can I be sure that my jacobian estimation actually is correct? I can solve the HS071 problem with finite-differences jacobian, and get good results. Is this enough proof?

Your help will be greatly appreciated!

Best regards,

-Martijn Disse

======================================================
Jacobian approximation (WORKS!)

Bool eval_jac_g(Index n, Number *x, Bool new_x,
Index m, Index nele_jac,
Index *iRow, Index *jCol, Number *values,
UserDataPtr user_data)
{
if (values == NULL) {
// return the structure of the Jacobian
// this particular Jacobian is dense
iRow[0] = 0; jCol[0] = 0;
iRow[1] = 0; jCol[1] = 1;
iRow[2] = 0; jCol[2] = 2;
iRow[3] = 0; jCol[3] = 3;
iRow[4] = 1; jCol[4] = 0;
iRow[5] = 1; jCol[5] = 1;
iRow[6] = 1; jCol[6] = 2;
iRow[7] = 1; jCol[7] = 3;
}
return FALSE;
}

Hessian approximation (WORKS!)

I define the function as:
Bool eval_h(Index n, Number *x, Bool new_x, Number obj_factor,
Index m, Number *lambda, Bool new_lambda,
Index nele_hess, Index *iRow, Index *jCol,
Number *values, UserDataPtr user_data)
{
return FALSE;
}

======================================================

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.coin-or.org/pipermail/ipopt/attachments/20120824/129594cf/attachment.html>
```