branching
DESCRIPTION
Branching. SCIP Workshop at ZIB October 2007. Branching. current solution is infeasible. Branching on Variables. split problems into sub problems to cut off current solution. Branching. current solution is infeasible. Branching on Constraints. - PowerPoint PPT PresentationTRANSCRIPT
Tobias AchterbergKonrad-Zuse-Zentrum für Informationstechnik [email protected]
Branching
SCIP Workshop at ZIB
October 2007
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
Implementing Branching Rules in SCIP
1.create child nodeSCIPcreateChild(scip, &node, prio);
2.modify child nodeSCIPaddConsNode(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
Branching on Variables in SCIP
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
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
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
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
13
Pseudo Costs
c = 2x3 = 7.3
LP relaxation yields lower bound
integer variable has fractional LP value
14
Pseudo Costs
c = 2x3 ≤ 7 x3 8
LP relaxation yields lower bound
integer variable has fractional LP value
branching decomposes problem into subproblems
x3 = 7.3
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 = 5x3 ≤ 7 x3 8
x3 = 7.3
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 = 5x3 ≤ 7 x3 8
x3 = 7.3
103.0
3
73.7
253
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
jjjjjj ff 1,
1 j
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:
jjjjjj ff 1,
rel,min jj
1rel rel8rel
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
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
Computational Results: nodes
643
528
1076
25
35
198
127
109
317
100
0
200
400
600
800
1000
1200randommost infleast inffull strongstrongpseudo costpsc str initreliabilityinferencehybrid
244 instances
shifted geometric nodes
ratio to „hybrid“ in percent
22
Computational Results: time
326
319
441
195
144
133
108
106
195
100
0
50
100
150
200
250
300
350
400
450randommost infleast inffull strongstrongpseudo costpsc str initreliabilityinferencehybrid
244 instances
shifted geometric time
ratio to „hybrid“ in percent
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
jjjjjs ,max1,min
,max,max jjjs
24
Computational Results
129
114 129
137
175
100
0
20
40
60
80
100
120
140
160
180
min (1)weighted (1/ 6)weighted (1/ 3)average (1/ 2)max (0)product