Métodes Exactes
Métodes Exactes
Fabio Furini
December 8, 2014
Integer Programming
Outline
1
2
3
General Definitions
Branch and bound
Cutting planes
Integer Programming
Optimization Problems
Optimization Problems
Integer Programming
Notation
An integer linear program is a linear program with the additional
constraint that the variables are required to be integer.
min cT x
(1)
Ax b
(2)
x0
(3)
xN
(4)
where A Rm X n , b Rm , c Rn .
Write an example of the matrix and the vectors...
Integer Programming
Notation
Equivalent way an writing an ILP:
min
n
X
ci xi
(5)
i=1
n
X
Aij xi bj
j = 1, . . . , m
(6)
xi 0
i = 1, . . . , n
(7)
xi N
i = 1, . . . , n
(8)
i=1
Integer Programming
(9)
Ax b
(10)
x0
(11)
xj N j = 1, . . . , p
(12)
Modeling Potential
Integer Programming
Solvers
Commercial solvers:
Open solvers:
CPLEX
SCIP
GUROBI
CBC
XPRESS
GLPK
EXCEL
LPSOLVE
Libre Office
Problems with more than a few thousand variables are often not possible
to solve unless they show a specific exploitable structure.
Integer Programming
Exact Algorithms
Integer Programming
Heuristic Algorithms
Genetic algorithm
Tabu Search
Simulated Annealing
Local Search
Ant Colony Optimization
Metaheuristic
A combination of the above methods
Integer Programming
10
Example 1
Integer Programming
11
Example 1
Decision variable:
xj =
(13)
(14)
xj {0, 1} i = 1, 2, 3, 4 (15)
Integer Programming
12
Example 1
Integer Programming
13
Example 1
Integer Programming
14
Example 2
As the project team leader, you must determine the best selection of 5 out
of 10 possible projects. Project profits p1 , p2 , . . . , p10 .
1 then we execute project j
xj =
0 otherwise
max
10
X
pj xj
(16)
xj = 5
(17)
j=1
10
X
j=1
xj {0, 1} i = 1, . . . , 10
Integer Programming
(18)
15
(19)
(20)
x7 x6
(21)
(22)
(23)
x10 1 x3
(24)
16
Integer Programming
17
Branch and bound has been the most effective technique for solving
MILPs in the following forty years or so. It was proposed in 1960 by
Land and Dong.
It is based on dividing the problem into a number of smaller problems
(branching) and evaluating their quality based on solving the
underlying linear programs (bounding).
However, in the last ten years, cutting planes have made a resurgence
and are now efficiently combined with branch and bound into an
overall procedure called branch and cut. This term was coined by
Padberg and Rinaldi 1987.
Integer Programming
18
min cT x
(25)
Ax b
(26)
x0
(27)
xj N j = 1, . . . , p
(28)
min cT x
(29)
Ax b
(30)
x0
(31)
The best known (and most successful) methods for solving LPs are the
interior-point and simplex methods.
Integer Programming
19
Integer Programming
20
We first explain branch and bound by solving the following pure integer
linear program:
max x1 + x2
(32)
x1 + x2 2
(33)
8x1 + 2x2 19
(34)
x1 , x2 0
(35)
x1 , x2 N
(36)
Integer Programming
21
How can we cut this sol while preserving the feasible integral solutions?
Integer Programming
22
Integer Programming
23
max x1 + x2 (37)
max x1 + x2 (42)
x1 + x2 2 (38)
x1 + x2 2 (43)
x1 1 (40)
x1 2 (45)
x1 , x2 0 (41)
x1 , x2 0 (46)
The solution is
x1 = 1, x2 = 3 with
objective value 4.
Integer Programming
The solution is
x1 = 2, x2 = 1.5 with
objective value 3.5.
24
Integer Programming
25
Integer Programming
26
max 3x1 + x2
(47)
x1 + x2 2
(48)
8x1 + 2x2 19
(49)
x1 , x2 0
(50)
x1 , x2 N
(51)
Integer Programming
27
Integer Programming
28
Integer Programming
29
5 Branch From Ni , construct linear programs Ni1 , ..., Nik with smaller
feasible regions whose union contains all the feasible solutions of
(MILP) in Ni . Add Ni1 , ..., Nik to L and go to Step 1.
Integer Programming
30
Integer Programming
31
Integer Programming
32
Strong Branching
Integer Programming
33
Pseudocost Branching
Let fji = xji bxji c be the fractional part of xji , for j = 1, . . . , p. For an
index j such that fji > 0, define:
down pseudocost Pj =
up pseudocost Pj+ =
Dij
fj i
Dij+
1fji
Integer Programming
34
Pseudocost Branching
A good way of initializing the pseudocosts is through strong
branching at the root node or other nodes of the tree when new
variables become fractional for the first time
To update the pseudocost Pj , we average the observations over all
the nodes of the tree where xj was branched on.
The estimated pseudocosts Pj and Pj+ are used to compute
estimates of Dij and Dij+ at node Ni
Dij = Pj fji
Dij+ = Pj+ (1 fji )
Integer Programming
35
Node selection
How does one choose among the different problems Ni available in Step 2
of the algorithm?
Two goals need to be considered:
finding good feasible solutions (thus decreasing the upper bound zU )
proving optimality of the current best feasible solution (by increasing
the lower bound as quickly as possible)
Integer Programming
36
Node selection
Best estimate criterion
For the first goal, we estimate the value of the best feasible solution
in each node Ni :
Ei = zi +
p
X
j=1
37
Node selection
Best estimate criterion
For the first goal, we estimate the value of the best feasible solution
in each node Ni :
Ei = zi +
p
X
j=1
38
Heuristics
Heuristics are useful for improving the bound zU , which helps in Step
4 for pruning by bounds.
Heuristics are even more important when the branch-and-bound
algorithm is too time consuming and we need to stop the earlier the
optimization
Examples: diving heuristics, rins, solution polishing, feasibility pump
and many others . . .
Integer Programming
39
Local Branching
This heuristic is particularly suited for MILPs that are too large to solve to
optimality, but where the linear programming relaxation can be solved in
reasonable time. For simplicity, assume that all the integer variables are
0,1 valued.
Let x be a feasible solution of (MILP) (found by a diving heuristic, for
example).
The idea is to define a neighborhood of x as follows:
Pp
|xj xj | k
Pj=1
Pp
p
jI :xj =0 xj +
jI :xj =1 (1 xj ) k (linearised)
Integer Programming
40
Practical considerations
Integer Programming
41
Cutting planes
Cutting planes
Integer Programming
42
Gomory Cuts
Integer Programming
43
Gomory Cuts
Consider any equation in the optimized final tableau, say the i-th equation:
X
xBi +
yij xj = yi0
(1G )
j B
/
j B
/
Therefore we have:
xBi +
(2G )
j B
/
44
(52)
x1 + x2 2
(53)
8x1 + 2x2 19
(54)
x1 , x2 0
(55)
x1 , x2 {0, 1}
(56)
Integer Programming
max z x1 x2 = 0
(57)
x1 + x2 + x3 = 2
(58)
8x1 + 2x2 + x4 = 19
(59)
x1 , x2 , x3 , x4 0
(60)
x1 , x2 , x3 , x4 {0, 1}
(61)
45
z + 0.6x3 + 0.2x4 = 5
(62)
(63)
(64)
x1 , x2 , x3 , x4 0
(65)
Integer Programming
46
(66)
8x3 + x4 5.
(67)
We can express the above Gomory cut in the space (x1 , x2 ). This yields:
x2 3.
Integer Programming
(68)
47
Integer Programming
48