Gurobi¶
Initial setup¶
from pyoptinterface import gurobi
model = gurobi.Model()
You need to follow the instructions in Getting Started to set up the optimizer correctly.
If you want to manage the license of Gurobi manually, you can create a gurobi.Env
object and pass it to the constructor of the gurobi.Model
object, otherwise we will initialize an implicit global gurobi.Env
object automatically and use it.
env = gurobi.Env()
model = gurobi.Model(env)
For example, you can set the parameter of the gurobi.Env
object to choose the licensing behavior.
env = gurobi.Env(empty=True)
env.set_raw_parameter("ComputeServer", "myserver1:32123")
env.set_raw_parameter("ServerPassword", "pass")
env.start()
model = gurobi.Model(env)
For users who want to release the license immediately after the optimization, you can call the close
method of all models created and the gurobi.Env
object. It applies to other commercial solvers supported as well.
env = gurobi.Env()
model = gurobi.Model(env)
# do something with the model
model.close()
env.close()
The capability of gurobi.Model
¶
Supported constraints¶
Constraint |
Supported |
---|---|
✅ |
|
✅ |
|
✅ |
|
✅ |
Supported model attribute¶
Attribute |
Get |
Set |
---|---|---|
Name |
✅ |
✅ |
ObjectiveSense |
✅ |
✅ |
DualStatus |
✅ |
❌ |
PrimalStatus |
✅ |
❌ |
RawStatusString |
✅ |
❌ |
TerminationStatus |
✅ |
❌ |
BarrierIterations |
✅ |
❌ |
DualObjectiveValue |
✅ |
❌ |
NodeCount |
✅ |
❌ |
NumberOfThreads |
✅ |
✅ |
ObjectiveBound |
✅ |
❌ |
ObjectiveValue |
✅ |
❌ |
RelativeGap |
✅ |
✅ |
Silent |
✅ |
✅ |
SimplexIterations |
✅ |
❌ |
SolverName |
✅ |
❌ |
SolverVersion |
✅ |
❌ |
SolveTimeSec |
✅ |
❌ |
TimeLimitSec |
✅ |
✅ |
Supported variable attribute¶
Attribute |
Get |
Set |
---|---|---|
Value |
✅ |
❌ |
LowerBound |
✅ |
✅ |
UpperBound |
✅ |
✅ |
Domain |
✅ |
✅ |
PrimalStart |
✅ |
✅ |
Name |
✅ |
✅ |
IISLowerBound |
✅ |
❌ |
IISUpperBound |
✅ |
❌ |
Supported constraint attribute¶
Attribute |
Get |
Set |
---|---|---|
Name |
✅ |
✅ |
Primal |
✅ |
❌ |
Dual |
✅ |
❌ |
IIS |
✅ |
❌ |
Solver-specific operations¶
Parameter¶
For solver-specific parameters, we provide get_raw_parameter
and set_raw_parameter
methods to get and set the parameters.
model = gurobi.Model()
# get the value of the parameter
value = model.get_raw_parameter("TimeLimit")
# set the value of the parameter
model.set_raw_parameter("TimeLimit", 10.0)
Attribute¶
Gurobi supports a lot of attributes for the model, variable, and constraint. We provide methods to get or set the value of the attribute.
Model attribute:
model.get_model_raw_attribute(name: str)
andmodel.set_model_raw_attribute(name: str, value: Any)
Variable attribute:
model.get_variable_raw_attribute(variable, name: str)
andmodel.set_variable_raw_attribute(variable, name: str, value: Any)
Constraint attribute:
model.get_constraint_raw_attribute(constraint, name: str)
andmodel.set_constraint_raw_attribute(constraint, name: str, value: Any)
We also provide gurobi.GRB
to contain all the constants in gurobipy.GRB
.
For model status:
status = model.get_model_raw_attribute(gurobi.GRB.Attr.Status)
if status == gurobi.GRB.OPTIMAL:
...
elif status == gurobi.GRB.INFEASIBLE:
...
For reduced cost of a variable:
rc = model.get_variable_raw_attribute(variable, gurobi.GRB.Attr.RC)
For right-hand side value of a constraint:
rhs = model.get_constraint_raw_attribute(constraint, gurobi.GRB.Attr.RHS)