3

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:

  1. Could telling the solver a decent lower bound of the objective help it run through quicker?

  2. 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).

  • 1
    (1) You can always add a constraint which makes all solutions lower than your a-priori known bound infeasible. That would be enough (2) Regarding commercial solvers, i read more than one time, that the developers think this is often contra-productive. But maybe it helps in your case (and sadly i can't provide a link; maybe google for the question within gurobi's mailing-list). (3) Depending on what you achieve you might tune your solver-options. Gurobi has MIPFocus as an option. Maybe you can achieve that too.E.g many cuts for better proving of bounds; more heuristics for faster good solutions – sascha Oct 14 '16 at 22:07
  • How did you find the trivial lower bound? Did you just relax the integrality constraints and solved the (real) linear program? – Rodrigo de Azevedo Oct 15 '16 at 08:41
  • @sascha Adding the constraint on the objective didn't help, but I'll look into Gurobi and (3), thanks. It might be exactly what I need. – bela_a_holdon Oct 15 '16 at 14:06
  • 1
    Also read [this](http://inside.mines.edu/~anewman/MIP_practice120212.pdf). – sascha Oct 15 '16 at 14:11
  • @RodrigodeAzevedo No, it's just some operations on the data, a simpler combinatorial problem than the one I want to solve. But the non-negativity of my objective would already be good enough: the progression of the lower bound takes ages to reach a trivial zero, after that it doesn't take too long. – bela_a_holdon Oct 15 '16 at 14:12

1 Answers1

1

If you have a good lower bound, from a feasible solution, you can provide that as a MIP start to CPLEX.

CPLEX will then try to improve that solution and ignore any branches in its branch and bound algorithm that has a bound lower than that.

You can see here for more details: https://www.ibm.com/support/knowledgecenter/SS9UKU_12.5.0/com.ibm.cplex.zos.help/UsrMan/topics/discr_optim/mip/para/49_mipStarts.html

Realhermit
  • 415
  • 3
  • 9