[Ipopt] Jipopt issue
Edson Cordeiro do Valle
edsoncv at enq.ufrgs.br
Fri Jan 18 12:00:15 EST 2013
Em 18-01-2013 13:57, ipopt-request at list.coin-or.org escreveu:
Hello Alberto
Since you ran the derivative test, I'll focus the answer on eval_H function:
This function have 2 purposed:
1st: pass the hessian structure
2nd: send the hessian itself during optimization.
In the initialization phase, ipopt ask for the hessian structure (notice
that is not the hessian of the constraints, but the hessian of the
Lagrangean: fobj(x_i) + lambda_k*(h(x_i)_k)).
Notice that there is a difference between a zero and a constant hessian,
zero mean 2nd derivative = 0 and constant means that it does not change
according to x.
In this initialization, the values field is null (if values == null) and
the structure is sent and recorded in iRow and jCol vectors (they have
the size of nele_hess).
nele_hess must be appropriately set in ipopt constructor.
Then, in 2nd step, eval_h will be called and must be filled on the
values vector ( of size nele_hess) according to your problem.
If you are using limited memory hessian, you can make your function
return "false", then neither the structure nor the values will be
passed, but this generally slows the convergence rate.
You can put a println in your eval_hess to see if it is being called.
Regards
Edson Valle
>
>
> ------------------------------
>
> Message: 6
> Date: Fri, 18 Jan 2013 15:57:32 +0000
> From: Alberto Calzada <albertocalsa at gmail.com>
> To: Edson Cordeiro do Valle <edsoncv at enq.ufrgs.br>,
> Ipopt at list.coin-or.org
> Subject: Re: [Ipopt] Jipopt issue
> Message-ID:
> <CAOtPDdAZqbzs_+=SPN7ZKgN7pkfJXQgCv2aeE15vC9yfQbRBHA at mail.gmail.com>
> Content-Type: text/plain; charset="iso-8859-1"
>
> Hello, Edson,
>
> I am struggling to find a solution to these errors.
>
> 1) I am not sure if I am running properly the derivative tests in JIpopt. I
> am just adding these 2 lines:
> addStrOption(Ipopt.KEY_DERIVATIVE_TEST, "first-order");
> addStrOption(Ipopt.KEY_DERIVATIVE_TEST_PRINT_ALL, "yes");
> But the program is not printing anything.
>
> 2) When I run a big optimisation problem, I get the error I mentioned you
> in my previous e-mail. But when I try to run a small optimisation problem,
> the following error appears:
>
> *
> ******************************************************************************
> *
> *This program contains Ipopt, a library for large-scale nonlinear
> optimization.*
> * Ipopt is released as open source code under the Common Public License
> (CPL).*
> * For more information visit http://projects.coin-or.org/Ipopt*
> *
> ******************************************************************************
> *
> *
> *
> *Option hessian_information is not chosen as limited_memory, but eval_h
> returns f*
> *alse.*
> *Exception of type: OPTION_INVALID in file "IpTNLPAdapter.cpp" at line 869:*
> * Exception message: eval_h is called but has not been implemented*
> *
> *
> *EXIT: Invalid option encountered.*
> *DEBUG [AWT-EventQueue-1] (NotificationManager.java:104) -
> java.lang.ArrayIndexOu*
> *tOfBoundsException: 0*
> *java.lang.ArrayIndexOutOfBoundsException: 0*
> * at
> model.core.Optimisation.ExtendedRuleBaseOptimisation.eval_h(ExtendedR*
> *uleBaseOptimisation.java:220)*
> * at org.coinor.Ipopt.IpoptSolve(Native Method)*
> * at org.coinor.Ipopt.solve(Ipopt.java:347)*
> * at
> model.core.DataStructure.SubRuleBase.optimise(SubRuleBase.java:1230)*
> * at
> view.util.MeasureParametersDialog$6.actionPerformed(MeasureParameters*
> *Dialog.java:158)*
> * at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)*
> * at javax.swing.AbstractButton$Handler.actionPerformed(Unknown
> Source)*
> * at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown
> Source)*
> * at javax.swing.DefaultButtonModel.setPressed(Unknown Source)*
> * at
> javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Sour*
> *ce)*
>
> The thing is that I have actually implemented the eval_h function! This is
> my eval_h function:
>
> * @Override*
> * protected boolean eval_h(int n, double[] x, boolean new_x,*
> * double obj_factor, int m, double[] lambda, boolean new_lambda,*
> * int nele_hess, int[] iRow, int[] jCol, double[] values) {*
> *
> *
> * /* return the structure. This is a symmetric matrix, fill the lower left*
> * * triangle only. */*
> * if(values == null){*
> * /* return the structure. This is a symmetric matrix, fill the lower left*
> * * triangle only. */*
> * int idx = 0; /* nonzero element counter */*
> * int row = 0; /* row counter for loop */*
> * int col = 0; /* col counter for loop */*
> *
> *
> * idx=0;*
> * for (row = 0; row < 4; row++) {*
> * for (col = 0; col <= row; col++) {*
> * iRow[idx] = row;*
> * jCol[idx] = col;*
> * idx++;*
> * }*
> * }*
> * nele_hess = idx;*
> * }*
> * else {*
> * for(int i=0;i<nele_hess;i++){*
> * values[i] = 0;*
> * }*
> * }*
> * *
> * return true;*
> * }*
>
> Because what I am trying to optimise are the parameters of a rule-based
> knowledge representation system (weights, antecedents and consequent of
> each rule and attribute) and all my constraints are of the type: g_U[k] =
> a1+a2+..+aN, their second derivative (if I am not wrong) will always be
> zero for all of them. That is why I always do "*values[i] = 0" *for all my
> constraints.
>
> I am downloading the Valgrind application to debug the system, but I think
> that the problem I am getting now is not related with memory issues but
> maybe by solving this problem when optimising small rule-bases, we might
> solve also the one for big rule-bases at once...
>
> Many thanks once again Edson, I wouldn't be able to make this thing work
> without you,
>
> All the best,
>
> Alberto
>
>
>
> On 18 January 2013 13:19, Edson Cordeiro do Valle <edsoncv at enq.ufrgs.br>wrote:
>
>> Hello Alberto
>> Well, if things went wrong, I suggest to use the default approach: use
>> derivative checker to detect errors on first and second derivatives.
>> To see the outputs from ipopt to java it is necessary to send the outputs
>> of ipopt to a java stream, through a JTextArea (implements the intermediate
>> callback function in java) and analyze your output.
>> The implementation in Java of this function would be something like that:
>>
>> public boolean intermediate_callback(int AlgorithmMode, int iter,
>> double obj_value, double inf_pr, double inf_du, double mu,
>> double d_norm, double regularization_size, double alpha_du,
>> double alpha_pr, int ls_trials) {
>> Formatter formatter = new Formatter();
>> // publish results to the output window
>> myArea.append(formatter.format("%d \t %1.4e \t %1.2e \t %1.2e \t" +
>> "%+1.1f \t %1.2e \t %1.1f \t %1.2e \t %1.2e \t %d",
>> iter, obj_value, inf_pr, inf_du, mu, d_norm,
>> regularization_size,
>> alpha_du, alpha_pr, ls_trials).toString() + "\n");
>> return true;
>> }
>>
>> Notice that due to a swing thread issues it may be necessary to create a
>> swingworker to update this values. I have a jipopt version that interacts
>> with swing controls and a JTextArea using swingworkers. I will ask my
>> company if I can share this implementation with COIN-Ipopt, but you can try
>> the above solution.
>>
>> It is also possible to run your java executable in valgrind (even if it
>> runs inside jvm) and check for leaks (I know that this work because Ive
>> done this in the past to debug the first versions of jipopt). The problem
>> in this case is that, since jipopt.dll was not built with debug symbols,
>> you may not find exactly where (what line) exactly the problem is, but it
>> can give you a clue.
>>
>> Regards
>>
>>
>> Em 17-01-2013 18:37, Alberto Calzada escreveu:
>>
>> Dear Rafael and Edson,
>>
>> Thank you very much for your patience and attention. I was finally and
>> just now able to solve the link issue. It was because my project is inside
>> another (much bigger) open-source project, and I needed to add the jipopt
>> .jar library not to the path of my own project, but to the path of the
>> whole workbench. Thank you for your advise during this last month, it was
>> very helpful to find the root of the problem.
>> However, now I think I got another problem which I believe is out of my
>> scope (it seems to occur out of the JVM, and looks like a memory error).
>> Please find attached the logs of the 4 failed executions I have had.
>>
>> Again, any suggestion would be more than welcome,
>> Many thanks beforehand,
>>
>> Best regards,
>>
>> Alberto
>>
>>
>> On 16 January 2013 23:12, Edson Cordeiro do Valle <edsoncv at enq.ufrgs.br>wrote:
>>
>>> Hello Alberto
>>> Can you send me your version of your project (a zipped folder) or a
>>> resumed version of it? If you send me I can take a look.
>>> Regards
>>>
>>> Em 11-01-2013 15:16, Alberto Calzada escreveu:
>>>
>>> Dear Rafael,
>>>> Again, thank you very much for your prompt respond and attention.
>>>>
>>>> That's the most strange thing: I am in Eclipse and I have added the
>>>> JIpopt library (jipopt-3.2.2.jar) in the path of my project. Moreover, I am
>>>> not getting any compilation error and I can access the Ipopt class from
>>>> Eclipse and the imports I do in my Java class which extends Ipopt works
>>>> also fine.
>>>>
>>>> I have also checked the jipopt-3.2.2.jar file and it has indeed inside
>>>> the org.coinor.Ipopt class. That is why I don't know exactly where could be
>>>> the problem.
>>>>
>>>> Thank you very much again,
>>>> Best regards,
>>>>
>>>> Alberto
>>>>
>>>
>>
>> --
>> *--
>> *
>>
>> *Mr Alberto Calzada
>> Full-time PhD Candidate*
>>
>> *Room 16J25 *
>>
>> *School of Computing and Mathematics
>> Faculty of Computing and Engineering*
>>
>> *University of Ulster at Jordanstown Campus
>> Northern Ireland, UK
>> Email: Calzada-A at email.ulster.ac.uk*
>>
>> *Tel: +44 28 90361114 *
>>
>>
>>
>
More information about the Ipopt
mailing list