Documente Academic
Documente Profesional
Documente Cultură
Programación Entera
Índice
Introducción, formulación y ejemplos
Resolución gráfica del problema
Relajaciones en la formulación
El algoritmo de los cortes de Gomory
Algoritmos Branch and Bound
Programación no lineal en variables enteras
Introducción 3/66
Sus orígenes se remontan a los años 50 del siglo XX. El pionero fue Ralph
Gomory, EE.UU. 1929.
Las áreas de aplicación práctica son muchas donde hay que asignar recursos sólo
disponibles en cantidades discretas: distribución de mercancías, programación de
la producción en factorías, secuenciación de maquinaria en procesos industriales
y productivos, asignación de grupos generadores de energía eléctrica, cadenas de
suministro, logística, programación de rutas de vuelos, etc.
4/66
Al conjunto S D fx 2 Zn; y 2 Rp W Ax C G y b; x 0; y 0g se le
denomina región factible.
ToThere
solvecan
integer linear
be other programming
complications as well. problems weexample
Consider the could shown
do an in
exhaustive search over all
Fig. 8.57 which
theshows
and worth to place in our small suitcase to maximise a perfectly
value,
feasible (the valid linear
’knapsack’
integers. For optimisation
problem),
large problem
and
problems, this iswith a convex feasiblelarge,
combinatorially region.soClearly
a better solution
somewhere
whether we should or should not install a newstrategy,
pump between in two
that storage
region there will
tanks, be an
(you optimum, irrespective of what our particular
can’t
in fact one of the only known practical solution strategies, is to use what is known
install half a pump!). objective function happens to be. However when we restrict our attention to just integer
as a branch and bound technique, [45, p411–415]. Here we start by solving a relaxed ver-
También puede que la región factible no registre ni un sólo entero factible,
sion of the original problem, namely we simply ignore the integer constraints, and solve
In all these cases, the decision variable must be an integer, since we cannot stop 1.3 times or
the linear program asexample,
existiendo dicho espacio en el sentido tradicional.
build 2.7 distillation columns, or in the latter existence/non-existence usual. The term ‘relaxed’ means that we have deliberately relaxed
the variable
some of the constraints in order
will be a binary decision variable. Constrained optimisation problems where the decision to achieve a solution, albeit perhaps an infeasible one. If
variables are integers are known as integer programming, or a binary linear program across
we happen fortuitously to stumble if the an integer solution, we are done. However in
mostorcases,
variables are constrained to be either zero or one, finallywe will some
if only not get
arean integertosolution,
required be but we do have an under-estimator of the
minimum
integers, then it is known as a mixed-integer linear cost function.
programming In the case of Fig. 8.56, we can see that the real-valued optimum
or MILP problem.
7/66
Ejemplos
El problema de la mochila
Su formulación es: X
max. cj xj
j
X
s. a aj xj b
j
xj D 0 ó 1:
Resolución gráfica del problema 10/66
max. 23 x1 C x2
A
s. a x1 C 4x2 16 x∗ C
x1 C x2 10
5x1 C x2 36 5x 1 + x 2 ≤ 36
x1 ; x2 0
x1 y x2 enteras. D
f. O.
0 x1
Sin tener en cuenta la condición de que las variables han de ser enteras, la
región factible es el poliedro convexo que generan los vértices 0; A; B; C y D
de la figura.
Índice
Introducción, formulación y ejemplos
Resolución gráfica del problema
Relajaciones en la formulación
El algoritmo de los cortes de Gomory
Algoritmos Branch and Bound
Programación no lineal en variables enteras
13/66
Relajaciones en la formulación
La idea es tratar de sustituir el programa entero original por otro más fácil de
resolver en el que se relajan algunas de las condiciones.
La solución de éste proporciona una cota de la función objetivo del problema
original.
max. c T x W x 2 S
˚
.PE/
Relajación lineal
max. c x W x 2 P ; P D fx 2 Rn W Ax b; x 0g
T
˚
.PL/
Algoritmo tipo
.1/
Paso 0 – Inicialización Hacer i D 1, w D 1 y z D 1. Escoger un SR S tal que
.1/
zR c T x para x 2 S .
Paso 1 – Relajación Resolver el problema PE relajado:
n o
.i /
.i / .i /
R max. zR .x/ W x 2 SR :
Índice
Introducción, formulación y ejemplos
Resolución gráfica del problema
Relajaciones en la formulación
El algoritmo de los cortes de Gomory
Algoritmos Branch and Bound
Programación no lineal en variables enteras
Algoritmo de planos o cortes de Gomory 18/66
Este algoritmo, formulado por Gomory en 1960, es uno de los primeros que se
emplearon para resolver el problema general de programación entera.
SR.1/ D x0 2 R; x 2 Rn W x0 c T x D 0; Ax D b; x 0 ;
˚
.1/
i D 1 y zR D x0 .
Paso 1 – Resolución de la relajación lineal Resolver el programa entero relajado
n o
.PR.i/ / max. x0 W Œx0 ; x T T 2 SR.i / :
T
Si PR.i / es factible y tiene solución óptima, Œx0.i / ; x .i / T , continuar.
Paso 2 – Comprobación de óptimo Si x .i / 2 ZnC , ésta es la solución óptima del programa entero.
Paso 3 – Comprobación de no factibilidad Si PR.i / no es factible, el programa entero original no es factible.
.i /
xj D aN i.i0/ con aN i.i0/ … Z. Hacer
P
Paso 4 – Adición de un corte de Gomory Escoger una fila xBi C j 2H .i / aN ij
X
fkj xj xnCi D fk0 ; k D 1; : : : ; m; xnCi 2 ZC ;
j 2H .i/
Hacer i i C 1 e ir al paso 1.
Cuando se añade un corte, la nueva base, que incluye xnCi como variable
básica, es factible del dual.
x0 C x4 C x7 D 29
1 1
x1 C 3 x4 x
3 7
D 11
3
2 5
x2 x
3 4
C x
3 7
D 35
5 11
x C x5
3 4
x
3 7
D 13
3
2 8 11
x3 x
3 4
C x
3 7
D 3
2 5
x
3 4
C x6 x
3 7
D 34 :
2
El siguiente corte se elige de la fila x2 x
3 4
C 53 x7 D 53 . Es2
1 2 2
x4 C x7 D C x8; x8 2 ZC:
3 3 3
En términos de las variables originales, los tres cortes añadidos al problema son
x2 3, 2x1 C x2 9 y 3x1 C x2 12.
x2
x (1)
x(2)
3
Corte 1
2
x (3)
Corte 3 Corte 2
x (4)
x1
1 2 3 4
27/66
Índice
Introducción, formulación y ejemplos
Resolución gráfica del problema
Relajaciones en la formulación
El algoritmo de los cortes de Gomory
Algoritmos Branch and Bound
Programación no lineal en variables enteras
28/66
La idea que los anima es dividir la región factible, S, como si las variables que la
definen fuesen las ramas de un árbol e ir acotando la solución del estudio de
esas ramas.
S (1) S (2)
S (11) S (22)
S (12) S (13) S (21)
S (121) S (122)
30/66
x1 = 0 x1 = 1
S (0) S (1)
x2 = 0 x2 = 1 x2 = 0 x2 = 1
x3 = 0 x3 = 1 x3 = 0 x3 = 1 x3 = 0 x3 = 1 x3 = 0 x3 = 1
Para no tener que resolver PE .i/ se resuelve su relajación lineal; esto es PL.i/
.i / .i/
con S .i / SPL y zPL.x/ c T x para x 2 S .i/.
x1 = 0 x1 = 1
s. a 2x1 C x2 0 x2 = 0 x2 = 1
4x1 C x3 0
S (10) S (11)
x1 C x2 C x3 0
x3 = 0 x3 = 1
x 2 Z3 .0; 1/:
S (110) S (111)
Como resultado final se obtiene que x D Œ1; 1; 1T es la solución óptima del
programa entero.
L designa una colección de programas enteros, PE .i/, cada uno tiene la forma
.i /
zPE D max. fc T x W x 2 S .i/g, donde S .i/ S .
35/66
max. c x W x 2 S ; con S D fx 2 Zn W Ax b; x 0g ;
˚ T
.PE/
y la forma de resolverlos
xj ≤ xj xj ≥ xj + 1
Dada una lista L de subárboles del árbol de búsqueda con nudos no rechazados,
qué nudo elegir como el próximo a examinar.
8
< Analizar uno siguiendo unas reglas preestablecidas; o
ˆ
Dos opciones: Escogerlo según la información disponible en ese punto sobre
ˆ
cotas de las variables, número de nudos activos, etc.
:
volver hacia atrás y escoger otro del mismo nivel del nudo “padre” que no haya
sido analizado.
1
2 5
3 4 6 9
7 8
x2
# Constraints: 6 70
700
# Linear Inequality: 2 700
# Bounds: 2 69
690
# Integer Variables: 2 690
------------------------------------------------------ 68
Solver Parameters: 680
680
Solver: CBC 67
------------------------------------------------------ 670
>> [xi,fval]=solve(Opt) 670
66
xi = 660
7 660
65
70 2 3 4 5 6 7 8 9 10 11 12
fval =
707 x1
>> plot(Opt)
42/66
x 2 = 73
c
x 2 = 72
x 2 = 71 4 1
x 2 ≥ 68 x 2 ≤ 67
∗
x 2 = 70 8
3
2
11
x 2 = 69 6=7 x1 ≥ 8 x1 ≤ 7
x1 = 7
3 6 7
x 2 = 68 2
1 x 2 ≥ 71 x 2 ≤ 70 x1 ≤ 6 x 2 ≥ 70 x 2 ≤ 69
x 2 = 67 4 8
5 10 9
x1 = 6 x1 = 7 x1 = 8 x1 = 9
El resultado impreso de BBMI se lista a continuación. 44/66
Problema Ej12.2.3
*** FILAS
*** COLUMNAS
* Nueva solución entera; z(PE)= 718.00000; Tiempo desde última: .0001 seg.
*** FILAS
*** COLUMNAS
* Nueva solución entera; z(PE)= 707.00000; Tiempo desde última: .0001 seg.
*** FILAS
No. ..Fila.. en ....Valor.... ...Holgura... .Lí.Inferior. .Lí.Superior. Val.Dual. 46/66
*** COLUMNAS
*** FILAS
*** COLUMNAS
10
15
20
25
30
35
40
0 10 20 30 40 50
nz = 221
1.0000
1.0000
0
>> problem = mpsread(’DEMOS5_noint.mps’)
1.0000
problem =
1.0000
f: [50x1 double]
0
Aineq: [41x50 double]
1.0000
bineq: [41x1 double]
1.0000
Aeq: [0x50 double]
1.0000
beq: [0x1 double]
1.0000
lb: [50x1 double]
1.0000
ub: [50x1 double]
0
intcon: [50x1 double]
1.0000
solver: ’intlinprog’
0
options: [1x1 optim.options.Intlinprog]
0
>> options = optimoptions(’intlinprog’,’Display’,’final’,’PlotFcns’,@optimplotmilp);
0
>> problem.options = options;
0
>> tic,[x,fval,exitflag,output] = intlinprog(problem),toc
0
LP: Optimal objective value is -1171.225417.
1.0000
0
Cut Generation: Applied 5 Gomory cuts, 10 clique cuts, and 5 cover cuts.
0
Lower bound is -1046.000000.
1.0000
Relative gap is 0.00%.
0
Optimal solution found.
0
0
Intlinprog stopped at the root node ..
1.0000
0
x =
1.0000
1.0000
1.0000
1.0000
1.0000
fval =
1.0000
0
-1.0460e+03
1.0000
1.0000
0
exitflag =
1.0000
0
1
0
1.0000
1.0000
output =
1.0000
1.0000
relativegap: 0
0
absolutegap: 0
1.0000
numfeaspoints: 1
1.0000
numnodes: 0
1.0000
constrviolation: 1.5543e-15
0
message: ’Optimal solution found’
0
Elapsed time is 0.446243 seconds.
>>
Con OPTI Toolbox: 49/66
-1.0460e+03
Elapsed time is 7295.551641 seconds.
>>
Selección de la variable de ramificación 51/66
xp np0 C 1 y xp np0:
3
Recordemos b3; 22c D 3; b 4; 12c D 5.
53/66
Del algoritmo dual del simplex podemos deducir que la imposición de la nueva
cota xp np0 C 1 a la variable xp implicará un empeoramiento (reducción) del
valor de la función objetivo.
Como la variable básica xp , realizando una iteración del método dual del
simplex, pasaría como mínimo a ser no básica, otra variable no básica, xj ,
que estuviese en uno de sus límites, se incrementaría o decrementaría según
estuviese en el inferior o superior.
Es decir, se reduciría el valor de la función objetivo en una cantidad o
penalización que vendría dada por la expresión
8
aN 0j
pj <0 .1
< mKınj;aN fp0/ aNpj
; si xj D lj ; o por
PU D aN 0j
: mKınj;aN
pj >0 .1 fp0/ aNpj
; si xj D uj :
Razonando de manera similar, la imposición de la nueva cota xp np0 a la 54/66
Cualquier solución entera que se pudiese obtener partiendo del nudo i estaría
por consiguiente acotada superiormente por
mKaxfx0 PU ; x0 PD g:
Si se almacenan las peores soluciones, una vez que se encuentre una buena, se
rechazarán rápidamente buena parte de los nudos que queden en la lista.
Penalizaciones de variables no básicas 56/66
donde ahora
8 ( )
ˆ aN 0j .1 fp0 /=. aNpj /; j 2M
ˆ
ˆ
ˆ mKı nj; a
N pj <0 si xj D lj
mKaxfaN 0j ; aN 0j .1 fp0 /=. aNpj /g; j 2J
PU
<
D ˆ
(
aN 0j .1 fp0 /=. aNpj /; j 2M
)
: mKınj; aNpj >0 si xj D uj
ˆ
ˆ
ˆ
mKaxfaN 0j ; aN 0j .1 fp0 /=. aNpj /g; j 2J
y 8 ( )
ˆ aN 0j fp0 =aNpj ; j 2M
< mKınj; aNpj >0 mKaxfaN ; aN f =aN g;
ˆ
ˆ
ˆ si xj D lj
j 2J
PD D ˆ
( 0j 0j p0
aN 0j fp0 =aNpj ;
pj
j 2M
)
: mKınj; aNpj <0 si xj D uj :
ˆ
ˆ
ˆ
mKaxfaN 0j ; aN 0j fp0 =aNpj g; j 2J
s. a x1 C 2x2 4
5x1 C x2 20
2x1 2x2 7
x 2 Z2C :
donde x3 D x4 D 0.
.0/
De aquí que zPL D x0 D 332=11 y x .0/ D Œ36=11; 40=11; 0; 0; 75=11T .
Trabajemos con las penalizaciones que incluye BBMI. Las variables básicas son
x1, x2 y x5. Esta última no se requiere que sea entera. Las variables no básicas
de la solución obtenida están todas en su límite inferior.
60/66
0C
La penalización P2D la podemos considerar 1 pues de la solución del programa
lineal anterior se observa que al incrementar la variable x2, x3 y x4 decrecen.
Después de una iteración del método dual del simplex se llega a la solución
óptima siguiente:
x0 C 75 x4 C 35 x6 D 149
5
x1 C 15 x4 1
x
5 6
17
D 5
x2 C x6 D 3
2
x C x5 C 85 x6
5 4
D 29
5
x3 C 15 x4 11
x
5 6
D 75 :
.1/
De aquí que zPL D x0 D 149=5 y x .1/ D Œ17=5; 3; 7=5; 0; 29=5T , con x6 D 0.
La única variable que debe ser entera en esta solución y no lo es x1.
62/66
Calculemos ahora las penalizaciones por bifurcar a:
7 2 1
x1 3 W 1
P1D D mKınj; aNpj >0 faN 0j fp0 =aNpj ; j 2 M g D mKın 5
5 5
D 14
5
1C 3 2
x1 4 W P1U D mKınj; aNpj <0 faN 0j .1 fp0 /=. aNpj /; j 2 M g D mKın 5
.1 5
/ 15 D 95 :
x2 C x6 D 3
2 8
x C x5 C
5 4
x
5 6
D 295
x3 C 15 x4 11
5 6
x D 57
1 1
x
5 4
C x
5 6
x7 D 35 :
Otra iteración del dual del simplex obtiene la primera solución factible entera
x .2/ D Œ4; 0; 8; 0; 1T , con zPE D 28.
63/66
x2 ≤ 3 x2 ≥ 4
1 4
x1 ≤ 3 x1 ≥ 4
3 2
Solución entera.
x (2) = [4, 0, 8, 0, 1]T
(2)
zP L = z P E = zP E = 28
Programación No lineal en variables Enteras 64/66
-8
-1
-40
0
00
0
00
-6
0
00
12
-200
>> A=[0.53 1; -1.1 1]; b=[10,5]’;
>> lb=[0;0]; ub=[10;10]; 11
>> x0=[2.5,1.5]’;
-80
>> fun1=@(x) (x(1)-5).^2+(x(2)-7).^2-x(1)*x(2)*(x(2)+1); 10 0
200
-2
x2
3 8
00
8
7 -40
0
Jmin =
6
-20
-211 0
5
>> plot(Opt)
0
4
3
-2 -1 0 1 2 3 4 5 6 7 8
x1
-8
-1
-40
0
00
0
00
>> nlcon=@(x) 0.4*(x(1)-5.7)^3+x(2);
-6
0
00
12
-200
>> nlrhs=4.2;
11
>> x0=[2.5,1.5]’;
>> xtype = ’II’; 10
-80
0
>> Opt=opti(’fun’,fun,’ineq’,A,b,’bounds’,lb,ub,’nlcon’,nlcon,’nlrhs’,nlrhs,’xtype’,xtype) -4
-60
0
9 00
>> [x,fval] = solve(Opt,x0)
200
-2
x2
8
00
x =
7 -40
0
3 6
-20
0
8
5
0
fval = 4
3
-211 -2 -1 0 1 2 3 4 5 6 7 8
x1
>> plot(Opt)