<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<div class="moz-cite-prefix">Martijn,<br>
<br>
Also the C interface has a "new_x" input to the function calls.
Also, if you want to avoid global variables to carry around
information between the different function calls, the
"UserDataPtr" might come in handy.<br>
<br>
<pre class="moz-signature" cols="72">Andreas Waechter
Associate Professor
Department of Industrial Engineering and Management Sciences
McCormick School of Engineering
Northwestern University
Evanston, IL 60208
USA
<a class="moz-txt-link-freetext" href="http://users.iems.northwestern.edu/~andreasw/">http://users.iems.northwestern.edu/~andreasw/</a></pre>
On 09/10/2012 09:11 AM, Martijn Disse wrote:<br>
</div>
<blockquote
cite="mid:07CDC78571CB2D41873EE654CB0D01592FBD9720@SRV361.tudelft.net"
type="cite">
<meta http-equiv="Content-Type" content="text/html;
charset=ISO-8859-1">
<style type="text/css" id="owaParaStyle"></style>
<div style="direction: ltr;font-family: Tahoma;color:
#000000;font-size: 10pt;">Hi Seth,
<div><br>
</div>
<div>Thank you for your reply! Your method sounds similar and
very clean indeed. I am however using C and not C++. Correct
me if I am wrong, but that means unfortunately I cannot use
the class.</div>
<div><br>
</div>
<div>I know that I can solve the problem using a structure, but
perhaps there is a better (cleanera and faster) alternative in
C. Any ideas?</div>
<div><br>
</div>
<div>Best regards,</div>
<div><br>
</div>
<div>-Martijn<br>
<div style="font-family: Times New Roman; color: #000000;
font-size: 16px">
<hr tabindex="-1">
<div id="divRpF153139" style="direction: ltr; "><font
size="2" color="#000000" face="Tahoma"><b>Van:</b> Seth
Watts [<a class="moz-txt-link-abbreviated" href="mailto:seth.e.watts@gmail.com">seth.e.watts@gmail.com</a>]<br>
<b>Verzonden:</b> maandag 10 september 2012 15:35<br>
<b>To:</b> Martijn Disse<br>
<b>Cc:</b> Stefan Vigerske; <a class="moz-txt-link-abbreviated" href="mailto:ipopt@list.coin-or.org">ipopt@list.coin-or.org</a><br>
<b>Onderwerp:</b> Re: [Ipopt] Algorithm flow calling
f(x) and g(x), same decision variables?<br>
</font><br>
</div>
<div>Hi Martijn -<br>
<br>
Using the new_x flag is definitely the correct approach. I
have a problem similar to yours in that evaluating the
system state for a given set of optimization variables is
costly, but once this is done, evaluating each of f, g,
grad_f, jac_g is relatively easy.
<br>
<br>
I include the following as class variables in MyNLP.cpp :
my_f, my_g, my_grad_f, my_jac_g. Then, if new_x is true, I
call a function to update my model and evaluate all of
(my_f, my_g, etc.), and then for example the function
eval_f would copy my_f to f. If new_x is false, then the
function just needs to copy what is currently in my_f to
f.<br>
<br>
In case I wasn't clear above, here is pseudocode of
eval_f:<br>
<br>
bool MyNLP::eval_f(Index n, const Number* x, bool new_x,
Number& obj_value)<br>
{<br>
if(new_x)<br>
{<br>
evaluate(<lots of variables>, my_f, my_g,
my_df, my_dg);<br>
}<br>
obj_value = my_f;<br>
}<br>
<br>
Since these are class variables, they are visible to the
class functions, so you don't need to explicitly create a
structure or pass these variables into the functions. It
is a fairly clean implementation.<br>
<br>
- Seth<br>
<br>
<div class="gmail_quote">On Mon, Sep 10, 2012 at 3:57 AM,
Martijn Disse <span dir="ltr">
<<a moz-do-not-send="true"
href="mailto:M.W.Disse@student.tudelft.nl"
target="_blank">M.W.Disse@student.tudelft.nl</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0
.8ex; border-left:1px #ccc solid; padding-left:1ex">
<div>
<div style="direction:ltr; font-size:10pt;
font-family:Tahoma">Hi,<br>
<br>
Thank you for your response. Just for sake of
completeness on this topic: the documentation
mentions x_new as:
<div><br>
<i>"new_x: (in), false if any evaluation method
was previously called with the same values in
x, true otherwise."</i>
<div><i><br>
</i></div>
<div>I will investigate how to implement this
for my particular case.</div>
<div><br>
</div>
<div>Best regards,</div>
<div><br>
</div>
<div>-Martijn</div>
<div><i><br>
</i>________________________________________<br>
Van: Stefan Vigerske [<a
moz-do-not-send="true"
href="mailto:stefan@math.hu-berlin.de"
target="_blank">stefan@math.hu-berlin.de</a>]<br>
Verzonden: maandag 10 september 2012 10:39<br>
To: Martijn Disse<br>
Cc: <a moz-do-not-send="true"
href="mailto:ipopt@list.coin-or.org"
target="_blank">ipopt@list.coin-or.org</a><br>
Onderwerp: Re: [Ipopt] Algorithm flow calling
f(x) and g(x), same decision variables?
<div>
<div class="h5"><br>
<br>
Hi,<br>
<br>
I think Ipopt does not want to give
promises on which order functions<br>
are evaluated.<br>
You can check the newx flag that is passed
with each function evaluation<br>
to see whether *some* evaluation function
has been called for the same<br>
point already.<br>
<br>
Stefan<br>
<br>
On 09/10/2012 10:12 AM, Martijn Disse
wrote:<br>
> Dear all,<br>
><br>
> In both my cost and constraint
function I simulate the same system with
an input based on the decision variables
and some other non-varying user data.<br>
><br>
> In the case when the cost and
constraint function are called with the
same decision variables, to avoid
redundant computations, I would would not
like to simulate the system twice, but
only once.<br>
><br>
> I want to use a userdata structure to
pass on the simulation results from cost
to constraints or vice versa. Therefore I
am trying to find out how the algorithm
flow works:<br>
><br>
> Does the IPOPT flow ever call cost
and constraint with the same decision
variables? If so, which one is called
first?<br>
><br>
> I have modified the hs071 example and
I found out that the constraint function
is called first and then the cost function
is called with the same decision
variables. Is this generally the case?<br>
><br>
> I have looking into the publications,
but was not very succesfull in finding an
answer to my question. I am guessing it is
quite a common problem, that why I am
asking you :).<br>
><br>
> I appreciate you help,<br>
><br>
> Best regards,<br>
><br>
> Martijn Disse<br>
><br>
><br>
><br>
>
_______________________________________________<br>
> Ipopt mailing list<br>
> <a moz-do-not-send="true"
href="mailto:Ipopt@list.coin-or.org"
target="_blank">Ipopt@list.coin-or.org</a><br>
> <a moz-do-not-send="true"
href="http://list.coin-or.org/mailman/listinfo/ipopt"
target="_blank">http://list.coin-or.org/mailman/listinfo/ipopt</a><br>
><br>
<br>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<br>
</div>
</div>
</div>
</div>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
Ipopt mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Ipopt@list.coin-or.org">Ipopt@list.coin-or.org</a>
<a class="moz-txt-link-freetext" href="http://list.coin-or.org/mailman/listinfo/ipopt">http://list.coin-or.org/mailman/listinfo/ipopt</a>
</pre>
</blockquote>
<br>
</body>
</html>