Root node relaxation solution different from LP relaxation

337 views
Skip to first unread message

227marlee

unread,
Mar 4, 2016, 11:34:49 AM3/4/16
to Gurobi Optimization
Hello,

I need to implement my own version of Gomory's fractional cuts algorithm using Gurobi callbacks in C++. However, I noticed that when I use getNodeRel to retrieve the values from the node relaxation solution, it does not equal the LP relaxation. I turned off all cuts, and forced Gurobi to use the simplex method for NodeMethod. Further more, the number of non-basic (non-zero) elements in the solution is greater than the number of constraints, so I cannot form the basis matrix. Anyone have any insight into why this is happening, or how I can force Gurobi to get the right answer?

Thanks.

T.

unread,
Mar 5, 2016, 1:29:50 PM3/5/16
to Gurobi Optimization
The difference between the value of the relaxation and the root node can come from presolving. MIP presolving can be stronger than LP presolving.

Despite of this, I am not sure whether it is possible to generate Gomory mixed-integer cuts from the C++ API. Typically, you need the advanced simplex routines to extract the required information (row of the tableau, order of the variables in the basis, etc.).

Please also remember that "non-basic" and "non-zero" are two completely different things. A variable can be non-basic, even if it is non-zero, e.g. if it has nontrivial bounds or is superbasic. On the other hand, a basic variable can of course attain the value 0, e.g. in an example, where zero vector is the solution (still, there are more non-trivial cases, e.g. degenerated bases and so on).

So I guess, you should use the C API (you can do this from within C++) and re-read good literature about how to generate general Gomory mixed-integer cuts.
Reply all
Reply to author
Forward
0 new messages