Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Relajación Lineal
Métodos de Plano Cortante
Cortes de Gomory
Algoritmo Branch & Bounds
Programación Entera
Nelson Devia C.
2011
Basado en Bertsimas, D., Tsitsiklis, J. (1997)
“Introduction to Linear Optimization”
Capı́tulos 10 y 11
Contenidos
1 Introducción
2 Relajación Lineal
4 Cortes de Gomory
Introducción
Los problemas de programación lineal entera (IP1 ) son equivalentes a los
problemas de programación lineal (LP2 ), excepto que algunas de las
variables se restringen a tomar sólo valores enteros.
En general, se tiene el siguiente problema de programación
mixta(MIP3 ):
(MIP) mı́n z = c 0 x + d 0 y
Ax + By = b
y ≥ 0
x ∈ Zn+
Si no hay variables continuas, entonces se tiene un problema de
programación entera:
(IP) mı́n z = c 0 x
Ax = b
x ∈ Zn+
1
Integer Programming
2
Linear Programming
3
Mixed Integer Programming
Nelson Devia C. Programación Entera
Introducción
Relajación Lineal
Métodos de Plano Cortante
Cortes de Gomory
Algoritmo Branch & Bounds
Introducción
Las variables binarias son aquéllas que sólo pueden tomar los valores 0
ó 1.
Claramente, las variables binarias también son enteras, ya que {0, 1} ⊂ Z
Si todas las variables son binarias se tiene un problema de programación
entera binaria:
mı́n z = c 0 x
Ax = b
x ∈ {0, 1}n
El caso más general es cuando se tienen todo tipo de variables:
mı́n z = c 0 x + d 0 y + e 0 z
Ax + By + Cz = b
x ≥ 0
y ∈ Zn+
z ∈ {0, 1}m
Introducción
Los problemas enteros y mixtos son más difı́ciles de resolver que los problemas
lineales, por varias razones:
No se tiene una región factible.
El conjunto S de soluciones factibles es no convexo.
El óptimo del problema entero no se encuentra necesariamente en un
“vértice” de S.
Ejemplo de Problema Entero en R2 :
máx x1
x1 + x2 ≤ 4
x1 − x2 ≤ 3
x1 , x2 ∈ Z+
Introducción
Los problemas enteros y mixtos son más difı́ciles de resolver que los problemas
lineales, por varias razones:
No se tiene una región factible.
El conjunto S de soluciones factibles es no convexo.
El óptimo del problema entero no se encuentra necesariamente en un
“vértice” de S.
Ejemplo de Problema Mixto en R2 :
máx x1
x1 + x2 ≤ 4
x1 − x2 ≤ 3
x1 ≥ 0
x2 ∈ Z+
Relajación Lineal
La relajación lineal de un problema entero (o mixto) corresponde al mismo
problema, pero en el que se les permite a todas las variables ser continuas.
Ejemplo:
⇒
Relajación
Lineal
Relajación Lineal
En toda relajación, se tiene que el conjunto de soluciones factibles es más
grande que el del problema original.
Si llamamos SP a la región factible del problema entero y SPR a la del
problema relajado, siempre se tiene que:
SP ⊆ SPR
Por esta razón, el óptimo del problema relajado siempre será mejor o
igual al óptimo del problema entero. En el ejemplo, como se trataba de
un problema de maximización:
∗
zPR ≥ zP∗
∗
Concretamente: zPR = 3,5, mientras que zP∗ = 3.
∗
Notar que la solución óptima de (PR), xPR = 3, 5 0,5 es infactible en
el problema (P), pues no es entera.
∗
En general, el óptimo del problema relajado (zPR ) sirve como una cota
para el problema original.
Nelson Devia C. Programación Entera
Introducción
Relajación Lineal
Métodos de Plano Cortante
Cortes de Gomory
Algoritmo Branch & Bounds
⇒Plano
Cortante
Cortes de Gomory
Uno de los primeros algoritmos para problemas enteros lo propuso Gomory
(1958), usando información que entrega Simplex:
Sea (PR) un problema lineal en forma estándar que representa la
relajación de un problema entero:
(PR) mı́n z = c 0 x
Ax = b
x ≥ 0
Cortes de Gomory
Cortes de Gomory
Ejemplo:
Cortes de Gomory
Ejemplo: El problema relajado es el siguiente:
Cortes de Gomory
Ejemplo:
Cortes de Gomory
Ejemplo:
Cortes de Gomory
Cortes de Gomory
Cortes de Gomory
(PR1 ) mı́n z = x1 − 2x2
−4x1 + 6x2 + x3 = 9
x1 + x2 + x4 = 4
x2 + x5 = 2
x1 , x2 , x3 , x4 , x5 ≥ 0
Del mismo modo que en el caso anterior, se tiene que una de las
restricciones activas en el óptimo de (PR1 ) es:
1 6 3
x1∗ − · x3∗ + · x5∗ =
4 4 4
Luego:
1 6 3
x1∗ − x3∗ + x5∗ ≤ ⇒ x1∗ + (−1)x3∗ + 1x5∗ ≤ 0 ⇒ x∗1 − x∗3 + x∗5 ≤ 0
4 4 4
Cortes de Gomory
Resolvemos la relajación
lineal de (P):
(P0 ) mı́n z = x1 − 2x2
−4x1 + 6x2 ≤ 9
x1 + x2 ≤ 4
x1 , x2 ≥ 0
Se obtiene que:
xP∗0 = 1,5 2,5
zP0 = −3,5
Elegimos una variable no
entera para ramificar: x1
Resolvemos la relajación
lineal de (P):
(P0 ) mı́n z = x1 − 2x2
−4x1 + 6x2 ≤ 9
x1 + x2 ≤ 4
x1 , x2 ≥ 0
Se obtiene que:
xP∗0 = 1,5 2,5
zP0 = −3,5
Elegimos una variable no
entera para ramificar: x1
Resolvemos (P1 ):
(P1 ) mı́n z = x1 − 2x2
−4x1 + 6x2 ≤ 9
x1 + x2 ≤ 4
x1 ≤ 1
x1 , x2 ≥ 0
Se obtiene que:
xP∗1 = 1 2,16
zP1 = −3.3
Elegimos una variable no
entera para ramificar: x2
Resolvemos (P1 ):
(P1 ) mı́n z = x1 − 2x2
−4x1 + 6x2 ≤ 9
x1 + x2 ≤ 4
x1 ≤ 1
x1 , x2 ≥ 0
Se obtiene que:
xP∗1 = 1 2,16
zP1 = −3.3
Elegimos una variable no
entera para ramificar: x2
Resolvemos (P3 ):
(P3 ) mı́n z = x1 − 2x2
−4x1 + 6x2 ≤ 9
x1 + x2 ≤ 4
x1 ≤ 1
x2 ≤ 2
x1 , x2 ≥ 0
Se obtiene que:
xP∗3 = 0,75 2
zP3 = −3,25
Elegimos una variable no
entera para ramificar: x1
Resolvemos (P3 ):
(P3 ) mı́n z = x1 − 2x2
−4x1 + 6x2 ≤ 9
x1 + x2 ≤ 4
x1 ≤ 1
x2 ≤ 2
x1 , x2 ≥ 0
Se obtiene que:
xP∗3 = 0,75 2
zP3 = −3,25
Elegimos una variable no
entera para ramificar: x1
Se obtiene que:
xP∗5 = 0 1,5
zP5 = −3
Elegimos una variable no
entera para ramificar: x2
Se obtiene que:
xP∗5 = 0 1,5
zP5 = −3
Elegimos una variable no
entera para ramificar: x2
zP7 = −2
Como se tiene que
xP∗7 ∈ Z2+ se detiene la
ramificación y se actualiza
el incumbente Z = −2.
Nelson Devia C. Programación Entera
Introducción
Relajación Lineal
Métodos de Plano Cortante
Cortes de Gomory
Algoritmo Branch & Bounds
zP7 = −2
Como se tiene que
xP∗7 ∈ Z2+ se detiene la
ramificación y se actualiza
el incumbente Z = −2.
Nelson Devia C. Programación Entera
Introducción
Relajación Lineal
Métodos de Plano Cortante
Cortes de Gomory
Algoritmo Branch & Bounds
Resolvemos (P8 ):
(P8 ) mı́n z = x1 − 2x2
−4x1 + 6x2 ≤ 9
x1 + x2 ≤ 4
x1 ≤ 1
x2 ≤ 2
x1 ≤ 0
x2 ≥ 2
x1 , x2 ≥ 0
Se obtiene un problema
infactible, por lo que se
detiene la ramificación.
Resolvemos (P8 ):
(P8 ) mı́n z = x1 − 2x2
−4x1 + 6x2 ≤ 9
x1 + x2 ≤ 4
x1 ≤ 1
x2 ≤ 2
x1 ≤ 0
x2 ≥ 2
x1 , x2 ≥ 0
Se obtiene un problema
infactible, por lo que se
detiene la ramificación.
zP6 = −3
Como se tiene que
xP∗6 ∈ Z2+ se detiene la
ramificación y se actualiza
el incumbente Z = −3.
zP6 = −3
Como se tiene que
xP∗6 ∈ Z2+ se detiene la
ramificación y se actualiza
el incumbente Z = −3.
Resolvemos (P4 ):
(P4 ) mı́n z = x1 − 2x2
−4x1 + 6x2 ≤ 9
x1 + x2 ≤ 4
x1 ≤ 1
x2 ≥ 3
x1 , x2 ≥ 0
Se obtiene un problema
infactible, por lo que se
detiene la ramificación.
Resolvemos (P4 ):
(P4 ) mı́n z = x1 − 2x2
−4x1 + 6x2 ≤ 9
x1 + x2 ≤ 4
x1 ≤ 1
x2 ≥ 3
x1 , x2 ≥ 0
Se obtiene un problema
infactible, por lo que se
detiene la ramificación.
Se obtiene que:
xP∗2 = 2 2
zP2 = −2
Como se tiene que
zP∗2 > Z = −3 se detiene la
ramificación, ya que
cualquier subproblema de
(P2 ) tendrá una solución
mayor o igual a zP∗2 .
Se obtiene que:
xP∗2 = 2 2
zP2 = −2
Como se tiene que
zP∗2 > Z = −3 se detiene la
ramificación, ya que
cualquier subproblema de
(P2 ) tendrá una solución
mayor o igual a zP∗2 .
Como no quedan
problemas por resolver se
tiene que el óptimo de
(P) es el incumbente
Z = −3, generado por el
nodo P6 :
x∗ = 1 2
z ∗ = −3
Como no quedan
problemas por resolver se
tiene que el óptimo de
(P) es el incumbente
Z = −3, generado por el
nodo P6 :
x∗ = 1 2
z ∗ = −3