Under default settings, ILOG CPLEX preprocesses problems by simplifying constraints, reducing problem size, and eliminating redundancy. Its presolver tries to reduce the size of a problem by making inferences about the nature of any optimal solution to the problem. Its aggregator tries to eliminate variables and rows through substitution. For most models, preprocessing is beneficial to the total solution speed, and ILOG CPLEX reports the model's solution in terms of the user's original formulation, making the exact nature of any reductions immaterial.
In cases where your model may be primal infeasible or unbounded (dual infeasible), it may be desirable to control the kinds of presolve reductions which ILOG CPLEX makes, in order to make your analysis of the outcome of optimization more certain. These reductions can be divided into two types: primal reductions and dual reductions. A reduction is primal if it does not depend on the objective function. A reduction is dual if it does not depend on the right hand side. By default, presolve performs both kinds of reductions.
Under the default, if the presolved model is infeasible, we know only that the original model is either infeasible or unbounded. But if presolve has performed only primal reductions and the presolved model is infeasible, then we have full assurance that the original model is also infeasible. Similarly if presolve has performed only dual reductions and the presolved model is unbounded, then the original model is verified as unbounded.
To control the types of reductions performed by the presolver, set the Reduce
parameter to one of the following values:
- 0 = no primal and dual reductions1 = only primal reductions2 = only dual reductions3 = both primal and dual reductions (default)
A useful preprocessing feature for performance tuning, one that is not always activated by default, can be to convert the problem to its dual formulation. The nature of the dual formulation is rooted in linear programming theory, beyond the scope of this manual, but for the purposes of this preprocessing feature it is sufficient to think of the roles of the rows and columns of the model's constraint matrix as being switched. Thus the feature is especially applicable to models that have many more rows than columns. When you solve with the barrier optimizer, the default preprocessor settings may result in the dual formulation automatically being formed if it appears to be advantageous. You can still direct the preprocessor to form the dual with other optimizers by setting the PreDual
parameter to 1
. Conversely, to entirely inhibit the dual formulation for the barrier optimizer, you can set the PreDual
parameter to -1
. The default, automatic, setting is 0
.
It is worth emphasizing, to those familiar with linear programming theory, that the decision to solve the dual formulation of your model, via this preprocessing parameter, is entirely separate from the choice between using the dual simplex method or the primal simplex method to perform the optimization. Although these features have theoretical foundations in common, it is valid to consider, for example, solving the dual formulation of your model with the dual simplex method; this would not simply result in the same computational path as solving the primal formulation with the primal simplex method. In the case already mentioned of a model with many more rows than columns, either simplex variant may perform much better when solving the dual formulation, due to the smaller basis matrix that is maintained.
The ILOG CPLEX preprocessor offers a dependency checker which strengthens problem reduction by detecting redundant constraints. Such reductions are usually most effective with the barrier optimizer. To turn on the dependency checker to strengthen reduction, set the parameter DepInd
to 1
instead of its default setting of 0
.
To reduce memory usage, presolve may compress the arrays used for storage of the original model. This can make more memory available for the use of the optimizer that the user has called. Under default settings, ILOG CPLEX will only perform this compression when using the out-of-core variant of the barrier optimizer (discussed in Solving LP Problems with the Barrier Optimizer). You can explicitly turn this feature on or off by setting the presolve compression parameter PreCompress
to -1
for off, or 1
for on; the default of 0
specifies the automatic setting.
In rare instances, a user may wish to specify the number of analysis passes that the presolver or the aggregator makes through the problem. The parameters PrePass
and AggInd
, respectively, control these two preprocessing features; the default, automatic
, setting of -1
lets ILOG CPLEX determine the number of passes to make, while a setting of 0
directs ILOG CPLEX to not use that preprocessing feature, and a positive integer limits the number of passes to that value. Under the automatic setting, ILOG CPLEX applies the aggregator just once when it is solving an LP model; for some problems, it may be worthwhile to increase the AggInd
setting. The behavior under the PrePass
default is less easy to predict, but if the output log indicates it is performing excessive analysis you may wish to try a limit of five passes or some other modest value.
Another parameter, which affects only the aggregator, is AggFill
. Occasionally the substitutions made by the aggregator will increase matrix density and thus make each iteration too expensive to be advantageous. In such cases, try lowering AggFill
from its default value of 10
. ILOG CPLEX may make fewer substitutions as a consequence, and the resulting problem will be less dense.
Finally, if for some reason you wish to turn ILOG CPLEX preprocessing entirely off, set the parameter PreInd
to 0
.