I have an integer linear programming problem that takes very long to solve by the solvers I've tried (CPLEX, CBC), even though they find the optimal solution early on. They just take forever to fully prove it.
It's easy to calculate a trivial lower bound for the objective value of my minimization problem, but in CPLEX's output (Best Bound column) I can see that it doesn't even come close for a long, long time. It finds really good solutions almost immediately, but it wrongly thinks the optimal solution could be much better.
Now I have to admit I don't really know how these solvers work, but it looks like they are wasting time trying to improve on ridiculously weak lower bounds, hunting for impossibly optimistic solutions. So my questions are:
Could telling the solver a decent lower bound of the objective help it run through quicker?
If so, which solvers can accept a known lower bound provided as additional input?
As an illustration, I paste the first few lines of CPLEX's output from an example run (which goes on for much longer, without any further improvement of the objective and a painfully slow improvement of the best bound):
Nodes Cuts/
Node Left Objective IInf Best Integer Best Bound ItCnt Gap
0 0 -388.6997 178 -388.6997 9
* 0+ 0 297.0000 -388.6997 9 230.88%
* 0+ 0 275.0000 -388.6997 9 241.35%
0 2 -388.6997 178 275.0000 -387.8106 9 241.02%
* 20+ 20 185.0000 -307.6363 80 266.29%
* 30+ 30 135.0000 -307.6363 90 327.88%
* 30+ 30 94.0000 -307.6363 90 427.27%
* 60+ 60 90.0000 -307.6363 120 441.82%
* 160+ 126 77.0000 -307.6363 272 499.53%
* 200+ 93 12.0000 -307.4836 325 ---
300 182 -135.2988 107 12.0000 -268.6638 466 ---
1200 934 -50.6022 85 12.0000 -206.2938 1480 ---
2197 1755 -96.9612 93 12.0000 -189.8013 2470 ---
3226 2600 -2.8316 87 12.0000 -179.9669 3480 ---
4374 3521 -156.2442 110 12.0000 -170.4183 4567 ---
5490 4421 -128.0871 97 12.0000 -167.3696 5623 ---
6971 5603 -147.5022 108 12.0000 -162.4180 7055 ---
8739 6997 -103.5374 113 12.0000 -156.3532 8673 ---
I wish I could tell the solver to not bother looking for solutions with an objective lower than 10 (because I can prove that much with a simpler method) and especially not with a negative objective value (because it's not even possible in my model).