<html dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" id="owaParaStyle"></style>
</head>
<body fpstyle="1" ocsi="0">
<div style="direction: ltr;font-family: Tahoma;color: #000000;font-size: 10pt;">Hi Stefan, all,<br>
<br>
Jacobian approximation is hardly mentioned in the documentation. Nothing is mentioned on the algorithm used. To know that it works is not good enough for me at this point.&nbsp;
<div><b><br>
</b></div>
<div><b>Does anyone has infomation on the finite-difference approximation in IPOPT?
</b>(I found a code snippet, but it was too much work to deficer).<br>
<br>
What I did now is implemented implement something with a good reputation; The Intel MKL djacobix function for both the gradient and jacobian. It turned out to be quite straight forward.<br>
<br>
Best,</div>
<div><br>
</div>
<div>-Martijn&nbsp;</div>
<div><br>
</div>
<div><br>
<br>
________________________________________<br>
Van: Stefan Vigerske [stefan@math.hu-berlin.de]<br>
Verzonden: zaterdag 25 augustus 2012 20:02<br>
To: Martijn Disse<br>
Cc: ipopt@list.coin-or.org<br>
Onderwerp: Re: [Ipopt] Gradient estimation in IPOPT<br>
<br>
Hi,<br>
<br>
I don't know why you want to implement an own approximation for the<br>
jacobian if the one in Ipopt is working for you.<br>
If you implement own approximations, you could enable the derivative<br>
checker in Ipopt to check that the errors you get are sufficiently small.<br>
<br>
Stefan<br>
<br>
On 08/24/2012 11:06 AM, Martijn Disse wrote:<br>
&gt; Dear all,<br>
&gt;<br>
&gt; 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.<br>
&gt;<br>
&gt; 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)<br>
&gt;<br>
&gt; Hence 2 questions remain:<br>
&gt;<br>
&gt; 1. How can I implement a gradient estimation using finite-differences?<br>
&gt; 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?<br>
&gt;<br>
&gt; Your help will be greatly appreciated!<br>
&gt;<br>
&gt; Best regards,<br>
&gt;<br>
&gt; -Martijn Disse<br>
&gt;<br>
&gt; ======================================================<br>
&gt; Jacobian approximation (WORKS!)<br>
&gt; AddIpoptStrOption(nlp, &quot;jacobian_approximation&quot;, &quot;finite-difference-values&quot;);<br>
&gt;<br>
&gt; Bool eval_jac_g(Index n, Number *x, Bool new_x,<br>
&gt; Index m, Index nele_jac,<br>
&gt; Index *iRow, Index *jCol, Number *values,<br>
&gt; UserDataPtr user_data)<br>
&gt; {<br>
&gt; if (values == NULL) {<br>
&gt; // return the structure of the Jacobian<br>
&gt; // this particular Jacobian is dense<br>
&gt; iRow[0] = 0; jCol[0] = 0;<br>
&gt; iRow[1] = 0; jCol[1] = 1;<br>
&gt; iRow[2] = 0; jCol[2] = 2;<br>
&gt; iRow[3] = 0; jCol[3] = 3;<br>
&gt; iRow[4] = 1; jCol[4] = 0;<br>
&gt; iRow[5] = 1; jCol[5] = 1;<br>
&gt; iRow[6] = 1; jCol[6] = 2;<br>
&gt; iRow[7] = 1; jCol[7] = 3;<br>
&gt; }<br>
&gt; return FALSE;<br>
&gt; }<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; Hessian approximation (WORKS!)<br>
&gt; AddIpoptStrOption(nlp, &quot;hessian_approximation&quot;, &quot;limited-memory&quot;);<br>
&gt;<br>
&gt; I define the function as:<br>
&gt; Bool eval_h(Index n, Number *x, Bool new_x, Number obj_factor,<br>
&gt; Index m, Number *lambda, Bool new_lambda,<br>
&gt; Index nele_hess, Index *iRow, Index *jCol,<br>
&gt; Number *values, UserDataPtr user_data)<br>
&gt; {<br>
&gt; return FALSE;<br>
&gt; }<br>
&gt;<br>
&gt; ======================================================<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; Ipopt mailing list<br>
&gt; Ipopt@list.coin-or.org<br>
&gt; http://list.coin-or.org/mailman/listinfo/ipopt<br>
&gt;<br>
<br>
</div>
</div>
</body>
</html>