Originally posted by: SystemAdmin
Okay. Now the big questions are:
(a) Does the simulator provide gradient information for the objective?
(b) Is the objective function convex?
If both answers are "yes", then you can do something with CPLEX, namely a branch-and-cut approach. You would introduce an artificial variable z that denotes the objective function and minimize (or maximize) z. I guess you have a trivial lower bound (in the minization case) for z, for example 0, so you can initially solve the problem with z >= 0. You need to disable dual reductions for this branch-and-cut approach, since you will separate lazy constraints.
Of course, the optimal solution to this LP relaxation will be z = 0, because z is not contained in any of the constraints. But now you will call your oracle to provide a value f(x*) and a gradient f'(x*) for your current LP solution x*. Then you add the cutting plane
z >= f(x*) + f'(x*)(x-x*)
Note that f'(x*) and (x-x*) are of course vectors, so the latter term is a scalar product between vectors.
Using this additional inequality, CPLEX will now continue the LP solve to get you another point x*. Again you would call the simulator and repeat.
But unfortunately, my guess is that the answer to question (a) is already "no". Then you are in the are of so-called "derivative free optimization", which is a completely different story. You cannot use CPLEX for this in a direct fashion. But there are some approaches for derivative free optimization out there, but I am certainly not an expert on this, and this would be really out of topic for this forum.
Tobias
#CPLEXOptimizers#DecisionOptimization