Thursday, September 10, 2009

Cplex QCP Presolver

With respect to this post it is interesting to see how Cplex presolves these split QCP constraints produced by the GAMS link. I suspected from the final model statistics (rows, columns etc.) that Cplex could not presolve this away. The Cplex model before presolving looks like:

\Problem name: gamsmodel
Minimize
obj: z + 0 x
Subject To
_e: z - y - linear_part_of_e  = 0
QCP_row_for_e: linear_part_of_e + [ - x ^2 ] >= 0
Bounds
      z Free
      x Free
      y >= 1
      linear_part_of_e Free
End

After presolving it looks like:

\Problem name: x2.lp

Minimize
obj: 0 x + 2 QCV0
Subject To
QCR1: QCV0 - QCV1  = 1
QCP_row_for_e: [ x ^2 - QCV0 ^2 + QCV1 ^2 ] <= 0
Bounds
      x Free
      QCV1 Free
End

This raises some questions. It is not completely obvious to me why this is a good transformation. And what is the reason to print terms like 0 × x in the objective?