219
Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo Berthold, and Kati Wolter DFG Research Center MATHEON Mathematics for key technologies CP 2011, 14/Sep/2011

Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

  • Upload
    others

  • View
    15

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

TutorialInteger Programming forConstraint Programmers

Ambros Gleixner and Stefan HeinzZuse Institute Berlin (ZIB)

Chris Beck, Timo Berthold, and Kati Wolter

DFG Research Center MATHEON

Mathematics for key technologies

CP 2011, 14/Sep/2011

Page 2: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

ZIB – Zuse Institute Berlin

. Non-university research institute of the state of Berlin (Germany)

. Research Units:I Numerical Mathematics

I Numerical analysis and modelingI Visualization and data analysis

I Discrete MathematicsI OptimizationI Scientific Information

I Computer ScienceI Parallel and Distributed SystemsI Supercomputing http://www.zib.de

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 1 / 62

Page 3: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

CPAIOR 2011

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 2 / 62

Page 4: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

CPAIOR 2012

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 3 / 62

Page 5: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Outline

Integer Programming for Constraint Programmers

1 Introduction

2 Linear programming

3 Integer (linear) programming

4 Summary

5 Discussion

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 4 / 62

Page 6: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Problem description

Definition

The steel mill slab problem consists of assigning colored, sized ordersto slabs of certain different capacities such that the total loss isminimized and at most two different colors are present in each slab.

1

2

3

Orders

+

. . .

. . .

1

2

3

4

5

Slabs

0 2 0 0 0Assignment

. Problem number 38 of the CSPLib (http://www.csplib.org/)

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 5 / 62

Page 7: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Problem description

Definition

The steel mill slab problem consists of assigning colored, sized ordersto slabs of certain different capacities such that the total loss isminimized and at most two different colors are present in each slab.

1

2

3

Orders

+

. . .

. . .

1

2

3

4

5

Slabs

0 2 0 0 0Assignment

. Problem number 38 of the CSPLib (http://www.csplib.org/)

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 5 / 62

Page 8: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Problem description

Definition

The steel mill slab problem consists of assigning colored, sized ordersto slabs of certain different capacities such that the total loss isminimized and at most two different colors are present in each slab.

1

2

3

Orders

+

. . .

. . .

1

2

3

4

5

Slabs

0 2 0 0 0Assignment

. Problem number 38 of the CSPLib (http://www.csplib.org/)Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 5 / 62

Page 9: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

(A) Constraint programming formulation

Given

. K set of possible capacities for the slabs

. C set of colors

. O set of orders, |O| = nI si size of order iI ci color of order i

Binary variables

. yij = 1 if order i is assigned to slab j

. zcj = 1 if color c is used in slab j

Observation

. We need at most n slabs

. Let S be the set of slabs

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 6 / 62

Page 10: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Leftover array

. Array storing the leftover depending on the load

L[i ] = argmin{k − i | k ∈ K and k ≥ i}

for i = 0, . . . ,Kmax

. Kmax := max{k | k ∈ K}

Example1 2 3 4 5

L =

0 0 3 2 1 0

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 7 / 62

Page 11: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Leftover array

. Array storing the leftover depending on the load

L[i ] = argmin{k − i | k ∈ K and k ≥ i}

for i = 0, . . . ,Kmax

. Kmax := max{k | k ∈ K}

Example1 2 3 4 5

L = 0

0 3 2 1 0

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 7 / 62

Page 12: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Leftover array

. Array storing the leftover depending on the load

L[i ] = argmin{k − i | k ∈ K and k ≥ i}

for i = 0, . . . ,Kmax

. Kmax := max{k | k ∈ K}

Example1 2 3 4 5

L = 0 0

3 2 1 0

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 7 / 62

Page 13: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Leftover array

. Array storing the leftover depending on the load

L[i ] = argmin{k − i | k ∈ K and k ≥ i}

for i = 0, . . . ,Kmax

. Kmax := max{k | k ∈ K}

Example1 2 3 4 5

L = 0 0 3

2 1 0

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 7 / 62

Page 14: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Leftover array

. Array storing the leftover depending on the load

L[i ] = argmin{k − i | k ∈ K and k ≥ i}

for i = 0, . . . ,Kmax

. Kmax := max{k | k ∈ K}

Example1 2 3 4 5

L = 0 0 3 2

1 0

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 7 / 62

Page 15: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Leftover array

. Array storing the leftover depending on the load

L[i ] = argmin{k − i | k ∈ K and k ≥ i}

for i = 0, . . . ,Kmax

. Kmax := max{k | k ∈ K}

Example1 2 3 4 5

L = 0 0 3 2 1

0

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 7 / 62

Page 16: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Leftover array

. Array storing the leftover depending on the load

L[i ] = argmin{k − i | k ∈ K and k ≥ i}

for i = 0, . . . ,Kmax

. Kmax := max{k | k ∈ K}

Example1 2 3 4 5

L = 0 0 3 2 1 0

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 7 / 62

Page 17: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

(A) Constraint programming formulation

min∑j∈S

L[∑

i∈O

si yij

]subject to

∑j∈S

yij = 1 ∀i ∈ O∑i∈O

si yij ≤ Kmax ∀j ∈ S

yij ≤ zci j ∀i ∈ O ∀j ∈ S∑c∈C

zcj ≤ 2 ∀j ∈ S

yij , zcj ∈ {0, 1} ∀i ∈ O ∀c ∈ C ∀j ∈ S

. element constraint

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 8 / 62

Page 18: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

(A) Constraint programming formulation

min∑j∈S

L[∑

i∈O

si yij

]subject to

∑j∈S

yij = 1 ∀i ∈ O∑i∈O

si yij ≤ Kmax ∀j ∈ S

yij ≤ zci j ∀i ∈ O ∀j ∈ S∑c∈C

zcj ≤ 2 ∀j ∈ S

yij , zcj ∈ {0, 1} ∀i ∈ O ∀c ∈ C ∀j ∈ S

Assignment

. element constraint

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 8 / 62

Page 19: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

(A) Constraint programming formulation

min∑j∈S

L[∑

i∈O

si yij

]subject to

∑j∈S

yij = 1 ∀i ∈ O∑i∈O

si yij ≤ Kmax ∀j ∈ S

yij ≤ zci j ∀i ∈ O ∀j ∈ S∑c∈C

zcj ≤ 2 ∀j ∈ S

yij , zcj ∈ {0, 1} ∀i ∈ O ∀c ∈ C ∀j ∈ S

Capacity

. element constraint

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 8 / 62

Page 20: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

(A) Constraint programming formulation

min∑j∈S

L[∑

i∈O

si yij

]subject to

∑j∈S

yij = 1 ∀i ∈ O∑i∈O

si yij ≤ Kmax ∀j ∈ S

yij ≤ zci j ∀i ∈ O ∀j ∈ S∑c∈C

zcj ≤ 2 ∀j ∈ S

yij , zcj ∈ {0, 1} ∀i ∈ O ∀c ∈ C ∀j ∈ S

Coloring

. element constraint

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 8 / 62

Page 21: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

(A) Constraint programming formulation

min∑j∈S

L[∑

i∈O

si yij

]subject to

∑j∈S

yij = 1 ∀i ∈ O∑i∈O

si yij ≤ Kmax ∀j ∈ S

yij ≤ zci j ∀i ∈ O ∀j ∈ S∑c∈C

zcj ≤ 2 ∀j ∈ S

yij , zcj ∈ {0, 1} ∀i ∈ O ∀c ∈ C ∀j ∈ S

Leftover

. element constraint

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 8 / 62

Page 22: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

(An) Integer programming formulation

Given

. K set of possible capacities for the slabs

. C set of colors

. O set of orders, |O| = nI si size of order iI ci color of order i

Binary variables

. xkj = 1 if capacity k is assigned to slab j

. yij = 1 if order i is assigned to slab j

. zcj = 1 if color c is used in slab j

Observation

. We need at most n slabs

. Let S be the set of slabs

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 9 / 62

Page 23: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

(An) Integer programming formulation

min∑j∈S

∑k∈K

k xkj −∑i∈O

si

subject to∑k∈K

xkj = 1 ∀j ∈ S∑j∈S

yij = 1 ∀i ∈ O∑i∈O

si yij ≤∑k∈K

k xkj ∀j ∈ S

yij ≤ zci j ∀i ∈ O ∀j ∈ S∑c∈C

zcj ≤ 2 ∀j ∈ S

xkj , yij , zcj ∈ {0, 1} ∀k ∈ K ∀i ∈ O ∀c ∈ C ∀j ∈ S

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 10 / 62

Page 24: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

(An) Integer programming formulation

min∑j∈S

∑k∈K

k xkj −∑i∈O

si

subject to∑k∈K

xkj = 1 ∀j ∈ S∑j∈S

yij = 1 ∀i ∈ O∑i∈O

si yij ≤∑k∈K

k xkj ∀j ∈ S

yij ≤ zci j ∀i ∈ O ∀j ∈ S∑c∈C

zcj ≤ 2 ∀j ∈ S

xkj , yij , zcj ∈ {0, 1} ∀k ∈ K ∀i ∈ O ∀c ∈ C ∀j ∈ S

Assignment

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 10 / 62

Page 25: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

(An) Integer programming formulation

min∑j∈S

∑k∈K

k xkj −∑i∈O

si

subject to∑k∈K

xkj = 1 ∀j ∈ S∑j∈S

yij = 1 ∀i ∈ O∑i∈O

si yij ≤∑k∈K

k xkj ∀j ∈ S

yij ≤ zci j ∀i ∈ O ∀j ∈ S∑c∈C

zcj ≤ 2 ∀j ∈ S

xkj , yij , zcj ∈ {0, 1} ∀k ∈ K ∀i ∈ O ∀c ∈ C ∀j ∈ S

Capacity

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 10 / 62

Page 26: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

(An) Integer programming formulation

min∑j∈S

∑k∈K

k xkj −∑i∈O

si

subject to∑k∈K

xkj = 1 ∀j ∈ S∑j∈S

yij = 1 ∀i ∈ O∑i∈O

si yij ≤∑k∈K

k xkj ∀j ∈ S

yij ≤ zci j ∀i ∈ O ∀j ∈ S∑c∈C

zcj ≤ 2 ∀j ∈ S

xkj , yij , zcj ∈ {0, 1} ∀k ∈ K ∀i ∈ O ∀c ∈ C ∀j ∈ S

Coloring

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 10 / 62

Page 27: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

(An) Integer programming formulation

min∑j∈S

∑k∈K

k xkj −∑i∈O

si

subject to∑k∈K

xkj = 1 ∀j ∈ S∑j∈S

yij = 1 ∀i ∈ O∑i∈O

si yij ≤∑k∈K

k xkj ∀j ∈ S

yij ≤ zci j ∀i ∈ O ∀j ∈ S∑c∈C

zcj ≤ 2 ∀j ∈ S

xkj , yij , zcj ∈ {0, 1} ∀k ∈ K ∀i ∈ O ∀c ∈ C ∀j ∈ S

Leftover

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 10 / 62

Page 28: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

###################### data p a r s i n g#####################

# number o f c a p a c i t i e sparam n c a p a c i t y := r e a d DATAFILE as ”1n” use 1 ;do p r i n t ” n c a p a c i t y = ” , n c a p a c i t y ;

# number o f c o l o r sparam n c o l o r s := r e a d DATAFILE as ”1n” s k i p 1 use 1 ;do p r i n t ” n c o l o r s = ” , n c o l o r s ;

# number o f o r d e r n sparam n o r d e r s := r e a d DATAFILE as ”1n” s k i p 2 use 1 ;do p r i n t ” n o r d e r s = ” , n o r d e r s ;

# g e t t h e c a p a c i t y a r r a ys e t tmp := { r e a d DATAFILE as ”<n+>” use 1} ;s e t c a p a c i t i e s := i f c a r d ( tmp ) == n c a p a c i t y then tmp u n i o n {0} e l s e tmp u n i o n {0} \ { n c a p a c i t y } end ;do check n c a p a c i t y == c a r d ( c a p a c i t i e s )−1;do p r i n t c a p a c i t i e s ;

# i n d e x s e t f o r o r d e r ss e t I := { 1 . . n o r d e r s } ;

# i n d e x s e t f o r c o l o r ss e t C := { 1 . . n c o l o r s } ;

# g e t o r d e r ss e t o r d e r s [< i> i n I ] := { r e a d DATAFILE as ”<1n , 2 n>” s k i p 2+ i use 1} ;

#do f o r a l l <i> i n I do p r i n t o r d e r s [ i ] ;

###################### d e c i s i o n v a r i a b l e s#####################

# s l a b v a r i a b l e s which c a p a c i t i e s i s a s s i g n e d to which s l a bv a r x [ I ∗ c a p a c i t i e s ] b i n a r y ;

# which o r d e r i s a s s i g n e d to which s l a bv a r y [ I ∗ I ] b i n a r y ;

# which c o l o r i s used by which s l a bv a r z [ C ∗ I ] ;

###################### o b j e c t i v e f u n c t i o n#####################

m i n i m i z e l e f t o v e r :sum <s , c> i n I ∗ c a p a c i t i e s : c ∗ x [ s , c ] − sum <o , s> i n I ∗ I : o rd ( o r d e r s [ o ] , 1 , 1 ) ∗ y [ o , s ] ;

###################### c o n s t r a i n t s#####################

# each s l a b g e t s e x a c t l y one c a p a c i t i e ss u b t o o n e C a p a c i t y :

f o r a l l <s> i n I : sum <c> i n c a p a c i t i e s : x [ s , c ] == 1 ;

# each o r d e r i s a s s i g n e d to e x a c t l y one s l a bs u b t o o n e S l a b :

f o r a l l <o> i n I : sum <s> i n I : y [ o , s ] == 1 ;

# each s l a b i s not o v e r l o a d e ds u b t o C a p a c i t y :

f o r a l l <s> i n I : sum <c> i n c a p a c i t i e s : c ∗ x [ s , c ] − sum <o> i n I : o rd ( o r d e r s [ o ] , 1 , 1 ) ∗ y [ o , s ] >= 0 ;

# c o l o r l i n k i n g c o n s t r a i n t ss u b t o l i n k i n g :

f o r a l l <o , s> i n I ∗ I : y [ o , s ] − z [ ord ( o r d e r s [ o ] , 1 , 2 ) , s ] <= 0 ;

# c o l o r l i n k i n g c o n s t r a i n t ss u b t o C o l o r :

f o r a l l <s> i n I : sum <c> i n C : z [ c , s ] <= 2 ;

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 11 / 62

Page 29: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Linear programming relaxation

Integer program

Linear program relaxation

min{IP} ≥ min{LP}

max{IP} ≤ max{LP}

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 12 / 62

Page 30: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Linear programming relaxation. Omit integrality condition

min∑j∈S

∑k∈K

k xkj −∑i∈O

si

subject to∑k∈K

xkj = 1 ∀j ∈ S∑j∈S

yij = 1 ∀i ∈ O∑i∈O

si yij ≤∑k∈K

k xkj ∀j ∈ S

yij ≤ zci j ∀i ∈ O ∀j ∈ S∑c∈C

zcj ≤ 2 ∀j ∈ S

xkj , yij , zcj ∈ [0, 1] ∀k ∈ K ∀i ∈ O ∀c ∈ C ∀j ∈ S

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 13 / 62

Page 31: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Root node solution

1

2

3

Orders

+

. . .

. . .

1

2

3

4

5

Slabs

0 0 0 0 0Assignment

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 14 / 62

Page 32: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Root node solution

Capacitiesx51 = 0.8

x01 = 0.2

x52 = 0.6

x02 = 0.4

x53 = 0.4

x03 = 0.6

x04 = 1.0

x06 = 1.0

Assignmentsy11 = 1.0

y23 = 1.0

y31 = 1.0

y41 = 1.0

y52 = 1.0

Colorsz11 = 1.0

z23 = 1.0

z31 = 1.0

z32 = 1.0

z33 = 1.0

z34 = 1.0

z35 = 1.0

z42 = 1.0

. Remaining decission variables are zero

. Observation: Independently of the problem instance the root LPvalue for this model is always zero.

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 15 / 62

Page 33: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Root node solution

Capacitiesx51 = 0.8

x01 = 0.2

x52 = 0.6

x02 = 0.4

x53 = 0.4

x03 = 0.6

x04 = 1.0

x06 = 1.0

Assignmentsy11 = 1.0

y23 = 1.0

y31 = 1.0

y41 = 1.0

y52 = 1.0

Colorsz11 = 1.0

z23 = 1.0

z31 = 1.0

z32 = 1.0

z33 = 1.0

z34 = 1.0

z35 = 1.0

z42 = 1.0

. Remaining decission variables are zero

. Observation: Independently of the problem instance the root LPvalue for this model is always zero.

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 15 / 62

Page 34: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

node left depth frac curdualbound dualbound primalbound1 0 0 6 0.000000e+00 0.000000e+00 --

1 2 0 6 0.000000e+00 0.000000e+00 --2 3 1 4 0.000000e+00 0.000000e+00 --3 4 2 6 1.000000e+00 0.000000e+00 --4 5 2 2 0.000000e+00 0.000000e+00 --

* 5 2 3 - 1.000000e+00 0.000000e+00 1.000000e+006 3 3 2 0.000000e+00 0.000000e+00 1.000000e+007 4 4 2 0.000000e+00 0.000000e+00 1.000000e+008 3 5 - -- 0.000000e+00 1.000000e+009 2 5 - -- 0.000000e+00 1.000000e+00

10 3 1 2 4.440892e-16 0.000000e+00 1.000000e+0011 4 2 2 4.440892e-16 0.000000e+00 1.000000e+0012 5 2 4 4.440892e-16 0.000000e+00 1.000000e+0013 6 3 4 1.776357e-15 0.000000e+00 1.000000e+0014 7 4 4 1.776357e-15 0.000000e+00 1.000000e+00

node left depth frac curdualbound dualbound primalbound15 8 3 4 1.184238e-15 0.000000e+00 1.000000e+0016 7 4 - -- 0.000000e+00 1.000000e+0017 6 5 - -- 0.000000e+00 1.000000e+0018 7 3 2 4.440892e-16 0.000000e+00 1.000000e+0019 8 4 4 8.881784e-16 0.000000e+00 1.000000e+0020 7 5 - -- 0.000000e+00 1.000000e+0021 6 5 - -- 0.000000e+00 1.000000e+0022 5 4 - -- 0.000000e+00 1.000000e+0023 6 4 2 1.184238e-15 0.000000e+00 1.000000e+0024 5 5 - -- 0.000000e+00 1.000000e+0025 4 5 - -- 0.000000e+00 1.000000e+0026 3 4 - -- 0.000000e+00 1.000000e+0027 2 5 - -- 0.000000e+00 1.000000e+0028 1 3 - -- 0.000000e+00 1.000000e+0029 0 4 - -- 1.000000e+00 1.000000e+00

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 16 / 62

Page 35: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Search tree1 2 3 4

#1

0

#10

#12

0

#15

0

#16≥ 1

#23

0

#24≥ 1

#27≥ 1

#18

0

#19

0

#20≥ 1

#21≥ 1

#26≥ 1

#11

0

#13

0

#14

0

#17≥ 1

#25≥ 1

#22≥ 1

#28≥ 1

#2

0

#4

0

#6

#7

0

#8≥ 1

#9

#29

#5

1

#3

1

Node 1Lower bound: 0

Node 2Lower bound: 0

x52

Node 3Lower bound: 1

x52, x53

Node 4Lower bound: 0

x52, x53

Node 5Lower bound: 1

x52, x53, x51

Node 6Lower bound: 0

x52, x53, x51

Node 7Lower bound: 0x52, x53, x51, x55

Node 29Lower bound: ≥ 1

x52, x53, x51, x55

Node 8Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 9Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 10Lower bound: 0

x52

Node 11Lower bound: 0

x52, x51

Node 12Lower bound: 0

x52, x51

Node 15Lower bound: 0

x52, x51, x54

Node 16Lower bound: ≥ 1

x52, x51, x54, x55

Node 23Lower bound: 0x52, x51, x54, x55

Node 24Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 27Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 18Lower bound: 0

x52, x51, x54

Node 19Lower bound: 0x52, x51, x54, x53

Node 20Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 21Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 26Lower bound: ≥ 1

x52, x51, x54, x53

Node 16Lower bound: ≥ 10

x52, x51, x54, x53

Node 13Lower bound: 0

x52, x51, x53

Node 28Lower bound: ≥ 1

x52, x51, x53

Node 14Lower bound: 0x52, x51, x53, x54

Node 22Lower bound: ≥ 1

x52, x51, x53, x54

Node 17Lower bound: ≥ 1

x52, x51, x53, x54, x55

Node 25Lower bound: ≥ 1

x52, x51, x53, x54, x55

Statistic with LPTotal nodes: 29Max depth: 5

Statistic without LPTotal nodes: 2154

Max depth: 21

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 17 / 62

Page 36: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Search tree1 2 3 4

#1

0

#10

#12

0

#15

0

#16≥ 1

#23

0

#24≥ 1

#27≥ 1

#18

0

#19

0

#20≥ 1

#21≥ 1

#26≥ 1

#11

0

#13

0

#14

0

#17≥ 1

#25≥ 1

#22≥ 1

#28≥ 1

#2

0

#4

0

#6

#7

0

#8≥ 1

#9

#29

#5

1

#3

1

Node 1Lower bound: 0

Node 2Lower bound: 0

x52

Node 3Lower bound: 1

x52, x53

Node 4Lower bound: 0

x52, x53

Node 5Lower bound: 1

x52, x53, x51

Node 6Lower bound: 0

x52, x53, x51

Node 7Lower bound: 0x52, x53, x51, x55

Node 29Lower bound: ≥ 1

x52, x53, x51, x55

Node 8Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 9Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 10Lower bound: 0

x52

Node 11Lower bound: 0

x52, x51

Node 12Lower bound: 0

x52, x51

Node 15Lower bound: 0

x52, x51, x54

Node 16Lower bound: ≥ 1

x52, x51, x54, x55

Node 23Lower bound: 0x52, x51, x54, x55

Node 24Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 27Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 18Lower bound: 0

x52, x51, x54

Node 19Lower bound: 0x52, x51, x54, x53

Node 20Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 21Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 26Lower bound: ≥ 1

x52, x51, x54, x53

Node 16Lower bound: ≥ 10

x52, x51, x54, x53

Node 13Lower bound: 0

x52, x51, x53

Node 28Lower bound: ≥ 1

x52, x51, x53

Node 14Lower bound: 0x52, x51, x53, x54

Node 22Lower bound: ≥ 1

x52, x51, x53, x54

Node 17Lower bound: ≥ 1

x52, x51, x53, x54, x55

Node 25Lower bound: ≥ 1

x52, x51, x53, x54, x55

Statistic with LPTotal nodes: 29Max depth: 5

Statistic without LPTotal nodes: 2154

Max depth: 21

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 17 / 62

Page 37: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Search tree1 2 3 4

#1

0

#10

#12

0

#15

0

#16≥ 1

#23

0

#24≥ 1

#27≥ 1

#18

0

#19

0

#20≥ 1

#21≥ 1

#26≥ 1

#11

0

#13

0

#14

0

#17≥ 1

#25≥ 1

#22≥ 1

#28≥ 1

#2

0

#4

0

#6

#7

0

#8≥ 1

#9

#29

#5

1

#3

1

Node 1Lower bound: 0

Node 2Lower bound: 0

x52

Node 3Lower bound: 1

x52, x53

Node 4Lower bound: 0

x52, x53

Node 5Lower bound: 1

x52, x53, x51

Node 6Lower bound: 0

x52, x53, x51

Node 7Lower bound: 0x52, x53, x51, x55

Node 29Lower bound: ≥ 1

x52, x53, x51, x55

Node 8Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 9Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 10Lower bound: 0

x52

Node 11Lower bound: 0

x52, x51

Node 12Lower bound: 0

x52, x51

Node 15Lower bound: 0

x52, x51, x54

Node 16Lower bound: ≥ 1

x52, x51, x54, x55

Node 23Lower bound: 0x52, x51, x54, x55

Node 24Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 27Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 18Lower bound: 0

x52, x51, x54

Node 19Lower bound: 0x52, x51, x54, x53

Node 20Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 21Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 26Lower bound: ≥ 1

x52, x51, x54, x53

Node 16Lower bound: ≥ 10

x52, x51, x54, x53

Node 13Lower bound: 0

x52, x51, x53

Node 28Lower bound: ≥ 1

x52, x51, x53

Node 14Lower bound: 0x52, x51, x53, x54

Node 22Lower bound: ≥ 1

x52, x51, x53, x54

Node 17Lower bound: ≥ 1

x52, x51, x53, x54, x55

Node 25Lower bound: ≥ 1

x52, x51, x53, x54, x55

Statistic with LPTotal nodes: 29Max depth: 5

Statistic without LPTotal nodes: 2154

Max depth: 21

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 17 / 62

Page 38: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Search tree1 2 3 4

#1

0

#10

#12

0

#15

0

#16≥ 1

#23

0

#24≥ 1

#27≥ 1

#18

0

#19

0

#20≥ 1

#21≥ 1

#26≥ 1

#11

0

#13

0

#14

0

#17≥ 1

#25≥ 1

#22≥ 1

#28≥ 1

#2

0

#4

0

#6

#7

0

#8≥ 1

#9

#29

#5

1

#3

1

Node 1Lower bound: 0

Node 2Lower bound: 0

x52

Node 3Lower bound: 1

x52, x53

Node 4Lower bound: 0

x52, x53

Node 5Lower bound: 1

x52, x53, x51

Node 6Lower bound: 0

x52, x53, x51

Node 7Lower bound: 0x52, x53, x51, x55

Node 29Lower bound: ≥ 1

x52, x53, x51, x55

Node 8Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 9Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 10Lower bound: 0

x52

Node 11Lower bound: 0

x52, x51

Node 12Lower bound: 0

x52, x51

Node 15Lower bound: 0

x52, x51, x54

Node 16Lower bound: ≥ 1

x52, x51, x54, x55

Node 23Lower bound: 0x52, x51, x54, x55

Node 24Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 27Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 18Lower bound: 0

x52, x51, x54

Node 19Lower bound: 0x52, x51, x54, x53

Node 20Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 21Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 26Lower bound: ≥ 1

x52, x51, x54, x53

Node 16Lower bound: ≥ 10

x52, x51, x54, x53

Node 13Lower bound: 0

x52, x51, x53

Node 28Lower bound: ≥ 1

x52, x51, x53

Node 14Lower bound: 0x52, x51, x53, x54

Node 22Lower bound: ≥ 1

x52, x51, x53, x54

Node 17Lower bound: ≥ 1

x52, x51, x53, x54, x55

Node 25Lower bound: ≥ 1

x52, x51, x53, x54, x55

Statistic with LPTotal nodes: 29Max depth: 5

Statistic without LPTotal nodes: 2154

Max depth: 21

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 17 / 62

Page 39: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Search tree1 2 3 4

#1

0

#10

#12

0

#15

0

#16≥ 1

#23

0

#24≥ 1

#27≥ 1

#18

0

#19

0

#20≥ 1

#21≥ 1

#26≥ 1

#11

0

#13

0

#14

0

#17≥ 1

#25≥ 1

#22≥ 1

#28≥ 1

#2

0

#4

0

#6

#7

0

#8≥ 1

#9

#29

#5

1

#3

1

Node 1Lower bound: 0

Node 2Lower bound: 0

x52

Node 3Lower bound: 1

x52, x53

Node 4Lower bound: 0

x52, x53

Node 5Lower bound: 1

x52, x53, x51

Node 6Lower bound: 0

x52, x53, x51

Node 7Lower bound: 0x52, x53, x51, x55

Node 29Lower bound: ≥ 1

x52, x53, x51, x55

Node 8Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 9Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 10Lower bound: 0

x52

Node 11Lower bound: 0

x52, x51

Node 12Lower bound: 0

x52, x51

Node 15Lower bound: 0

x52, x51, x54

Node 16Lower bound: ≥ 1

x52, x51, x54, x55

Node 23Lower bound: 0x52, x51, x54, x55

Node 24Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 27Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 18Lower bound: 0

x52, x51, x54

Node 19Lower bound: 0x52, x51, x54, x53

Node 20Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 21Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 26Lower bound: ≥ 1

x52, x51, x54, x53

Node 16Lower bound: ≥ 10

x52, x51, x54, x53

Node 13Lower bound: 0

x52, x51, x53

Node 28Lower bound: ≥ 1

x52, x51, x53

Node 14Lower bound: 0x52, x51, x53, x54

Node 22Lower bound: ≥ 1

x52, x51, x53, x54

Node 17Lower bound: ≥ 1

x52, x51, x53, x54, x55

Node 25Lower bound: ≥ 1

x52, x51, x53, x54, x55

Statistic with LPTotal nodes: 29Max depth: 5

Statistic without LPTotal nodes: 2154

Max depth: 21

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 17 / 62

Page 40: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

node left depth frac curdualbound dualbound primalbound1 0 0 6 0.000000e+00 0.000000e+00 --1 2 0 6 0.000000e+00 0.000000e+00 --2 3 1 4 0.000000e+00 0.000000e+00 --3 4 2 6 1.000000e+00 0.000000e+00 --4 5 2 2 0.000000e+00 0.000000e+00 --

* 5 2 3 - 1.000000e+00 0.000000e+00 1.000000e+00

6 3 3 2 0.000000e+00 0.000000e+00 1.000000e+007 4 4 2 0.000000e+00 0.000000e+00 1.000000e+008 3 5 - -- 0.000000e+00 1.000000e+009 2 5 - -- 0.000000e+00 1.000000e+00

10 3 1 2 4.440892e-16 0.000000e+00 1.000000e+0011 4 2 2 4.440892e-16 0.000000e+00 1.000000e+0012 5 2 4 4.440892e-16 0.000000e+00 1.000000e+0013 6 3 4 1.776357e-15 0.000000e+00 1.000000e+0014 7 4 4 1.776357e-15 0.000000e+00 1.000000e+00

node left depth frac curdualbound dualbound primalbound15 8 3 4 1.184238e-15 0.000000e+00 1.000000e+0016 7 4 - -- 0.000000e+00 1.000000e+0017 6 5 - -- 0.000000e+00 1.000000e+0018 7 3 2 4.440892e-16 0.000000e+00 1.000000e+0019 8 4 4 8.881784e-16 0.000000e+00 1.000000e+0020 7 5 - -- 0.000000e+00 1.000000e+0021 6 5 - -- 0.000000e+00 1.000000e+0022 5 4 - -- 0.000000e+00 1.000000e+0023 6 4 2 1.184238e-15 0.000000e+00 1.000000e+0024 5 5 - -- 0.000000e+00 1.000000e+0025 4 5 - -- 0.000000e+00 1.000000e+0026 3 4 - -- 0.000000e+00 1.000000e+0027 2 5 - -- 0.000000e+00 1.000000e+0028 1 3 - -- 0.000000e+00 1.000000e+0029 0 4 - -- 1.000000e+00 1.000000e+00

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 18 / 62

Page 41: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Solution

1

2

3

Orders

+

. . .

. . .

1

2

3

4

5

Slabs

1 0 0 0 0Assignment

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 19 / 62

Page 42: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Search tree1 2 3 4

#1

0

#10

#12

0

#15

0

#16≥ 1

#23

0

#24≥ 1

#27≥ 1

#18

0

#19

0

#20≥ 1

#21≥ 1

#26≥ 1

#11

0

#13

0

#14

0

#17≥ 1

#25≥ 1

#22≥ 1

#28≥ 1

#2

0

#4

0

#6

0

#7

0

#8≥ 1

#9

#29

#5

1

#3

1

Node 1Lower bound: 0

Node 2Lower bound: 0

x52

Node 3Lower bound: 1

x52, x53

Node 4Lower bound: 0

x52, x53

Node 5Lower bound: 1

x52, x53, x51

Node 6Lower bound: 0

x52, x53, x51

Node 7Lower bound: 0x52, x53, x51, x55

Node 29Lower bound: ≥ 1

x52, x53, x51, x55

Node 8Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 9Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 10Lower bound: 0

x52

Node 11Lower bound: 0

x52, x51

Node 12Lower bound: 0

x52, x51

Node 15Lower bound: 0

x52, x51, x54

Node 16Lower bound: ≥ 1

x52, x51, x54, x55

Node 23Lower bound: 0x52, x51, x54, x55

Node 24Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 27Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 18Lower bound: 0

x52, x51, x54

Node 19Lower bound: 0x52, x51, x54, x53

Node 20Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 21Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 26Lower bound: ≥ 1

x52, x51, x54, x53

Node 16Lower bound: ≥ 10

x52, x51, x54, x53

Node 13Lower bound: 0

x52, x51, x53

Node 28Lower bound: ≥ 1

x52, x51, x53

Node 14Lower bound: 0x52, x51, x53, x54

Node 22Lower bound: ≥ 1

x52, x51, x53, x54

Node 17Lower bound: ≥ 1

x52, x51, x53, x54, x55

Node 25Lower bound: ≥ 1

x52, x51, x53, x54, x55

Statistic with LPTotal nodes: 29Max depth: 5

Statistic without LPTotal nodes: 2154

Max depth: 21

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 20 / 62

Page 43: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Search tree1 2 3 4

#1

0

#10

#12

0

#15

0

#16≥ 1

#23

0

#24≥ 1

#27≥ 1

#18

0

#19

0

#20≥ 1

#21≥ 1

#26≥ 1

#11

0

#13

0

#14

0

#17≥ 1

#25≥ 1

#22≥ 1

#28≥ 1

#2

0

#4

0

#6

0

#7

0

#8≥ 1

#9

#29

#5

1

#3

1

Node 1Lower bound: 0

Node 2Lower bound: 0

x52

Node 3Lower bound: 1

x52, x53

Node 4Lower bound: 0

x52, x53

Node 5Lower bound: 1

x52, x53, x51

Node 6Lower bound: 0

x52, x53, x51

Node 7Lower bound: 0x52, x53, x51, x55

Node 29Lower bound: ≥ 1

x52, x53, x51, x55

Node 8Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 9Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 10Lower bound: 0

x52

Node 11Lower bound: 0

x52, x51

Node 12Lower bound: 0

x52, x51

Node 15Lower bound: 0

x52, x51, x54

Node 16Lower bound: ≥ 1

x52, x51, x54, x55

Node 23Lower bound: 0x52, x51, x54, x55

Node 24Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 27Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 18Lower bound: 0

x52, x51, x54

Node 19Lower bound: 0x52, x51, x54, x53

Node 20Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 21Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 26Lower bound: ≥ 1

x52, x51, x54, x53

Node 16Lower bound: ≥ 10

x52, x51, x54, x53

Node 13Lower bound: 0

x52, x51, x53

Node 28Lower bound: ≥ 1

x52, x51, x53

Node 14Lower bound: 0x52, x51, x53, x54

Node 22Lower bound: ≥ 1

x52, x51, x53, x54

Node 17Lower bound: ≥ 1

x52, x51, x53, x54, x55

Node 25Lower bound: ≥ 1

x52, x51, x53, x54, x55

Statistic with LPTotal nodes: 29Max depth: 5

Statistic without LPTotal nodes: 2154

Max depth: 21

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 20 / 62

Page 44: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Search tree1 2 3 4

#1

0

#10

#12

0

#15

0

#16≥ 1

#23

0

#24≥ 1

#27≥ 1

#18

0

#19

0

#20≥ 1

#21≥ 1

#26≥ 1

#11

0

#13

0

#14

0

#17≥ 1

#25≥ 1

#22≥ 1

#28≥ 1

#2

0

#4

0

#6

0

#7

0

#8≥ 1

#9

#29

#5

1

#3

1

Node 1Lower bound: 0

Node 2Lower bound: 0

x52

Node 3Lower bound: 1

x52, x53

Node 4Lower bound: 0

x52, x53

Node 5Lower bound: 1

x52, x53, x51

Node 6Lower bound: 0

x52, x53, x51

Node 7Lower bound: 0x52, x53, x51, x55

Node 29Lower bound: ≥ 1

x52, x53, x51, x55

Node 8Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 9Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 10Lower bound: 0

x52

Node 11Lower bound: 0

x52, x51

Node 12Lower bound: 0

x52, x51

Node 15Lower bound: 0

x52, x51, x54

Node 16Lower bound: ≥ 1

x52, x51, x54, x55

Node 23Lower bound: 0x52, x51, x54, x55

Node 24Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 27Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 18Lower bound: 0

x52, x51, x54

Node 19Lower bound: 0x52, x51, x54, x53

Node 20Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 21Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 26Lower bound: ≥ 1

x52, x51, x54, x53

Node 16Lower bound: ≥ 10

x52, x51, x54, x53

Node 13Lower bound: 0

x52, x51, x53

Node 28Lower bound: ≥ 1

x52, x51, x53

Node 14Lower bound: 0x52, x51, x53, x54

Node 22Lower bound: ≥ 1

x52, x51, x53, x54

Node 17Lower bound: ≥ 1

x52, x51, x53, x54, x55

Node 25Lower bound: ≥ 1

x52, x51, x53, x54, x55

Statistic with LPTotal nodes: 29Max depth: 5

Statistic without LPTotal nodes: 2154

Max depth: 21

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 20 / 62

Page 45: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

node left depth frac curdualbound dualbound primalbound1 0 0 6 0.000000e+00 0.000000e+00 --1 2 0 6 0.000000e+00 0.000000e+00 --2 3 1 4 0.000000e+00 0.000000e+00 --3 4 2 6 1.000000e+00 0.000000e+00 --4 5 2 2 0.000000e+00 0.000000e+00 --

* 5 2 3 - 1.000000e+00 0.000000e+00 1.000000e+006 3 3 2 0.000000e+00 0.000000e+00 1.000000e+007 4 4 2 0.000000e+00 0.000000e+00 1.000000e+008 3 5 - -- 0.000000e+00 1.000000e+00

9 2 5 - -- 0.000000e+00 1.000000e+0010 3 1 2 4.440892e-16 0.000000e+00 1.000000e+0011 4 2 2 4.440892e-16 0.000000e+00 1.000000e+0012 5 2 4 4.440892e-16 0.000000e+00 1.000000e+0013 6 3 4 1.776357e-15 0.000000e+00 1.000000e+0014 7 4 4 1.776357e-15 0.000000e+00 1.000000e+00

node left depth frac curdualbound dualbound primalbound15 8 3 4 1.184238e-15 0.000000e+00 1.000000e+0016 7 4 - -- 0.000000e+00 1.000000e+0017 6 5 - -- 0.000000e+00 1.000000e+0018 7 3 2 4.440892e-16 0.000000e+00 1.000000e+0019 8 4 4 8.881784e-16 0.000000e+00 1.000000e+0020 7 5 - -- 0.000000e+00 1.000000e+0021 6 5 - -- 0.000000e+00 1.000000e+0022 5 4 - -- 0.000000e+00 1.000000e+0023 6 4 2 1.184238e-15 0.000000e+00 1.000000e+0024 5 5 - -- 0.000000e+00 1.000000e+0025 4 5 - -- 0.000000e+00 1.000000e+0026 3 4 - -- 0.000000e+00 1.000000e+0027 2 5 - -- 0.000000e+00 1.000000e+0028 1 3 - -- 0.000000e+00 1.000000e+0029 0 4 - -- 1.000000e+00 1.000000e+00

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 21 / 62

Page 46: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Search tree1 2 3 4

#1

0

#10

0

#12

0

#15

0

#16≥ 1

#23

0

#24≥ 1

#27≥ 1

#18

0

#19

0

#20≥ 1

#21≥ 1

#26≥ 1

#11

0

#13

0

#14

0

#17≥ 1

#25≥ 1

#22≥ 1

#28≥ 1

#2

0

#4

0

#6

0

#7

0

#8≥ 1

#9≥ 1

#29≥ 1

#5

1

#3

1

Node 1Lower bound: 0

Node 2Lower bound: 0

x52

Node 3Lower bound: 1

x52, x53

Node 4Lower bound: 0

x52, x53

Node 5Lower bound: 1

x52, x53, x51

Node 6Lower bound: 0

x52, x53, x51

Node 7Lower bound: 0x52, x53, x51, x55

Node 29Lower bound: ≥ 1

x52, x53, x51, x55

Node 8Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 9Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 10Lower bound: 0

x52

Node 11Lower bound: 0

x52, x51

Node 12Lower bound: 0

x52, x51

Node 15Lower bound: 0

x52, x51, x54

Node 16Lower bound: ≥ 1

x52, x51, x54, x55

Node 23Lower bound: 0x52, x51, x54, x55

Node 24Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 27Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 18Lower bound: 0

x52, x51, x54

Node 19Lower bound: 0x52, x51, x54, x53

Node 20Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 21Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 26Lower bound: ≥ 1

x52, x51, x54, x53

Node 16Lower bound: ≥ 10

x52, x51, x54, x53

Node 13Lower bound: 0

x52, x51, x53

Node 28Lower bound: ≥ 1

x52, x51, x53

Node 14Lower bound: 0x52, x51, x53, x54

Node 22Lower bound: ≥ 1

x52, x51, x53, x54

Node 17Lower bound: ≥ 1

x52, x51, x53, x54, x55

Node 25Lower bound: ≥ 1

x52, x51, x53, x54, x55

Statistic with LPTotal nodes: 29Max depth: 5

Statistic without LPTotal nodes: 2154

Max depth: 21

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 22 / 62

Page 47: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Search tree1 2 3 4

#1

0

#10

0

#12

0

#15

0

#16≥ 1

#23

0

#24≥ 1

#27≥ 1

#18

0

#19

0

#20≥ 1

#21≥ 1

#26≥ 1

#11

0

#13

0

#14

0

#17≥ 1

#25≥ 1

#22≥ 1

#28≥ 1

#2

0

#4

0

#6

0

#7

0

#8≥ 1

#9≥ 1

#29≥ 1

#5

1

#3

1

Node 1Lower bound: 0

Node 2Lower bound: 0

x52

Node 3Lower bound: 1

x52, x53

Node 4Lower bound: 0

x52, x53

Node 5Lower bound: 1

x52, x53, x51

Node 6Lower bound: 0

x52, x53, x51

Node 7Lower bound: 0x52, x53, x51, x55

Node 29Lower bound: ≥ 1

x52, x53, x51, x55

Node 8Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 9Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 10Lower bound: 0

x52

Node 11Lower bound: 0

x52, x51

Node 12Lower bound: 0

x52, x51

Node 15Lower bound: 0

x52, x51, x54

Node 16Lower bound: ≥ 1

x52, x51, x54, x55

Node 23Lower bound: 0x52, x51, x54, x55

Node 24Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 27Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 18Lower bound: 0

x52, x51, x54

Node 19Lower bound: 0x52, x51, x54, x53

Node 20Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 21Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 26Lower bound: ≥ 1

x52, x51, x54, x53

Node 16Lower bound: ≥ 10

x52, x51, x54, x53

Node 13Lower bound: 0

x52, x51, x53

Node 28Lower bound: ≥ 1

x52, x51, x53

Node 14Lower bound: 0x52, x51, x53, x54

Node 22Lower bound: ≥ 1

x52, x51, x53, x54

Node 17Lower bound: ≥ 1

x52, x51, x53, x54, x55

Node 25Lower bound: ≥ 1

x52, x51, x53, x54, x55

Statistic with LPTotal nodes: 29Max depth: 5

Statistic without LPTotal nodes: 2154

Max depth: 21

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 22 / 62

Page 48: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Search tree1 2 3 4

#1

0

#10

0

#12

0

#15

0

#16≥ 1

#23

0

#24≥ 1

#27≥ 1

#18

0

#19

0

#20≥ 1

#21≥ 1

#26≥ 1

#11

0

#13

0

#14

0

#17≥ 1

#25≥ 1

#22≥ 1

#28≥ 1

#2

0

#4

0

#6

0

#7

0

#8≥ 1

#9≥ 1

#29≥ 1

#5

1

#3

1

Node 1Lower bound: 0

Node 2Lower bound: 0

x52

Node 3Lower bound: 1

x52, x53

Node 4Lower bound: 0

x52, x53

Node 5Lower bound: 1

x52, x53, x51

Node 6Lower bound: 0

x52, x53, x51

Node 7Lower bound: 0x52, x53, x51, x55

Node 29Lower bound: ≥ 1

x52, x53, x51, x55

Node 8Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 9Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 10Lower bound: 0

x52

Node 11Lower bound: 0

x52, x51

Node 12Lower bound: 0

x52, x51

Node 15Lower bound: 0

x52, x51, x54

Node 16Lower bound: ≥ 1

x52, x51, x54, x55

Node 23Lower bound: 0x52, x51, x54, x55

Node 24Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 27Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 18Lower bound: 0

x52, x51, x54

Node 19Lower bound: 0x52, x51, x54, x53

Node 20Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 21Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 26Lower bound: ≥ 1

x52, x51, x54, x53

Node 16Lower bound: ≥ 10

x52, x51, x54, x53

Node 13Lower bound: 0

x52, x51, x53

Node 28Lower bound: ≥ 1

x52, x51, x53

Node 14Lower bound: 0x52, x51, x53, x54

Node 22Lower bound: ≥ 1

x52, x51, x53, x54

Node 17Lower bound: ≥ 1

x52, x51, x53, x54, x55

Node 25Lower bound: ≥ 1

x52, x51, x53, x54, x55

Statistic with LPTotal nodes: 29Max depth: 5

Statistic without LPTotal nodes: 2154

Max depth: 21

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 22 / 62

Page 49: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Search tree1 2 3 4

#1

0

#10

0

#12

0

#15

0

#16≥ 1

#23

0

#24≥ 1

#27≥ 1

#18

0

#19

0

#20≥ 1

#21≥ 1

#26≥ 1

#11

0

#13

0

#14

0

#17≥ 1

#25≥ 1

#22≥ 1

#28≥ 1

#2

0

#4

0

#6

0

#7

0

#8≥ 1

#9≥ 1

#29≥ 1

#5

1

#3

1

Node 1Lower bound: 0

Node 2Lower bound: 0

x52

Node 3Lower bound: 1

x52, x53

Node 4Lower bound: 0

x52, x53

Node 5Lower bound: 1

x52, x53, x51

Node 6Lower bound: 0

x52, x53, x51

Node 7Lower bound: 0x52, x53, x51, x55

Node 29Lower bound: ≥ 1

x52, x53, x51, x55

Node 8Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 9Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 10Lower bound: 0

x52

Node 11Lower bound: 0

x52, x51

Node 12Lower bound: 0

x52, x51

Node 15Lower bound: 0

x52, x51, x54

Node 16Lower bound: ≥ 1

x52, x51, x54, x55

Node 23Lower bound: 0x52, x51, x54, x55

Node 24Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 27Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 18Lower bound: 0

x52, x51, x54

Node 19Lower bound: 0x52, x51, x54, x53

Node 20Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 21Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 26Lower bound: ≥ 1

x52, x51, x54, x53

Node 16Lower bound: ≥ 10

x52, x51, x54, x53

Node 13Lower bound: 0

x52, x51, x53

Node 28Lower bound: ≥ 1

x52, x51, x53

Node 14Lower bound: 0x52, x51, x53, x54

Node 22Lower bound: ≥ 1

x52, x51, x53, x54

Node 17Lower bound: ≥ 1

x52, x51, x53, x54, x55

Node 25Lower bound: ≥ 1

x52, x51, x53, x54, x55

Statistic with LPTotal nodes: 29Max depth: 5

Statistic without LPTotal nodes: 2154

Max depth: 21

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 22 / 62

Page 50: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Search tree1 2 3 4

#1

0

#10

0

#12

0

#15

0

#16≥ 1

#23

0

#24≥ 1

#27≥ 1

#18

0

#19

0

#20≥ 1

#21≥ 1

#26≥ 1

#11

0

#13

0

#14

0

#17≥ 1

#25≥ 1

#22≥ 1

#28≥ 1

#2

0

#4

0

#6

0

#7

0

#8≥ 1

#9≥ 1

#29≥ 1

#5

1

#3

1

Node 1Lower bound: 0

Node 2Lower bound: 0

x52

Node 3Lower bound: 1

x52, x53

Node 4Lower bound: 0

x52, x53

Node 5Lower bound: 1

x52, x53, x51

Node 6Lower bound: 0

x52, x53, x51

Node 7Lower bound: 0x52, x53, x51, x55

Node 29Lower bound: ≥ 1

x52, x53, x51, x55

Node 8Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 9Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 10Lower bound: 0

x52

Node 11Lower bound: 0

x52, x51

Node 12Lower bound: 0

x52, x51

Node 15Lower bound: 0

x52, x51, x54

Node 16Lower bound: ≥ 1

x52, x51, x54, x55

Node 23Lower bound: 0x52, x51, x54, x55

Node 24Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 27Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 18Lower bound: 0

x52, x51, x54

Node 19Lower bound: 0x52, x51, x54, x53

Node 20Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 21Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 26Lower bound: ≥ 1

x52, x51, x54, x53

Node 16Lower bound: ≥ 10

x52, x51, x54, x53

Node 13Lower bound: 0

x52, x51, x53

Node 28Lower bound: ≥ 1

x52, x51, x53

Node 14Lower bound: 0x52, x51, x53, x54

Node 22Lower bound: ≥ 1

x52, x51, x53, x54

Node 17Lower bound: ≥ 1

x52, x51, x53, x54, x55

Node 25Lower bound: ≥ 1

x52, x51, x53, x54, x55

Statistic with LPTotal nodes: 29Max depth: 5

Statistic without LPTotal nodes: 2154

Max depth: 21

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 22 / 62

Page 51: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Search tree1 2 3 4

#1

0

#10

0

#12

0

#15

0

#16≥ 1

#23

0

#24≥ 1

#27≥ 1

#18

0

#19

0

#20≥ 1

#21≥ 1

#26≥ 1

#11

0

#13

0

#14

0

#17≥ 1

#25≥ 1

#22≥ 1

#28≥ 1

#2

0

#4

0

#6

0

#7

0

#8≥ 1

#9≥ 1

#29≥ 1

#5

1

#3

1

Node 1Lower bound: 0

Node 2Lower bound: 0

x52

Node 3Lower bound: 1

x52, x53

Node 4Lower bound: 0

x52, x53

Node 5Lower bound: 1

x52, x53, x51

Node 6Lower bound: 0

x52, x53, x51

Node 7Lower bound: 0x52, x53, x51, x55

Node 29Lower bound: ≥ 1

x52, x53, x51, x55

Node 8Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 9Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 10Lower bound: 0

x52

Node 11Lower bound: 0

x52, x51

Node 12Lower bound: 0

x52, x51

Node 15Lower bound: 0

x52, x51, x54

Node 16Lower bound: ≥ 1

x52, x51, x54, x55

Node 23Lower bound: 0x52, x51, x54, x55

Node 24Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 27Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 18Lower bound: 0

x52, x51, x54

Node 19Lower bound: 0x52, x51, x54, x53

Node 20Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 21Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 26Lower bound: ≥ 1

x52, x51, x54, x53

Node 16Lower bound: ≥ 10

x52, x51, x54, x53

Node 13Lower bound: 0

x52, x51, x53

Node 28Lower bound: ≥ 1

x52, x51, x53

Node 14Lower bound: 0x52, x51, x53, x54

Node 22Lower bound: ≥ 1

x52, x51, x53, x54

Node 17Lower bound: ≥ 1

x52, x51, x53, x54, x55

Node 25Lower bound: ≥ 1

x52, x51, x53, x54, x55

Statistic with LPTotal nodes: 29Max depth: 5

Statistic without LPTotal nodes: 2154

Max depth: 21

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 22 / 62

Page 52: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Search tree1 2 3 4

#1

0

#10

0

#12

0

#15

0

#16≥ 1

#23

0

#24≥ 1

#27≥ 1

#18

0

#19

0

#20≥ 1

#21≥ 1

#26≥ 1

#11

0

#13

0

#14

0

#17≥ 1

#25≥ 1

#22≥ 1

#28≥ 1

#2

0

#4

0

#6

0

#7

0

#8≥ 1

#9≥ 1

#29≥ 1

#5

1

#3

1

Node 1Lower bound: 0

Node 2Lower bound: 0

x52

Node 3Lower bound: 1

x52, x53

Node 4Lower bound: 0

x52, x53

Node 5Lower bound: 1

x52, x53, x51

Node 6Lower bound: 0

x52, x53, x51

Node 7Lower bound: 0x52, x53, x51, x55

Node 29Lower bound: ≥ 1

x52, x53, x51, x55

Node 8Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 9Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 10Lower bound: 0

x52

Node 11Lower bound: 0

x52, x51

Node 12Lower bound: 0

x52, x51

Node 15Lower bound: 0

x52, x51, x54

Node 16Lower bound: ≥ 1

x52, x51, x54, x55

Node 23Lower bound: 0x52, x51, x54, x55

Node 24Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 27Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 18Lower bound: 0

x52, x51, x54

Node 19Lower bound: 0x52, x51, x54, x53

Node 20Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 21Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 26Lower bound: ≥ 1

x52, x51, x54, x53

Node 16Lower bound: ≥ 10

x52, x51, x54, x53

Node 13Lower bound: 0

x52, x51, x53

Node 28Lower bound: ≥ 1

x52, x51, x53

Node 14Lower bound: 0x52, x51, x53, x54

Node 22Lower bound: ≥ 1

x52, x51, x53, x54

Node 17Lower bound: ≥ 1

x52, x51, x53, x54, x55

Node 25Lower bound: ≥ 1

x52, x51, x53, x54, x55

Statistic with LPTotal nodes: 29Max depth: 5

Statistic without LPTotal nodes: 2154

Max depth: 21

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 22 / 62

Page 53: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Search tree1 2 3 4

#1

0

#10

0

#12

0

#15

0

#16≥ 1

#23

0

#24≥ 1

#27≥ 1

#18

0

#19

0

#20≥ 1

#21≥ 1

#26≥ 1

#11

0

#13

0

#14

0

#17≥ 1

#25≥ 1

#22≥ 1

#28≥ 1

#2

0

#4

0

#6

0

#7

0

#8≥ 1

#9≥ 1

#29≥ 1

#5

1

#3

1

Node 1Lower bound: 0

Node 2Lower bound: 0

x52

Node 3Lower bound: 1

x52, x53

Node 4Lower bound: 0

x52, x53

Node 5Lower bound: 1

x52, x53, x51

Node 6Lower bound: 0

x52, x53, x51

Node 7Lower bound: 0x52, x53, x51, x55

Node 29Lower bound: ≥ 1

x52, x53, x51, x55

Node 8Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 9Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 10Lower bound: 0

x52

Node 11Lower bound: 0

x52, x51

Node 12Lower bound: 0

x52, x51

Node 15Lower bound: 0

x52, x51, x54

Node 16Lower bound: ≥ 1

x52, x51, x54, x55

Node 23Lower bound: 0x52, x51, x54, x55

Node 24Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 27Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 18Lower bound: 0

x52, x51, x54

Node 19Lower bound: 0x52, x51, x54, x53

Node 20Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 21Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 26Lower bound: ≥ 1

x52, x51, x54, x53

Node 16Lower bound: ≥ 10

x52, x51, x54, x53

Node 13Lower bound: 0

x52, x51, x53

Node 28Lower bound: ≥ 1

x52, x51, x53

Node 14Lower bound: 0x52, x51, x53, x54

Node 22Lower bound: ≥ 1

x52, x51, x53, x54

Node 17Lower bound: ≥ 1

x52, x51, x53, x54, x55

Node 25Lower bound: ≥ 1

x52, x51, x53, x54, x55

Statistic with LPTotal nodes: 29Max depth: 5

Statistic without LPTotal nodes: 2154

Max depth: 21

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 22 / 62

Page 54: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Search tree1 2 3 4

#1

0

#10

0

#12

0

#15

0

#16≥ 1

#23

0

#24≥ 1

#27≥ 1

#18

0

#19

0

#20≥ 1

#21≥ 1

#26≥ 1

#11

0

#13

0

#14

0

#17≥ 1

#25≥ 1

#22≥ 1

#28≥ 1

#2

0

#4

0

#6

0

#7

0

#8≥ 1

#9≥ 1

#29≥ 1

#5

1

#3

1

Node 1Lower bound: 0

Node 2Lower bound: 0

x52

Node 3Lower bound: 1

x52, x53

Node 4Lower bound: 0

x52, x53

Node 5Lower bound: 1

x52, x53, x51

Node 6Lower bound: 0

x52, x53, x51

Node 7Lower bound: 0x52, x53, x51, x55

Node 29Lower bound: ≥ 1

x52, x53, x51, x55

Node 8Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 9Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 10Lower bound: 0

x52

Node 11Lower bound: 0

x52, x51

Node 12Lower bound: 0

x52, x51

Node 15Lower bound: 0

x52, x51, x54

Node 16Lower bound: ≥ 1

x52, x51, x54, x55

Node 23Lower bound: 0x52, x51, x54, x55

Node 24Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 27Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 18Lower bound: 0

x52, x51, x54

Node 19Lower bound: 0x52, x51, x54, x53

Node 20Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 21Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 26Lower bound: ≥ 1

x52, x51, x54, x53

Node 16Lower bound: ≥ 10

x52, x51, x54, x53

Node 13Lower bound: 0

x52, x51, x53

Node 28Lower bound: ≥ 1

x52, x51, x53

Node 14Lower bound: 0x52, x51, x53, x54

Node 22Lower bound: ≥ 1

x52, x51, x53, x54

Node 17Lower bound: ≥ 1

x52, x51, x53, x54, x55

Node 25Lower bound: ≥ 1

x52, x51, x53, x54, x55

Statistic with LPTotal nodes: 29Max depth: 5

Statistic without LPTotal nodes: 2154

Max depth: 21

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 22 / 62

Page 55: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Search tree1 2 3 4

#1

0

#10

0

#12

0

#15

0

#16≥ 1

#23

0

#24≥ 1

#27≥ 1

#18

0

#19

0

#20≥ 1

#21≥ 1

#26≥ 1

#11

0

#13

0

#14

0

#17≥ 1

#25≥ 1

#22≥ 1

#28≥ 1

#2

0

#4

0

#6

0

#7

0

#8≥ 1

#9≥ 1

#29≥ 1

#5

1

#3

1

Node 1Lower bound: 0

Node 2Lower bound: 0

x52

Node 3Lower bound: 1

x52, x53

Node 4Lower bound: 0

x52, x53

Node 5Lower bound: 1

x52, x53, x51

Node 6Lower bound: 0

x52, x53, x51

Node 7Lower bound: 0x52, x53, x51, x55

Node 29Lower bound: ≥ 1

x52, x53, x51, x55

Node 8Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 9Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 10Lower bound: 0

x52

Node 11Lower bound: 0

x52, x51

Node 12Lower bound: 0

x52, x51

Node 15Lower bound: 0

x52, x51, x54

Node 16Lower bound: ≥ 1

x52, x51, x54, x55

Node 23Lower bound: 0x52, x51, x54, x55

Node 24Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 27Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 18Lower bound: 0

x52, x51, x54

Node 19Lower bound: 0x52, x51, x54, x53

Node 20Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 21Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 26Lower bound: ≥ 1

x52, x51, x54, x53

Node 16Lower bound: ≥ 10

x52, x51, x54, x53

Node 13Lower bound: 0

x52, x51, x53

Node 28Lower bound: ≥ 1

x52, x51, x53

Node 14Lower bound: 0x52, x51, x53, x54

Node 22Lower bound: ≥ 1

x52, x51, x53, x54

Node 17Lower bound: ≥ 1

x52, x51, x53, x54, x55

Node 25Lower bound: ≥ 1

x52, x51, x53, x54, x55

Statistic with LPTotal nodes: 29Max depth: 5

Statistic without LPTotal nodes: 2154

Max depth: 21

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 22 / 62

Page 56: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Search tree1 2 3 4

#1

0

#10

0

#12

0

#15

0

#16≥ 1

#23

0

#24≥ 1

#27≥ 1

#18

0

#19

0

#20≥ 1

#21≥ 1

#26≥ 1

#11

0

#13

0

#14

0

#17≥ 1

#25≥ 1

#22≥ 1

#28≥ 1

#2

0

#4

0

#6

0

#7

0

#8≥ 1

#9≥ 1

#29≥ 1

#5

1

#3

1

Node 1Lower bound: 0

Node 2Lower bound: 0

x52

Node 3Lower bound: 1

x52, x53

Node 4Lower bound: 0

x52, x53

Node 5Lower bound: 1

x52, x53, x51

Node 6Lower bound: 0

x52, x53, x51

Node 7Lower bound: 0x52, x53, x51, x55

Node 29Lower bound: ≥ 1

x52, x53, x51, x55

Node 8Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 9Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 10Lower bound: 0

x52

Node 11Lower bound: 0

x52, x51

Node 12Lower bound: 0

x52, x51

Node 15Lower bound: 0

x52, x51, x54

Node 16Lower bound: ≥ 1

x52, x51, x54, x55

Node 23Lower bound: 0x52, x51, x54, x55

Node 24Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 27Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 18Lower bound: 0

x52, x51, x54

Node 19Lower bound: 0x52, x51, x54, x53

Node 20Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 21Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 26Lower bound: ≥ 1

x52, x51, x54, x53

Node 16Lower bound: ≥ 10

x52, x51, x54, x53

Node 13Lower bound: 0

x52, x51, x53

Node 28Lower bound: ≥ 1

x52, x51, x53

Node 14Lower bound: 0x52, x51, x53, x54

Node 22Lower bound: ≥ 1

x52, x51, x53, x54

Node 17Lower bound: ≥ 1

x52, x51, x53, x54, x55

Node 25Lower bound: ≥ 1

x52, x51, x53, x54, x55

Statistic with LPTotal nodes: 29Max depth: 5

Statistic without LPTotal nodes: 2154

Max depth: 21

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 22 / 62

Page 57: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Search tree1 2 3 4

#1

0

#10

0

#12

0

#15

0

#16≥ 1

#23

0

#24≥ 1

#27≥ 1

#18

0

#19

0

#20≥ 1

#21≥ 1

#26≥ 1

#11

0

#13

0

#14

0

#17≥ 1

#25≥ 1

#22≥ 1

#28≥ 1

#2

0

#4

0

#6

0

#7

0

#8≥ 1

#9≥ 1

#29≥ 1

#5

1

#3

1

Node 1Lower bound: 0

Node 2Lower bound: 0

x52

Node 3Lower bound: 1

x52, x53

Node 4Lower bound: 0

x52, x53

Node 5Lower bound: 1

x52, x53, x51

Node 6Lower bound: 0

x52, x53, x51

Node 7Lower bound: 0x52, x53, x51, x55

Node 29Lower bound: ≥ 1

x52, x53, x51, x55

Node 8Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 9Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 10Lower bound: 0

x52

Node 11Lower bound: 0

x52, x51

Node 12Lower bound: 0

x52, x51

Node 15Lower bound: 0

x52, x51, x54

Node 16Lower bound: ≥ 1

x52, x51, x54, x55

Node 23Lower bound: 0x52, x51, x54, x55

Node 24Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 27Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 18Lower bound: 0

x52, x51, x54

Node 19Lower bound: 0x52, x51, x54, x53

Node 20Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 21Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 26Lower bound: ≥ 1

x52, x51, x54, x53

Node 16Lower bound: ≥ 10

x52, x51, x54, x53

Node 13Lower bound: 0

x52, x51, x53

Node 28Lower bound: ≥ 1

x52, x51, x53

Node 14Lower bound: 0x52, x51, x53, x54

Node 22Lower bound: ≥ 1

x52, x51, x53, x54

Node 17Lower bound: ≥ 1

x52, x51, x53, x54, x55

Node 25Lower bound: ≥ 1

x52, x51, x53, x54, x55

Statistic with LPTotal nodes: 29Max depth: 5

Statistic without LPTotal nodes: 2154

Max depth: 21

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 22 / 62

Page 58: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Search tree1 2 3 4

#1

0

#10

0

#12

0

#15

0

#16≥ 1

#23

0

#24≥ 1

#27≥ 1

#18

0

#19

0

#20≥ 1

#21≥ 1

#26≥ 1

#11

0

#13

0

#14

0

#17≥ 1

#25≥ 1

#22≥ 1

#28≥ 1

#2

0

#4

0

#6

0

#7

0

#8≥ 1

#9≥ 1

#29≥ 1

#5

1

#3

1

Node 1Lower bound: 0

Node 2Lower bound: 0

x52

Node 3Lower bound: 1

x52, x53

Node 4Lower bound: 0

x52, x53

Node 5Lower bound: 1

x52, x53, x51

Node 6Lower bound: 0

x52, x53, x51

Node 7Lower bound: 0x52, x53, x51, x55

Node 29Lower bound: ≥ 1

x52, x53, x51, x55

Node 8Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 9Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 10Lower bound: 0

x52

Node 11Lower bound: 0

x52, x51

Node 12Lower bound: 0

x52, x51

Node 15Lower bound: 0

x52, x51, x54

Node 16Lower bound: ≥ 1

x52, x51, x54, x55

Node 23Lower bound: 0x52, x51, x54, x55

Node 24Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 27Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 18Lower bound: 0

x52, x51, x54

Node 19Lower bound: 0x52, x51, x54, x53

Node 20Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 21Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 26Lower bound: ≥ 1

x52, x51, x54, x53

Node 16Lower bound: ≥ 10

x52, x51, x54, x53

Node 13Lower bound: 0

x52, x51, x53

Node 28Lower bound: ≥ 1

x52, x51, x53

Node 14Lower bound: 0x52, x51, x53, x54

Node 22Lower bound: ≥ 1

x52, x51, x53, x54

Node 17Lower bound: ≥ 1

x52, x51, x53, x54, x55

Node 25Lower bound: ≥ 1

x52, x51, x53, x54, x55

Statistic with LPTotal nodes: 29Max depth: 5

Statistic without LPTotal nodes: 2154

Max depth: 21

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 22 / 62

Page 59: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Search tree1 2 3 4

#1

0

#10

0

#12

0

#15

0

#16≥ 1

#23

0

#24≥ 1

#27≥ 1

#18

0

#19

0

#20≥ 1

#21≥ 1

#26≥ 1

#11

0

#13

0

#14

0

#17≥ 1

#25≥ 1

#22≥ 1

#28≥ 1

#2

0

#4

0

#6

0

#7

0

#8≥ 1

#9≥ 1

#29≥ 1

#5

1

#3

1

Node 1Lower bound: 0

Node 2Lower bound: 0

x52

Node 3Lower bound: 1

x52, x53

Node 4Lower bound: 0

x52, x53

Node 5Lower bound: 1

x52, x53, x51

Node 6Lower bound: 0

x52, x53, x51

Node 7Lower bound: 0x52, x53, x51, x55

Node 29Lower bound: ≥ 1

x52, x53, x51, x55

Node 8Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 9Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 10Lower bound: 0

x52

Node 11Lower bound: 0

x52, x51

Node 12Lower bound: 0

x52, x51

Node 15Lower bound: 0

x52, x51, x54

Node 16Lower bound: ≥ 1

x52, x51, x54, x55

Node 23Lower bound: 0x52, x51, x54, x55

Node 24Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 27Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 18Lower bound: 0

x52, x51, x54

Node 19Lower bound: 0x52, x51, x54, x53

Node 20Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 21Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 26Lower bound: ≥ 1

x52, x51, x54, x53

Node 16Lower bound: ≥ 10

x52, x51, x54, x53

Node 13Lower bound: 0

x52, x51, x53

Node 28Lower bound: ≥ 1

x52, x51, x53

Node 14Lower bound: 0x52, x51, x53, x54

Node 22Lower bound: ≥ 1

x52, x51, x53, x54

Node 17Lower bound: ≥ 1

x52, x51, x53, x54, x55

Node 25Lower bound: ≥ 1

x52, x51, x53, x54, x55

Statistic with LPTotal nodes: 29Max depth: 5

Statistic without LPTotal nodes: 2154

Max depth: 21

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 22 / 62

Page 60: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Search tree1 2 3 4

#1

0

#10

0

#12

0

#15

0

#16≥ 1

#23

0

#24≥ 1

#27≥ 1

#18

0

#19

0

#20≥ 1

#21≥ 1

#26≥ 1

#11

0

#13

0

#14

0

#17≥ 1

#25≥ 1

#22≥ 1

#28≥ 1

#2

0

#4

0

#6

0

#7

0

#8≥ 1

#9≥ 1

#29≥ 1

#5

1

#3

1

Node 1Lower bound: 0

Node 2Lower bound: 0

x52

Node 3Lower bound: 1

x52, x53

Node 4Lower bound: 0

x52, x53

Node 5Lower bound: 1

x52, x53, x51

Node 6Lower bound: 0

x52, x53, x51

Node 7Lower bound: 0x52, x53, x51, x55

Node 29Lower bound: ≥ 1

x52, x53, x51, x55

Node 8Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 9Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 10Lower bound: 0

x52

Node 11Lower bound: 0

x52, x51

Node 12Lower bound: 0

x52, x51

Node 15Lower bound: 0

x52, x51, x54

Node 16Lower bound: ≥ 1

x52, x51, x54, x55

Node 23Lower bound: 0x52, x51, x54, x55

Node 24Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 27Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 18Lower bound: 0

x52, x51, x54

Node 19Lower bound: 0x52, x51, x54, x53

Node 20Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 21Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 26Lower bound: ≥ 1

x52, x51, x54, x53

Node 16Lower bound: ≥ 10

x52, x51, x54, x53

Node 13Lower bound: 0

x52, x51, x53

Node 28Lower bound: ≥ 1

x52, x51, x53

Node 14Lower bound: 0x52, x51, x53, x54

Node 22Lower bound: ≥ 1

x52, x51, x53, x54

Node 17Lower bound: ≥ 1

x52, x51, x53, x54, x55

Node 25Lower bound: ≥ 1

x52, x51, x53, x54, x55

Statistic with LPTotal nodes: 29Max depth: 5

Statistic without LPTotal nodes: 2154

Max depth: 21

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 22 / 62

Page 61: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Search tree1 2 3 4

#1

0

#10

0

#12

0

#15

0

#16≥ 1

#23

0

#24≥ 1

#27≥ 1

#18

0

#19

0

#20≥ 1

#21≥ 1

#26≥ 1

#11

0

#13

0

#14

0

#17≥ 1

#25≥ 1

#22≥ 1

#28≥ 1

#2

0

#4

0

#6

0

#7

0

#8≥ 1

#9≥ 1

#29≥ 1

#5

1

#3

1

Node 1Lower bound: 0

Node 2Lower bound: 0

x52

Node 3Lower bound: 1

x52, x53

Node 4Lower bound: 0

x52, x53

Node 5Lower bound: 1

x52, x53, x51

Node 6Lower bound: 0

x52, x53, x51

Node 7Lower bound: 0x52, x53, x51, x55

Node 29Lower bound: ≥ 1

x52, x53, x51, x55

Node 8Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 9Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 10Lower bound: 0

x52

Node 11Lower bound: 0

x52, x51

Node 12Lower bound: 0

x52, x51

Node 15Lower bound: 0

x52, x51, x54

Node 16Lower bound: ≥ 1

x52, x51, x54, x55

Node 23Lower bound: 0x52, x51, x54, x55

Node 24Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 27Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 18Lower bound: 0

x52, x51, x54

Node 19Lower bound: 0x52, x51, x54, x53

Node 20Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 21Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 26Lower bound: ≥ 1

x52, x51, x54, x53

Node 16Lower bound: ≥ 10

x52, x51, x54, x53

Node 13Lower bound: 0

x52, x51, x53

Node 28Lower bound: ≥ 1

x52, x51, x53

Node 14Lower bound: 0x52, x51, x53, x54

Node 22Lower bound: ≥ 1

x52, x51, x53, x54

Node 17Lower bound: ≥ 1

x52, x51, x53, x54, x55

Node 25Lower bound: ≥ 1

x52, x51, x53, x54, x55

Statistic with LPTotal nodes: 29Max depth: 5

Statistic without LPTotal nodes: 2154

Max depth: 21

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 22 / 62

Page 62: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Search tree1 2 3 4

#1

0

#10

0

#12

0

#15

0

#16≥ 1

#23

0

#24≥ 1

#27≥ 1

#18

0

#19

0

#20≥ 1

#21≥ 1

#26≥ 1

#11

0

#13

0

#14

0

#17≥ 1

#25≥ 1

#22≥ 1

#28≥ 1

#2

0

#4

0

#6

0

#7

0

#8≥ 1

#9≥ 1

#29≥ 1

#5

1

#3

1

Node 1Lower bound: 0

Node 2Lower bound: 0

x52

Node 3Lower bound: 1

x52, x53

Node 4Lower bound: 0

x52, x53

Node 5Lower bound: 1

x52, x53, x51

Node 6Lower bound: 0

x52, x53, x51

Node 7Lower bound: 0x52, x53, x51, x55

Node 29Lower bound: ≥ 1

x52, x53, x51, x55

Node 8Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 9Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 10Lower bound: 0

x52

Node 11Lower bound: 0

x52, x51

Node 12Lower bound: 0

x52, x51

Node 15Lower bound: 0

x52, x51, x54

Node 16Lower bound: ≥ 1

x52, x51, x54, x55

Node 23Lower bound: 0x52, x51, x54, x55

Node 24Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 27Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 18Lower bound: 0

x52, x51, x54

Node 19Lower bound: 0x52, x51, x54, x53

Node 20Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 21Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 26Lower bound: ≥ 1

x52, x51, x54, x53

Node 16Lower bound: ≥ 10

x52, x51, x54, x53

Node 13Lower bound: 0

x52, x51, x53

Node 28Lower bound: ≥ 1

x52, x51, x53

Node 14Lower bound: 0x52, x51, x53, x54

Node 22Lower bound: ≥ 1

x52, x51, x53, x54

Node 17Lower bound: ≥ 1

x52, x51, x53, x54, x55

Node 25Lower bound: ≥ 1

x52, x51, x53, x54, x55

Statistic with LPTotal nodes: 29Max depth: 5

Statistic without LPTotal nodes: 2154

Max depth: 21

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 22 / 62

Page 63: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Search tree1 2 3 4

#1

0

#10

0

#12

0

#15

0

#16≥ 1

#23

0

#24≥ 1

#27≥ 1

#18

0

#19

0

#20≥ 1

#21≥ 1

#26≥ 1

#11

0

#13

0

#14

0

#17≥ 1

#25≥ 1

#22≥ 1

#28≥ 1

#2

0

#4

0

#6

0

#7

0

#8≥ 1

#9≥ 1

#29≥ 1

#5

1

#3

1

Node 1Lower bound: 0

Node 2Lower bound: 0

x52

Node 3Lower bound: 1

x52, x53

Node 4Lower bound: 0

x52, x53

Node 5Lower bound: 1

x52, x53, x51

Node 6Lower bound: 0

x52, x53, x51

Node 7Lower bound: 0x52, x53, x51, x55

Node 29Lower bound: ≥ 1

x52, x53, x51, x55

Node 8Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 9Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 10Lower bound: 0

x52

Node 11Lower bound: 0

x52, x51

Node 12Lower bound: 0

x52, x51

Node 15Lower bound: 0

x52, x51, x54

Node 16Lower bound: ≥ 1

x52, x51, x54, x55

Node 23Lower bound: 0x52, x51, x54, x55

Node 24Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 27Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 18Lower bound: 0

x52, x51, x54

Node 19Lower bound: 0x52, x51, x54, x53

Node 20Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 21Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 26Lower bound: ≥ 1

x52, x51, x54, x53

Node 16Lower bound: ≥ 10

x52, x51, x54, x53

Node 13Lower bound: 0

x52, x51, x53

Node 28Lower bound: ≥ 1

x52, x51, x53

Node 14Lower bound: 0x52, x51, x53, x54

Node 22Lower bound: ≥ 1

x52, x51, x53, x54

Node 17Lower bound: ≥ 1

x52, x51, x53, x54, x55

Node 25Lower bound: ≥ 1

x52, x51, x53, x54, x55

Statistic with LPTotal nodes: 29Max depth: 5

Statistic without LPTotal nodes: 2154

Max depth: 21

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 22 / 62

Page 64: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Search tree1 2 3 4

#1

0

#10

0

#12

0

#15

0

#16≥ 1

#23

0

#24≥ 1

#27≥ 1

#18

0

#19

0

#20≥ 1

#21≥ 1

#26≥ 1

#11

0

#13

0

#14

0

#17≥ 1

#25≥ 1

#22≥ 1

#28≥ 1

#2

0

#4

0

#6

0

#7

0

#8≥ 1

#9≥ 1

#29≥ 1

#5

1

#3

1

Node 1Lower bound: 0

Node 2Lower bound: 0

x52

Node 3Lower bound: 1

x52, x53

Node 4Lower bound: 0

x52, x53

Node 5Lower bound: 1

x52, x53, x51

Node 6Lower bound: 0

x52, x53, x51

Node 7Lower bound: 0x52, x53, x51, x55

Node 29Lower bound: ≥ 1

x52, x53, x51, x55

Node 8Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 9Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 10Lower bound: 0

x52

Node 11Lower bound: 0

x52, x51

Node 12Lower bound: 0

x52, x51

Node 15Lower bound: 0

x52, x51, x54

Node 16Lower bound: ≥ 1

x52, x51, x54, x55

Node 23Lower bound: 0x52, x51, x54, x55

Node 24Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 27Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 18Lower bound: 0

x52, x51, x54

Node 19Lower bound: 0x52, x51, x54, x53

Node 20Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 21Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 26Lower bound: ≥ 1

x52, x51, x54, x53

Node 16Lower bound: ≥ 10

x52, x51, x54, x53

Node 13Lower bound: 0

x52, x51, x53

Node 28Lower bound: ≥ 1

x52, x51, x53

Node 14Lower bound: 0x52, x51, x53, x54

Node 22Lower bound: ≥ 1

x52, x51, x53, x54

Node 17Lower bound: ≥ 1

x52, x51, x53, x54, x55

Node 25Lower bound: ≥ 1

x52, x51, x53, x54, x55

Statistic with LPTotal nodes: 29Max depth: 5

Statistic without LPTotal nodes: 2154

Max depth: 21

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 22 / 62

Page 65: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Search tree1 2 3 4

#1

0

#10

0

#12

0

#15

0

#16≥ 1

#23

0

#24≥ 1

#27≥ 1

#18

0

#19

0

#20≥ 1

#21≥ 1

#26≥ 1

#11

0

#13

0

#14

0

#17≥ 1

#25≥ 1

#22≥ 1

#28≥ 1

#2

0

#4

0

#6

0

#7

0

#8≥ 1

#9≥ 1

#29≥ 1

#5

1

#3

1

Node 1Lower bound: 0

Node 2Lower bound: 0

x52

Node 3Lower bound: 1

x52, x53

Node 4Lower bound: 0

x52, x53

Node 5Lower bound: 1

x52, x53, x51

Node 6Lower bound: 0

x52, x53, x51

Node 7Lower bound: 0x52, x53, x51, x55

Node 29Lower bound: ≥ 1

x52, x53, x51, x55

Node 8Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 9Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 10Lower bound: 0

x52

Node 11Lower bound: 0

x52, x51

Node 12Lower bound: 0

x52, x51

Node 15Lower bound: 0

x52, x51, x54

Node 16Lower bound: ≥ 1

x52, x51, x54, x55

Node 23Lower bound: 0x52, x51, x54, x55

Node 24Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 27Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 18Lower bound: 0

x52, x51, x54

Node 19Lower bound: 0x52, x51, x54, x53

Node 20Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 21Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 26Lower bound: ≥ 1

x52, x51, x54, x53

Node 16Lower bound: ≥ 10

x52, x51, x54, x53

Node 13Lower bound: 0

x52, x51, x53

Node 28Lower bound: ≥ 1

x52, x51, x53

Node 14Lower bound: 0x52, x51, x53, x54

Node 22Lower bound: ≥ 1

x52, x51, x53, x54

Node 17Lower bound: ≥ 1

x52, x51, x53, x54, x55

Node 25Lower bound: ≥ 1

x52, x51, x53, x54, x55

Statistic with LPTotal nodes: 29Max depth: 5

Statistic without LPTotal nodes: 2154

Max depth: 21

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 22 / 62

Page 66: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Search tree1 2 3 4

#1

0

#10

0

#12

0

#15

0

#16≥ 1

#23

0

#24≥ 1

#27≥ 1

#18

0

#19

0

#20≥ 1

#21≥ 1

#26≥ 1

#11

0

#13

0

#14

0

#17≥ 1

#25≥ 1

#22≥ 1

#28≥ 1

#2

0

#4

0

#6

0

#7

0

#8≥ 1

#9≥ 1

#29≥ 1

#5

1

#3

1

Node 1Lower bound: 0

Node 2Lower bound: 0

x52

Node 3Lower bound: 1

x52, x53

Node 4Lower bound: 0

x52, x53

Node 5Lower bound: 1

x52, x53, x51

Node 6Lower bound: 0

x52, x53, x51

Node 7Lower bound: 0x52, x53, x51, x55

Node 29Lower bound: ≥ 1

x52, x53, x51, x55

Node 8Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 9Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 10Lower bound: 0

x52

Node 11Lower bound: 0

x52, x51

Node 12Lower bound: 0

x52, x51

Node 15Lower bound: 0

x52, x51, x54

Node 16Lower bound: ≥ 1

x52, x51, x54, x55

Node 23Lower bound: 0x52, x51, x54, x55

Node 24Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 27Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 18Lower bound: 0

x52, x51, x54

Node 19Lower bound: 0x52, x51, x54, x53

Node 20Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 21Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 26Lower bound: ≥ 1

x52, x51, x54, x53

Node 16Lower bound: ≥ 10

x52, x51, x54, x53

Node 13Lower bound: 0

x52, x51, x53

Node 28Lower bound: ≥ 1

x52, x51, x53

Node 14Lower bound: 0x52, x51, x53, x54

Node 22Lower bound: ≥ 1

x52, x51, x53, x54

Node 17Lower bound: ≥ 1

x52, x51, x53, x54, x55

Node 25Lower bound: ≥ 1

x52, x51, x53, x54, x55

Statistic with LPTotal nodes: 29Max depth: 5

Statistic without LPTotal nodes: 2154

Max depth: 21

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 22 / 62

Page 67: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

node left depth frac curdualbound dualbound primalbound1 0 0 6 0.000000e+00 0.000000e+00 --1 2 0 6 0.000000e+00 0.000000e+00 --2 3 1 4 0.000000e+00 0.000000e+00 --3 4 2 6 1.000000e+00 0.000000e+00 --4 5 2 2 0.000000e+00 0.000000e+00 --

* 5 2 3 - 1.000000e+00 0.000000e+00 1.000000e+006 3 3 2 0.000000e+00 0.000000e+00 1.000000e+007 4 4 2 0.000000e+00 0.000000e+00 1.000000e+008 3 5 - -- 0.000000e+00 1.000000e+009 2 5 - -- 0.000000e+00 1.000000e+00

10 3 1 2 4.440892e-16 0.000000e+00 1.000000e+0011 4 2 2 4.440892e-16 0.000000e+00 1.000000e+0012 5 2 4 4.440892e-16 0.000000e+00 1.000000e+0013 6 3 4 1.776357e-15 0.000000e+00 1.000000e+0014 7 4 4 1.776357e-15 0.000000e+00 1.000000e+00

node left depth frac curdualbound dualbound primalbound15 8 3 4 1.184238e-15 0.000000e+00 1.000000e+0016 7 4 - -- 0.000000e+00 1.000000e+0017 6 5 - -- 0.000000e+00 1.000000e+0018 7 3 2 4.440892e-16 0.000000e+00 1.000000e+0019 8 4 4 8.881784e-16 0.000000e+00 1.000000e+0020 7 5 - -- 0.000000e+00 1.000000e+0021 6 5 - -- 0.000000e+00 1.000000e+0022 5 4 - -- 0.000000e+00 1.000000e+0023 6 4 2 1.184238e-15 0.000000e+00 1.000000e+0024 5 5 - -- 0.000000e+00 1.000000e+0025 4 5 - -- 0.000000e+00 1.000000e+0026 3 4 - -- 0.000000e+00 1.000000e+0027 2 5 - -- 0.000000e+00 1.000000e+0028 1 3 - -- 0.000000e+00 1.000000e+0029 0 4 - -- 1.000000e+00 1.000000e+00Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 23 / 62

Page 68: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Search tree1 2 3 4

#1

0

#10

0

#12

0

#15

0

#16≥ 1

#23

0

#24≥ 1

#27≥ 1

#18

0

#19

0

#20≥ 1

#21≥ 1

#26≥ 1

#11

0

#13

0

#14

0

#17≥ 1

#25≥ 1

#22≥ 1

#28≥ 1

#2

0

#4

0

#6

0

#7

0

#8≥ 1

#9≥ 1

#29≥ 1

#5

1

#3

1

Node 1Lower bound: 0

Node 2Lower bound: 0

x52

Node 3Lower bound: 1

x52, x53

Node 4Lower bound: 0

x52, x53

Node 5Lower bound: 1

x52, x53, x51

Node 6Lower bound: 0

x52, x53, x51

Node 7Lower bound: 0x52, x53, x51, x55

Node 29Lower bound: ≥ 1

x52, x53, x51, x55

Node 8Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 9Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 10Lower bound: 0

x52

Node 11Lower bound: 0

x52, x51

Node 12Lower bound: 0

x52, x51

Node 15Lower bound: 0

x52, x51, x54

Node 16Lower bound: ≥ 1

x52, x51, x54, x55

Node 23Lower bound: 0x52, x51, x54, x55

Node 24Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 27Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 18Lower bound: 0

x52, x51, x54

Node 19Lower bound: 0x52, x51, x54, x53

Node 20Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 21Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 26Lower bound: ≥ 1

x52, x51, x54, x53

Node 16Lower bound: ≥ 10

x52, x51, x54, x53

Node 13Lower bound: 0

x52, x51, x53

Node 28Lower bound: ≥ 1

x52, x51, x53

Node 14Lower bound: 0x52, x51, x53, x54

Node 22Lower bound: ≥ 1

x52, x51, x53, x54

Node 17Lower bound: ≥ 1

x52, x51, x53, x54, x55

Node 25Lower bound: ≥ 1

x52, x51, x53, x54, x55

Statistic with LPTotal nodes: 29Max depth: 5

Statistic without LPTotal nodes: 2154

Max depth: 21

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 24 / 62

Page 69: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Search tree1 2 3 4

#1

0

#10

0

#12

0

#15

0

#16≥ 1

#23

0

#24≥ 1

#27≥ 1

#18

0

#19

0

#20≥ 1

#21≥ 1

#26≥ 1

#11

0

#13

0

#14

0

#17≥ 1

#25≥ 1

#22≥ 1

#28≥ 1

#2

0

#4

0

#6

0

#7

0

#8≥ 1

#9≥ 1

#29≥ 1

#5

1

#3

1

Node 1Lower bound: 0

Node 2Lower bound: 0

x52

Node 3Lower bound: 1

x52, x53

Node 4Lower bound: 0

x52, x53

Node 5Lower bound: 1

x52, x53, x51

Node 6Lower bound: 0

x52, x53, x51

Node 7Lower bound: 0x52, x53, x51, x55

Node 29Lower bound: ≥ 1

x52, x53, x51, x55

Node 8Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 9Lower bound: ≥ 1

x52, x53, x51, x55, x54

Node 10Lower bound: 0

x52

Node 11Lower bound: 0

x52, x51

Node 12Lower bound: 0

x52, x51

Node 15Lower bound: 0

x52, x51, x54

Node 16Lower bound: ≥ 1

x52, x51, x54, x55

Node 23Lower bound: 0x52, x51, x54, x55

Node 24Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 27Lower bound: ≥ 1

x52, x51, x54, x55, x53

Node 18Lower bound: 0

x52, x51, x54

Node 19Lower bound: 0x52, x51, x54, x53

Node 20Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 21Lower bound: ≥ 1

x52, x51, x54, x53, x55

Node 26Lower bound: ≥ 1

x52, x51, x54, x53

Node 16Lower bound: ≥ 10

x52, x51, x54, x53

Node 13Lower bound: 0

x52, x51, x53

Node 28Lower bound: ≥ 1

x52, x51, x53

Node 14Lower bound: 0x52, x51, x53, x54

Node 22Lower bound: ≥ 1

x52, x51, x53, x54

Node 17Lower bound: ≥ 1

x52, x51, x53, x54, x55

Node 25Lower bound: ≥ 1

x52, x51, x53, x54, x55

Statistic with LPTotal nodes: 29Max depth: 5

Statistic without LPTotal nodes: 2154

Max depth: 21

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 24 / 62

Page 70: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Summary

. A solution of a linear relaxation gives a proven dual boundI in case of minimization it is a lower boundI in case of maximization it is a upper bound

. Linear relaxation is a natural relaxation for an integer programI omitting integrality conditions

. Linear relaxation gives a global view w.r.t. all linear constraints

. Linear relaxation guides the search via fractional variables

Coming up:

. How can a linear program be solved?

. How can an integer program be solved?

. For what is the linear programming relaxation used within aninteger programming solver?

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 25 / 62

Page 71: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Summary

. A solution of a linear relaxation gives a proven dual boundI in case of minimization it is a lower boundI in case of maximization it is a upper bound

. Linear relaxation is a natural relaxation for an integer programI omitting integrality conditions

. Linear relaxation gives a global view w.r.t. all linear constraints

. Linear relaxation guides the search via fractional variables

Coming up:

. How can a linear program be solved?

. How can an integer program be solved?

. For what is the linear programming relaxation used within aninteger programming solver?

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 25 / 62

Page 72: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Outline

Integer Programming for Constraint Programmers

1 Introduction

2 Linear programming

3 Integer (linear) programming

4 Summary

5 Discussion

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 26 / 62

Page 73: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

General linear programs (LPs)

Continuous variables: xi ≥ 0, lbi ≤ xi ≤ ubi , xi free (columns)

Linear constraints: a1x1 + . . . + anxn S b (rows)

Linear objective: c1x1 + . . . + cnxn (→ min/max)

Computational standard form: min{c ′x | Ax = b, x ≥ 0

}. feasible region is convex and

polyhedral

. problem may beI unbounded,I infeasible, orI optimal

. always optimal vertex solution(if an optimal solution exists)

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 27 / 62

Page 74: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

General linear programs (LPs)

Continuous variables: xi ≥ 0, lbi ≤ xi ≤ ubi , xi free (columns)

Linear constraints: a1x1 + . . . + anxn S b (rows)

Linear objective: c1x1 + . . . + cnxn (→ min/max)

Computational standard form: min{c ′x | Ax = b, x ≥ 0

}

. feasible region is convex andpolyhedral

. problem may beI unbounded,I infeasible, orI optimal

. always optimal vertex solution(if an optimal solution exists)

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 27 / 62

Page 75: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

General linear programs (LPs)

Continuous variables: xi ≥ 0, lbi ≤ xi ≤ ubi , xi free (columns)

Linear constraints: a1x1 + . . . + anxn S b (rows)

Linear objective: c1x1 + . . . + cnxn (→ min/max)

Computational standard form: min{c ′x | Ax = b, x ≥ 0

}. feasible region is convex and

polyhedral

. problem may beI unbounded,I infeasible, orI optimal

. always optimal vertex solution(if an optimal solution exists)

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 27 / 62

Page 76: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

General linear programs (LPs)

Continuous variables: xi ≥ 0, lbi ≤ xi ≤ ubi , xi free (columns)

Linear constraints: a1x1 + . . . + anxn S b (rows)

Linear objective: c1x1 + . . . + cnxn (→ min/max)

Computational standard form: min{c ′x | Ax = b, x ≥ 0

}. feasible region is convex and

polyhedral

. problem may beI unbounded,I infeasible, orI optimal

. always optimal vertex solution(if an optimal solution exists)

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 27 / 62

Page 77: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

General linear programs (LPs)

Continuous variables: xi ≥ 0, lbi ≤ xi ≤ ubi , xi free (columns)

Linear constraints: a1x1 + . . . + anxn S b (rows)

Linear objective: c1x1 + . . . + cnxn (→ min/max)

Computational standard form: min{c ′x | Ax = b, x ≥ 0

}. feasible region is convex and

polyhedral

. problem may beI unbounded,I infeasible, orI optimal

. always optimal vertex solution(if an optimal solution exists)

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 27 / 62

Page 78: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

General linear programs (LPs)

Continuous variables: xi ≥ 0, lbi ≤ xi ≤ ubi , xi free (columns)

Linear constraints: a1x1 + . . . + anxn S b (rows)

Linear objective: c1x1 + . . . + cnxn (→ min/max)

Computational standard form: min{c ′x | Ax = b, x ≥ 0

}. feasible region is convex and

polyhedral

. problem may beI unbounded,I infeasible, orI optimal

. always optimal vertex solution(if an optimal solution exists)

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 27 / 62

Page 79: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

An incomplete history on linear programming

1827 J. Fourier: Variable elimination algorithm (“Fourier-Motzkin”)

1947 G. Dantzig: Primal Simplex algorithm

1954 C. Lemke and E. Beale: Dual Simplex algorithmI by far the most used algorithm to solve LPsI worst case exponential running time

1975 L. Kantorovich and T.C. Koopmans:Nobel prize for Economics

1979 L. Khachiyan: Ellipsoid MethodI first polynomial time algorithm

1984 N. Karmarkar: Interior Point Method/Barrier Algorithm

≥ 1987 Primal-Dual Interior Point AlgorithmsI basis for state-of-the-art interior point implementationsI for single, sparse LPs often faster than simplex

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 28 / 62

Page 80: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

An incomplete history on linear programming

1827 J. Fourier: Variable elimination algorithm (“Fourier-Motzkin”)

1947 G. Dantzig: Primal Simplex algorithm

1954 C. Lemke and E. Beale: Dual Simplex algorithmI by far the most used algorithm to solve LPsI worst case exponential running time

1975 L. Kantorovich and T.C. Koopmans:Nobel prize for Economics

1979 L. Khachiyan: Ellipsoid MethodI first polynomial time algorithm

1984 N. Karmarkar: Interior Point Method/Barrier Algorithm

≥ 1987 Primal-Dual Interior Point AlgorithmsI basis for state-of-the-art interior point implementationsI for single, sparse LPs often faster than simplex

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 28 / 62

Page 81: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

LP algorithms

simplex algorithm[Dantzig 1947]

ellipsoid method[Khachiyan 1979]

interior point[Karmarkar 1984]

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 29 / 62

Page 82: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

An incomplete history on linear programming

1827 J. Fourier: Variable elimination algorithm (“Fourier-Motzkin”)

1947 G. Dantzig: Primal Simplex algorithm

1954 C. Lemke and E. Beale: Dual Simplex algorithmI by far the most used algorithm to solve LPsI worst case exponential running time

1975 L. Kantorovich and T.C. Koopmans:Nobel prize for Economics

1979 L. Khachiyan: Ellipsoid MethodI first polynomial time algorithm

1984 N. Karmarkar: Interior Point Method/Barrier Algorithm

≥ 1987 Primal-Dual Interior Point AlgorithmsI basis for state-of-the-art interior point implementationsI for single, sparse LPs often faster than simplex

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 30 / 62

Page 83: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Leonid Kantorovich & Tjalling C. Koopmans

1975: Nobel price in Economic Science

“Optimal allocation of ressources”

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 31 / 62

Page 84: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

An incomplete history on linear programming

1827 J. Fourier: Variable elimination algorithm (“Fourier-Motzkin”)

1947 G. Dantzig: Primal Simplex algorithm

1954 C. Lemke and E. Beale: Dual Simplex algorithmI by far the most used algorithm to solve LPsI worst case exponential running time

1975 L. Kantorovich and T.C. Koopmans:Nobel prize for Economics

1979 L. Khachiyan: Ellipsoid MethodI first polynomial time algorithm

1984 N. Karmarkar: Interior Point Method/Barrier Algorithm

≥ 1987 Primal-Dual Interior Point AlgorithmsI basis for state-of-the-art interior point implementationsI for single, sparse LPs often faster than simplex

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 32 / 62

Page 85: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

LP algorithms

simplex algorithm[Dantzig 1947]

ellipsoid method[Khachiyan 1979]

interior point[Karmarkar 1984]

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 33 / 62

Page 86: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

LP algorithms

simplex algorithm[Dantzig 1947]

ellipsoid method[Khachiyan 1979]

interior point[Karmarkar 1984]

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 33 / 62

Page 87: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

An incomplete history on linear programming

1827 J. Fourier: Variable elimination algorithm (“Fourier-Motzkin”)

1947 G. Dantzig: Primal Simplex algorithm

1954 C. Lemke and E. Beale: Dual Simplex algorithmI by far the most used algorithm to solve LPsI worst case exponential running time

1975 L. Kantorovich and T.C. Koopmans:Nobel prize for Economics

1979 L. Khachiyan: Ellipsoid MethodI first polynomial time algorithm

1984 N. Karmarkar: Interior Point Method/Barrier Algorithm

≥ 1987 Primal-Dual Interior Point AlgorithmsI basis for state-of-the-art interior point implementationsI for single, sparse LPs often faster than simplex

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 34 / 62

Page 88: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

A transportation problem

A

B

1

2

3

2e 3e9e

4e

1e

3e

13

9

7

9

6

min 2xA,1 + 3xA,2 + 9xA,3 +4xB,1 + 1xB,2 + 3xB,3

s.t. xA,1 + xA,2 + xA,3 = 13

xB,1 + xB,2 + xB,3 = 9

xA,1 + xB,1 = 7

xA,2 + xB,2 = 9

xA,3 + xB,3 = 6

x ≥ 0

Heuristic solution with objective value 53:

A→ 1 = 7 A→ 2 = 6 B → 2 = 3 B → 3 = 6

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 35 / 62

Page 89: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

A transportation problem

A

B

1

2

3

2e 3e9e

4e

1e

3e

13

9

7

9

6

min 2xA,1 + 3xA,2 + 9xA,3 +4xB,1 + 1xB,2 + 3xB,3

s.t. xA,1 + xA,2 + xA,3 = 13

xB,1 + xB,2 + xB,3 = 9

xA,1 + xB,1 = 7

xA,2 + xB,2 = 9

xA,3 + xB,3 = 6

x ≥ 0

Heuristic solution with objective value 53:

A→ 1 = 7 A→ 2 = 6 B → 2 = 3 B → 3 = 6

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 35 / 62

Page 90: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

A transportation problem

A

B

1

2

3

2e 3e9e

4e

1e

3e

13

9

7

9

6

min 2xA,1 + 3xA,2 + 9xA,3 +4xB,1 + 1xB,2 + 3xB,3

s.t. xA,1 + xA,2 + xA,3 = 13

xB,1 + xB,2 + xB,3 = 9

xA,1 + xB,1 = 7

xA,2 + xB,2 = 9

xA,3 + xB,3 = 6

x ≥ 0

Heuristic solution with objective value 53:

A→ 1 = 7 A→ 2 = 6 B → 2 = 3 B → 3 = 6

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 35 / 62

Page 91: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

A transportation problem

A

B

1

2

3

7

6

3

6

13

9

7

9

6

min 2xA,1 + 3xA,2 + 9xA,3 +4xB,1 + 1xB,2 + 3xB,3

s.t. xA,1 + xA,2 + xA,3 = 13

xB,1 + xB,2 + xB,3 = 9

xA,1 + xB,1 = 7

xA,2 + xB,2 = 9

xA,3 + xB,3 = 6

x ≥ 0

Heuristic solution with objective value 53:

A→ 1 = 7 A→ 2 = 6 B → 2 = 3 B → 3 = 6

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 35 / 62

Page 92: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Dual multipliers: proofing solution quality

min 2xA,1+3xA,2+9xA,3+4xB,1+1xB,2+3xB,3

s.t.

xA,1 +xA,2 +xA,3 = 13

xB,1 +xB,2 +xB,3 = 9

− 1×

xA,1 +xB,1 = 7

xA,2 +xB,2 = 9

xA,3 +xB,3 = 6

x ≥ 0

+

⇒ min ≥ 2xA,1+2xA,2+3xA,3+1xB,1+1xB,2+3xB,3 = 47

Solution is optimal!

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 36 / 62

Page 93: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Dual multipliers: proofing solution quality

min 2xA,1+3xA,2+9xA,3+4xB,1+1xB,2+3xB,3

s.t. 2× xA,1 +xA,2 +xA,3 = 13

1× xB,1 +xB,2 +xB,3 = 9

− 1×

xA,1 +xB,1 = 7

xA,2 +xB,2 = 9

2× xA,3 +xB,3 = 6

x ≥ 0+

⇒ min ≥ 2xA,1+2xA,2+3xA,3+1xB,1+1xB,2+3xB,3 = 47

Solution is optimal!

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 36 / 62

Page 94: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Dual multipliers: proofing solution quality

min 2xA,1+3xA,2+9xA,3+4xB,1+1xB,2+3xB,3

s.t. 3× xA,1 +xA,2 +xA,3 = 13

1× xB,1 +xB,2 +xB,3 = 9

− 1× xA,1 +xB,1 = 7

xA,2 +xB,2 = 9

2× xA,3 +xB,3 = 6

x ≥ 0+

⇒ min ≥ 2xA,1+3xA,2+5xA,3 +1xB,2+3xB,3 = 53

Solution is optimal!

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 36 / 62

Page 95: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Duality

Primal LP

min{cTx | Ax = b, x ≥ 0

} Dual LP

max{bTy | yTA ≤ cT, y ∈ Rm

}Simple observation: For any x , y feasible,

cTx ≥ yTAx = bTy .

. Weak Duality:

min{cTx | Ax = b, x ≥ 0

}≥ max

{bTy | yTA ≤ cT, y ∈ Rm

}. Strong Duality:

min{cTx | Ax = b, x ≥ 0

}= max

{bTy | yTA ≤ cT, y ∈ Rm

}

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 37 / 62

Page 96: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Duality

Primal LP

min{cTx | Ax = b, x ≥ 0

} Dual LP

max{bTy | yTA ≤ cT, y ∈ Rm

}Simple observation: For any x , y feasible,

cTx ≥ yTAx = bTy .

. Weak Duality:

min{cTx | Ax = b, x ≥ 0

}≥ max

{bTy | yTA ≤ cT, y ∈ Rm

}

. Strong Duality:

min{cTx | Ax = b, x ≥ 0

}= max

{bTy | yTA ≤ cT, y ∈ Rm

}

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 37 / 62

Page 97: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Duality

Primal LP

min{cTx | Ax = b, x ≥ 0

} Dual LP

max{bTy | yTA ≤ cT, y ∈ Rm

}Simple observation: For any x , y feasible,

cTx ≥ yTAx = bTy .

. Weak Duality:

min{cTx | Ax = b, x ≥ 0

}≥ max

{bTy | yTA ≤ cT, y ∈ Rm

}. Strong Duality:

min{cTx | Ax = b, x ≥ 0

}= max

{bTy | yTA ≤ cT, y ∈ Rm

}Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 37 / 62

Page 98: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Vertex solutions

Consider n variables, m constraints:

min{cTx | Ax = b, x ≥ 0

}with A ∈ Rm×n, b ∈ Rm, c ∈ Rn.

. If optimal: there always exists an optimal vertex solution.

. Vertices uniquely determined by n tight inequalities:

. In standard from that means

I m equality constraints Ax = b

I n −m tight bounds xi = 0

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 38 / 62

Page 99: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Vertex solutions

Consider n variables, m constraints:

min{cTx | Ax = b, x ≥ 0

}with A ∈ Rm×n, b ∈ Rm, c ∈ Rn.

. If optimal: there always exists an optimal vertex solution.

. Vertices uniquely determined by n tight inequalities:

. In standard from that means

I m equality constraints Ax = b

I n −m tight bounds xi = 0

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 38 / 62

Page 100: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Vertex solutions

Consider n variables, m constraints:

min{cTx | Ax = b, x ≥ 0

}with A ∈ Rm×n, b ∈ Rm, c ∈ Rn.

. If optimal: there always exists an optimal vertex solution.

. Vertices uniquely determined by n tight inequalities:

. In standard from that means

I m equality constraints Ax = b

I n −m tight bounds xi = 0

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 38 / 62

Page 101: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Basic solutionsPrimal solution

. Fix n −m variables: xi = 0 for i ∈ N ⊆ {1, . . . , n}

. m variables remain: xi for i ∈ B = {1, . . . , n} \ N

. Solve linear system with m equations, m variables:

Ax = b ABxB = b xB = A−1B b

Dual multipliers

. Globally: find y such that yTA ≤ cT

. Locally: ignore fixed variables and solve

yTAB = cT

B yT = cT

BA−1B

Basic solution = discrete basis B + primal sol. x + dual mult. y

. In theory: could enumerate(nm

)basic solutions.

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 39 / 62

Page 102: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Basic solutionsPrimal solution

. Fix n −m variables: xi = 0 for i ∈ N ⊆ {1, . . . , n}

. m variables remain: xi for i ∈ B = {1, . . . , n} \ N

. Solve linear system with m equations, m variables:

Ax = b ABxB = b xB = A−1B b

Dual multipliers

. Globally: find y such that yTA ≤ cT

. Locally: ignore fixed variables and solve

yTAB = cT

B yT = cT

BA−1B

Basic solution = discrete basis B + primal sol. x + dual mult. y

. In theory: could enumerate(nm

)basic solutions.

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 39 / 62

Page 103: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Basic solutionsPrimal solution

. Fix n −m variables: xi = 0 for i ∈ N ⊆ {1, . . . , n}

. m variables remain: xi for i ∈ B = {1, . . . , n} \ N

. Solve linear system with m equations, m variables:

Ax = b ABxB = b xB = A−1B b

Dual multipliers

. Globally: find y such that yTA ≤ cT

. Locally: ignore fixed variables and solve

yTAB = cT

B yT = cT

BA−1B

Basic solution = discrete basis B + primal sol. x + dual mult. y

. In theory: could enumerate(nm

)basic solutions.

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 39 / 62

Page 104: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Improving steps. xB is a function of xN :

ABxB + AN xN = b

. xN = 0 xB = A−1B b

. Unfix xi , i ∈ N :

xB = xB − A−1B Ai︸ ︷︷ ︸δi

xi

x1 = 0

x2 = 0

x1 > 0

x2 = 0δ1

x1 = 0

x2 > 0δ2

x

x2 = 0

x3 = 0

αδ1

. Objective change:

cTx = cTx + cixi − cTδixi

= cTx + (ci − yTAi)︸ ︷︷ ︸reduced cost ri

xi

. Reduced cost of xi = obj. change per unit increase of xi

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 40 / 62

Page 105: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Improving steps. xB is a function of xN :

ABxB = b − AN xN

. xN = 0 xB = A−1B b

. Unfix xi , i ∈ N :

xB = xB − A−1B Ai︸ ︷︷ ︸δi

xi

x1 = 0

x2 = 0

x1 > 0

x2 = 0δ1

x1 = 0

x2 > 0δ2

x

x2 = 0

x3 = 0

αδ1

. Objective change:

cTx = cTx + cixi − cTδixi

= cTx + (ci − yTAi)︸ ︷︷ ︸reduced cost ri

xi

. Reduced cost of xi = obj. change per unit increase of xi

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 40 / 62

Page 106: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Improving steps. xB is a function of xN :

xB = A−1B (b − AN xN )

. xN = 0 xB = A−1B b

. Unfix xi , i ∈ N :

xB = xB − A−1B Ai︸ ︷︷ ︸δi

xi

x1 = 0

x2 = 0

x1 > 0

x2 = 0δ1

x1 = 0

x2 > 0δ2

x

x2 = 0

x3 = 0

αδ1

. Objective change:

cTx = cTx + cixi − cTδixi

= cTx + (ci − yTAi)︸ ︷︷ ︸reduced cost ri

xi

. Reduced cost of xi = obj. change per unit increase of xi

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 40 / 62

Page 107: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Improving steps. xB is a function of xN :

xB = A−1B (b − AN xN )

. xN = 0 xB = A−1B b

. Unfix xi , i ∈ N :

xB = xB − A−1B Ai︸ ︷︷ ︸δi

xi

x1 = 0

x2 = 0

x1 > 0

x2 = 0δ1

x1 = 0

x2 > 0δ2

x

x2 = 0

x3 = 0

αδ1

. Objective change:

cTx = cTx + cixi − cTδixi

= cTx + (ci − yTAi)︸ ︷︷ ︸reduced cost ri

xi

. Reduced cost of xi = obj. change per unit increase of xi

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 40 / 62

Page 108: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Improving steps. xB is a function of xN :

xB = A−1B (b − AN xN )

. xN = 0 xB = A−1B b

. Unfix xi , i ∈ N :

xB = xB − A−1B Ai︸ ︷︷ ︸δi

xi

x1 = 0

x2 = 0

x1 > 0

x2 = 0δ1

x1 = 0

x2 > 0δ2

x

x2 = 0

x3 = 0

αδ1

. Objective change:

cTx = cTx + cixi − cTδixi

= cTx + (ci − yTAi)︸ ︷︷ ︸reduced cost ri

xi

. Reduced cost of xi = obj. change per unit increase of xi

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 40 / 62

Page 109: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Improving steps. xB is a function of xN :

xB = A−1B (b − AN xN )

. xN = 0 xB = A−1B b

. Unfix xi , i ∈ N :

xB = xB − A−1B Ai︸ ︷︷ ︸δi

xi

x1 = 0

x2 = 0

x1 > 0

x2 = 0δ1

x1 = 0

x2 > 0δ2

x

x2 = 0

x3 = 0

αδ1

. Objective change:

cTx = cTx + cixi − cTδixi

= cTx + (ci − yTAi)︸ ︷︷ ︸reduced cost ri

xi

. Reduced cost of xi = obj. change per unit increase of xi

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 40 / 62

Page 110: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Improving steps. xB is a function of xN :

xB = A−1B (b − AN xN )

. xN = 0 xB = A−1B b

. Unfix xi , i ∈ N :

xB = xB − A−1B Ai︸ ︷︷ ︸δi

xi

x1 = 0

x2 = 0

x1 > 0

x2 = 0δ1

x1 = 0

x2 > 0δ2

x

x2 = 0

x3 = 0

αδ1

. Objective change:

cTx = cTx + cixi − cTδixi

= cTx + (ci − yTAi)︸ ︷︷ ︸reduced cost ri

xi

. Reduced cost of xi = obj. change per unit increase of xi

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 40 / 62

Page 111: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Improving steps. xB is a function of xN :

xB = A−1B (b − AN xN )

. xN = 0 xB = A−1B b

. Unfix xi , i ∈ N :

xB = xB − A−1B Ai︸ ︷︷ ︸δi

xi

x1 = 0

x2 = 0

x1 > 0

x2 = 0δ1

x1 = 0

x2 > 0δ2

x

x2 = 0

x3 = 0

αδ1

. Objective change:

cTx = cTx + cixi − cTδixi = cTx + (ci − yTAi)︸ ︷︷ ︸reduced cost ri

xi

. Reduced cost of xi = obj. change per unit increase of xi

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 40 / 62

Page 112: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Improving steps. xB is a function of xN :

xB = A−1B (b − AN xN )

. xN = 0 xB = A−1B b

. Unfix xi , i ∈ N :

xB = xB − A−1B Ai︸ ︷︷ ︸δi

xi

x1 = 0

x2 = 0

x1 > 0

x2 = 0δ1

x1 = 0

x2 > 0δ2

x

x2 = 0

x3 = 0

αδ1

. Objective change:

cTx = cTx + cixi − cTδixi = cTx + (ci − yTAi)︸ ︷︷ ︸reduced cost ri

xi

. Reduced cost of xi = obj. change per unit increase of xi

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 40 / 62

Page 113: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Improving steps. xB is a function of xN :

xB = A−1B (b − AN xN )

. xN = 0 xB = A−1B b

. Unfix xi , i ∈ N :

xB = xB − A−1B Ai︸ ︷︷ ︸δi

xi

x1 = 0

x2 = 0

x1 > 0

x2 = 0δ1

x1 = 0

x2 > 0δ2

x

x2 = 0

x3 = 0

αδ1

. Objective change:

cTx = cTx + cixi − cTδixi = cTx + (ci − yTAi)︸ ︷︷ ︸reduced cost ri

xi

. Reduced cost of xi = obj. change per unit increase of xi

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 40 / 62

Page 114: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Primal simplex algorithm

Idea: Given a primal feasible starting basis B, i.e., xB = A−1B b ≥ 0,

. maintain primal feasibility

. improve obj. value until reduced costs are ≥ 0 ⇔ dual feasible

Init

. factorize basis matrix AB “A−1B ”

. solve for xB and y

. compute reduced costs: ri = ci − yTAi for i ∈ N

Repeat

. if ri ≥ 0 for all i ∈ N stop OPTIMALelse choose ri < 0, i ∈ N (pricing)

. compute max. steplength α s.t. xB − αδi ≥ 0 (ratiotest)

. if α =∞ stop UNBOUNDEDelse update B, x , y , r , A−1

B

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 41 / 62

Page 115: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Primal simplex algorithm

Idea: Given a primal feasible starting basis B, i.e., xB = A−1B b ≥ 0,

. maintain primal feasibility

. improve obj. value until reduced costs are ≥ 0 ⇔ dual feasible

Init

. factorize basis matrix AB “A−1B ”

. solve for xB and y

. compute reduced costs: ri = ci − yTAi for i ∈ N

Repeat

. if ri ≥ 0 for all i ∈ N stop OPTIMALelse choose ri < 0, i ∈ N (pricing)

. compute max. steplength α s.t. xB − αδi ≥ 0 (ratiotest)

. if α =∞ stop UNBOUNDEDelse update B, x , y , r , A−1

B

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 41 / 62

Page 116: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Primal simplex algorithm

Idea: Given a primal feasible starting basis B, i.e., xB = A−1B b ≥ 0,

. maintain primal feasibility

. improve obj. value until reduced costs are ≥ 0 ⇔ dual feasible

Init

. factorize basis matrix AB “A−1B ”

. solve for xB and y

. compute reduced costs: ri = ci − yTAi for i ∈ N

Repeat

. if ri ≥ 0 for all i ∈ N stop OPTIMALelse choose ri < 0, i ∈ N (pricing)

. compute max. steplength α s.t. xB − αδi ≥ 0 (ratiotest)

. if α =∞ stop UNBOUNDEDelse update B, x , y , r , A−1

B

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 41 / 62

Page 117: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Primal simplex algorithm

Idea: Given a primal feasible starting basis B, i.e., xB = A−1B b ≥ 0,

. maintain primal feasibility

. improve obj. value until reduced costs are ≥ 0 ⇔ dual feasible

Init

. factorize basis matrix AB “A−1B ”

. solve for xB and y

. compute reduced costs: ri = ci − yTAi for i ∈ N

Repeat

. if ri ≥ 0 for all i ∈ N stop OPTIMALelse choose ri < 0, i ∈ N (pricing)

. compute max. steplength α s.t. xB − αδi ≥ 0 (ratiotest)

. if α =∞ stop UNBOUNDEDelse update B, x , y , r , A−1

B

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 41 / 62

Page 118: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Primal simplex algorithm

Idea: Given a primal feasible starting basis B, i.e., xB = A−1B b ≥ 0,

. maintain primal feasibility

. improve obj. value until reduced costs are ≥ 0 ⇔ dual feasible

Init

. factorize basis matrix AB “A−1B ”

. solve for xB and y

. compute reduced costs: ri = ci − yTAi for i ∈ N

Repeat

. if ri ≥ 0 for all i ∈ N stop OPTIMAL

else choose ri < 0, i ∈ N (pricing)

. compute max. steplength α s.t. xB − αδi ≥ 0 (ratiotest)

. if α =∞ stop UNBOUNDEDelse update B, x , y , r , A−1

B

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 41 / 62

Page 119: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Primal simplex algorithm

Idea: Given a primal feasible starting basis B, i.e., xB = A−1B b ≥ 0,

. maintain primal feasibility

. improve obj. value until reduced costs are ≥ 0 ⇔ dual feasible

Init

. factorize basis matrix AB “A−1B ”

. solve for xB and y

. compute reduced costs: ri = ci − yTAi for i ∈ N

Repeat

. if ri ≥ 0 for all i ∈ N stop OPTIMALelse choose ri < 0, i ∈ N (pricing)

. compute max. steplength α s.t. xB − αδi ≥ 0 (ratiotest)

. if α =∞ stop UNBOUNDEDelse update B, x , y , r , A−1

B

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 41 / 62

Page 120: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Primal simplex algorithm

Idea: Given a primal feasible starting basis B, i.e., xB = A−1B b ≥ 0,

. maintain primal feasibility

. improve obj. value until reduced costs are ≥ 0 ⇔ dual feasible

Init

. factorize basis matrix AB “A−1B ”

. solve for xB and y

. compute reduced costs: ri = ci − yTAi for i ∈ N

Repeat

. if ri ≥ 0 for all i ∈ N stop OPTIMALelse choose ri < 0, i ∈ N (pricing)

. compute max. steplength α s.t. xB − αδi ≥ 0 (ratiotest)

. if α =∞ stop UNBOUNDEDelse update B, x , y , r , A−1

B

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 41 / 62

Page 121: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Primal simplex algorithm

Idea: Given a primal feasible starting basis B, i.e., xB = A−1B b ≥ 0,

. maintain primal feasibility

. improve obj. value until reduced costs are ≥ 0 ⇔ dual feasible

Init

. factorize basis matrix AB “A−1B ”

. solve for xB and y

. compute reduced costs: ri = ci − yTAi for i ∈ N

Repeat

. if ri ≥ 0 for all i ∈ N stop OPTIMALelse choose ri < 0, i ∈ N (pricing)

. compute max. steplength α s.t. xB − αδi ≥ 0 (ratiotest)

. if α =∞ stop UNBOUNDEDelse update B, x , y , r , A−1

BAmbros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 41 / 62

Page 122: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Re-solving and hot startsAn IP solver classically solves many related LPs.

. modified objective function

I last basic solution becomes suboptimal, but remains primal feasibleI only reduced costs ri = ci − yTAi changeI continue with primal simplex iterations

. changed variable bounds or added constraints

I last basic solution becomes primal infeasibleI dual multipliers and reduced costs unchangedI continue with dual simplex

Dual simplex

. basic procedures as in primal simplex

. maintains dual feasibility and moves towards primal feasibility

. objective value increases towards optimum

. typically very few iterations to re-optimize

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 42 / 62

Page 123: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Re-solving and hot startsAn IP solver classically solves many related LPs.

. modified objective function

I last basic solution becomes suboptimal, but remains primal feasibleI only reduced costs ri = ci − yTAi changeI continue with primal simplex iterations

. changed variable bounds or added constraints

I last basic solution becomes primal infeasibleI dual multipliers and reduced costs unchangedI continue with dual simplex

Dual simplex

. basic procedures as in primal simplex

. maintains dual feasibility and moves towards primal feasibility

. objective value increases towards optimum

. typically very few iterations to re-optimize

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 42 / 62

Page 124: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Re-solving and hot startsAn IP solver classically solves many related LPs.

. modified objective function

I last basic solution becomes suboptimal, but remains primal feasibleI only reduced costs ri = ci − yTAi changeI continue with primal simplex iterations

. changed variable bounds or added constraintsI last basic solution becomes primal infeasibleI dual multipliers and reduced costs unchangedI continue with dual simplex

Dual simplex

. basic procedures as in primal simplex

. maintains dual feasibility and moves towards primal feasibility

. objective value increases towards optimum

. typically very few iterations to re-optimize

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 42 / 62

Page 125: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Re-solving and hot startsAn IP solver classically solves many related LPs.

. modified objective function

I last basic solution becomes suboptimal, but remains primal feasibleI only reduced costs ri = ci − yTAi changeI continue with primal simplex iterations

. changed variable bounds or added constraintsI last basic solution becomes primal infeasibleI dual multipliers and reduced costs unchangedI continue with dual simplex

Dual simplex

. basic procedures as in primal simplex

. maintains dual feasibility and moves towards primal feasibility

. objective value increases towards optimum

. typically very few iterations to re-optimize

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 42 / 62

Page 126: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Dual simplex algorithm

Idea: Given a dual feasible starting basis B, i.e., r ≥ 0,

. maintain dual feasibility

. reduce primal infeasibility until x ≥ 0

Init

. factorize basis matrix AB “A−1B ”

. solve for xB and y

. compute reduced costs: ri = ci − yTAi for i ∈ N

Repeat

while cTx < z∗ obj. limit

. if xi ≥ 0 for all i ∈ B stop OPTIMALelse choose xi < 0, i ∈ B (pricing)

. compute max. steplength α (ratiotest)

. if α =∞ stop INFEASIBLEelse update B, x , y , r , A−1

B

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 43 / 62

Page 127: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Dual simplex algorithm

Idea: Given a dual feasible starting basis B, i.e., r ≥ 0,

. maintain dual feasibility

. reduce primal infeasibility until x ≥ 0

Init

. factorize basis matrix AB “A−1B ”

. solve for xB and y

. compute reduced costs: ri = ci − yTAi for i ∈ N

Repeat

while cTx < z∗ obj. limit

. if xi ≥ 0 for all i ∈ B stop OPTIMALelse choose xi < 0, i ∈ B (pricing)

. compute max. steplength α (ratiotest)

. if α =∞ stop INFEASIBLEelse update B, x , y , r , A−1

B

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 43 / 62

Page 128: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Dual simplex algorithm

Idea: Given a dual feasible starting basis B, i.e., r ≥ 0,

. maintain dual feasibility

. reduce primal infeasibility until x ≥ 0

Init

. factorize basis matrix AB “A−1B ”

. solve for xB and y

. compute reduced costs: ri = ci − yTAi for i ∈ N

Repeat

while cTx < z∗ obj. limit

. if xi ≥ 0 for all i ∈ B stop OPTIMALelse choose xi < 0, i ∈ B (pricing)

. compute max. steplength α (ratiotest)

. if α =∞ stop INFEASIBLEelse update B, x , y , r , A−1

BAmbros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 43 / 62

Page 129: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Dual simplex algorithm

Idea: Given a dual feasible starting basis B, i.e., r ≥ 0,

. maintain dual feasibility

. reduce primal infeasibility until x ≥ 0

Init

. factorize basis matrix AB “A−1B ”

. solve for xB and y

. compute reduced costs: ri = ci − yTAi for i ∈ N

Repeat while cTx < z∗ obj. limit

. if xi ≥ 0 for all i ∈ B stop OPTIMALelse choose xi < 0, i ∈ B (pricing)

. compute max. steplength α (ratiotest)

. if α =∞ stop INFEASIBLEelse update B, x , y , r , A−1

BAmbros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 43 / 62

Page 130: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Summary. Discrete and continuous:

I vertices are uniquely determined by n equalitiesI if optimal: there always exists an optimal vertex solutionI solution values are computed numerically

. Reduced costs quantify impact of (non-basic) variable on theobjective

. efficient hot starts for re-optimization

Further aspects:

. general bounds: lbi ≤ xi ≤ ubi

. feasible starting basis for simplex (“phase 1”), pricing strategies,linear algebra tricks, . . .

. exponential worst-case complexity of simplex vs. performance inpractice

. interior point algorithms

. algorithms for specially structured LPs: networks, . . .

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 44 / 62

Page 131: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Summary. Discrete and continuous:

I vertices are uniquely determined by n equalitiesI if optimal: there always exists an optimal vertex solutionI solution values are computed numerically

. Reduced costs quantify impact of (non-basic) variable on theobjective

. efficient hot starts for re-optimization

Further aspects:

. general bounds: lbi ≤ xi ≤ ubi

. feasible starting basis for simplex (“phase 1”), pricing strategies,linear algebra tricks, . . .

. exponential worst-case complexity of simplex vs. performance inpractice

. interior point algorithms

. algorithms for specially structured LPs: networks, . . .Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 44 / 62

Page 132: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Outline

Integer Programming for Constraint Programmers

1 Introduction

2 Linear programming

3 Integer (linear) programming

4 Summary

5 Discussion

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 45 / 62

Page 133: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Linear programming

Linear program

Objective function:

. linear function

Feasible set:

. described by linear constraints

Variable domains:

. real values

min cTx

s.t. Ax = b

x ∈ Rn≥0

. convex set

. “basic” solutions

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 46 / 62

Page 134: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Integer programming

Integer Program

Objective function:

. linear function

Feasible set:

. described by linear constraints

Variable domains:

. integer values

min cTx

s.t. Ax ≤ b

x ∈ Z≥0

. not even connected

. NP-hard problem

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 47 / 62

Page 135: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

An incomplete history on integer programmingCutting plane algorithm

. R. E. Gomory, “Outline of an algorithm for integer solutions tolinear programs”. Bull. AMS 64, 1958, pp. 275–278.

Branch-and-bound

. A. H. Land, A. G. Doig, “An automatic method of solving discreteprogramming problems”. Econometrica 28, 1960, pp. 497–520

. R. J. Dakin, “A tree-search algorithm for mixed integerprogramming problems”. The Computer Journal, Volume 8, 1965,pp. 250–255

. J. D. C. Little, K. G. Murty, D. W. Sweeney, C. Karel, “Analgorithm for the traveling salesman problem”. OperationsResearch 11, 1963, pp. 972–989.

Branch-and-cut

. Grotschel, Junger, Reinelt (1984, 1985, 1987)

. Padberg, Rinaldi (1991)

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 48 / 62

Page 136: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

An incomplete history on integer programmingCutting plane algorithm

. R. E. Gomory, “Outline of an algorithm for integer solutions tolinear programs”. Bull. AMS 64, 1958, pp. 275–278.

Branch-and-bound

. A. H. Land, A. G. Doig, “An automatic method of solving discreteprogramming problems”. Econometrica 28, 1960, pp. 497–520

. R. J. Dakin, “A tree-search algorithm for mixed integerprogramming problems”. The Computer Journal, Volume 8, 1965,pp. 250–255

. J. D. C. Little, K. G. Murty, D. W. Sweeney, C. Karel, “Analgorithm for the traveling salesman problem”. OperationsResearch 11, 1963, pp. 972–989.

Branch-and-cut

. Grotschel, Junger, Reinelt (1984, 1985, 1987)

. Padberg, Rinaldi (1991)

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 48 / 62

Page 137: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

An incomplete history on integer programmingCutting plane algorithm

. R. E. Gomory, “Outline of an algorithm for integer solutions tolinear programs”. Bull. AMS 64, 1958, pp. 275–278.

Branch-and-bound

. A. H. Land, A. G. Doig, “An automatic method of solving discreteprogramming problems”. Econometrica 28, 1960, pp. 497–520

. R. J. Dakin, “A tree-search algorithm for mixed integerprogramming problems”. The Computer Journal, Volume 8, 1965,pp. 250–255

. J. D. C. Little, K. G. Murty, D. W. Sweeney, C. Karel, “Analgorithm for the traveling salesman problem”. OperationsResearch 11, 1963, pp. 972–989.

Branch-and-cut

. Grotschel, Junger, Reinelt (1984, 1985, 1987)

. Padberg, Rinaldi (1991)

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 48 / 62

Page 138: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

General cutting plane method

FIP := {x ∈ Zn+ : Ax ≤ b}

FLP := {x ∈ Rn+ : Ax ≤ b}

x1

x2

1 2 3 4

1

2

3

x1

x2

1 2 3 4

1

2

3

conv(FIP)

x∗IP

min{cT x : x ∈ FIP}

min{cT x : x ∈ conv(FIP)}

FLP ⊇ F ⊇ conv(FIP)

min{cTx : x ∈ FLP} ≤ min{cTx : x ∈ F} = min{cTx : x ∈ conv(FIP)}

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 49 / 62

Page 139: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

General cutting plane method

Observation

. conv(FIP) is a polyhedron

. IP could be formulated as LP

Problems with conv(FIP):

. linear description not known

. large nr. of constraints needed

x1

x2

1 2 3 4

1

2

3

x1

x2

1 2 3 4

1

2

3

conv(FIP)

x∗IP

min{cT x : x ∈ FIP}

min{cT x : x ∈ conv(FIP)}

FLP ⊇ F ⊇ conv(FIP)

min{cTx : x ∈ FLP} ≤ min{cTx : x ∈ F} = min{cTx : x ∈ conv(FIP)}

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 49 / 62

Page 140: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

General cutting plane method

Observation

. conv(FIP) is a polyhedron

. IP could be formulated as LP

Problems with conv(FIP):

. linear description not known

. large nr. of constraints needed

x1

x2

1 2 3 4

1

2

3

x1

x2

1 2 3 4

1

2

3

conv(FIP)

x∗IP

min{cT x : x ∈ FIP}

min{cT x : x ∈ conv(FIP)}

FLP ⊇ F ⊇ conv(FIP)

min{cTx : x ∈ FLP} ≤ min{cTx : x ∈ F} = min{cTx : x ∈ conv(FIP)}

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 49 / 62

Page 141: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

General cutting plane method

Algorithm

1. F ← FLP

2. Solve

min cTxs.t. x ∈ F

3. If x∗ ∈ FIP: Stop

4. Add inequality to F that is ...

I valid for conv(FIP) butI violated by x∗.

5. Goto 2.

FLP

= F

FF

x1

x2

1 2 3 4

1

2

3

conv(FIP)

min{cT x : x ∈ conv(FIP)}

x∗x∗x∗x∗IP

. Resolving is cheap since dualfeasible (hot start)

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 50 / 62

Page 142: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

General cutting plane method

Algorithm

1. F ← FLP

2. Solve

min cTxs.t. x ∈ F

3. If x∗ ∈ FIP: Stop

4. Add inequality to F that is ...

I valid for conv(FIP) butI violated by x∗.

5. Goto 2.

FLP= F

FF

x1

x2

1 2 3 4

1

2

3

conv(FIP)

min{cT x : x ∈ conv(FIP)}

x∗x∗x∗x∗IP

. Resolving is cheap since dualfeasible (hot start)

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 50 / 62

Page 143: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

General cutting plane method

Algorithm

1. F ← FLP

2. Solve

min cTxs.t. x ∈ F

3. If x∗ ∈ FIP: Stop

4. Add inequality to F that is ...

I valid for conv(FIP) butI violated by x∗.

5. Goto 2.

FLP= F

FF

x1

x2

1 2 3 4

1

2

3

conv(FIP)

min{cT x : x ∈ conv(FIP)}

x∗

x∗x∗x∗IP

. Resolving is cheap since dualfeasible (hot start)

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 50 / 62

Page 144: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

General cutting plane method

Algorithm

1. F ← FLP

2. Solve

min cTxs.t. x ∈ F

3. If x∗ ∈ FIP: Stop

4. Add inequality to F that is ...

I valid for conv(FIP) butI violated by x∗.

5. Goto 2.

FLP= F

FF

x1

x2

1 2 3 4

1

2

3

conv(FIP)

min{cT x : x ∈ conv(FIP)}

x∗

x∗x∗x∗IP

. Resolving is cheap since dualfeasible (hot start)

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 50 / 62

Page 145: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

General cutting plane method

Algorithm

1. F ← FLP

2. Solve

min cTxs.t. x ∈ F

3. If x∗ ∈ FIP: Stop

4. Add inequality to F that is ...

I valid for conv(FIP) butI violated by x∗.

5. Goto 2.

FLP= F

FF

x1

x2

1 2 3 4

1

2

3

conv(FIP)

min{cT x : x ∈ conv(FIP)}

x∗

x∗x∗x∗IP

. Resolving is cheap since dualfeasible (hot start)

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 50 / 62

Page 146: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

General cutting plane method

Algorithm

1. F ← FLP

2. Solve

min cTxs.t. x ∈ F

3. If x∗ ∈ FIP: Stop

4. Add inequality to F that is ...

I valid for conv(FIP) butI violated by x∗.

5. Goto 2.

FLP= F

F

F

x1

x2

1 2 3 4

1

2

3

conv(FIP)

min{cT x : x ∈ conv(FIP)}

x∗x∗x∗x∗IP

. Resolving is cheap since dualfeasible (hot start)

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 50 / 62

Page 147: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

General cutting plane method

Algorithm

1. F ← FLP

2. Solve

min cTxs.t. x ∈ F

3. If x∗ ∈ FIP: Stop

4. Add inequality to F that is ...

I valid for conv(FIP) butI violated by x∗.

5. Goto 2.

FLP= F

F

F

x1

x2

1 2 3 4

1

2

3

conv(FIP)

min{cT x : x ∈ conv(FIP)}

x∗x∗x∗x∗IP

. Resolving is cheap since dualfeasible (hot start)

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 50 / 62

Page 148: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

General cutting plane method

Algorithm

1. F ← FLP

2. Solve

min cTxs.t. x ∈ F

3. If x∗ ∈ FIP: Stop

4. Add inequality to F that is ...

I valid for conv(FIP) butI violated by x∗.

5. Goto 2.

FLP= F

F

F

x1

x2

1 2 3 4

1

2

3

conv(FIP)

min{cT x : x ∈ conv(FIP)}

x∗

x∗

x∗x∗IP

. Resolving is cheap since dualfeasible (hot start)

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 50 / 62

Page 149: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

General cutting plane method

Algorithm

1. F ← FLP

2. Solve

min cTxs.t. x ∈ F

3. If x∗ ∈ FIP: Stop

4. Add inequality to F that is ...

I valid for conv(FIP) butI violated by x∗.

5. Goto 2.

FLP= F

F

F

x1

x2

1 2 3 4

1

2

3

conv(FIP)

min{cT x : x ∈ conv(FIP)}

x∗

x∗

x∗x∗IP

. Resolving is cheap since dualfeasible (hot start)

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 50 / 62

Page 150: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

General cutting plane method

Algorithm

1. F ← FLP

2. Solve

min cTxs.t. x ∈ F

3. If x∗ ∈ FIP: Stop

4. Add inequality to F that is ...

I valid for conv(FIP) butI violated by x∗.

5. Goto 2.

FLP= F

F

F

x1

x2

1 2 3 4

1

2

3

conv(FIP)

min{cT x : x ∈ conv(FIP)}

x∗

x∗

x∗x∗IP

. Resolving is cheap since dualfeasible (hot start)

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 50 / 62

Page 151: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

General cutting plane method

Algorithm

1. F ← FLP

2. Solve

min cTxs.t. x ∈ F

3. If x∗ ∈ FIP: Stop

4. Add inequality to F that is ...

I valid for conv(FIP) butI violated by x∗.

5. Goto 2.

FLP= F

F

F

x1

x2

1 2 3 4

1

2

3

conv(FIP)

min{cT x : x ∈ conv(FIP)}

x∗x∗x∗x∗IP

. Resolving is cheap since dualfeasible (hot start)

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 50 / 62

Page 152: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

General cutting plane method

Algorithm

1. F ← FLP

2. Solve

min cTxs.t. x ∈ F

3. If x∗ ∈ FIP: Stop

4. Add inequality to F that is ...

I valid for conv(FIP) butI violated by x∗.

5. Goto 2.

FLP= F

F

F

x1

x2

1 2 3 4

1

2

3

conv(FIP)

min{cT x : x ∈ conv(FIP)}

x∗x∗x∗x∗IP

. Resolving is cheap since dualfeasible (hot start)

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 50 / 62

Page 153: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

General cutting plane method

Algorithm

1. F ← FLP

2. Solve

min cTxs.t. x ∈ F

3. If x∗ ∈ FIP: Stop

4. Add inequality to F that is ...

I valid for conv(FIP) butI violated by x∗.

5. Goto 2.

FLP= F

F

F

x1

x2

1 2 3 4

1

2

3

conv(FIP)

min{cT x : x ∈ conv(FIP)}

x∗x∗

x∗

x∗IP

. Resolving is cheap since dualfeasible (hot start)

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 50 / 62

Page 154: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

General cutting plane method

Algorithm

1. F ← FLP

2. Solve

min cTxs.t. x ∈ F

3. If x∗ ∈ FIP: Stop

4. Add inequality to F that is ...

I valid for conv(FIP) butI violated by x∗.

5. Goto 2.

FLP= F

F

F

x1

x2

1 2 3 4

1

2

3

conv(FIP)

min{cT x : x ∈ conv(FIP)}

x∗x∗

x∗

x∗IP

. Resolving is cheap since dualfeasible (hot start)

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 50 / 62

Page 155: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

General cutting plane method

Algorithm

1. F ← FLP

2. Solve

min cTxs.t. x ∈ F

3. If x∗ ∈ FIP: Stop

4. Add inequality to F that is ...

I valid for conv(FIP) butI violated by x∗.

5. Goto 2.

FLP= F

F

F

x1

x2

1 2 3 4

1

2

3

conv(FIP)

min{cT x : x ∈ conv(FIP)}

x∗x∗x∗

x∗IP

. Resolving is cheap since dualfeasible (hot start)

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 50 / 62

Page 156: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

LP-based branch-and-bound (colorful picture)

Steps

1. Abort criterion

2. Node selection

3. Solve relaxation

4. Bounding

5. Feasibility check

6. Branching

x IP

∅∞ ∅∞

x IP

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 51 / 62

Page 157: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

LP-based branch-and-bound (colorful picture)

Steps

1. Abort criterion

2. Node selection

3. Solve relaxation

4. Bounding

5. Feasibility check

6. Branching

x IP

∅∞ ∅∞

x IP

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 51 / 62

Page 158: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

LP-based branch-and-bound (colorful picture)

Steps

1. Abort criterion

2. Node selection

3. Solve relaxation

4. Bounding

5. Feasibility check

6. Branching

x IP

∅∞ ∅∞

x IP

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 51 / 62

Page 159: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

LP-based branch-and-bound (colorful picture)

Steps

1. Abort criterion

2. Node selection

3. Solve relaxation

4. Bounding

5. Feasibility check

6. Branching

x IP

∅∞ ∅∞

x IP

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 51 / 62

Page 160: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

LP-based branch-and-bound (colorful picture)

Steps

1. Abort criterion

2. Node selection

3. Solve relaxation

4. Bounding

5. Feasibility check

6. Branching

x IP

∅∞ ∅∞

x IP

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 51 / 62

Page 161: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

LP-based branch-and-bound (colorful picture)

Steps

1. Abort criterion

2. Node selection

3. Solve relaxation

4. Bounding

5. Feasibility check

6. Branching

x IP

∅∞ ∅∞

x IP

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 51 / 62

Page 162: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

LP-based branch-and-bound (colorful picture)

Steps

1. Abort criterion

2. Node selection

3. Solve relaxation

4. Bounding

5. Feasibility check

6. Branching

x IP

∅∞ ∅∞

x IP

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 51 / 62

Page 163: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

LP-based branch-and-bound (colorful picture)

Steps

1. Abort criterion

2. Node selection

3. Solve relaxation

4. Bounding

5. Feasibility check

6. Branching

x IP

∅∞ ∅∞

x IP

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 51 / 62

Page 164: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

LP-based branch-and-bound (colorful picture)

Steps

1. Abort criterion

2. Node selection

3. Solve relaxation

4. Bounding

5. Feasibility check

6. Branching

x IP

∅∞ ∅∞

x IP

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 51 / 62

Page 165: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

LP-based branch-and-bound (colorful picture)

Steps

1. Abort criterion

2. Node selection

3. Solve relaxation

4. Bounding

5. Feasibility check

6. Branching

x IP

∅∞ ∅∞

x IP

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 51 / 62

Page 166: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

LP-based branch-and-bound (colorful picture)

Steps

1. Abort criterion

2. Node selection

3. Solve relaxation

4. Bounding

5. Feasibility check

6. Branching

x IP

∅∞ ∅∞

x IP

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 51 / 62

Page 167: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

LP-based branch-and-bound (colorful picture)

Steps

1. Abort criterion

2. Node selection

3. Solve relaxation

4. Bounding

5. Feasibility check

6. Branching

x IP

∞ ∅∞

x IP

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 51 / 62

Page 168: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

LP-based branch-and-bound (colorful picture)

Steps

1. Abort criterion

2. Node selection

3. Solve relaxation

4. Bounding

5. Feasibility check

6. Branching

x IP

∅∞

x IP

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 51 / 62

Page 169: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

LP-based branch-and-bound (colorful picture)

Steps

1. Abort criterion

2. Node selection

3. Solve relaxation

4. Bounding

5. Feasibility check

6. Branching

x IP

∅∞

x IP

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 51 / 62

Page 170: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

LP-based branch-and-bound (colorful picture)

Steps

1. Abort criterion

2. Node selection

3. Solve relaxation

4. Bounding

5. Feasibility check

6. Branching

x IP

∅∞ ∅∞

x IP

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 51 / 62

Page 171: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

LP-based branch-and-bound (colorful picture)

Steps

1. Abort criterion

2. Node selection

3. Solve relaxation

4. Bounding

5. Feasibility check

6. Branching

x IP

∅∞ ∅∞

x IP

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 51 / 62

Page 172: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

LP-based branch-and-bound (colorful picture)

Steps

1. Abort criterion

2. Node selection

3. Solve relaxation

4. Bounding

5. Feasibility check

6. Branching

x IP

∅∞ ∅∞

x IP

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 51 / 62

Page 173: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

LP-based branch-and-bound (colorful picture)

Steps

1. Abort criterion

2. Node selection

3. Solve relaxation

4. Bounding

5. Feasibility check

6. Branching

x IP

∅∞ ∅∞

x IP

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 51 / 62

Page 174: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

LP-based branch-and-bound (colorful picture)

Steps

1. Abort criterion

2. Node selection

3. Solve relaxation

4. Bounding

5. Feasibility check

6. Branching

x IP

∅∞ ∅∞

x IP

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 51 / 62

Page 175: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

LP-based branch-and-bound (colorful picture)

Steps

1. Abort criterion

2. Node selection

3. Solve relaxation

4. Bounding

5. Feasibility check

6. Branching

x IP

∅∞ ∅∞

x IP

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 51 / 62

Page 176: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

LP-based branch-and-bound (colorful picture)

Steps

1. Abort criterion

2. Node selection

3. Solve relaxation

4. Bounding

5. Feasibility check

6. Branching

x IP

∅∞ ∅∞

x IP

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 51 / 62

Page 177: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

LP-based branch-and-bound (colorful picture)

Steps

1. Abort criterion

2. Node selection

3. Solve relaxation

4. Bounding

5. Feasibility check

6. Branching

x IP

∅∞

x IP

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 51 / 62

Page 178: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

LP-based branch-and-bound (colorful picture)

Steps

1. Abort criterion

2. Node selection

3. Solve relaxation

4. Bounding

5. Feasibility check

6. Branching

x IP

∅∞ ∅

x IP

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 51 / 62

Page 179: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

LP-based branch-and-bound (colorful picture)

Steps

1. Abort criterion

2. Node selection

3. Solve relaxation

4. Bounding

5. Feasibility check

6. Branching

x IP

∅∞ ∅

x IP

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 51 / 62

Page 180: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

LP-based branch-and-bound (colorful picture)

Steps

1. Abort criterion

2. Node selection

3. Solve relaxation

4. Bounding

5. Feasibility check

6. Branching

x IP

∅∞ ∅∞

x IP

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 51 / 62

Page 181: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Solving an integer program

F

x1

x2

1 2 3 4

1

2

3

conv(FIP)

min{cT x : x ∈ conv(FIP)}

x∗

cutting planes

x IP

branch-and-bound

. Both approaches solve an initial linear program.

. Classically using simplex algorithm for efficent hot start

I A cutting plane or a bound change is an additional row (linearconstraint).

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 52 / 62

Page 182: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Solving an integer program

F

x1

x2

1 2 3 4

1

2

3

conv(FIP)

min{cT x : x ∈ conv(FIP)}

x∗

cutting planes

x IP

branch-and-bound

. Both approaches solve an initial linear program.

. Classically using simplex algorithm for efficent hot start

I A cutting plane or a bound change is an additional row (linearconstraint).

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 52 / 62

Page 183: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Solving an integer program

F

x1

x2

1 2 3 4

1

2

3

conv(FIP)

min{cT x : x ∈ conv(FIP)}

x∗

cutting planes

x IP

branch-and-bound

. Both approaches solve an initial linear program.

. Classically using simplex algorithm for efficent hot start

I A cutting plane or a bound change is an additional row (linearconstraint).

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 52 / 62

Page 184: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Solving an integer program

F

x1

x2

1 2 3 4

1

2

3

conv(FIP)

min{cT x : x ∈ conv(FIP)}

x∗

cutting planes

x IP

branch-and-bound

. Both approaches solve an initial linear program.

. Classically using simplex algorithm for efficent hot startI A cutting plane or a bound change is an additional row (linear

constraint).

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 52 / 62

Page 185: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Branch-and-cut

Branch-and-cut = Branch-and-bound + Cutting planes

. Use branch-and-bound as global solver paradigm.

. Perform limited cutting plane generation within each search node.I global versus local cuts

. Pure cutting plane generation does not work in practiceI numerical issuesI convergence

. Pure branch-and-bound fails in generalI exponential search tree

. Branch-and-cut fails laterI still exponential search treeI but shifts the exponential grow significantly

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 53 / 62

Page 186: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Branch-and-cut

Branch-and-cut = Branch-and-bound + Cutting planes

. Use branch-and-bound as global solver paradigm.

. Perform limited cutting plane generation within each search node.I global versus local cuts

. Pure cutting plane generation does not work in practiceI numerical issuesI convergence

. Pure branch-and-bound fails in generalI exponential search tree

. Branch-and-cut fails laterI still exponential search treeI but shifts the exponential grow significantly

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 53 / 62

Page 187: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Branch-and-cut

Branch-and-cut = Branch-and-bound + Cutting planes

. Use branch-and-bound as global solver paradigm.

. Perform limited cutting plane generation within each search node.I global versus local cuts

. Pure cutting plane generation does not work in practiceI numerical issuesI convergence

. Pure branch-and-bound fails in generalI exponential search tree

. Branch-and-cut fails laterI still exponential search treeI but shifts the exponential grow significantly

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 53 / 62

Page 188: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Branch-and-cut

Branch-and-cut = Branch-and-bound + Cutting planes

. Use branch-and-bound as global solver paradigm.

. Perform limited cutting plane generation within each search node.I global versus local cuts

. Pure cutting plane generation does not work in practiceI numerical issuesI convergence

. Pure branch-and-bound fails in generalI exponential search tree

. Branch-and-cut fails laterI still exponential search treeI but shifts the exponential grow significantly

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 53 / 62

Page 189: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Branch-and-cut

Branch-and-cut = Branch-and-bound + Cutting planes

. Use branch-and-bound as global solver paradigm.

. Perform limited cutting plane generation within each search node.I global versus local cuts

. Pure cutting plane generation does not work in practiceI numerical issuesI convergence

. Pure branch-and-bound fails in generalI exponential search tree

. Branch-and-cut fails laterI still exponential search treeI but shifts the exponential grow significantly

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 53 / 62

Page 190: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Branch-and-cut

Branch-and-cut = Branch-and-bound + Cutting planes

. Use branch-and-bound as global solver paradigm.

. Perform limited cutting plane generation within each search node.I global versus local cuts

. Pure cutting plane generation does not work in practiceI numerical issuesI convergence

. Pure branch-and-bound fails in generalI exponential search tree

. Branch-and-cut fails laterI still exponential search treeI but shifts the exponential grow significantly

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 53 / 62

Page 191: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Solving an integer program

. How can a linear program be solved?

. How can an integer program be solved?

. For what is the linear programming relaxation used within aninteger programming solver?

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 54 / 62

Page 192: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Reduced cost propagation. z∗: best objective value → cTx ≤ z∗

. x : LP optimum

. For variables xi with reduced cost ri 6= 0I variables are not in the basisI variables sitting on one of their boundsI ri > 0→ xi = lbi (lower bound)I ri < 0→ xi = ubi (upper bound)

cT x ≤

z∗

x

Case 1 ri > 0:

cTx + ri (xi − lbi ) ≤ z∗ ⇔ xi ≤z∗ − cTx

ri+ lbi

⇒ xi ≤⌊z∗ − cTx

ri+ lbi

Case 2 ri < 0:

cTx + ri (xi − ubi ) ≤ z∗ ⇔ xi ≥z∗ − cTx

ri+ ubi ⇒ xi ≥

⌊z∗ − cTx

ri+ ubi

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 55 / 62

Page 193: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Reduced cost propagation. z∗: best objective value → cTx ≤ z∗

. x : LP optimum

. For variables xi with reduced cost ri 6= 0I variables are not in the basisI variables sitting on one of their boundsI ri > 0→ xi = lbi (lower bound)I ri < 0→ xi = ubi (upper bound)

cT x ≤

z∗

x

Case 1 ri > 0:

cTx + ri (xi − lbi ) ≤ z∗ ⇔ xi ≤z∗ − cTx

ri+ lbi

⇒ xi ≤⌊z∗ − cTx

ri+ lbi

⌋Case 2 ri < 0:

cTx + ri (xi − ubi ) ≤ z∗ ⇔ xi ≥z∗ − cTx

ri+ ubi ⇒ xi ≥

⌊z∗ − cTx

ri+ ubi

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 55 / 62

Page 194: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Reduced cost propagation. z∗: best objective value → cTx ≤ z∗

. x : LP optimum

. For variables xi with reduced cost ri 6= 0I variables are not in the basisI variables sitting on one of their boundsI ri > 0→ xi = lbi (lower bound)I ri < 0→ xi = ubi (upper bound)

cT x ≤

z∗

x

Case 1 ri > 0:

cTx + ri (xi − lbi ) ≤ z∗ ⇔ xi ≤z∗ − cTx

ri+ lbi ⇒ xi ≤

⌊z∗ − cTx

ri+ lbi

Case 2 ri < 0:

cTx + ri (xi − ubi ) ≤ z∗ ⇔ xi ≥z∗ − cTx

ri+ ubi ⇒ xi ≥

⌊z∗ − cTx

ri+ ubi

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 55 / 62

Page 195: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Reduced cost propagation. z∗: best objective value → cTx ≤ z∗

. x : LP optimum

. For variables xi with reduced cost ri 6= 0I variables are not in the basisI variables sitting on one of their boundsI ri > 0→ xi = lbi (lower bound)I ri < 0→ xi = ubi (upper bound)

cT x ≤

z∗

x

Case 1 ri > 0:

cTx + ri (xi − lbi ) ≤ z∗ ⇔ xi ≤z∗ − cTx

ri+ lbi ⇒ xi ≤

⌊z∗ − cTx

ri+ lbi

⌋Case 2 ri < 0:

cTx + ri (xi − ubi ) ≤ z∗ ⇔ xi ≥z∗ − cTx

ri+ ubi ⇒ xi ≥

⌊z∗ − cTx

ri+ ubi

⌋Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 55 / 62

Page 196: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Branching – Pseudo Cost

Estimating the objective

. objective gain per unit:I ζ−(x3) = 4−2

7.4−7 = 20.4 = 5

I other values at other nodes

. pseudocosts:average objective gainψ−(x3) =

ζ−1 (x3)+...+ζ−n (x3)

n= 5+3

2= 4

. estimate increase of objectiveby pseudocosts and fractionality:

ψ−(x3) · frac(x3) = 4 · 0.2 = 0.8,and ψ+(x3)(1− frac(x3)) = 7.6

x3 ≤ 7

c = 4

x3 ≥ 8

c = 8

x3 = 7.4

c = 2

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 56 / 62

Page 197: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Branching – Pseudo Cost

Estimating the objective

. objective gain per unit:I ζ−(x3) = 4−2

7.4−7 = 20.4 = 5

I other values at other nodes

. pseudocosts:average objective gainψ−(x3) =

ζ−1 (x3)+...+ζ−n (x3)

n= 5+3

2= 4

. estimate increase of objectiveby pseudocosts and fractionality:

ψ−(x3) · frac(x3) = 4 · 0.2 = 0.8,and ψ+(x3)(1− frac(x3)) = 7.6

x3 ≤ 7

c = 4

x3 ≥ 8

c = 8

x3 = 7.4

c = 2

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 56 / 62

Page 198: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Branching – Pseudo Cost

Estimating the objective

. objective gain per unit:I ζ+(x3) = 8−2

8−7.4 = 60.6 = 10

I other values at other nodes

. pseudocosts:average objective gainψ−(x3) =

ζ−1 (x3)+...+ζ−n (x3)

n= 5+3

2= 4

. estimate increase of objectiveby pseudocosts and fractionality:

ψ−(x3) · frac(x3) = 4 · 0.2 = 0.8,and ψ+(x3)(1− frac(x3)) = 7.6

x3 ≤ 7

c = 4

x3 ≥ 8

c = 8

x3 = 7.4

c = 2

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 56 / 62

Page 199: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Branching – Pseudo Cost

Estimating the objective

. objective gain per unit:I ζ−1 (x3) = 5, ζ+

1 (x3) = 10

I other values at other nodes

. pseudocosts:average objective gainψ−(x3) =

ζ−1 (x3)+...+ζ−n (x3)

n= 5+3

2= 4

. estimate increase of objectiveby pseudocosts and fractionality:

ψ−(x3) · frac(x3) = 4 · 0.2 = 0.8,and ψ+(x3)(1− frac(x3)) = 7.6

x3 ≤ 7

c = 4

x3 ≥ 8

c = 8

x3 = 7.4

c = 2

ζ−1 (x3) ζ+1 (x3)

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 56 / 62

Page 200: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Branching – Pseudo Cost

Estimating the objective

. objective gain per unit:I ζ−1 (x3) = 5, ζ+

1 (x3) = 10I other values at other nodes

. pseudocosts:average objective gainψ−(x3) =

ζ−1 (x3)+...+ζ−n (x3)

n= 5+3

2= 4

. estimate increase of objectiveby pseudocosts and fractionality:

ψ−(x3) · frac(x3) = 4 · 0.2 = 0.8,and ψ+(x3)(1− frac(x3)) = 7.6

x3 ≤ 5

c ≈ 0.8

x3 = 5.2 c = 0

x3 ≥ 6

c ≈ 7.6

ζ−1 (x3) = 5

x3 ≤ 4 x3 ≥ 5

ζ−2 (x3) = 3 ζ+2 (x3) = 9x3 ≤ 7

ζ+1 (x3) = 10

x3 ≥ 8

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 56 / 62

Page 201: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Branching – Pseudo Cost

Estimating the objective

. objective gain per unit:I ζ−1 (x3) = 5, ζ+

1 (x3) = 10I other values at other nodes

. pseudocosts:average objective gainψ−(x3) =

ζ−1 (x3)+...+ζ−n (x3)

n= 5+3

2= 4

. estimate increase of objectiveby pseudocosts and fractionality:

ψ−(x3) · frac(x3) = 4 · 0.2 = 0.8,and ψ+(x3)(1− frac(x3)) = 7.6

x3 ≤ 5

c ≈ 0.8

x3 = 5.2 c = 0

x3 ≥ 6

c ≈ 7.6

ζ−1 (x3) = 5

x3 ≤ 4 x3 ≥ 5

ζ−2 (x3) = 3 ζ+2 (x3) = 9x3 ≤ 7

ζ+1 (x3) = 10

x3 ≥ 8

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 56 / 62

Page 202: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Branching – Pseudo Cost

Estimating the objective

. objective gain per unit:I ζ−1 (x3) = 5, ζ+

1 (x3) = 10I other values at other nodes

. pseudocosts:average objective gainψ−(x3) = 4, ψ+(x3) = 9.5

. estimate increase of objectiveby pseudocosts and fractionality:

ψ−(x3) · frac(x3) = 4 · 0.2 = 0.8,and ψ+(x3)(1− frac(x3)) = 7.6

x3 ≤ 5

c ≈ 0.8

x3 = 5.2 c = 0

x3 ≥ 6

c ≈ 7.6

ζ−1 (x3) = 5

x3 ≤ 4 x3 ≥ 5

ζ−2 (x3) = 3 ζ+2 (x3) = 9x3 ≤ 7

ζ+1 (x3) = 10

x3 ≥ 8

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 56 / 62

Page 203: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Branching – Pseudo Cost

Estimating the objective

. objective gain per unit:I ζ−1 (x3) = 5, ζ+

1 (x3) = 10I other values at other nodes

. pseudocosts:average objective gainψ−(x3) = 4, ψ+(x3) = 9.5

. estimate increase of objectiveby pseudocosts and fractionality:ψ−(x3) · frac(x3)

= 4 · 0.2 = 0.8,and ψ+(x3)(1− frac(x3)) = 7.6

x3 ≤ 5

c ≈ 0.8

x3 = 5.2 c = 0

x3 ≥ 6

c ≈ 7.6

ζ−1 (x3) = 5

x3 ≤ 4 x3 ≥ 5

ζ−2 (x3) = 3 ζ+2 (x3) = 9x3 ≤ 7

ζ+1 (x3) = 10

x3 ≥ 8

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 56 / 62

Page 204: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Branching – Pseudo Cost

Estimating the objective

. objective gain per unit:I ζ−1 (x3) = 5, ζ+

1 (x3) = 10I other values at other nodes

. pseudocosts:average objective gainψ−(x3) = 4, ψ+(x3) = 9.5

. estimate increase of objectiveby pseudocosts and fractionality:ψ−(x3) · frac(x3) = 4 · 0.2 = 0.8,

and ψ+(x3)(1− frac(x3)) = 7.6

x3 ≤ 5

c ≈ 0.8

x3 = 5.2 c = 0

x3 ≥ 6

c ≈ 7.6

ζ−1 (x3) = 5

x3 ≤ 4 x3 ≥ 5

ζ−2 (x3) = 3 ζ+2 (x3) = 9x3 ≤ 7

ζ+1 (x3) = 10

x3 ≥ 8

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 56 / 62

Page 205: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Branching – Pseudo Cost

Estimating the objective

. objective gain per unit:I ζ−1 (x3) = 5, ζ+

1 (x3) = 10I other values at other nodes

. pseudocosts:average objective gainψ−(x3) = 4, ψ+(x3) = 9.5

. estimate increase of objectiveby pseudocosts and fractionality:ψ−(x3) · frac(x3) = 4 · 0.2 = 0.8,and ψ+(x3)(1− frac(x3)) = 7.6

x3 ≤ 5

c ≈ 0.8

x3 = 5.2 c = 0

x3 ≥ 6

c ≈ 7.6

ζ−1 (x3) = 5

x3 ≤ 4 x3 ≥ 5

ζ−2 (x3) = 3 ζ+2 (x3) = 9x3 ≤ 7

ζ+1 (x3) = 10

x3 ≥ 8

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 56 / 62

Page 206: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Heuristic – RENS

RENS – Relaxation Enforced Neighborhood Search

Idea: Search the vicinity of a relaxation solution

Algorithm

1. x ← LP optimum;

2. Fix all integral variables:xi := xi for all i : xi ∈ Z;

3. Reduce domain of fractional variablesxi ∈ {bxic; dxie};

4. Solve the resulting sub-MIP;

Crucial point: Does not need a feasible start solution

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 57 / 62

Page 207: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Heuristic – RENS

RENS – Relaxation Enforced Neighborhood Search

Idea: Search the vicinity of a relaxation solution

Algorithm

1. x ← LP optimum;

2. Fix all integral variables:xi := xi for all i : xi ∈ Z;

3. Reduce domain of fractional variablesxi ∈ {bxic; dxie};

4. Solve the resulting sub-MIP;

Crucial point: Does not need a feasible start solution

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 57 / 62

Page 208: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Heuristic – RENS

RENS – Relaxation Enforced Neighborhood Search

Idea: Search the vicinity of a relaxation solution

Algorithm

1. x ← LP optimum;

2. Fix all integral variables:xi := xi for all i : xi ∈ Z;

3. Reduce domain of fractional variablesxi ∈ {bxic; dxie};

4. Solve the resulting sub-MIP;

Crucial point: Does not need a feasible start solution

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 57 / 62

Page 209: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Heuristic – RENS

RENS – Relaxation Enforced Neighborhood Search

Idea: Search the vicinity of a relaxation solution

Algorithm

1. x ← LP optimum;

2. Fix all integral variables:xi := xi for all i : xi ∈ Z;

3. Reduce domain of fractional variablesxi ∈ {bxic; dxie};

4. Solve the resulting sub-MIP;

Crucial point: Does not need a feasible start solution

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 57 / 62

Page 210: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Heuristic – RENS

RENS – Relaxation Enforced Neighborhood Search

Idea: Search the vicinity of a relaxation solution

Algorithm

1. x ← LP optimum;

2. Fix all integral variables:xi := xi for all i : xi ∈ Z;

3. Reduce domain of fractional variablesxi ∈ {bxic; dxie};

4. Solve the resulting sub-MIP;

Crucial point: Does not need a feasible start solution

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 57 / 62

Page 211: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Heuristic – RENS

RENS – Relaxation Enforced Neighborhood Search

Idea: Search the vicinity of a relaxation solution

Algorithm

1. x ← LP optimum;

2. Fix all integral variables:xi := xi for all i : xi ∈ Z;

3. Reduce domain of fractional variablesxi ∈ {bxic; dxie};

4. Solve the resulting sub-MIP;

Crucial point: Does not need a feasible start solution

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 57 / 62

Page 212: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Outline

Integer Programming for Constraint Programmers

1 Introduction

2 Linear programming

3 Integer (linear) programming

4 Summary

5 Discussion

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 58 / 62

Page 213: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

SummaryLinear relaxation

. gives a global view

. provides a proven dual bound for the original problemI quality guarantee

. can be used for more than getting a dual boundI propagation, branching, primal heuristic, ...

Additional remarks

. a linear relaxation does not have to represent all constraints

. numeric issues can arise due to continuous optimizationI in general the numerics can be controlledI there exist critical instancesI see also exact interger programming

As in CP, the chosen model has a huge impacton the performance of a solver

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 59 / 62

Page 214: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

SummaryLinear relaxation

. gives a global view

. provides a proven dual bound for the original problemI quality guarantee

. can be used for more than getting a dual boundI propagation, branching, primal heuristic, ...

Additional remarks

. a linear relaxation does not have to represent all constraints

. numeric issues can arise due to continuous optimizationI in general the numerics can be controlledI there exist critical instancesI see also exact interger programming

As in CP, the chosen model has a huge impacton the performance of a solver

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 59 / 62

Page 215: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

SummaryLinear relaxation

. gives a global view

. provides a proven dual bound for the original problemI quality guarantee

. can be used for more than getting a dual boundI propagation, branching, primal heuristic, ...

Additional remarks

. a linear relaxation does not have to represent all constraints

. numeric issues can arise due to continuous optimizationI in general the numerics can be controlledI there exist critical instancesI see also exact interger programming

As in CP, the chosen model has a huge impacton the performance of a solver

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 59 / 62

Page 216: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

An incomplete list of IP Solvers

Non-commercial solvers

. CBC (IBM) https://projects.coin-or.org/Cbc

. GLPK http://www.gnu.org/s/glpk/

. LPSOLVE http://lpsolve.sourceforge.net/

. SCIP http://scip.zib.de

. SYMPHONY https://projects.coin-or.org/SYMPHONY

Commercial solvers

. CPLEX (IBM) http://www.cplex.com

. GUROBI http://www.gurobi.com

. MOPS http://www.mops-optimizer.com

. MOSEK http://www.mosek.com

. XPRESS (Fico) http://www.fico.com

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 60 / 62

Page 217: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Outline

Integer Programming for Constraint Programmers

1 Introduction

2 Linear programming

3 Integer (linear) programming

4 Summary

5 Discussion

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 61 / 62

Page 218: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

Questions

Ambros Gleixner and Stefan Heinz (ZIB) – Integer Programming for Constraint Programmers 62 / 62

Page 219: Tutorial - Integer Programming for Constraint …Tutorial Integer Programming for Constraint Programmers Ambros Gleixner and Stefan Heinz Zuse Institute Berlin (ZIB) Chris Beck, Timo

TutorialInteger Programming forConstraint Programmers

Ambros Gleixner and Stefan HeinzZuse Institute Berlin (ZIB)

Chris Beck, Timo Berthold, and Kati Wolter

DFG Research Center MATHEON

Mathematics for key technologies

CP 2011, 14/Sep/2011