Originally posted by: SystemAdmin
[jfk said:]
Hello there,
Sorry I have to ask you to clarify what you mean...
All right, I'm going to tell you stuff not that I want to lecture you but just that we could understand each other better:
In Constraint Programming (CP) the search is a centerpiece, a good search can make it or break it, and usually the search really exploit the problem structure or other kind of info contained in the data. On the other hand in LP there exist already (basic) search algorithms, like simplex, interior-point, ellipsoid method etc with good complexity (hopefully polynomial complexity - a note: the worst-case complexity for simplex is exponential, but apparently simplex has some sort of smoothness numerically, so it is still widely exploited, meanwhile the others are proved to have polynomial complexity but more difficult to implement into software). Then you can modify those algorithms through some parameters, but basically that's it - or you come up with some completely new search for LP, and shake the math world :-) . Then you have the MIP problem. Well, it is NP-hard, no known algorithm with polynomial complexity at the moment . Depending on the problem types different heuristics are applied, but basically it is in the framework of "branch and ...": You compute the LP (relaxed) solution of the problem at each node (where you can branch), you add some more info on 1 branch and go on until you find a better solution than the one found so far or you find out that the branch is a dead-end. When you can close all the branches or the best relaxed solution and the best integer solution are in a given gap, than you stop. So for all the methods there is actually plenty of room to apply your own heuristics: how you evaluate what branch should be computed next, how deep you go on the branch, what info you ad at a node (where you branch) etc.
In OPL3.7 you can have a couple of places where you control the MIP heuristics (go to "Options/customize default options" and choose MIP strategies). If you want to make a completely new heuristics, you can't do that in OPL. You have to resort to the C++, Java etc API's (you can find examples in the distribution how to manipulate an OPL model from different programing languages). Through the API's you have a relatively free hand to make callbacks and shape the heuristics to your own "liking".
I hope this answer your question. But if not don't hesitate to ask again...
cheers
#DecisionOptimization#OPLusingCPLEXOptimizer