Try our new documentation site (beta).
Callback Codes
The Gurobi callback routines make use of a pair of arguments:
where
and what
. When a user callback function is called,
the where
argument indicates from where in the Gurobi
optimizer it is being called (presolve, simplex, barrier, MIP, etc.).
When the user callback wishes to obtain more detailed information
about the state of the optimization, the what
argument can be
passed to an appropriate get
method for your language
to obtain additional information
(e.g., GRBcbget in C,
GRBCallback::getIntInfo in C++,
GRBCallback.getIntInfo in Java,
GRBCallback.GetIntInfo in .NET, and
Model.cbGet in Python).
More detailed information on how to use callbacks in your application can be found in the reference manuals for the different Gurobi language interfaces (C, C++, Java, .NET, and Python).
Possible values for the where
and what
arguments are
listed in the following tables. Note that these values are referred
to in slightly different ways from the different Gurobi interfaces.
Consider the SIMPLEX
value as an example. You would
refer to this constant as follows from the different Gurobi APIs:
Language | Callback constant |
---|---|
C | GRB_CB_SIMPLEX |
C++ | GRB_CB_SIMPLEX |
Java | GRB.Callback.SIMPLEX |
.NET | GRB.Callback.SIMPLEX |
Python | GRB.Callback.SIMPLEX |
Possible where
values are:
where |
Optimizer status |
---|---|
POLLING | Periodic polling callback |
PRESOLVE | Currently performing presolve |
SIMPLEX | Currently in simplex |
MIP | Currently in MIP |
MIPSOL | Found a new MIP incumbent |
MIPNODE | Currently exploring a MIP node |
BARRIER | Currently in barrier |
MESSAGE | Printing a log message |
Allowable what
values depend on the value of the where
argument. Valid combinations are:
what |
where |
Result type | Description |
---|---|---|---|
RUNTIME | Any except POLLING | double | Elapsed solver runtime (seconds). |
PRE_COLDEL | PRESOLVE | int | The number of columns removed by presolve to this point. |
PRE_ROWDEL | PRESOLVE | int | The number of rows removed by presolve to this point. |
PRE_SENCHG | PRESOLVE | int | The number of constraint senses changed by presolve to this point. |
PRE_BNDCHG | PRESOLVE | int | The number of variable bounds changed by presolve to this point. |
PRE_COECHG | PRESOLVE | int | The number of coefficients changed by presolve to this point. |
SPX_ITRCNT | SIMPLEX | double | Current simplex iteration count. |
SPX_OBJVAL | SIMPLEX | double | Current simplex objective value. |
SPX_PRIMINF | SIMPLEX | double | Current primal infeasibility. |
SPX_DUALINF | SIMPLEX | double | Current dual infeasibility. |
SPX_ISPERT | SIMPLEX | int | Is problem current perturbed? |
MIP_OBJBST | MIP | double | Current best objective. |
MIP_OBJBND | MIP | double | Current best objective bound. |
MIP_NODCNT | MIP | double | Current explored node count. |
MIP_SOLCNT | MIP | int | Current count of feasible solutions found. |
MIP_CUTCNT | MIP | int | Current count of cutting planes applied. |
MIP_NODLFT | MIP | double | Current unexplored node count. |
MIP_ITRCNT | MIP | double | Current simplex iteration count. |
MIPSOL_SOL | MIPSOL | double * | Solution vector for new solution (C only). The resultP argument to C routine GRBcbget should point to an array of doubles that is at least as long as the number of variables in the user model. |
MIPSOL_OBJ | MIPSOL | double | Objective value for new solution. |
MIPSOL_OBJBST | MIPSOL | double | Current best objective. |
MIPSOL_OBJBND | MIPSOL | double | Current best objective bound. |
MIPSOL_NODCNT | MIPSOL | double | Current explored node count. |
MIPSOL_SOLCNT | MIPSOL | int | Current count of feasible solutions found. |
MIPNODE_STATUS | MIPNODE | int | Optimization status of current MIP node (see the Status Code section for further information). |
MIPNODE_OBJBST | MIPNODE | double | Current best objective. |
MIPNODE_OBJBND | MIPNODE | double | Current best objective bound. |
MIPNODE_NODCNT | MIPNODE | double | Current explored node count. |
MIPNODE_SOLCNT | MIPNODE | int | Current count of feasible solutions found. |
MIPNODE_REL | MIPNODE | double * | Relaxation solution for the current node, when its optimization status is GRB_OPTIMAL (C only). The resultP argument to C routine GRBcbget should point to an array of doubles that is at least as long as the number of variables in the user model. |
BARRIER_ITRCNT | BARRIER | int | Current barrier iteration count. |
BARRIER_PRIMOBJ | BARRIER | double | Primal objective value for current barrier iterate. |
BARRIER_DUALOBJ | BARRIER | double | Dual objective value for current barrier iterate. |
BARRIER_PRIMINF | BARRIER | double | Primal infeasibility for current barrier iterate. |
BARRIER_DUALINF | BARRIER | double | Dual infeasibility for current barrier iterate. |
BARRIER_COMPL | BARRIER | double | Complementarity violation for current barrier iterate. |
MSG_STRING | MESSAGE | char * | The message that is being printed. |
Remember that the appropriate prefix must be added to the what
or where
name listed above, depending on the language you are
using.
Note that the POLLING
callback does not allow any
additional information to be retreived. It is provided in order to
allow interactive applications to regain control frequently, so that
they can maintain application responsiveness.