Presentation is loading. Please wait.

Presentation is loading. Please wait.

#post_modern Branch-and-Cut Implementation

Similar presentations


Presentation on theme: "#post_modern Branch-and-Cut Implementation"— Presentation transcript:

1 #post_modern Branch-and-Cut Implementation
Matteo Fischetti, University of Padova ISMP 2018, Bordeaux, July 6, 2018

2 Why bothering about implementations at ISMP?
ISMP 2018, Bordeaux, July 6, 2018

3 Why bothering about implementations at ISMP?
is not just coding! Needed if we #orms want to have an impact in practical applications Ask yourself: would Artificial Intelligence (notably: deep learning) be so successful without gradient-descent algorithms served with their efficient #backpropagation implementations? ISMP 2018, Bordeaux, July 6, 2018

4 Algorithms without implementation
Proof: omitted as of no interest to the typical MP reader. Describing an Algorithm without Implementation is like stating a Theorem without Proof #just_a_computational_conjecture ISMP 2018, Bordeaux, July 6, 2018

5 Algorithms without implementation
Proof: omitted as of no interest to the typical MP reader. Describing an Algorithm without Implementation is like stating a Theorem without Proof #just_a_computational_conjecture ISMP 2018, Bordeaux, July 6, 2018

6 Branch & Cut ™ A “trademark” of Manfred Padberg and Giovanni Rinaldi
Proposed in the 1990’s for the TSP (and soon extended) Comes as an algorithm entangled with its implementation Theorem. Using cuts within an enumerative scheme is good. Proof. Assume w.l.o.g. a good LP solver. Then apply B&Bound but make use of families of (problem dependent) globally-valid inequalities perform efficient exact/heuristic cut separation on the fly use a data-structure (cut pool) to effectively share cuts among nodes price variables in a dynamic way (well before branch-and-price!) alternate row and column generation in a sound way … suspend a node if “unattractive” ISMP 2018, Bordeaux, July 6, 2018

7 Modern B&C implementation
Modern B&C solvers such as Cplex, Gurobi, Express, SCIP etc. can be fully customized by using callback functions Callback functions are just entry points in the B&C code where an advanced user (you!) can add his/her customizations Most-used callbacks (using Cplex’s jargon) Lazy constraint: add “lazy constr.s” that should be part of the original model User cut: add additional contr.s that hopefully help enforcing feasibility/integrality Heuristic: try to improve the incumbent (primal solution) as soon as possible Branch: modify the branching strategy ISMP 2018, Bordeaux, July 6, 2018

8 Lazy constraint callback
Automatically invoked when a solution is going to update the incumbent (meaning it is integer and feasible w.r.t. current model) This is the last checkpoint where we can discard a solution for whatever reason (e.g., because it violates a constraint that is not part of the current model) To avoid be bothered by this solution again and again, we can/should return a violated constraint (cut) that is added (globally or locally) to the current model Cut generation is often simplified by the fact that the solution to be cut is known to be integer (e.g., SECs for TSP) ISMP 2018, Bordeaux, July 6, 2018

9 User cut callback Automatically invoked at every B&B node when the current solution is not integer (e.g., just before branching) A violated cut can possibly be returned, to be added (locally or globally) to the current model  often leads to an improved convergence to integer solutions If no cut is returned, branching occurs as usual Cut generation can be hard as the point is not integer (heuristic approaches can be used) User cuts are not mandatory for B&C correctness  being too clever on them can actually slow-down the solver because of the overhead in generating and using them (larger/denser LPs etc.) ISMP 2018, Bordeaux, July 6, 2018

10 Other callbacks Branch callback: invoked at the end of each node (even when the LP solution is integer and apparently does not require any cut/branching) and used to impose/customize branching Incumbent callback: invoked just before updating the incumbent (after the lazy constraint callback) to possibly kill a solution without providing any violated cut Heuristic callback: used to build new (possibly problem-specific) feasible integer solutions Informative: to just compute/print internal statistics etc. etc. ISMP 2018, Bordeaux, July 6, 2018

11 Application: non-convex MIQP
(based on ongoing work with Michele Monaci, U. Bologna, and Domenico Salvagnin, U. Padova) Goal: implement a Mixed-Integer (non-convex) Quadratic solver Two approaches: 1. start with a continuous QP solver and add enumeration on top of it  implement B&B to handle integer var.s 2. start with a MILP solvers (B&C) and customize it to handle the non-convex quadratic terms  add McCormick & spatial branching PROS: … CONS: … ISMP 2018, Bordeaux, July 6, 2018

12 MIQP as a MILP with bilinear eq.s
The fully-general MIQP of interest reads and can be restated as ISMP 2018, Bordeaux, July 6, 2018

13 McCormick inequalities
To simplify notation, rewrite the generic bilevel eq as: Obviously (just replace xy by z in the products on the left) Note: mc1) and mc2) can be improved in case x=y  gradients cuts ISMP 2018, Bordeaux, July 6, 2018

14 Spatial branching McCormick inequalities are not perfect
 they are tight only when x and/or y are at their lower/upper bound  at some B&C nodes, it may happen that the current (fractional or integer) solution satisfies all MC inequalities but some bilinear eq.s z = xy are still violated (we call this #bilinear_infeasibility)  we need a bilinear-specific branching (the usual MILP branching on integrality does not work if all var.s are integer already) Spatial branching: if z* = x* y* is an offended bilinear eq., branch on (x ≤ x*) OR (x ≥ x*) to make the upper (resp. lower) bound on x tight at the left (resp. right) child node – thus improving the corresponding MC inequality ISMP 2018, Bordeaux, July 6, 2018

15 Vanilla B&C implementation
Lazy constraint callback: separation of MC inequalities Usercut callback: not needed (and sometimes detrimental) Branch callback: spatial branching on the “most offended” z = xy Incumbent callback: very-last resort to kill a bilinear-infeasible integer solution (when everything else fails e.g. because of tolerances) Precision: LP precision higher (more restrictive) than bilinear tolerance MILP heuristics (kindly provided by the MILP solver): active at their default level MIQP-specific heuristics: not implemented Implemented but not used in the vanilla version: additional bilinear-specific cuts  Balas’ Intersection Cuts (ICs) semi-spatial branching (branch threshold x*+δ  x* violates the x-bound in one of the two children, MC only needed in the other one) ISMP 2018, Bordeaux, July 6, 2018

16 Does it work? Comparison with the SCIP 5.0 MIQP solver using CPLEX 12.8 as LP solver + internal nonlinear solver Preliminary test on the quadratic MINLPlib (700+ instances) … … but some instances removed as root LP was unbounded  they need bound tightening by preprocessing (TODO) Results of our B&C callback-based vanilla implementation using CPLEX 12.8 as MILP solver; 1-thread runs (parallel runs not allowed in SCIP); only instances solved by both codes in the 1-hour time limit. Overall, we are as fast as SCIP (but the latter solves more instances within the time limit  SCIP qualifies as a more robust solver). We are 2 to 10 times faster than SCIP when the optimal/best-known solution from MINLPlib is used as a warm-start for both codes  evidently, we miss a sound bilinear-specific heuristic (TODO) ISMP 2018, Bordeaux, July 6, 2018

17 More detailed comparison
SCIP vs noic (our “vanilla” version with no ICs and classical spatial branching)  Results with incumbent warm-start (only instances solved by both codes) ISMP 2018, Bordeaux, July 6, 2018

18 Thanks for your attention!
Slides available at . ISMP 2018, Bordeaux, July 6, 2018


Download ppt "#post_modern Branch-and-Cut Implementation"

Similar presentations


Ads by Google