ILOG CPLEX C++ API 9.0 Reference Manual
ILOG CPLEX C++ API 9.0 Reference Manual
ILOG CPLEX C++ API 9.0 Reference Manual
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
No feasible integer solutions are ruled out by the cut, but some fractional solutions, for<br />
example (0.0, 0.4, 1.0), can no longer be obtained in any LP or QP subproblems at the<br />
nodes, possibly reducing the amount of searching needed.<br />
The branch & cut method, then, consists of performing branches and applying cuts at<br />
the nodes of the tree. Here is a more detailed outline of the steps involved.<br />
First, the branch & cut tree is initialized to contain the root node as the only active<br />
node. The root node of the tree represents the entire problem, ignoring all of the explicit<br />
integrality requirements. Potential cuts are generated for the root node but, in the interest<br />
of keeping the problem size reasonable, not all such cuts are applied to the model<br />
immediately. An incumbent solution, that is, the best known solution that satisfies all the<br />
integrality requirements, is established at this point for later use in the algorithm.<br />
Ordinarily, no such solution is available at this stage, but the user can specify a starting<br />
solution using the method setVectors. Alternatively, when solving a sequence of<br />
modified problems, the user can set the parameter MIPStart to the value 1 (one) to<br />
indicate that the solution of the previous problem should be used as a starting incumbent<br />
for the present problem.<br />
When processing a node, IloCplex starts by solving the continuous relaxation of its<br />
subproblem. that is, the subproblem without integrality constraints. If the solution<br />
violates any cuts, IloCplex may add some or all of them to the node problem and<br />
resolves it. This procedure is iterated until no more violated cuts are detected (or<br />
deemed worth adding at this time) by the algorithm. If at any point in the addition of<br />
cuts the node becomes infeasible, the node is pruned (that is, it is removed from the<br />
tree).<br />
Otherwise, IloCplex checks whether the solution of the node-problem satisfies the<br />
integrality constraints. If so, and if its objective value is better than that of the current<br />
incumbent, the solution of the node-problem is used as the new incumbent. If not,<br />
branching will occur, but first a heuristic method may be tried at this point to see if a<br />
new incumbent can be inferred from the LP/QP solution at this node, and other methods<br />
of analysis may be performed on this node. The branch, when it occurs, is performed on<br />
a variable where the value of the present solution violates its integrality requirement.<br />
This practice results in two new nodes being added to the tree for later processing.<br />
Each node, after its relaxation is solved, possesses an optimal objective function value<br />
Z. At any given point in the algorithm, there is a node whose Z value is better (less, in<br />
the case of a minimization problem, or greater for a maximization problem) than all the<br />
others. This Best Node value can be compared to the objective function value of the<br />
incumbent solution. The resulting MIP Gap, expressed as a percentage of the incumbent<br />
solution, serves as a measure of progress toward finding and proving optimality. When<br />
active nodes no longer exist, then these two values will have converged toward each<br />
other, and the MIP Gap will thus be zero, signifying that optimality of the incumbent has<br />
been proven.<br />
<strong>ILOG</strong> <strong>CPLEX</strong> <strong>C++</strong> <strong>API</strong> <strong>9.0</strong> REFERENCE M ANUAL 9