- 170 Views
- Uploaded on
- Presentation posted in: General

Branching

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Branching

SCIP Workshop at ZIB

October 2007

- current solution is infeasible

- split problems into sub problems to cut off current solution

- current solution is infeasible

- split problems into subproblems to cut off current solution

- 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“)

- create child nodeSCIPcreateChild(scip, &node, prio);
- modify child nodeSCIPaddConsNode(scip, node, cons, NULL);SCIPchgVarLbNode(scip, node, var, newlb);SCIPchgVarUbNode(scip, node, var, newub);
- if more children needed, goto 1.
- set result code*result = SCIP_BRANCHED;

- CallingSCIPbranchVar(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

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;

}

- 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

- 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

c= 2

- LP relaxation yields lower bound

x3= 7.3

c= 2

- LP relaxation yields lower bound
- integer variable has fractional LP value

x3= 7.3

c= 2

x3≤ 7

x3 8

- LP relaxation yields lower bound
- integer variable has fractional LP value
- branching decomposes problem into subproblems

x3= 7.3

- LP relaxation yields lower bound
- integer variable has fractional LP value
- branching decomposes problem into subproblems
- LP relaxation is solved for subproblems

c= 2

x3≤ 7

x3 8

c= 5

x3= 7.3

- 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

x3≤ 7

x3 8

c= 5

- 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

- pure pseudo cost 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:

- „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

- 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

- 244 instances
- shifted geometric nodes
- ratio to „hybrid“ in percent

- 244 instances
- shifted geometric time
- ratio to „hybrid“ in percent

- 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

1.5x slower

3.6x slower

9.3x slower