I am solving a mixed-integer second order cone program (MISOCP). Boolean variables pick among a set of inequality constraints using the big-M formulation (I choose M as small as possible). I scale and center the variables to [-1,1], but the optimization problem is still numerically tricky:
Matrix range [9e-07, 1e+02]
QMatrix range [1e+00, 1e+00]
Objective range [1e-02, 1e+00]
Bounds range [1e+00, 1e+00]
RHS range [1e-03, 4e+00]
Gurobi can solve the problem but it returns:
Warning: max constraint violation (1.6024e-05) exceeds tolerance
As a result (I think), when I fix the integer variable to the optimal value found by Gurobi, the resulting second order cone program (SOCP) fails (I am guessing that its infeasibility tolerance is more sensitive that the MIP solver's).
My current "hack" is, if the SOCP fails, to add an extra constraint in the MISOCP to pick an integer variable that is not equal to the one returned in the first run. This picks "the next most optimal" integer variable and most of the time the SOCP works for that one. So, clearly, a solution to the MISOCP exists that is maybe not strictly the "most optimal", but which violates the constraints less.
My question: is there a setting in Gurobi that can make it pick a solution which does not exceed the constraint violation tolerance? What is a better way than my "hack" to resolve this issue, that uses Gurobi's features?
Please sign in to leave a comment.