My research often involves solving MINLP problems with few constraints (usually two) and not many variables (say between one and three integer ones, and between one and five real-valued ones).
The bottlenecks of these problems are the calculation of the objective function and the constraints: they are smooth functions but are quite complex, usually including integrals and cumulative distribution functions (CDF) of continuous random variables (NB: I am not saying that I deal with stochastic problems, but just with problems that involve probability calculations). Occasionally, I have to deal also with calculations involving sparse matrices.
Sometimes, explicit expressions for the gradient of the objective function can be obtained, but not always. Most of the times, the functions in the problem are not convex, strictly speaking, but they happen to be monotonous or convex or unimodal for some of the continuous variables involved (assuming that the rest of variables are fixed).
My typical approach here is performing a sort of enumerative search on the integer variables, and, for each combination of the integer variables, solving the (resulting NLP) problem to optimality for the real-valued variables.
I do this because I found that, sometimes, MINLP solvers get stuck in local optima or even have problems to find a feasible solution. That is why I prefer to handle the integer part of the problem myself by fixing the integer variables and then using NLP solvers for the continuous part.
Besides, sometimes, as a result of the mathematical study of the behaviour of the specific functions of my problems, I am able to deduce an ad-hoc solving strategy for the NLP part (I mean, once the integer variables are fixed).
An additional, general problem is that, sometimes, the calculation of the functions involved is heavily time-consuming.
In short, my problem is that I still have not found the right software environment or setting to solve my optimisation problems. The best software to deal with integrals, CDFs or sparse matrices (for instance: Mathematica, Matlab, Scilab...) is not the software providing the best MINLP/NLP algorithms (for instance: GAMS...).
I was recently using Matlab for some problems, and it is really great, but the functions I was dealing with were really time-consuming, and therefore every optimisation strategy took too long.
I am tempted to go back to C++, since it is faster, and it can handle complex calculations via the GNU Scientific Library (GSL), for instance. But I do not know whether there are good implementations of MINLP/NLP solvers in C++.
I could also consider the possibility of using heuristic algorithms, but I actually think that my problems are not purely combinatorial ones (since they do not have hundreds of (integer) variables and constraints), and that it is worth trying to solve them to optimality in an exact way.
I have not studied other possibilities, such as calling precompiled C++ routines from another solving software.
So, what software setting would you suggest for dealing with this kind of problems?