ILOG CPLEX 11.0 User's Manual > Advanced Programming Techniques > Advanced Presolve Routines > Restricting Presolve Reductions > Primal and Dual Considerations in Presolve Reductions

Presolve reductions can be classified into several groups: those that rely on primal information, those that rely on dual information, and those that rely on both. Addition of new constraints, modifications to objective coefficients, and tightening of variable bounds (a special case of adding new constraints) require the user to turn off dual reductions. Introduction of new columns, modifications to righthand-side values, and relaxation of variable bounds (a special case of modifying righthand-side values) require the user to turn off primal reductions.

These reductions are controlled through the CPX_PARAM_REDUCE parameter. The parameter has four possible settings. The default value CPX_PREREDUCE_PRIMALANDDUAL (3) indicates that presolve can rely on primal and dual information. With setting CPX_PREREDUCE_DUALONLY (2), presolve only uses dual information, with setting CPX_PREREDUCE_PRIMALONLY (1) it only uses primal information, and with setting CPX_PREREDUCE_NO_PRIMALORDUAL (0) it uses neither (which is equivalent to turning presolve off).

Setting the CPX_PARAM_REDUCE parameter has one additional effect on the optimization. Normally, the presolved problem and the presolved solution are freed at the end of an optimization call. However, when CPX_PARAM_REDUCE is set to a value other than its default, ILOG CPLEX assumes that the problem will subsequently be modified and reoptimized. It therefore retains the presolved problem and any presolved solution information (internally to the LP problem object). If the user has set CPX_PARAM_REDUCE and is finished with problem modification, the user can call CPXfreepresolve to free the presolved problem and reclaim the associated memory. The presolved problem is automatically freed when the user calls CPXfreeprob on the original problem.