67
Introduction to BCP – MCF Example Laszlo Ladanyi 1 Fran¸ cois Margot 2 July 18, 2006 1: IBM T.J. Watson Research Center 2: Tepper School of Business, Carnegie Mellon University

Introduction to BCP -- MCF Example

Embed Size (px)

Citation preview

Page 1: Introduction to BCP -- MCF Example

Introduction to BCP – MCF Example

Laszlo Ladanyi1

Francois Margot2

July 18, 2006

1: IBM T.J. Watson Research Center

2: Tepper School of Business, Carnegie Mellon University

Page 2: Introduction to BCP -- MCF Example

BCP: Branch-Cut-Price

• Software for branch-and-cut-and-price

• Parallel code

• LP solver : Clp, Cplex, Xpress, . . .

• Most flexible in COIN-OR

• Research code (no stand-alone executable)

BCP code split into four directories: (see coin-Bcp/Bcp/src)

• include: all header files

• Tree Manager (TM): Maintain the LP associated with eachnode, manage cuts and variables

• Node level operations (LP): cutting, branching, heuristics,fixing, column generation

• Utilities (Member): code for interface between TM and LP,initialization

Page 3: Introduction to BCP -- MCF Example

BCP: Branch-Cut-Price

• Software for branch-and-cut-and-price

• Parallel code

• LP solver : Clp, Cplex, Xpress, . . .

• Most flexible in COIN-OR

• Research code (no stand-alone executable)

BCP code split into four directories: (see coin-Bcp/Bcp/src)

• include: all header files

• Tree Manager (TM): Maintain the LP associated with eachnode, manage cuts and variables

• Node level operations (LP): cutting, branching, heuristics,fixing, column generation

• Utilities (Member): code for interface between TM and LP,initialization

Page 4: Introduction to BCP -- MCF Example

Solver Initialization

Tree Manager Solver

• read data

• pack module data→

• unpack module data

• setup the LP solver

Page 5: Introduction to BCP -- MCF Example

Solver Initialization

Tree Manager Solver

• read data

• pack module data

→• unpack module data

• setup the LP solver

Page 6: Introduction to BCP -- MCF Example

Solver Initialization

Tree Manager Solver

• read data

• pack module data→

• unpack module data

• setup the LP solver

Page 7: Introduction to BCP -- MCF Example

Solver Initialization

Tree Manager Solver

• read data

• pack module data→

• unpack module data

• setup the LP solver

Page 8: Introduction to BCP -- MCF Example

Processing a node

Tree Manager Solver

• select node

• pack node LP data→

• unpack node LP data• solve• generate cuts/vars• branch• create LP data for sons

• unpack node LP datafor sons

←• pack node LP data forsons

• add sons to tree

Page 9: Introduction to BCP -- MCF Example

Processing a node

Tree Manager Solver

• select node

• pack node LP data

→• unpack node LP data• solve• generate cuts/vars• branch• create LP data for sons

• unpack node LP datafor sons

←• pack node LP data forsons

• add sons to tree

Page 10: Introduction to BCP -- MCF Example

Processing a node

Tree Manager Solver

• select node

• pack node LP data→

• unpack node LP data

• solve• generate cuts/vars• branch• create LP data for sons

• unpack node LP datafor sons

←• pack node LP data forsons

• add sons to tree

Page 11: Introduction to BCP -- MCF Example

Processing a node

Tree Manager Solver

• select node

• pack node LP data→

• unpack node LP data• solve• generate cuts/vars• branch• create LP data for sons

• unpack node LP datafor sons

←• pack node LP data forsons

• add sons to tree

Page 12: Introduction to BCP -- MCF Example

Processing a node

Tree Manager Solver

• select node

• pack node LP data→

• unpack node LP data• solve• generate cuts/vars• branch• create LP data for sons

• unpack node LP datafor sons

• pack node LP data forsons

• add sons to tree

Page 13: Introduction to BCP -- MCF Example

Processing a node

Tree Manager Solver

• select node

• pack node LP data→

• unpack node LP data• solve• generate cuts/vars• branch• create LP data for sons

• unpack node LP datafor sons

←• pack node LP data forsons

• add sons to tree

Page 14: Introduction to BCP -- MCF Example

Processing a node

Tree Manager Solver

• select node

• pack node LP data→

• unpack node LP data• solve• generate cuts/vars• branch• create LP data for sons

• unpack node LP datafor sons

←• pack node LP data forsons

• add sons to tree

Page 15: Introduction to BCP -- MCF Example

BCP Constraints/Variables

Types of Constraints/Variables:

• Core : present at all nodes

• Algorithmic : separation/generation algorithm

• Indexed : e.g. stored in a vector

Algorithmic constraints and variables are local

Representation: Constraints are stored as ranged constraints:

lb ≤ ax ≤ ub

with lb = −DBL MAX or ub = DBL MAX possible

Page 16: Introduction to BCP -- MCF Example

BCP Constraints/Variables

Types of Constraints/Variables:

• Core : present at all nodes

• Algorithmic : separation/generation algorithm

• Indexed : e.g. stored in a vector

Algorithmic constraints and variables are local

Representation: Constraints are stored as ranged constraints:

lb ≤ ax ≤ ub

with lb = −DBL MAX or ub = DBL MAX possible

Page 17: Introduction to BCP -- MCF Example

BCP Constraints/Variables

Types of Constraints/Variables:

• Core : present at all nodes

• Algorithmic : separation/generation algorithm

• Indexed : e.g. stored in a vector

Algorithmic constraints and variables are local

Representation: Constraints are stored as ranged constraints:

lb ≤ ax ≤ ub

with lb = −DBL MAX or ub = DBL MAX possible

Page 18: Introduction to BCP -- MCF Example

Implementing a Column Generation Application

Member:

• Read input

• Implement variables

TM:

• Set up the LP at the root node

• display of a solution

LP:

• Test feasibility of a solution

• Column generation method

• Computation of a lower bound

• Branching decision

Page 19: Introduction to BCP -- MCF Example

Col. Gen. Example: Multicommodity Flow (MCF-1)

• Directed graph G = (V ,E )

• N commodities

• (s i , t i ) : source-sink pair, i = 0, . . . ,N − 1

• d i : supply/demand vector for s i t i − flow , i = 0, . . . ,N − 1

For each arc e ∈ E :

• 0 : lower bound for total flow on arc

• ue : finite upper bound for total flow on arc (0 ≤ ue)

• we : unit cost (0 ≤ we)

Page 20: Introduction to BCP -- MCF Example

Col. Gen. Example: Multicommodity Flow (MCF-1)

• Directed graph G = (V ,E )

• N commodities

• (s i , t i ) : source-sink pair, i = 0, . . . ,N − 1

• d i : supply/demand vector for s i t i − flow , i = 0, . . . ,N − 1

For each arc e ∈ E :

• 0 : lower bound for total flow on arc

• ue : finite upper bound for total flow on arc (0 ≤ ue)

• we : unit cost (0 ≤ we)

Page 21: Introduction to BCP -- MCF Example

MCF: ILP Formulation

Solution:

• f i : s i t i -flow with supply/demand vector d i

•∑

i

f ie ≤ ue for all e ∈ E

ILP Formulation:

min∑

i

wT f i

∑i

f i ≤ u (1)∑e=(v ,w)∈E

f ie −

∑e=(w ,v)∈E

f ie = d i

v ∀v ∈ V ,∀i (2)

0 ≤ f i ≤ u ∀i (3)

f i integral ∀i (4)

Page 22: Introduction to BCP -- MCF Example

MCF: ILP Formulation

Solution:

• f i : s i t i -flow with supply/demand vector d i

•∑

i

f ie ≤ ue for all e ∈ E

ILP Formulation:

min∑

i

wT f i

∑i

f i ≤ u (1)∑e=(v ,w)∈E

f ie −

∑e=(w ,v)∈E

f ie = d i

v ∀v ∈ V ,∀i (2)

0 ≤ f i ≤ u ∀i (3)

f i integral ∀i (4)

Page 23: Introduction to BCP -- MCF Example

MCF: Input data

Class MCF data (see Member/MCF data.hpp):

• arcs : vector of struct (tail, head, lb, ub, weight)

• commodities : vector of struct (source, sink, demand)

• numarcs

• numnodes

• numcommodities

• Setup by MCF data::readDimacsFormat()

Parameter MCF AddDummySourceSinkArcs : Addnumcommodities dummy arcs with large weight to ensurefeasibility

Page 24: Introduction to BCP -- MCF Example

MCF: Input data

Class MCF data (see Member/MCF data.hpp):

• arcs : vector of struct (tail, head, lb, ub, weight)

• commodities : vector of struct (source, sink, demand)

• numarcs

• numnodes

• numcommodities

• Setup by MCF data::readDimacsFormat()

Parameter MCF AddDummySourceSinkArcs : Addnumcommodities dummy arcs with large weight to ensurefeasibility

Page 25: Introduction to BCP -- MCF Example

MCF: Master Problem

Master Problem:

• Column : s i t i -flow satisfying d i for some i

• F i : matrix of all generated s i t i -flows (+ dummy flow)

• λi : multiplier for generated s i t i -flows

Example: all arcs upper capacity 2, source = 0, sink = 3, d = 2.

Page 26: Introduction to BCP -- MCF Example

MCF: Master Problem

Master Problem:

• Column : s i t i -flow satisfying d i for some i

• F i : matrix of all generated s i t i -flows (+ dummy flow)

• λi : multiplier for generated s i t i -flows

Example: all arcs upper capacity 2, source = 0, sink = 3, d = 2.

01 002 012 013 023 003 2

Page 27: Introduction to BCP -- MCF Example

MCF: Master Problem

Master Problem:

• Column : s i t i -flow satisfying d i for some i

• F i : matrix of all generated s i t i -flows (+ dummy flow)

• λi : multiplier for generated s i t i -flows

Example: all arcs upper capacity 2, source = 0, sink = 3, d = 2.

01 0 102 0 112 0 113 0 023 0 103 2 0

Page 28: Introduction to BCP -- MCF Example

MCF: Master Problem

Master Problem:

• Column : s i t i -flow satisfying d i for some i

• F i : matrix of all generated s i t i -flows (+ dummy flow)

• λi : multiplier for generated s i t i -flows

Example: all arcs upper capacity 2, source = 0, sink = 3, d = 2.

01 0 1 202 0 1 012 0 1 213 0 0 023 0 1 203 2 0 0

Page 29: Introduction to BCP -- MCF Example

MCF: Master Problem

min∑

i

wTF iλi

∑i

F iλi ≤ u

(π)

(5)

eTλi = 1 ∀i

(ν i )

(6)

λi ≥ 0 ∀i (7)

F iλi integer ∀i (8)

Page 30: Introduction to BCP -- MCF Example

MCF: Master Problem

min∑

i

wTF iλi

∑i

F iλi ≤ u

(π)

(5)

eTλi = 1 ∀i

(ν i )

(6)

λi ≥ 0 ∀i (7)

F iλi integer ∀i (8)

[F 0 F 1 F 2

] λ0

λ1

λ2

≤ u 1T . .. 1T .. . 1T

λ0

λ1

λ2

= 1

Page 31: Introduction to BCP -- MCF Example

MCF: Master Problem

min∑

i

wTF iλi

∑i

F iλi ≤ u (π) (5)

eTλi = 1 ∀i (ν i ) (6)

λi ≥ 0 ∀i (7)

F iλi integer ∀i (8)

Pricing of feasible s i t i -flow f :

weight of flow : wT fdual activity: πT f + ν i

Reduced cost of flow f = wT f − πT f − ν i = (wT − πT )f − ν i

Page 32: Introduction to BCP -- MCF Example

Class MCF vars

MCF var:

• int commodity : index of commodity

• CoinPackedVector flow : positive flow on arcs

• weight: objective coefficient

See include/MCF var.hpp, Member/MCF var.cpp

MCF lp::vars to cols(): generate columns of the masterproblem for vars

Page 33: Introduction to BCP -- MCF Example

Class MCF vars

MCF var:

• int commodity : index of commodity

• CoinPackedVector flow : positive flow on arcs

• weight: objective coefficient

See include/MCF var.hpp, Member/MCF var.cpp

MCF lp::vars to cols(): generate columns of the masterproblem for vars

Page 34: Introduction to BCP -- MCF Example

MCF: Setting the Master at the Root

Variables:

• Dummy flow variables are algorithmic variables (λi0 ∀ i)

• All generated variables are algorithmic

Constraints:

• All constraints are core constraints

• Upper bound constraints: 0 ≤ ue ∀ e ∈ E

• Dummy upper bound constraints: dem(i)λi0 ≤ dem(i) ∀i

• Convexity constraints: λi0 = 1 ∀ i

See in TM/MCF tm.cpp:MCF tm::initialize coreMCF tm::create root

Page 35: Introduction to BCP -- MCF Example

MCF: Setting the Master at the Root

Variables:

• Dummy flow variables are algorithmic variables (λi0 ∀ i)

• All generated variables are algorithmic

Constraints:

• All constraints are core constraints

• Upper bound constraints: 0 ≤ ue ∀ e ∈ E

• Dummy upper bound constraints: dem(i)λi0 ≤ dem(i) ∀i

• Convexity constraints: λi0 = 1 ∀ i

See in TM/MCF tm.cpp:MCF tm::initialize coreMCF tm::create root

Page 36: Introduction to BCP -- MCF Example

Class MCF tm: Derived from BCP tm user

Data:

• MCF data data

Methods:

• pack module data() : pack data needed at the node level.Called once for each processor used as a solver.

• initialize core() : Transmit core constraints/variables toBCP.

• create root : set up the problem at the root node

• pack var algo() : pack algorithmic vars

• unpack var algo() : unpack algorithmic vars

• display feasible solution() : display solution

Page 37: Introduction to BCP -- MCF Example

Node operations

1. Initialize new node

2. Solve node LP

3. Test feasibility of node LP solution

4. Compute lower bound for node LP

5. Fathom node (if possible)

6. Perform fixing on vars

7. Update row effectiveness records

8. Generate cuts, Generate vars

9. Generate heuristic solution

10. Fathom node (if possible)

11. Decide to branch, fathom, or repeat loop

12. Add to node LP the cuts/vars generated, if loop is repeated

13. Purge cut pool, var pool

Page 38: Introduction to BCP -- MCF Example

Class MCF LP: Derived from BCP lp user

Data:

• OsiSolverInterface* cg lp: pointer on Osi LP solver usedfor column generation

• MCF data data: problem data

• vector<MCF branch decision>* branch history:branch history[i]: vector of branching decision involvingcommodity i (arc, lb, ub)

• map<int,double>* flows: flows[i]: map between indexof arc and positive flow for commodity i in LP solution

• BCP vec<BCP var*> gen vars: vector holding generated vars

• bool generated vars: indicator for success in columngeneration

See LP/MCF lp.cpp, include/MCF lp.hpp

Page 39: Introduction to BCP -- MCF Example

Class MCF LP: Derived from BCP lp user (cont)

Methods:

• unpack module data()

• pack var algo(), unpack var algo()

• initialize new search tree node() : Natural place forinitializing user defined variables of MCF lp.

• test feasibility(): Test feasibility of current LP solution.

• compute lower bound(): Lower bound on optimal value ofsubproblem

• generate vars in lp(): Pass new variables to BCP

• vars to cols() : Function generating a column from the varrepresentation

• select branching candidates() : Generate rules forcreating potential sons

Page 40: Introduction to BCP -- MCF Example

MCF: Computing a Lower Bound

Initially, lower bound of a node is set to the lower bound of itsfather

• Try to generate a variable with negative reduced cost

• If successful, lower bound is currently known lower bound

• If unsuccessful, lower bound is the current LP value

See MCF lp::compute lower bound() in LP/MCF lp.cpp

Page 41: Introduction to BCP -- MCF Example

MCF: Column Generation

• π, ν i : optimal dual solution of the Master

Column generation:

min(wT − πT )f i∑e=(w ,v)∈E

f ie −

∑e=(w ,v)∈E

f ie = d i

v ∀v ∈ V (9)

`i ≤ f i ≤ ui (10)

f i integral (11)

If solution is , then f i is the new column

Minimum cost flow problem ⇒ Solve as an LP

(see MCF lp::compute lower bound in LP/MCF lp.cpp)

Page 42: Introduction to BCP -- MCF Example

MCF: Column Generation

• π, ν i : optimal dual solution of the Master

Column generation:

min(wT − πT )f i − ν i∑e=(w ,v)∈E

f ie −

∑e=(w ,v)∈E

f ie = d i

v ∀v ∈ V (9)

`i ≤ f i ≤ ui (10)

f i integral (11)

If solution is negative , then f i is the new column

Minimum cost flow problem ⇒ Solve as an LP

(see MCF lp::compute lower bound in LP/MCF lp.cpp)

Page 43: Introduction to BCP -- MCF Example

MCF: Column Generation

• π, ν i : optimal dual solution of the Master

Column generation:

min(wT − πT )f i∑e=(w ,v)∈E

f ie −

∑e=(w ,v)∈E

f ie = d i

v ∀v ∈ V (9)

`i ≤ f i ≤ ui (10)

f i integral (11)

If solution is < ν i , then f i is the new column

Minimum cost flow problem ⇒ Solve as an LP

(see MCF lp::compute lower bound in LP/MCF lp.cpp)

Page 44: Introduction to BCP -- MCF Example

MCF: Column Generation

• π, ν i : optimal dual solution of the Master

Column generation:

min(wT − πT )f i∑e=(w ,v)∈E

f ie −

∑e=(w ,v)∈E

f ie = d i

v ∀v ∈ V (9)

`i ≤ f i ≤ ui (10)

f i integral (11)

If solution is < ν i , then f i is the new column

Minimum cost flow problem ⇒ Solve as an LP(see MCF lp::compute lower bound in LP/MCF lp.cpp)

Page 45: Introduction to BCP -- MCF Example

Branching

MCF lp::select branching candidates(): Called at the end ofeach iteration. Possible return values are:

• BCP DoNotBranch Fathomed : fathomed without branching

• BCP DoNotBranch : continue to work on this node

• BCP DoBranch : Branching must be done. Must create thecandidates

Page 46: Introduction to BCP -- MCF Example

MCF: Branching

• Solution of the Master is fractional

• No new column is generated

⇒ Must branch

Branching rule:

• Select an arc e (not dummy) and i with F iλi = z fractional

• First child: Use only columns where flow of i on e is > z

• Second child: Use only columns where flow of i on e is < z

• Need to know `ie and ui

e for all i and e for col. gen.

⇒ use branch history[i]

Page 47: Introduction to BCP -- MCF Example

MCF: Branching

• Solution of the Master is fractional

• No new column is generated

⇒ Must branch

Branching rule:

• Select an arc e (not dummy) and i with F iλi = z fractional

• First child: Use only columns where flow of i on e is > z

• Second child: Use only columns where flow of i on e is < z

• Need to know `ie and ui

e for all i and e for col. gen.

⇒ use branch history[i]

Page 48: Introduction to BCP -- MCF Example

MCF: Branching

• Solution of the Master is fractional

• No new column is generated

⇒ Must branch

Branching rule:

• Select an arc e (not dummy) and i with F iλi = z fractional

• First child: Use only columns where flow of i on e is > z

• Second child: Use only columns where flow of i on e is < z

• Need to know `ie and ui

e for all i and e for col. gen.

⇒ use branch history[i]

Page 49: Introduction to BCP -- MCF Example

MCF: Branching

• Solution of the Master is fractional

• No new column is generated

⇒ Must branch

Branching rule:

• Select an arc e (not dummy) and i with F iλi = z fractional

• First child: Use only columns where flow of i on e is > z

• Second child: Use only columns where flow of i on e is < z

• Need to know `ie and ui

e for all i and e for col. gen.⇒ use branch history[i]

Page 50: Introduction to BCP -- MCF Example

Class MCF branching var

MCF branching var:

• artificial variable used to keep branching history around

• weight 0

• coefficients 0

• upper: 1, lower 0: identify child

Data:

• commodity: commodity i used in branching

• arc index: arc e used in branching

• lb child0, ub child0, lb child1, ub child1: bounds forcommodity i on e in the children

See include/MCF var.hpp, Member/MCF var.cpp

Page 51: Introduction to BCP -- MCF Example

Class MCF branching var

MCF branching var:

• artificial variable used to keep branching history around

• weight 0

• coefficients 0

• upper: 1, lower 0: identify child

Data:

• commodity: commodity i used in branching

• arc index: arc e used in branching

• lb child0, ub child0, lb child1, ub child1: bounds forcommodity i on e in the children

See include/MCF var.hpp, Member/MCF var.cpp

Page 52: Introduction to BCP -- MCF Example

Branching object

MCF

Create the candidates using:BCP lp branching object::BCP lp branching object()Its relevant parameters are:

• int children : # children

2

• BCP vec<BCP var*> *new vars : vector for new vars

one new MCF branching var

• BCP vec<BCP cut*> *new cuts : vector for new cuts

NULL

• BCP vec<int> *fvp : vector for indices of variables whosebounds are changedNegative indices : vars from new vars,index −i − 1 corresponding to entry i

[-1, 4, 7]

• BCP vec<int> *fcp : vector for indices of cuts whosebounds are changed.Negative indices : cuts from new cuts,index −i − 1 corresponding to entry i

NULL

Page 53: Introduction to BCP -- MCF Example

Branching object MCF

Create the candidates using:BCP lp branching object::BCP lp branching object()Its relevant parameters are:

• int children : # children

2

• BCP vec<BCP var*> *new vars : vector for new vars

one new MCF branching var

• BCP vec<BCP cut*> *new cuts : vector for new cuts

NULL

• BCP vec<int> *fvp : vector for indices of variables whosebounds are changedNegative indices : vars from new vars,index −i − 1 corresponding to entry i

[-1, 4, 7]

• BCP vec<int> *fcp : vector for indices of cuts whosebounds are changed.Negative indices : cuts from new cuts,index −i − 1 corresponding to entry i

NULL

Page 54: Introduction to BCP -- MCF Example

Branching object MCF

Create the candidates using:BCP lp branching object::BCP lp branching object()Its relevant parameters are:

• int children : # children 2

• BCP vec<BCP var*> *new vars : vector for new vars

one new MCF branching var

• BCP vec<BCP cut*> *new cuts : vector for new cuts

NULL

• BCP vec<int> *fvp : vector for indices of variables whosebounds are changedNegative indices : vars from new vars,index −i − 1 corresponding to entry i

[-1, 4, 7]

• BCP vec<int> *fcp : vector for indices of cuts whosebounds are changed.Negative indices : cuts from new cuts,index −i − 1 corresponding to entry i

NULL

Page 55: Introduction to BCP -- MCF Example

Branching object MCF

Create the candidates using:BCP lp branching object::BCP lp branching object()Its relevant parameters are:

• int children : # children 2

• BCP vec<BCP var*> *new vars : vector for new varsone new MCF branching var

• BCP vec<BCP cut*> *new cuts : vector for new cuts

NULL

• BCP vec<int> *fvp : vector for indices of variables whosebounds are changedNegative indices : vars from new vars,index −i − 1 corresponding to entry i

[-1, 4, 7]

• BCP vec<int> *fcp : vector for indices of cuts whosebounds are changed.Negative indices : cuts from new cuts,index −i − 1 corresponding to entry i

NULL

Page 56: Introduction to BCP -- MCF Example

Branching object MCF

Create the candidates using:BCP lp branching object::BCP lp branching object()Its relevant parameters are:

• int children : # children 2

• BCP vec<BCP var*> *new vars : vector for new varsone new MCF branching var

• BCP vec<BCP cut*> *new cuts : vector for new cuts NULL

• BCP vec<int> *fvp : vector for indices of variables whosebounds are changedNegative indices : vars from new vars,index −i − 1 corresponding to entry i

[-1, 4, 7]

• BCP vec<int> *fcp : vector for indices of cuts whosebounds are changed.Negative indices : cuts from new cuts,index −i − 1 corresponding to entry i

NULL

Page 57: Introduction to BCP -- MCF Example

Branching object MCF

Create the candidates using:BCP lp branching object::BCP lp branching object()Its relevant parameters are:

• int children : # children 2

• BCP vec<BCP var*> *new vars : vector for new varsone new MCF branching var

• BCP vec<BCP cut*> *new cuts : vector for new cuts NULL

• BCP vec<int> *fvp : vector for indices of variables whosebounds are changedNegative indices : vars from new vars,index −i − 1 corresponding to entry i [-1, 4, 7]

• BCP vec<int> *fcp : vector for indices of cuts whosebounds are changed.Negative indices : cuts from new cuts,index −i − 1 corresponding to entry i

NULL

Page 58: Introduction to BCP -- MCF Example

Branching object MCF

Create the candidates using:BCP lp branching object::BCP lp branching object()Its relevant parameters are:

• int children : # children 2

• BCP vec<BCP var*> *new vars : vector for new varsone new MCF branching var

• BCP vec<BCP cut*> *new cuts : vector for new cuts NULL

• BCP vec<int> *fvp : vector for indices of variables whosebounds are changedNegative indices : vars from new vars,index −i − 1 corresponding to entry i [-1, 4, 7]

• BCP vec<int> *fcp : vector for indices of cuts whosebounds are changed.Negative indices : cuts from new cuts,index −i − 1 corresponding to entry i NULL

Page 59: Introduction to BCP -- MCF Example

Branching object (cont)

MCF

• BCP vec<double> *fvb : vector for lower/upper bounds foreach vars in fvp, for each child

[0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1]

• BCP vec<double> *fcb : vector for lower/upper bounds foreach constraint in fcp, for each child

NULL

• 4 additional parameters (implied parts)

NULL

Pass NULL for irrelevant parameters

Page 60: Introduction to BCP -- MCF Example

Branching object (cont)MCF

• BCP vec<double> *fvb : vector for lower/upper bounds foreach vars in fvp, for each child[0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1]

• BCP vec<double> *fcb : vector for lower/upper bounds foreach constraint in fcp, for each child

NULL

• 4 additional parameters (implied parts)

NULL

Pass NULL for irrelevant parameters

Page 61: Introduction to BCP -- MCF Example

Branching object (cont)MCF

• BCP vec<double> *fvb : vector for lower/upper bounds foreach vars in fvp, for each child[0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1]

• BCP vec<double> *fcb : vector for lower/upper bounds foreach constraint in fcp, for each child NULL

• 4 additional parameters (implied parts)

NULL

Pass NULL for irrelevant parameters

Page 62: Introduction to BCP -- MCF Example

Branching object (cont)MCF

• BCP vec<double> *fvb : vector for lower/upper bounds foreach vars in fvp, for each child[0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1]

• BCP vec<double> *fcb : vector for lower/upper bounds foreach constraint in fcp, for each child NULL

• 4 additional parameters (implied parts)NULL

Pass NULL for irrelevant parameters

Page 63: Introduction to BCP -- MCF Example

Branching object: Forced vs. Implied

Forced changes:

• Used during strong branching

• Sent to the tree manager if branching object is selected

• Used in the children if branching object is selected

Implied changes:

• Used during strong branching

• NOT Sent to the tree manager if branching object is selected

• NOT Used in the children if branching object is selected

Many implied changes ⇒ storing them is costly.If implied changes are used, implement them also inMCF lp:: initialize new search tree node()

Page 64: Introduction to BCP -- MCF Example

Branching object: Forced vs. Implied

Forced changes:

• Used during strong branching

• Sent to the tree manager if branching object is selected

• Used in the children if branching object is selected

Implied changes:

• Used during strong branching

• NOT Sent to the tree manager if branching object is selected

• NOT Used in the children if branching object is selected

Many implied changes ⇒ storing them is costly.If implied changes are used, implement them also inMCF lp:: initialize new search tree node()

Page 65: Introduction to BCP -- MCF Example

Branching object: Forced vs. Implied

Forced changes:

• Used during strong branching

• Sent to the tree manager if branching object is selected

• Used in the children if branching object is selected

Implied changes:

• Used during strong branching

• NOT Sent to the tree manager if branching object is selected

• NOT Used in the children if branching object is selected

Many implied changes ⇒ storing them is costly.If implied changes are used, implement them also inMCF lp:: initialize new search tree node()

Page 66: Introduction to BCP -- MCF Example

MCF: Parameter File

Predefined parameters:Class MCF par (see include/MCF par.hpp)Class BCP lp par Class BCP tm par

Some parameters with their default values:

• MCF AddDummySourceSinkArcs: 1

• MCF InputFilename: small

• BCP VerbosityShutUp: 0

• BCP MaxRunTime : 3600

• BCP Granularity : 1e-8

• BCP IntegerTolerance : 1e-5

• BCP TreeSearchStrategy : 1// 0: Best Bound 1: BFS 2: DFS

Page 67: Introduction to BCP -- MCF Example

MCF: Parameter File

Predefined parameters:Class MCF par (see include/MCF par.hpp)Class BCP lp par Class BCP tm par

Some parameters with their default values:

• MCF AddDummySourceSinkArcs: 1

• MCF InputFilename: small

• BCP VerbosityShutUp: 0

• BCP MaxRunTime : 3600

• BCP Granularity : 1e-8

• BCP IntegerTolerance : 1e-5

• BCP TreeSearchStrategy : 1// 0: Best Bound 1: BFS 2: DFS