[Ipopt] Ipopt Digest, Vol 38, Issue 14

Carl Laird carl.d.laird at gmail.com
Wed Feb 27 18:19:56 EST 2008


Hello Weizhong Zhang,

The method eval_jac_g is called by Ipopt for two purposes. The first
is to retrieve the sparsity structure of the matrix (where will the
non-zeros be). Note, that this structure is fixed throughout the
optimization and cannot change. The second purpose is to return the
values of the jacobian at a certain point. Ipopt will call eval_jac_g
many times to evaluate the jacobian at different points as it solves
the problem.

Therefore, the first time that Ipopt calls eval_jac_g it will be to
retrieve the sparsity structure. For this purpose, it does not need
any values, it just wants to know where the non-zeros will be so it
can reserve the appropriate memory and data structures. Therefore,
when you give Ipopt the sparsity structure, you should include every
(i,j) that may ever have a nonzero value, even if they may be zero at
the initial point. For this call, Ipopt will have valid pointers for
iRow and jCol, but NULL for x since it does not care about the actual
values of the jacobian, but only the structure.

The second time (and every time thereafter) that Ipopt calls
eval_jac_g, it will be to retrieve the values of the jacobian at a
particular point x. Here, Ipopt will give NULL pointers for iRow and
jCol, but a valid pointer in x. During these calls, return the
derivatives in the "values" array using the same order that you
specified iRow/jCol in the first call.

I hope this helps,

Cheers,

Carl.

2008/2/27 ZhangWeizhong <greatzwz at hotmail.com>:
>
>  Hi, anyone can help me about my problem?
>
>  For eval_jac_g(Index n, const Number* x, bool new_x, Index m, Index nele_jac, Index* iRow, Index *jCol, number* values ).
>  In IPOPT manual p21
>   " If iRow and jCol arguments are not NULL, then IPOPT wants your to fill in the sparsity structure of the Jacobian(the row and column indices only). At this time, the x argument and the values argument will be NULL"
>
>   I do not understand the following two questions according to the manual p21.
>   How can x be null at any situation? The values are the nonzero elements in the jacobian of the constraint functions, how can be null when we specify the locations of the nonzero elements?
>
>  Thank you.
>
>
>  The attachment is the results from my running program.
>
>
>
>  I used "derivative checker" to run my program, the result is in the following:
>  "......
>  * jac_g [   96,  151] =  0.0000000000000000e+00    ~  1.8756734988301105e+03  [ 1.000e+00]
>  * jac_g [   98,  151] =  0.0000000000000000e+00    ~  1.9164490083767305e+03  [ 1.000e+00]
>  * jac_g [  100,  151] =  0.0000000000000000e+00    ~  1.9572245150811796e+03  [ 1.000e+00]
>
>  Derivative checker detected 935 error(s).
>
>  Number of nonzeros in equality constraint Jacobian...:     1000
>  Number of nonzeros in inequality constraint Jacobian.:        0
>  Number of nonzeros in Lagrangian Hessian.............:        0
>
>  *** Error from MA27AD *** IFLAG = 1 IERROR = 958
>  The index of a matrix is out of range.
>  Please check your implementation of the Jabobian and Hessian matrices.Exception of type: FATAL_ERROR_IN_LINEAR_SOLVER in file "IpStdAugSystemSolver.cpp" at line 219:
>   Exception message: A fatal error occured in the linear solver.
>
>  EXIT: Some uncaught Ipopt exception encountered.
>
>
>  *** The problem FAILED!"
>
>  By valgrind:
>  ==20844== 128199 errors in context 40 of 40:
>  ==20844== Conditional jump or move depends on uninitialised value(s)
>
>
>
>  ----------------------------------------
>  > From: ipopt-request at list.coin-or.org
>  > Subject: Ipopt Digest, Vol 38, Issue 14
>  > To: ipopt at list.coin-or.org
>  > Date: Wed, 27 Feb 2008 12:00:02 -0500
>  >
>  > Send Ipopt mailing list submissions to
>  >       ipopt at list.coin-or.org
>  >
>  > To subscribe or unsubscribe via the World Wide Web, visit
>  >       http://list.coin-or.org/mailman/listinfo/ipopt
>  > or, via email, send a message with subject or body 'help' to
>  >       ipopt-request at list.coin-or.org
>  >
>  > You can reach the person managing the list at
>  >       ipopt-owner at list.coin-or.org
>  >
>  > When replying, please edit your Subject line so it is more specific
>  > than "Re: Contents of Ipopt digest..."
>  >
>  >
>  > Today's Topics:
>  >
>  >    1. Re: Ipopt Digest, Vol 38, Issue 8 (ZhangWeizhong)
>  >
>  >
>  > ----------------------------------------------------------------------
>  >
>  > Message: 1
>  > Date: Tue, 26 Feb 2008 16:51:45 -0500
>  > From: ZhangWeizhong
>  > Subject: Re: [Ipopt] Ipopt Digest, Vol 38, Issue 8
>  > To: ZhangWeizhong
>  > Cc: ipopt at list.coin-or.org
>  > Message-ID:
>  > Content-Type: text/plain; charset="gb2312"
>  >
>  >
>  > Hi,all:
>  >      Do we must supply "values" in eval_jac_g manually because IPOPT can not provide these automatically?
>  >      It seems that we do not have to provide the values(just index of the jacobian matrix is fine) to NAG.
>  >      The two differences between NAG and IPOPT now for me are
>  >       1. IPOPT needs to be provided with the derivative of the objective function, which is not required in NAG.
>  >       2. IPOPT needs to be provided with the jacobian of the constraints manually, in NAG, just the structure of the jacobian is needed.
>  >      Am I right for these?
>  >      Thank you.
>  >                                  Weizhong Zhang
>  >
>  >
>  > ----------------------------------------
>  >> From: greatzwz at hotmail.com
>  >> To: stefan at math.hu-berlin.de
>  >> Subject: RE: [Ipopt] Ipopt Digest, Vol 38, Issue 8
>  >> Date: Tue, 26 Feb 2008 15:21:14 -0500
>  >>
>  >>
>  >> Hi,Stefan:
>  >>     Thank you so much for your help.
>  >>      I think now I may know where the problem is.
>  >>      It is in
>  >>      eval_jac_g(Index n, const Number* x, bool new_x, Index m, Index nele_jac, Index* iRow, Index *jCol, Number* values).
>  >>
>  >>      I have supplied iRow, jCol, but  the values for the Jacobian of the constraints at the point x were not provided, I assumed it will be zero which is defined as the same as in NAG.
>  >>
>  >>     I will check that, thank you so much.
>  >>                                Weizhong Zhang
>  >>
>  >>
>  >>
>  >>
>  >>
>  >> ----------------------------------------
>  >>> Date: Tue, 26 Feb 2008 20:37:23 +0100
>  >>> From: stefan at math.hu-berlin.de
>  >>> To: ipopt at list.coin-or.org
>  >>> CC: greatzwz at hotmail.com
>  >>> Subject: Re: [Ipopt] Ipopt Digest, Vol 38, Issue 8
>  >>>
>  >>> Hi,
>  >>>
>  >>> ZhangWeizhong wrote:
>  >>>> hI, all:     Now the problem is " Invalid number in NLP function or derivative detected"     And  number of iteration is "0"    Can anyone give me any suggestions?
>  >>>
>  >>> Probably your code that computes function values and jacobian returns an
>  >>> invalid number.
>  >>> From the valgrind message you send I would guess that you might not set
>  >>> all values in the arrays that Ipopt provides you when it asks for a
>  >>> function or jacobian evaluation.
>  >>>
>  >>> You should make sure that you implemented the evaluation routines
>  >>> eval_f, eval_grad_f, eval_g, and eval_jac_g such that you return correct
>  >>> numbers in obj_value, grad_f, g, and values, repectively.
>  >>> E.g., in the eval_jac_g routine make sure that you have set all nele_jac
>  >>> entries of values and did not leave some out.
>  >>> Also you should not assume that values array is initialized with 0'th.
>  >>>
>  >>> Adding some printf's in your evaluation routines that tell which values
>  >>> you return to Ipopt should help to find the problem.
>  >>>
>  >>> (Andreas, you could make this error message a bit clearer by at least
>  >>> telling whether it was a function value or a gradient :-).)
>  >>>
>  >>> Best,
>  >>> Stefan
>  >>>
>  >>>
>  >>> --
>  >>> Stefan Vigerske
>  >>> Humboldt University Berlin, Numerical Mathematics
>  >>> http://www.math.hu-berlin.de/~stefan
>  >>
>  >> _________________________________________________________________
>  >> ????? MSN ??????????
>  >> http://mobile.msn.com.cn/
>  >
>  > _________________________________________________________________
>  > MSN?????????????????????
>  > http://im.live.cn/emoticons/?ID=18
>  >
>  >
>  > ------------------------------
>  >
>  > _______________________________________________
>  > Ipopt mailing list
>  > Ipopt at list.coin-or.org
>  > http://list.coin-or.org/mailman/listinfo/ipopt
>  >
>  >
>  > End of Ipopt Digest, Vol 38, Issue 14
>  > *************************************
>
>  _________________________________________________________________
>  MSN圣诞礼物火热登场,免费发放中,快来领取吧!
>  http://im.live.cn/emoticons/?ID=18
>  _______________________________________________
>  Ipopt mailing list
>  Ipopt at list.coin-or.org
>  http://list.coin-or.org/mailman/listinfo/ipopt
>



-- 

Carl D. Laird
Assistant Professor,
Artie McFerrin Department of Chemical Engineering,
Texas A&M University
Ph: (979) 458-4514
Email: carl.laird at tamu.edu



More information about the Ipopt mailing list