Presentation is loading. Please wait.

Presentation is loading. Please wait.

Tobias Achterberg Konrad-Zuse-Zentrum für Informationstechnik Berlin Branching SCIP Workshop at ZIB October 2007.

Similar presentations


Presentation on theme: "Tobias Achterberg Konrad-Zuse-Zentrum für Informationstechnik Berlin Branching SCIP Workshop at ZIB October 2007."— Presentation transcript:

1 Tobias Achterberg Konrad-Zuse-Zentrum für Informationstechnik Berlin achterberg@zib.de Branching SCIP Workshop at ZIB October 2007

2 2 Branching  current solution is infeasible

3 3 Branching on Variables  split problems into sub problems to cut off current solution

4 4 Branching  current solution is infeasible

5 5 Branching on Constraints  split problems into subproblems to cut off current solution

6 6 Branching in SCIP  in constraint handlers and branching rules  „last resort“ for dealing with infeasible node solutions  no domain propagation or cuts available/desired  split current problem into any number of subproblems (children) such that  each child is „more restricted“ than current problem („children become smaller“)  at least one child has the same optimum value as the current problem („optimal solution is not lost“)

7 7 Implementing Branching Rules in SCIP 1.create child node SCIPcreateChild(scip, &node, prio); 2.modify child node SCIPaddConsNode(scip, node, cons, NULL); SCIPchgVarLbNode(scip, node, var, newlb); SCIPchgVarUbNode(scip, node, var, newub); 3.if more children needed, goto 1. 4.set result code *result = SCIP_BRANCHED;

8 8 Branching on Variables in SCIP  Calling SCIPbranchVar(scip, var,...) is shortcut for: SCIP_NODE* node; SCIP_Real x = SCIPvarGetLPSol(var); SCIPcreateChild(scip, &node, downprio); SCIPchgVarUbNode(scip, node, var, floor(x)); SCIPcreateChild(scip, &node, upprio); SCIPchgVarLbNode(scip, node, var, ceil(x));  node selection priorities are automatically calculated by child selection rule

9 9 Example: Random Branching SCIP_DECL_BRANCHEXECLP(branchExeclpRandom) { SCIP_BRANCHRULEDATA* branchruledata; SCIP_VAR** lpcands; int nlpcands; int k; branchruledata = SCIPbranchruleGetData(branchrule); SCIP_CALL(SCIPgetLPBranchCands(scip, &lpcands, NULL, NULL, NULL, &nlpcands)); k = SCIPgetRandomInt(0, nlpcands-1, &branchruledata->randseed); SCIP_CALL(SCIPbranchVar(scip, lpcands[k], NULL, NULL, NULL)); *result = SCIP_BRANCHED; return SCIP_OKAY; }

10 10 Branching Rules for MIP  most common MIP branching rules branch on variables:  two children  split domain of single variable into two parts  choose variable with fractional LP value such that LP solution changes in both children  remaining choices:  which fractional variable to branch on?  which of the two children to process next  related to node selection strategy

11 11 Branching Variable Selection  most fractional branching  choose variable with fractional value closest to 0.5  full strong branching  solve the LP relaxations for all possible branchings  choose the variable that yields largest LP objectives  strong branching  only apply strong branching on some candidates  only perform a limited number of simplex iterations

12 12 Pseudo Costs c = 2  LP relaxation yields lower bound

13 13 Pseudo Costs c = 2 x 3 = 7.3  LP relaxation yields lower bound  integer variable has fractional LP value

14 14 Pseudo Costs c = 2 x 3 ≤ 7 x 3  8  LP relaxation yields lower bound  integer variable has fractional LP value  branching decomposes problem into subproblems x 3 = 7.3

15 15 Pseudo Costs  LP relaxation yields lower bound  integer variable has fractional LP value  branching decomposes problem into subproblems  LP relaxation is solved for subproblems c = 2 c = 5 x 3 ≤ 7 x 3  8 x 3 = 7.3

16 16 Pseudo Costs  history of objective changes caused by branching on specific variable  objective gain per unit:  down/upwards pseudo costs  j -,  j + : average of all objective gains per unit c = 2 c = 5 x 3 ≤ 7 x 3  8 x 3 = 7.3

17 17 Pseudo Cost Branching  choose variable with largest estimated LP objective gain:  What to do if pseudo costs are uninitialized?  pure pseudo cost branching  use average pseudo costs over all variables, or  pseudo cost with strong branching initialization  apply strong branching to initialize pseudo costs

18 18 Reliability Branching  choose variable with largest estimated LP objective gain:  pseudo costs are unreliable, if number of updates is small:  apply strong branching on unreliable candidates  psc with strong branching initialization:  (full) strong branching:  reasonable value:

19 19 Branching in SAT  „Strong Branching“ equivalent:  apply domain propagation on all potential subproblems  choose variable which leads to largest number of inferences  Conflict Activity  choose variable that is contained in many recently generated conflict clauses  „recently“: exponentially decreasing importance of older conflict clauses

20 20 Hybrid Reliability/Inference Branching  Reliability Value  pseudo costs  strong branching on unreliable candidates  Inference History  like pseudo costs, but for number of inferences due to branching on a variable  Conflict Score  number of conflicts for which branching on this variable was part of the conflict reason  exponentially decreasing weight for older conflicts

21 21 Computational Results: nodes  244 instances  shifted geometric nodes  ratio to „hybrid“ in percent

22 22 Computational Results: time  244 instances  shifted geometric time  ratio to „hybrid“ in percent

23 23 Branching Score Functions  pseudo costs yield LP objective gain estimates for both branching directions  how to combine the two values into a single score?  current approach: weighted sum  new approach: product

24 24 Computational Results

25 25 Comparison to CPLEX and CBC ratios to CPLEX 10.1nodestime SCIP/CPX0.671.50 SCIP/Soplex0.653.61 CBC/CLP4.229.28 1.5x slower 3.6x slower 9.3x slower


Download ppt "Tobias Achterberg Konrad-Zuse-Zentrum für Informationstechnik Berlin Branching SCIP Workshop at ZIB October 2007."

Similar presentations


Ads by Google