<div dir="ltr"><div dir="ltr"><br><div>>> I could use some more clarity - If NEW_X is 0 then I am safe returning </div>
from the subroutine without doing any calculations, but if it is 1 then I <br>
should do the calculations so that the values returned by the subroutine <br><div>
are correct for the value of x supplied to it. Is that right? <br></div><div><br></div>No. You must provide the calculations in BOTH cases (NEW_X being 1 or 0)! NEW_X is 1 if the the current point being evaluated is different from the point evaluated in the last callback calling. NEW_X has the goal of enable you, in some cases, to speed up some calculations if you need evaluate the same point in different callbacks.<br><br>For example, you can be requested to evaluate the objective function in a new point X1. After that, Ipopt can require you to evaluate the constraints also in that same point X1. In this case, the callback evaluating the objective will receive NEW_X as 1, but the callback evaluating the constraints will receive NEW_X as 0.<br><div><br></div><div>>> Looking at the final result, it does appear to be a valid solution to the <br>
problem, but I am not using NEW_X to control anything yet.<span class="gmail-HOEnZb"><font color="#888888"><br></font></span></div><div><br></div><div>It is probable you are doing some mistakes in the calculations. I suggest you use the derivative checker to be sure if you are providing calculations correctly.</div><div><br></div><div>Regards</div><div><br></div><div>Wendel Melo<br></div></div></div><br><div class="gmail_quote"><div dir="ltr">El mié., 14 nov. 2018 a las 17:48, Daniel Feenberg (<<a href="mailto:feenberg@nber.org">feenberg@nber.org</a>>) escribió:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
<br>
On Wed, 14 Nov 2018, Stefan Vigerske wrote:<br>
<br>
> Hi,<br>
><br>
> On 11/14/18 6:56 PM, Daniel Feenberg wrote:<br>
>> <br>
>> 2) I am unsure of how to handle NEW_X. Can I just add:<br>
>><br>
>>     IF(NEW_X.EQ.1) return<br>
><br>
> That would usually not give you what you want.<br>
><br>
>> at the start of EV_G,EV_JACG,EV_F and EV_GRAD_F, after the<br>
>> declarations and before any computations? Is the constant<br>
>> 1 or 0? When I print NEW_X, it always seems to be zero.<br>
><br>
> Yes, should be 0 or 1.<br>
><br>
> NEW_X gives can additional information about the point to be evaluated: It is <br>
> 0 if any evaluation method was previously called with the same values in x, <br>
> and is 1 otherwise.<br>
> So ignoring NEW_X would be fine, but it might help you to safe some <br>
> computations in your implementations of the callbacks, but eventually the <br>
> callbacks should still provide the function values, gradients, or Hessian.<br>
><br>
<br>
I could use some more clarity - If NEW_X is 0 then I am safe returning <br>
from the subroutine without doing any calculations, but if it is 1 then I <br>
should do the calculations so that the values returned by the subroutine <br>
are correct for the value of x supplied to it. Is that right? Maybe I <br>
don't understand something fundamental since NEW_X is always 0 in my small <br>
test calculations when passed to all the ev* subroutines except for calls <br>
to ev_g, where NEW_X is always 1. Even if I have 1 and 0 mixed up, <br>
shouldn't ev_g need at least 1 actual evaluation?<br>
<br>
Looking at the final result, it does appear to be a valid solution to the <br>
problem, but I am not using NEW_X to control anything yet.<br>
<br>
Daniel Feenberg<br>
NBER_______________________________________________<br>
Ipopt mailing list<br>
<a href="mailto:Ipopt@list.coin-or.org" target="_blank">Ipopt@list.coin-or.org</a><br>
<a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__list.coin-2Dor.org_mailman_listinfo_ipopt&d=DwICAg&c=Ngd-ta5yRYsqeUsEDgxhcqsYYY1Xs5ogLxWPA_2Wlc4&r=AEWIZiNSSlppb_jyQKA8GtHkg2N4WiI7Ya5btonYBgA&m=ZDplrYHbXSCEJAP_SLpFsREGMzeV8hPwky0Ik6pW-p4&s=K3jjuPpQiYFPJQ7DgaEIwN2A5jHKAHZTJTPy8m6COAM&e=" rel="noreferrer" target="_blank">https://urldefense.proofpoint.com/v2/url?u=https-3A__list.coin-2Dor.org_mailman_listinfo_ipopt&d=DwICAg&c=Ngd-ta5yRYsqeUsEDgxhcqsYYY1Xs5ogLxWPA_2Wlc4&r=AEWIZiNSSlppb_jyQKA8GtHkg2N4WiI7Ya5btonYBgA&m=ZDplrYHbXSCEJAP_SLpFsREGMzeV8hPwky0Ik6pW-p4&s=K3jjuPpQiYFPJQ7DgaEIwN2A5jHKAHZTJTPy8m6COAM&e=</a><br>
</blockquote></div><br clear="all"><br>-- <br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature">Wendel</div>