Hi Corinna,
The time taken to solve any optimization problem is never a function of the number of decision variables alone, but rather a complex combination of the type of problem (smooth, discontinuous, differentiable, convex, etc), as well as the types of constraints (linear, nonlinear, integer, etc), how good the initial guess is, whether the solver can exploit these problem properties, as well as problem construction.
Normally, if I am having a problem with a MINLP problem, I relax the integer/binary constraints, by either fixing them as constants, or letting them be continuous variables. Then use IPOPT to solve one relaxed problem and examine the problem solution statistics, e.g.:
Total CPU secs in IPOPT (w/o function evaluations) = 0.159
Total CPU secs in NLP function evaluations = 0.001
If you find CPU secs in NLP function evaluations is significant, then you will need to revisit how you have constructed your objective/constraint callbacks (and/or derivative functions). Conversely if it is in IPOPT that most time is taken, then it is most likely the linear solver (MA57?) which is the bottleneck. This is much harder to speed-up, but we can look at this if this is the case.
If that doesn’t provide anything meaningful, add the following line to line 27 of opti_bonmin.m (just for debugging)
nlprob.options.display=3;
Jonathan
--
You received this message because you are subscribed to the Google Groups "OPTI Toolbox Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email to opti-toolbox-fo...@googlegroups.com.
To post to this group, send email to opti-tool...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Hi Corinna,
I’m glad to see you are using exact derivatives. If it takes around 3 minutes to solve one relaxed problem I’m not surprised it is taking much longer for a MINLP!
I would start with the profiler for each of your functions:
>> profile viewer
i.e. use objective(x) as the code to run, then examine the output. Repeat for each callback function. See where the time is being taken and whether you can see easy ways to speed up the evaluation.
I have a page on the Wiki which also had some ideas for helping speed up your code:
http://i2c2.aut.ac.nz/Wiki/OPTI/index.php/Advanced/LargeScale
Alternatively, try seeing if some the settings in ipoptset / bonminset can assist. It is always a bit difficult knowing which ones to play with though…
Jonathan