Initializing help system before first use

Presolve

The presolver (also called preprocessor) is used to reduce the problem's initial size by dropping unnecessary constraints and variables. It will also attempt to tighten the problem, i.e., modify bounds and constraints. This leads to non-optimal or non-integer solutions being removed while preserving at least one optimal solution.

Presolving is often the most crucial part when solving a problem, and the reduction in size resulting from presolve can cause a significant difference in solution time. Presolving is always the first step when solving a problem, and the output will typically look something like:

[xpress] mipoptimize
Minimizing MILP air05 with default controls
Original problem has:
       427 rows        7195 cols     59316 elements     7195 entities
Presolved problem has:
       335 rows        6133 cols     36203 elements     6133 entities
LP relaxation tightened

If the displayed problem size is significantly smaller than that of the initial problem, you know that presolve is working well. It is possible to turn off presolving by setting PRESOLVE=0, but it is rarely beneficial to do so.

If a problem contains binary variables, the presolver will by default perform probing on them. Probing involves fixing each binary variable in turn to 0 and 1 and then analyzing any implications. This procedure often leads to the binary itself being fixed due to conflicts or to other variables being dropped due to them being directly implied by the binary. It is possible to set the level of probing the Optimizer performs using the PREPROBING control. There are four possible values, ranging from 0 (no probing) to 3 (full probing). If the presolve is taking too much time, it is often probing that is the cause. Otherwise, try setting PREPROBING=3 (or 2 if 3 takes too much time) and watch how it affects the size of the presolved problem.

It is usually only when solving many very easy MIPs that presolve time can become an issue. If so, some time can be saved by restricting it to performing continuous reductions only. In other words, prevent it from performing any reductions that depend on the integrality of variables. This is done by turning on bit 9 of PRESOLVEOPS, i.e., by setting PRESOLVEOPS = 511 + 29 = 1023, where 511 is the default value. Allowing the Optimizer to perform continuous only reductions can also be useful if you wish to provide a starting basis for a linear MIP. By preventing integrality reductions, you ensure that the validity of the basis is preserved.

Presolve Controls Summary

PRESOLVE
Turn presolving on (1) or off (0).
PRESOLVEOPS
An integer bit-vector control, where each bit turns an individual presolving feature on or off.
PREPROBING
Controls the level of presolve probing on binary variables (0-3).

© 2001-2024 Fair Isaac Corporation. All rights reserved. This documentation is the property of Fair Isaac Corporation (“FICO”). Receipt or possession of this documentation does not convey rights to disclose, reproduce, make derivative works, use, or allow others to use it except solely for internal evaluation purposes to determine whether to purchase a license to the software described in this documentation, or as otherwise set forth in a written software license agreement between you and FICO (or a FICO affiliate). Use of this documentation and the software described in it must conform strictly to the foregoing permitted uses, and no other use is permitted.