fbpx
Wikipedia

Branch and cut

Branch and cut[1] is a method of combinatorial optimization for solving integer linear programs (ILPs), that is, linear programming (LP) problems where some or all the unknowns are restricted to integer values.[2] Branch and cut involves running a branch and bound algorithm and using cutting planes to tighten the linear programming relaxations. Note that if cuts are only used to tighten the initial LP relaxation, the algorithm is called cut and branch.

Algorithm edit

This description assumes the ILP is a maximization problem.

The method solves the linear program without the integer constraint using the regular simplex algorithm. When an optimal solution is obtained, and this solution has a non-integer value for a variable that is supposed to be integer, a cutting plane algorithm may be used to find further linear constraints which are satisfied by all feasible integer points but violated by the current fractional solution. These inequalities may be added to the linear program, such that resolving it will yield a different solution which is hopefully "less fractional".

At this point, the branch and bound part of the algorithm is started. The problem is split into multiple (usually two) versions. The new linear programs are then solved using the simplex method and the process repeats. During the branch and bound process, non-integral solutions to LP relaxations serve as upper bounds and integral solutions serve as lower bounds. A node can be pruned if an upper bound is lower than an existing lower bound. Further, when solving the LP relaxations, additional cutting planes may be generated, which may be either global cuts, i.e., valid for all feasible integer solutions, or local cuts, meaning that they are satisfied by all solutions fulfilling the side constraints from the currently considered branch and bound subtree.

The algorithm is summarized below.

  1. Add the initial ILP to  , the list of active problems
  2. Set   and  
  3. while   is not empty
    1. Select and remove (de-queue) a problem from  
    2. Solve the LP relaxation of the problem.
    3. If the solution is infeasible, go back to 3 (while). Otherwise denote the solution by   with objective value  .
    4. If  , go back to 3.
    5. If   is integer, set   and go back to 3.
    6. If desired, search for cutting planes that are violated by  . If any are found, add them to the LP relaxation and return to 3.2.
    7. Branch to partition the problem into new problems with restricted feasible regions. Add these problem to   and go back to 3
  4. return  

Pseudocode edit

In C++-like pseudocode, this could be written:

// ILP branch and cut solution pseudocode, assuming objective is to be maximized ILP_solution branch_and_cut_ILP(IntegerLinearProgram initial_problem) {  queue active_list; // L, above  active_list.enqueue(initial_problem); // step 1  // step 2  ILP_solution optimal_solution; // this will hold x* above  double best_objective = -std::numeric_limits<double>::infinity; // will hold v* above  while (!active_list.empty()) { // step 3 above  LinearProgram& curr_prob = active_list.dequeue(); // step 3.1  do { // steps 3.2-3.7  RelaxedLinearProgram& relaxed_prob = LP_relax(curr_prob); // step 3.2  LP_solution curr_relaxed_soln = LP_solve(relaxed_prob); // this is x above  bool cutting_planes_found = false;  if (!curr_relaxed_soln.is_feasible()) { // step 3.3  continue; // try another solution; continues at step 3  }  double current_objective_value = curr_relaxed_soln.value(); // v above  if (current_objective_value <= best_objective) { // step 3.4  continue; // try another solution; continues at step 3  }  if (curr_relaxed_soln.is_integer()) { // step 3.5  best_objective = current_objective_value;  optimal_solution = cast_as_ILP_solution(curr_relaxed_soln);  continue; // continues at step 3  }  // current relaxed solution isn't integral  if (hunting_for_cutting_planes) { // step 3.6  violated_cutting_planes = search_for_violated_cutting_planes(curr_relaxed_soln);  if (!violated_cutting_planes.empty()) { // step 3.6  cutting_planes_found = true; // will continue at step 3.2  for (auto&& cutting_plane : violated_cutting_planes) {  active_list.enqueue(LP_relax(curr_prob, cutting_plane));  }  continue; // continues at step 3.2  }  }  // step 3.7: either violated cutting planes not found, or we weren't looking for them  auto&& branched_problems = branch_partition(curr_prob);  for (auto&& branch : branched_problems) {  active_list.enqueue(branch);  }  continue; // continues at step 3  } while (hunting_for_cutting_planes /* parameter of the algorithm; see 3.6 */  && cutting_planes_found);  // end step 3.2 do-while loop  } // end step 3 while loop  return optimal_solution; // step 4 } 

In the above pseudocode, the functions LP_relax, LP_solve and branch_partition called as subroutines must be provided as applicable to the problem. For example, LP_solve could call the simplex algorithm. Branching strategies for branch_partition are discussed below.

Branching strategies edit

An important step in the branch and cut algorithm is the branching step. At this step, there are a variety of branching heuristics that can be used. The branching strategies described below all involve what is called branching on a variable.[3] Branching on a variable involves choosing a variable,  , with a fractional value,  , in the optimal solution to the current LP relaxation and then adding the constraints   and  

Most infeasible branching
This branching strategy chooses the variable with the fractional part closest to 0.5.
Pseudo cost branching
The basic idea of this strategy is to keep track for each variable   the change in the objective function when this variable was previously chosen as the variable to branch on. The strategy then chooses the variable that is predicted to have the most change on the objective function based on past changes when it was chosen as the branching variable. Note that pseudo cost branching is initially uninformative in the search since few variables have been branched on.
Strong branching
Strong branching involves testing which of the candidate variable gives the best improvement to the objective function before actually branching on them. Full strong branching tests all candidate variables and can be computationally expensive. The computational cost can be reduced by only considering a subset of the candidate variables and not solving each of the corresponding LP relaxations to completion.

There are also a large number of variations of these branching strategies, such as using strong branching early on when pseudo cost branching is relatively uninformative and then switching to pseudo cost branching later when there is enough branching history for pseudo cost to be informative.

References edit

  1. ^ Padberg, Manfred; Rinaldi, Giovanni (1991). "A Branch-and-Cut Algorithm for the Resolution of Large-Scale Symmetric Traveling Salesman Problems". SIAM Review. 33 (1): 60–100. doi:10.1137/1033004. ISSN 0036-1445.
  2. ^ John E., Mitchell (2002). "Branch-and-Cut Algorithms for Combinatorial Optimization Problems" (PDF). Handbook of Applied Optimization: 65–77.
  3. ^ Achterberg, Tobias; Koch, Thorsten; Martin, Alexander (2005). "Branching rules revisited". Operations Research Letters. 33 (1): 42–54. doi:10.1016/j.orl.2004.04.002.

External links edit

  • SCIP: framework for branch-cut-and-price and a mixed integer programming solver
  • ABACUS – A Branch-And-CUt System – open source software
  • COIN-OR Cbc – open source software on GitHub

branch, method, combinatorial, optimization, solving, integer, linear, programs, ilps, that, linear, programming, problems, where, some, unknowns, restricted, integer, values, involves, running, branch, bound, algorithm, using, cutting, planes, tighten, linear. Branch and cut 1 is a method of combinatorial optimization for solving integer linear programs ILPs that is linear programming LP problems where some or all the unknowns are restricted to integer values 2 Branch and cut involves running a branch and bound algorithm and using cutting planes to tighten the linear programming relaxations Note that if cuts are only used to tighten the initial LP relaxation the algorithm is called cut and branch Contents 1 Algorithm 1 1 Pseudocode 2 Branching strategies 3 References 4 External linksAlgorithm editThis description assumes the ILP is a maximization problem The method solves the linear program without the integer constraint using the regular simplex algorithm When an optimal solution is obtained and this solution has a non integer value for a variable that is supposed to be integer a cutting plane algorithm may be used to find further linear constraints which are satisfied by all feasible integer points but violated by the current fractional solution These inequalities may be added to the linear program such that resolving it will yield a different solution which is hopefully less fractional At this point the branch and bound part of the algorithm is started The problem is split into multiple usually two versions The new linear programs are then solved using the simplex method and the process repeats During the branch and bound process non integral solutions to LP relaxations serve as upper bounds and integral solutions serve as lower bounds A node can be pruned if an upper bound is lower than an existing lower bound Further when solving the LP relaxations additional cutting planes may be generated which may be either global cuts i e valid for all feasible integer solutions or local cuts meaning that they are satisfied by all solutions fulfilling the side constraints from the currently considered branch and bound subtree The algorithm is summarized below Add the initial ILP to L displaystyle L nbsp the list of active problems Set x null displaystyle x text null nbsp and v displaystyle v infty nbsp while L displaystyle L nbsp is not empty Select and remove de queue a problem from L displaystyle L nbsp Solve the LP relaxation of the problem If the solution is infeasible go back to 3 while Otherwise denote the solution by x displaystyle x nbsp with objective value v displaystyle v nbsp If v v displaystyle v leq v nbsp go back to 3 If x displaystyle x nbsp is integer set v v x x displaystyle v leftarrow v x leftarrow x nbsp and go back to 3 If desired search for cutting planes that are violated by x displaystyle x nbsp If any are found add them to the LP relaxation and return to 3 2 Branch to partition the problem into new problems with restricted feasible regions Add these problem to L displaystyle L nbsp and go back to 3 return x displaystyle x nbsp Pseudocode edit In C like pseudocode this could be written ILP branch and cut solution pseudocode assuming objective is to be maximized ILP solution branch and cut ILP IntegerLinearProgram initial problem queue active list L above active list enqueue initial problem step 1 step 2 ILP solution optimal solution this will hold x above double best objective std numeric limits lt double gt infinity will hold v above while active list empty step 3 above LinearProgram amp curr prob active list dequeue step 3 1 do steps 3 2 3 7 RelaxedLinearProgram amp relaxed prob LP relax curr prob step 3 2 LP solution curr relaxed soln LP solve relaxed prob this is x above bool cutting planes found false if curr relaxed soln is feasible step 3 3 continue try another solution continues at step 3 double current objective value curr relaxed soln value v above if current objective value lt best objective step 3 4 continue try another solution continues at step 3 if curr relaxed soln is integer step 3 5 best objective current objective value optimal solution cast as ILP solution curr relaxed soln continue continues at step 3 current relaxed solution isn t integral if hunting for cutting planes step 3 6 violated cutting planes search for violated cutting planes curr relaxed soln if violated cutting planes empty step 3 6 cutting planes found true will continue at step 3 2 for auto amp amp cutting plane violated cutting planes active list enqueue LP relax curr prob cutting plane continue continues at step 3 2 step 3 7 either violated cutting planes not found or we weren t looking for them auto amp amp branched problems branch partition curr prob for auto amp amp branch branched problems active list enqueue branch continue continues at step 3 while hunting for cutting planes parameter of the algorithm see 3 6 amp amp cutting planes found end step 3 2 do while loop end step 3 while loop return optimal solution step 4 In the above pseudocode the functions LP relax LP solve and branch partition called as subroutines must be provided as applicable to the problem For example LP solve could call the simplex algorithm Branching strategies for branch partition are discussed below Branching strategies editAn important step in the branch and cut algorithm is the branching step At this step there are a variety of branching heuristics that can be used The branching strategies described below all involve what is called branching on a variable 3 Branching on a variable involves choosing a variable x i displaystyle x i nbsp with a fractional value x i displaystyle x i nbsp in the optimal solution to the current LP relaxation and then adding the constraints x i x i displaystyle x i leq left lfloor x i right rfloor nbsp and x i x i displaystyle x i geq left lceil x i right rceil nbsp Most infeasible branching This branching strategy chooses the variable with the fractional part closest to 0 5 Pseudo cost branching The basic idea of this strategy is to keep track for each variable x i displaystyle x i nbsp the change in the objective function when this variable was previously chosen as the variable to branch on The strategy then chooses the variable that is predicted to have the most change on the objective function based on past changes when it was chosen as the branching variable Note that pseudo cost branching is initially uninformative in the search since few variables have been branched on Strong branching Strong branching involves testing which of the candidate variable gives the best improvement to the objective function before actually branching on them Full strong branching tests all candidate variables and can be computationally expensive The computational cost can be reduced by only considering a subset of the candidate variables and not solving each of the corresponding LP relaxations to completion There are also a large number of variations of these branching strategies such as using strong branching early on when pseudo cost branching is relatively uninformative and then switching to pseudo cost branching later when there is enough branching history for pseudo cost to be informative References edit Padberg Manfred Rinaldi Giovanni 1991 A Branch and Cut Algorithm for the Resolution of Large Scale Symmetric Traveling Salesman Problems SIAM Review 33 1 60 100 doi 10 1137 1033004 ISSN 0036 1445 John E Mitchell 2002 Branch and Cut Algorithms for Combinatorial Optimization Problems PDF Handbook of Applied Optimization 65 77 Achterberg Tobias Koch Thorsten Martin Alexander 2005 Branching rules revisited Operations Research Letters 33 1 42 54 doi 10 1016 j orl 2004 04 002 External links editMixed Integer Programming SCIP framework for branch cut and price and a mixed integer programming solver ABACUS A Branch And CUt System open source software COIN OR Cbc open source software on GitHub Retrieved from https en wikipedia org w index php title Branch and cut amp oldid 1137121397, wikipedia, wiki, book, books, library,

article

, read, download, free, free download, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, picture, music, song, movie, book, game, games.