ILOG CPLEX C++ API 9.0 Reference Manual
ILOG CPLEX C++ API 9.0 Reference Manual
ILOG CPLEX C++ API 9.0 Reference Manual
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
IloCplex<br />
classes that allow the user to monitor solution progress at each level. Callbacks derived<br />
from IloCplex::ContinuousCallbackI or one of its derived classes are called<br />
regularly during the solution of a node relaxation (including the root), and callbacks<br />
derived from IloCplex::MIPCallbackI or one of its derived callbacks are<br />
called regularly during branch & cut search. All callbacks provide the option to abort the<br />
current optimization.<br />
Branch Priorities and Directions<br />
When a branch occurs at a node in the branch & cut tree, usually there is a set of<br />
fractional-valued variables available to pick from for branching. IloCplex has several<br />
built-in rules for making such a choice, and they can be controlled by the parameter<br />
IloCplex::VarSel. Also, the method setPriority allows the user to specify<br />
a priority order. An instance of IloCplex branches on variables with an assigned<br />
priority before variables without a priority. It also branches on variables with higher<br />
priority before variables with lower priority, when the variables have fractional values.<br />
Frequently, when two new nodes have been created (controlled by the parameter<br />
IloCplex::BtTol), one of the two nodes is processed next. This activity is known<br />
as diving. The branch direction determines which of the branches, the up or the down<br />
branch, is used when diving. By default, IloCplex automatically selects the branch<br />
direction. The user can control the branch direction by the method setDirection.<br />
As mentioned before, the greatest flexibility for controlling the branching during branch<br />
& cut search is provided through goals (see IloCplex::Goal) or through the<br />
callbacks (see IloCplex::BranchCallbackI). With these concepts, you can<br />
control the branching decision based on runtime information during the search, instead<br />
of statically through branch priorities and directions, but the default strategies work well<br />
on many problems.<br />
Cuts<br />
An instance of IloCplex can also generate certain cuts in order to strengthen the<br />
relaxation, that is, in order to make the relaxation a better approximation of the original<br />
MIP. Cuts are constraints added to a model to restrict (cut away) noninteger solutions<br />
that would otherwise be solutions of the relaxation. The addition of cuts usually reduces<br />
the number of branches needed to solve a MIP.<br />
When solving a MIP, IloCplex tries to generate violated cuts to add to the problem<br />
after solving a node. After IloCplex adds cuts, the subproblem is re-optimized.<br />
IloCplex then repeats the process of adding cuts at a node and reoptimizing until it<br />
finds no further effective cuts.<br />
An instance of IloCplex generates its cuts in such a way that they are valid for all<br />
subproblems, even when they are discovered during analysis of a particular node. After<br />
a cut has been added to the problem, it will remain in the problem to the end of the<br />
optimization. However, cuts are added only internally; that is, they will not be part of<br />
the model extracted to the IloCplex object after the optimization. Cuts are most<br />
<strong>ILOG</strong> <strong>CPLEX</strong> <strong>C++</strong> <strong>API</strong> <strong>9.0</strong> REFERENCE M ANUAL 50