12.07.2015 Views

ILOG CPLEX 11.0 User's Manual

ILOG CPLEX 11.0 User's Manual

ILOG CPLEX 11.0 User's Manual

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

problem. Since branching involves adding new bounds to specific variables in the presolvedproblem, a variable must be present in the presolved problem for it to be branched on. Theuser should use the CPXgetcallbacknodeintfeas routine from the Advanced PresolveInterface to find branching candidates (those for which CPXgetcallbacknodeintfeasreturns CPX_INTEGER_INFEASIBLE). The CPXcopyprotected routine can be used toprevent presolve from removing specific variables from the presolved problem. (In ConcertTechnology, this issue is handled for you automatically.) While restricting branching mayappear to limit your ability to solve a problem, in fact a problem can always be solved tooptimality by branching only on the variables of the presolved problem.Incumbent CallbackThe incumbent callback is used to reject integer feasible solutions that do not meetadditional restrictions the user may wish to impose. The user callback routine will be calledeach time a new incumbent solution has been found, including when solutions are providedby the user’s heuristic callback routine. The user callback routine is called with the newsolution as input. Depending on the API, the callback function changes an argument orinvokes a method to indicate whether or not the new solution should replace the incumbentsolution.For the object-oriented callback classes of the C++, Java, and .NET APIs, all callbackinformation about the model and solution vector pertains to the original, unpresolved model.For the C API, the CPX_PARAM_MIPCBREDLP parameter influences the arguments to theuser callback routine. If this parameter is set to its default value of CPX_ON (1), the solutionvector that is input to the callback is a presolved vector. It contains one value for eachvariable in the presolved problem. The same is true of the various callback support routines(CPXcallbackglobalub, and so forth.). If the parameter is set to CPX_OFF (0), all thesevectors relate to the variables of the original problem. Note that this parameter should not bechanged in the middle of an optimization.Node Selection CallbackThe user can influence the order in which nodes are explored by installing a node selectioncallback (through CPXsetnodecallbackfunc). When <strong>CPLEX</strong> chooses the node toexplore next, it will call the user callback routine, with <strong>CPLEX</strong>'s choice as an argument. Thecallback has the option of modifying this choice.<strong>ILOG</strong> <strong>CPLEX</strong> <strong>11.0</strong> — USER’ S MANUAL 489

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!