Presentation is loading. Please wait.

Presentation is loading. Please wait.

Divide and Conquer Optimization problem: z = max{cx : x  S}

Similar presentations


Presentation on theme: "Divide and Conquer Optimization problem: z = max{cx : x  S}"— Presentation transcript:

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

1 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 = maxk zk. Strategy: divide the feasible region into sub-regions and compare the optimal solutions from each sub-region.

2 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]}

3 Enumeration Tree S x1= 0 x1= 1 S0 S1 x2= 0 x2= 1 x2= 0 x2= 1 S00 S01
In the worst case, a branch-and-bound procedure would have to visit all eight leaves of the enumeration tree to find z.

4 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)}

5 Pruning by Optimality 13  z = max{cx : x  S}  27.
ZU(S) = 27 ZL(S) = 13 ZU(S) = 25 S ZL(S) = 20 ZU(S0) = 20 ZL(S0) = 20 ZU(S1) = 25 ZL(S1) = 15 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}

6 Pruning by Bounds 13  z = max{cx : x  S}  27.
ZU(S) = 27 ZL(S) = 13 ZU(S) = 26 S ZL(S) = 18 ZL(S) = 21 ZU(S0) = 20 ZL(S0) = 18 ZU(S1) = 26 ZL(S1) = 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.

7 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)  

8 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)  

9 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

10 Node Selection Criteria
CPLEX provides node-selection control via the nodesel and backtrack parameters nodesel i (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”.

11 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.

12 Experiments with nodesel and backtrack

13 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

14 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


Download ppt "Divide and Conquer Optimization problem: z = max{cx : x  S}"

Similar presentations


Ads by Google