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)
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 |
✅ |
✅ |
Supported constraint attribute¶
Attribute |
Get |
Set |
---|---|---|
Name |
✅ |
✅ |
Primal |
✅ |
❌ |
Dual |
✅ |
❌ |
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)