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.

een called, <strong>CPLEX</strong> calls the user callback function at every viable node in the branch & cuttree (we call a node viable if its LP relaxation is feasible and its relaxation objective value isbetter than that of the best available integer solution). The user callback routine is calledwith the solution vector for the current relaxation as input. The callback function shouldreturn a feasible solution vector, if one is found, as output.The advanced MIP control interface provides several routines that allow the user callback togather information that may be useful in finding heuristic solutions. The routinesCPXgetcallbackgloballb and CPXgetcallbackglobalub, for example, return thetightest known global lower and upper bounds on all the variables in the problem. Nofeasible solution whose objective is better than that of the best known solution can violatethese bounds. Similarly, the routines CPXgetcallbacknodelb andCPXgetcallbacknodeub return variable bounds at this node. These reflect the boundadjustments made during branching. The routine CPXgetcallbackincumbent returns thecurrent incumbent - the best known feasible solution. The routine CPXgetcallbacklpreturns a pointer to the MIP problem (presolved or unpresolved, depending on theCPX_PARAM_MIPCBREDLP parameter). This pointer can be used to obtain variousinformation about the problem (variable types, etc.), or as an argument for the advancedpresolve interface if the user wishes to manually translate between presolved andunpresolved values. In addition, the callback can use the cbdata parameter passed to it,along with routine CPXgetcallbacknodelp, to obtain a pointer to the node relaxation LP.This can be used to access desired information about the relaxation (row count, columncount, etc.). Note that in both cases, the user should never use the pointers obtained fromthese callbacks to modify the associated problems.As noted earlier, 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 returned to the callback, and any feasible solutions returned by the callback, arepresolved vectors. They contain one value for each variable in the presolved problem. Thesame is true of the various callback support routines (CPXgetcallbackgloballb, etc.). Ifthe parameter is set to CPX_OFF (0), all these vectors relate to variables of the originalproblem. Note that this parameter should not be changed in the middle of an optimization.The user should be aware that the branch & cut process works with the presolved problem,so the code will incur some cost when translating from presolved to original values. Thiscost is usually small, but can sometimes be significant.We should also note that if a user wishes to solve linear programs as part of a heuristiccallback, the user must make a copy of the node LP (for example, using CPXcloneprob).The user should not modify the <strong>CPLEX</strong> node LP.486 <strong>ILOG</strong> <strong>CPLEX</strong> <strong>11.0</strong> — USER’ S MANUAL

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

Saved successfully!

Ooh no, something went wrong!