> Discrete Optimization > Solving Mixed Integer Programming Problems (MIP) > Using the Mixed Integer Optimizer > Priority Orders

In branch & cut, ILOG CPLEX makes decisions about which variable to branch on at a node. You can control the order in which ILOG CPLEX branches on variables by issuing a priority order. A priority order assigns a branching priority to some or all of the integer variables in a model. ILOG CPLEX performs branches on variables with a higher assigned priority number before variables with a lower priority; variables not assigned an explicit priority value by the user are treated as having a priority value of 0. Note that ILOG CPLEX will branch only on variables that take a fractional solution value at a given node. Thus a variable with a high priority number might still not be branched upon until late in the tree, if at all, and indeed if the presolve or the aggregator feature of the ILOG CPLEX Preprocessor removes a given variable then branching on that variable would never occur regardless of a high priority order assigned to it by the user.

You can specify priority for any variable, though the priority is used only if the variable is a general integer variable, a binary integer variable, a semi-continuous variable, a semi-integer variable, or a member of a special ordered set. To specify priority, use one of the following routines or methods:

ILOG CPLEX can generate a priority order automatically, based on problem-data characteristics. This facility can be activated by setting the MIPOrdType parameter to one of the values in Table 13.10.

Table 13.10 Parameters for Branching Priority Order
Parameter 
Branching Priority Order 
0 
no automatic priority order will be generated (default) 
1 
decreasing cost coefficients among the variables 
increasing bound range among the variables 
3 
increasing cost per matrix coefficient count among the variables 

If you explicitly read a file of priority orders, its settings will override any generic priority order you may have set by interactive commands.

The parameter MIPOrdInd, when set to 0 (zero), allows you to direct ILOG CPLEX to ignore a priority order that was previously read from a file. The default setting for this parameter means that a priority order will be used, if one has been read in.

Problems that use integer variables to represent different types of decisions should assign higher priority to those that must be decided first. For example, if some variables in a model activate processes, and others use those activated processes, then the first group of variables should be assigned higher priority than the second group. In that way, you can use priority to achieve better solutions.

Setting priority based on the magnitude of objective coefficients is also sometimes helpful.