1 / 15

EMIS 8373: Integer Programming

EMIS 8373: Integer Programming. Refinements to LP-Based Branch-and-Bound updated 31 March 2009 . Divide and Conquer. Optimization problem: z = max{ cx : x  S }

aquila
Télécharger la présentation

EMIS 8373: Integer Programming

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. EMIS 8373: Integer Programming Refinements to LP-Based Branch-and-Bound updated 31 March 2009

  2. Divide and Conquer • Optimization problem: z = max{cx : xS} • Proposition: Let S = S1S2 …  Sk be a decomposition of S into smaller sets, and let zk = max{cx : xSk} for k = 1, 2, …, K. Then z = maxkzk. • Strategy: divide the feasible region into sub-regions and compare the optimal solutions from each sub-region.

  3. Divide and Conquer Example • Example: S {0,1}3 • S0 = {xS: x1 = 0} • S0 = {[0,0,0],[0,0,1],[0,1,0],[0,1,1]} • S1 = {xS: x1 = 1} • S1 = {[1,0,0],[1,0,1],[1,1,0],[1,1,1]} • S00 = {xS0: x2 = 0}={[0,0,0],[0,0,1]} • S01 = {xS0: x2 = 1}={[0,1,0],[0,1,1]} • S10 = {xS1: x2 = 0}={[1,0,0],[1,0,1]} • S11 = {xS1: x2 = 1}={[1,1,0],[1,1,1]}

  4. Enumeration Tree S x1= 0 x1= 1 S0 S1 x2= 0 x2= 1 x2= 0 x2= 1 S00 S01 S10 S11 x3= 1 x3= 1 x3= 1 x3= 1 x3= 0 x3= 0 x3= 0 x3= 0 S010 S011 S000 S001 S110 S111 S100 S101 In the worst case, a branch-and-bound procedure would have to visit all eight leaves of the enumeration tree to find z.

  5. Implicit Enumeration • Let ZU(Sk) be an upper bound on zk. • Let ZL(Sk) be a lower bound on zk. • There is at least one solution in Sk with objective function value ZL(Sk). • Implicit enumeration uses the following facts to eliminate some branches of the enumeration tree • ZL(Sk)  zk  ZU(Sk), • maxk {ZL(Sk)}  z maxk {ZU(Sk)}

  6. ZU(S) = 27 ZU(S0) = 20 ZU(S1) = 25 ZL(S) = 13 ZL(S0) = 20 ZL(S1) = 15 Pruning by Optimality ZU(S) = 25 S ZL(S) = 20 S0 S1 13 z = max{cx : x S}  27. 20 z0 20  z0= 20. Prune (fathom) S0. z = max{z0,z1}  20 z = max{cx : xS}  27 z0= 20, z1 25  z max{20, 25}

  7. ZU(S0) = 20 ZU(S1) = 26 ZU(S) = 27 ZL(S1) = 21 ZL(S) = 13 ZL(S0) = 18 Pruning by Bounds ZU(S) = 26 S ZL(S) = 18 ZL(S) = 21 S0 S1 13 z = max{cx : xS}  27. 18 z = max{cx : xS}  27. 21 z = max{cx : xS}  26. S0 can be pruned since the best solution in S0 will be worse than the worst solution in S1.

  8. LP-Based Branch-and-Bound (Maximization) • Uses the LP relaxation at each node to find a dual (upper) bound • Uses feasible IP solutions for primal (lower) bounds • primal bound (S)  z dual bound (S) • Prunes by • Optimality: dual bound (Sk) = primal bound (Sk) • Bound: dual bound (Sk) < primal bound (S) • Infeasibility of LP sub-problem • Stopping criteria • Optimality: dual bound (S) = primal bound (S) • Optimality gap: (dual bound (S) – primal bound (S))/dual bound (S) 

  9. LP-Based Branch-and-Bound (Minimization) • Uses the LP relaxation at each node to find a dual (lower) bound • Uses feasible IP solutions for primal (upper) bounds • dual bound (S)  z primal bound (S) • Prunes by • Optimality: dual bound (Sk) = primal bound (Sk) • Bound: dual bound (Sk) > primal bound (S) • Infeasibility of LP sub-problem • Stopping criteria • Optimality: dual bound (S) = primal bound (S) • Optimality gap: (primal bound (S) – dual bound (S))/dual bound (S)  

  10. Algorithmic Control • Which active node should be selected for the next branching step? • Which fractional variable should be branched on at that node? • Should we investigate the down branch first or the up branch? • How should we solve the subproblem at the selected node? • Alternative LP algorithms

  11. Node Selection Criteria • CPLEX provides node-selection control via the nodesel and backtrack parameters • nodeseli (i = 1 or 2, default 1) • CPLEX associates a value with each node and choose the next active node based on this value • To use the bound from the optimal LP solution at the node set nodesel=1 • When nodesel=2, the node’s value is based on an estimate CPLEX makes of the best IP solution that could be found by branching on that node • Best bound (nodesel=1) tends to find better solutions earlier in the process, but nodesel=2 may be faster overall if the objective function values are “tightly clustered”.

  12. Backtracking • Depending on the value at the most recently created node, CPLEX either braches at the active node with the best value or else it backtracks. • backtrack=r (any number, default 0.85) • backtrack=0 does a pure depth-first search (DFS) • Successive LP’s are easier (faster) to solve • Finds feasible solutions faster • Lower values > 0 favor backtracking (BFS) and values > 1 discourage it. • Can help move the search to a better part of the tree rather than (possibly) wasting time considering the descendents of a one node.

  13. Experiments with nodesel and backtrack

  14. Variable Selection • varesel=i (i {-1, 0, 1, 2, 3 }, default 0) • When i=1 the variable with largest fractional part is selected • When i=-1 the variable with the smallest fractional part is selected • When i=2 an estimate of how much the objective function will degrade if each variable is forced to an adjacent integer is used to select the variable • When i=3 “strong branching” is used • Select the branch with the “most promising” partial solution • Requires the most time per node • When i = 0 a proprietary heuristic is used

  15. Branching Rules • If the model contains more than one type of integer variable (e.g., integer x and binary y), it may be helpful to use a branching rule that gives a higher priority to one type of variable of the other. • Often useful for xijM yj • AMPL commands: • option mip_priorities ‘y 100 x 1’; • option cplexamp_auxfiles c; • CPLEX parameter branch=i • Use branch = 1 to always take the up branch first • Use branch = -1 to always take the down branch first

More Related