[Ipopt] Problems about derivative checker and iteration

lqc234 lqc234 at 126.com
Wed Feb 24 20:09:15 EST 2010

Hi Stefan,

Thank you for your help! I noticed the new_x flag after your advise.In every eval_* function,the document said about the new_x flag:

The boolean variable new_x will be false if the last call to any of the evaluation methods(eval_*) used
the same x values.This can be helpful when users have efficient implementations that calculate multiple
outputs at once. Ipopt internally caches results from the TNLP and generally,this flag can be ignored.

I don't understand the meaning of this section very cleary.I guess the meaning is that we can calculate the value,grandient,and hessian for my function in only one of the eval_* function.If so,how should I write my program? Would you please explain the new_x flag in detail?Thank you very much!

在2010-02-24 17:31:21,"Stefan Vigerske" <stefan at math.hu-berlin.de> 写道:
>you may use the new_x flag that Ipopt provides for all the eval_*
>functions. That is, if new_x is set to true in any of these routines,
>then you compute value, gradient, and hessian for your function and
>store these values in your TNLP object. As long as new_x is false, you
>can use return this evaluated data in all eval_* functions.
>lqc234 wrote:
>> Hi everybody:
>> I have had a problem during using the Ipopt-3.6.1.And I have no idea about this problem for several days,I think that you might not think of this situation .
>> Suppose f(x)= x^2+2*x+1/x+3*x+4*x^3. This formula is very simple,however consider this situation: in my application,for example,1/x+3*x+4*x^3 is a very complicated part that I can't write this part of formula directly,in other words I must use some codes to describe this part,for example 
>> a set of "for" cycle codes with complicated processing. Now I thought there are two problem.
>> First , the direvative checker tools can't deal with this situation because the complicated part 1/x+3*x+4*x^3 is not described directly. 
>> The second problem is not easily to describe somewhat.
>> The variable x changes in every iteration,while I can't write 1/x+3*x+4*x^3 directly.So in every iteration I have to describe the  1/x+3*x+4*x^3 part using some codes every time .However, I found that the excution sequence is "eval_jac_g,eval_grad_f,eval_g,eval_f,eval_h" sometime,sometimes it is not this sequence.Now I don't know which part I should write these codes in,it should be in the eval_f? or eval_g? or in eval_grad_f?eval_jac?eval_h?.
>> I don't know the processing procedure during one iteration in Ipopt,those codes should used only once,I can't used those codes in eval_f ,eval_g,eval_grad_f,eval_jac_g,eval_h all.
>> I don't know if I have described the problem clearly.I hope so.
>> Anyone can give some suggestion?Thank you very much in advance. 
>> ------------------------------------------------------------------------
>> _______________________________________________
>> Ipopt mailing list
>> Ipopt at list.coin-or.org
>> http://list.coin-or.org/mailman/listinfo/ipopt
>Stefan Vigerske
>Humboldt University Berlin, Numerical Mathematics
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://list.coin-or.org/pipermail/ipopt/attachments/20100225/22124113/attachment.html 

More information about the Ipopt mailing list