30.01.2015 Views

ILOG CPLEX C++ API 9.0 Reference Manual

ILOG CPLEX C++ API 9.0 Reference Manual

ILOG CPLEX C++ API 9.0 Reference 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.

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

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

Saved successfully!

Ooh no, something went wrong!