Our client would like periodic updates on the progress of a gurobi optimization.
We have implemented a callback utilizing where == GRB.callback.MIP to check the progress of a solution about every 5 sec, but noticed there were still stretches of time (almost a minute) where we received no updates.
Upon examination of all possible gurobi callbacks for this model, we found that there is a gap where gurobi issues no callbacks:
Furthermore, it appears that gurobi is holding onto the GIL (Global Interpreter Lock) during this time -- our other python threads get no timeslice.
This period of inactivity seems to occur at the end of processing the root node:
Nodes | Current Node | Objective Bounds | Work
Expl Unexpl | Obj Depth IntInf | Incumbent BestBd Gap | It/Node Time
....
0 0 -423267.16 0 606 - -423267.16 - - 20s
0 0 -423250.72 0 572 - -423250.72 - - 23s <==== GAP starts here
0 2 -423250.72 0 569 - -423250.72 - - 89s
7 14 -422822.58 3 548 - -422822.58 - 469 90s
170 172 -409636.35 31 409 - -422480.32 - 108 95s
Should there not be at least POLLING callbacks during this period?
Can you explain what gurobi is doing during this time?
This happens with many of our models.
I have an .mps file that I could send if needed (but of course this is a large model).
Thanks!