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).
A few parameters are callback settable. These parameters can be modified from within a callback call. How to do that for the different APIs is illustrated here.
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 

C++ 

Java 

.NET 

Python 

Possible where
values are:

Numeric value 
Optimizer status 


0 
Periodic polling callback 

1 
Currently performing presolve 

2 
Currently in simplex 

3 
Currently in MIP 

4 
Found a new MIP incumbent 

5 
Currently exploring a MIP node 

6 
Printing a log message 

7 
Currently in barrier 

8 
At the end of a multiobjective iteration 

9 
Currently computing an IIS 
Allowable what
values depend on the value of the where
argument.
Valid combinations are:


Result type 
Description 


Any except 
double 
Elapsed solver runtime (seconds). 

Any except 
double 
Elapsed solver work (work units). 

Any except 
double 
Allocated memory (GB). 

Any except 
double 
Maximum memory ever allocated (GB). 


int 
The number of columns removed by presolve to this point. 


int 
The number of rows removed by presolve to this point. 


int 
The number of constraint senses changed by presolve to this point. 


int 
The number of variable bounds changed by presolve to this point. 


int 
The number of coefficients changed by presolve to this point. 


double 
Current simplex iteration count. 


double 
Current simplex objective value. 


double 
Current primal infeasibility. 


double 
Current dual infeasibility. 


int 
Is problem currently perturbed? 


double 
Current best objective. 


double 
Current best objective bound. 


double 
Current explored node count. 


int 
Number of solutions that were presented through the 


int 
Current count of cutting planes applied. 


double 
Current unexplored node count. 


double 
Current simplex iteration count. 


int 
Number of scenarios that are still open in a multiscenario model. 


int 
Current phase in the MIP solution process. Possible values are 0 (in the NoRel heuristic), 1 (in the standard MIP search), or 2 (performing MIP solution improvement). Predefined constants are available (e.g., GRB.PHASE_MIP_SEARCH). 


double * 
Solution vector for new solution (C only). The resultP argument to C
routine Use callback methods 


double 
Objective value for new solution. Not necessarily better than the current incumbent. 


double 
Current best objective. 


double 
Current best objective bound. 


double 
Current explored node count. 


int 
Number of solutions that were presented through the 


int 
Number of scenarios that are still open in a multiscenario model. 


int 
Current phase in the MIP solution. Possible values are 0 (in the NoRel heuristic), 1 (in the standard MIP search), or 2 (performing MIP solution improvement). Predefined constants are available (e.g., GRB.PHASE_MIP_SEARCH). 


int 
Optimization status of current MIP node (see the Status Code section for further information). 


double 
Current best objective. 


double 
Current best objective bound. 


double 
Current explored node count. 


int 
Number of solutions that were presented through the 


int 
Number of scenarios that are still open in a multiscenario model. 


int 
Current phase in the MIP solution process. Possible values are 0 (in the NoRel heuristic), 1 (in the standard MIP search), or 2 (performing MIP solution improvement). Predefined constants are available (e.g., GRB.PHASE_MIP_SEARCH). 


double * 
Relaxation solution for the current node, when its optimization status
is GRB_OPTIMAL (C only). The resultP argument to C routine
Note that the relaxation solution retrieved at a node is not necessarily feasible for the user model. Use callback methods 


int 
Current barrier iteration count. 


double 
Primal objective value for current barrier iterate. 


double 
Dual objective value for current barrier iterate. 


double 
Primal infeasibility for current barrier iterate. 


double 
Dual infeasibility for current barrier iterate. 


double 
Complementarity violation for current barrier iterate. 


int 
Current count of objectives already optimized. 


int 
Number of solutions that were presented through the 


double * 
Solution vector for new solution (C only). The Use callback methods 


int 
Optimization status for current objective (see the Status Code section for further information). 


double 
Best value for current objective. 


double 
Best bound for current objective. 


double 
MIP gap of the current objective (only available if the model is a MIP). 


double 
Simplex iteration count for current objective. 


double 
Explored node count for current objective. 


double 
Unexplored node count for current objective. 


double 
Elapsed solver runtime (seconds) for current objective. 


double 
Elapsed solver work (work units) for current objective. 


int 
Minimum number of constraints in the IIS. 


int 
Maximum number of constraints in the IIS. 


int 
Estimated number of constraints in the IIS. 


int 
Minimum number of variable bounds in the IIS. 


int 
Maximum number of variable bounds in the IIS. 


int 
Estimated number of variable bounds in the IIS. 


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.
Callback notes#
Note that the POLLING
callback is an optional callback that is only
invoked if other callbacks have not been called in a while. It does not
allow any progress information to be retrieved. It is simply provided to
allow interactive applications to regain control frequently, so that
they can maintain application responsiveness.
The objectoriented interfaces have specialized methods for obtaining
the incumbent or relaxation solution. While in C you would use
GRBcbget
, you use getSolution
or getNodeRel
in the
objectoriented interfaces. Please consult the callback descriptions for
C++
, Java
,
.NET
, or Python
for further details.
Note that the MIPSOL
callback might also be called for solutions
that do not improve the incumbent. This has technical reasons and should
only happen in rare cases. You might want to check the MIPSOL_OBJ
value
if your code relies on stricly improving solutions. The MIPSOL
callback
will also be called once for each MIP start.
Note that the MIPNODE
callback will be called once for each cut pass
during the root node solve. The MIPNODE_NODCNT
value will remain at
0 until the root node is complete. If you query relaxation values from
during the root node, the first MIPNODE
callback will give the
relaxation with no cutting planes, and the last will give the relaxation
after all root cuts have been applied.
Note that the multiobjective optimization algorithm solves a sequence of optimization problems
which we refer to as optimization passes. The MULTIOBJ
callback will be
called once at the end of each pass. Also, during each pass, MIPrelated
callbacks will be called if the original model is a MIP, and LPrelated
callbacks will be called if the original model is an LP.
Note that there are certain restrictions concerning the available
callbacks when using the Gurobi Remote Services (Compute Server, Instant
Cloud, etc.). Please refer to the Callbacks
section of the
Gurobi Remote Services Manual for
more information.