Gurobi Cookbook - Relaxed Function (3/5)
written by Abremod, LLC on 2019-06-29
Obtaining the lp relaxation of a MIP
The function relaxed
of the model object creates a copy of the problem with the intgrality constraints relaxed.
relaxed = m.relax()
relaxed.optimize()
Optimize a model with 637 rows, 120 columns and 14280 nonzeros
Coefficient statistics:
Matrix range [1e+00, 1e+00]
Objective range [1e+00, 1e+00]
Bounds range [1e+00, 1e+00]
RHS range [1e+00, 1e+01]
Presolve time: 0.01s
Presolved: 120 rows, 757 columns, 14400 nonzeros
Iteration Objective Primal Inf. Dual Inf. Time
0 -0.0000000e+00 0.000000e+00 1.752000e+03 0s
414 1.7142857e+01 0.000000e+00 0.000000e+00 0s
Solved in 414 iterations and 0.04 seconds
Optimal objective 1.714285714e+01
commentary
The relax
function returns a fresh of the original model. The original model will still have the original constraints. You can see this by querying the attribute isMIP.
cplex users
In the cplex interactive shell, this corresponds to the command change problem lp
except that this command will modify the global model instead of returning a new model
m.isMIP, relaxed.isMIP
(1, 0)
commentary
The dual price is available only for continous models.
Attempting to query this attribute for MIPs (or an continuous model without a solution) will result in the exception
GurobiError: Unable to retrieve attribute 'Pi'
If you are unsure that the model has integer variables, you can check with m.isMIP