Vous êtes sur la page 1sur 27

Prof. Ing. Claudio L. R.

Sturla

REPÚBLICA ARGENTINA

PROGRAMACIÓN LINEAL
ENTERA
Se puede reproducir libremente. Se agradecerá citar la fuente.
THE RECORDING, COPYING, LOAN, UNAUTHORIZED HIRE, PUBLIC SHOWING OR
BROADCAST OF THIS DATAGRAM IS STRONGLY ENCOURAGED.

Claudio L. R. Sturla
 Bibliografía:

 Hillier, Frederick S. y Lieberman, Gerald J. Introducción a la Investigación de Operaciones, 3ª


edición en Castellano, McGraw Hill de México S. A. de C. V., Naucalpan de Juárez, 1.993, ISBN
968-422-993-3.
 Munier, Nolberto J., Aplicaciones de la Programación Lineal, Editorial Astrea, Buenos Aires.
 Taha, Amdy A., Investigación de Operaciones, una Introducción, Sexta Edición, Prentice Hall,
México, 1.998, ISBN 970-17-0166-6.
 Winston, Wayne L., Investigación de Operaciones, Grupo Editorial Iberoamérica S. A. de C. V.,
México, ISBN 970-625-029-8, 1.994.

Sitios Internet
http://mat.gsia.cmu.edu/orclass/integer/integer.html

Aplicación Ilustrativa
Se están evaluando cinco proyectos a lo largo de un horizonte de planificación de tres años.
La tabla proporciona las utilidades esperadas para cada proyecto y los egresos anuales asociados:

Egresos (millones de de UM anuales)


Utilidades
Proyecto 1 2 3
(millones de UM)
1 5 1 8 20
2 4 7 10 40
3 3 9 2 20
4 7 4 1 15
5 8 6 10 30
Fondos disponibles
25 25 25
(millones de UM)

Determinar los proyectos que se van a realizar a lo largo de un horizonte de tres años.
El problema se reduce a una decisión “sí-no” para cada proyecto.
Definamos la variable binaria x j como:

399106110.doc 196
Prof. Ing. Claudio L. R. Sturla

1, el proyecto j es seleccionado


xj  
0, el proyecto j no es seleccionado
Por lo tanto nuestro problema de programación lineal entera es:

Maximizar Z  20 x1  40 x 2  20 x3  15 x 4  30 x5
Sujeto a:

5 x1  4 x2  3 x3  7 x4  8 x5  25

 x1  7 x2  9 x3  4 x4  6 x5  25
8 x  10 x  2 x  x  10 x  25
 1 2 3 4 5

con

0
xj   j
1
La solución entera óptima con WinQSB® es:

399106110.doc 197
Prof. Ing. Claudio L. R. Sturla

Ejemplo N° 1
Supóngase que deseamos invertir 14.000 UM
Hemos identificado cuatro oportunidades de inversión.
La 1 requiere un inversión de 5.000 UM y tiene un VAN de 8.000 UM; la 2 requiere 5.000 UM y un
VAN de 11.000 UM; la 3 requiere 4.000 UM y tiene un VAN de 6.000 UM y la 4 requiere 3.000 UM
con un VAN de 4.000 UM
¿Dónde deberíamos colocar nuestro dinero para maximizar nuestro VAN total?

Maximizar
8 x1  11 x 2  6 x3  4 x 4
sujeto a
5 x1  7 x 2  4 x3  3 x 4  14
xi   0, 1 j  1,  ,4
La resolución de la relajación programación lineal de este problema es:

8 11 6 4 0 0 0 0 0
ck Base P0 P1 P2 P3 P4 P5 P6 P7 P8 P9 
0 P5 14 5 7 4 3 1 0 0 0 0 2
0 P6 1 1 0 0 0 0 1 0 0 0 
0 P7 1 0 1 0 0 0 0 1 0 0 1
0 P8 1 0 0 1 0 0 0 0 1 0 
399106110.doc 198
Prof. Ing. Claudio L. R. Sturla

0 P9 1 0 0 0 0 0 0 0 0 1 
0 -8 -11 -6 -4 0 0 0 0 0

0 P5 7 5 0 4 3 1 0 0 0 0 7/5
0 P6 1 1 0 0 0 0 1 0 0 0 1
11 P2 1 0 1 0 0 0 0 1 0 0 
0 P8 1 0 0 1 0 0 0 0 1 0 
0 P9 1 0 0 0 1 0 0 0 0 1 
11 -8 0 -6 -4 0 0 11 0 0

0 P5 2 0 0 4 3 1 -5 0 0 0 1/2
8 P1 1 1 0 0 0 0 1 0 0 0 
11 P2 1 0 1 0 0 0 0 1 0 0 
0 P8 1 0 0 1 0 0 0 0 1 0 1
0 P9 1 0 0 0 1 0 0 0 0 1 
19 0 0 -6 -4 0 8 11 0 0

6 P3 1/2 0 0 1 ¾ ¼ -5/4 0 0 0
8 P1 1 1 0 0 0 0 1 0 0 0
11 P2 1 0 1 0 0 0 0 1 0 0
0 P8 ½ 0 0 0 -3/4 -1/4 5/4 0 1 0
0 P9 1 0 0 0 1 0 0 0 0 1
22 0 0 0 ½ 3/2 ½ 11 0 0

x1  1
x2  2
x3  1 / 2
x4  0

Problema N° 2
Tenemos una mochila de capacidad 14.
Existen itemes (aquí 4) cada uno de los cuales tiene un tamaño y un valor.
El itm 1 requiere 5 unidades de espacio y da un valor de 11; la 2 ocupa 5 y un valor de 11; la 3 ocupa 4
y un valor 6 y la 4 ocupa 3 con un valor de 4.

Dicho simplemente, un problema de programación entera es un problema de programación lineal en el


cual algunas de las variables, o todas, tienen que ser números enteros no negativos.
Veremos que encontramos que se pueden formular muchas situaciones de la vida real mediante la
programación entera.
Desafortunadamente, también veremos que normalmente los problemas de programación entera son más
difíciles de resolver que los de programación lineal.

Un problema de programación entera en el cual todas las variables tienen que ser números enteros, se
llama un problema de programación entera pura. Por ejemplo,

max z  3 x1  2 x 2
(1)
s.a. x1  x 2  6
x1 , x 2  0 ; x1 , x 2 entero

es un problema de programación entera pura.


399106110.doc 199
Prof. Ing. Claudio L. R. Sturla

Un problema de programación entera en el cual solamente algunas de las variables tienen que ser nú-
meros enteros, se llama un problema de programación entera mixta. Por ejemplo,

max z  3 x1  2 x 2
s.a. x1  x 2  6
x1 , x2  0 ; x1 entero

es un problema de programación entera mixta (x2 no tiene que ser un número entero).
Un problema de programación entera en el cual todas las variables deben ser iguales a 0 ó a 1, se llama
un problema de programación entera 0—1 (algunos le llaman programación lineal binaria).

DEFINICIÓN: El problema de programación lineal que se obtiene al omitir todas las res-
tricciones enteras o 0-1 para las variables, se llama la relajación programación lineal para
la programación entera.

Por ejemplo, la relajación programación lineal de (1) es:

max z  3 x1  2 x2
s.a. x1  x2  6
x1 , x2  0

Se puede considerar cualquier problema de programación entera como la relajación programación lineal
más algunas otras restricciones (las restricciones que indican cuáles variables tienen que ser enteras o
iguales a 0 ó a 1).
Por lo tanto, la relajación programación lineal es una versión menos restringida, o más relajada, de la
programación entera.
Esto significa que la región factible para cualquier programación entera tiene que estar incluida en la
región factible de la relajación programación lineal correspondiente.
Para cualquier programación entera que es un problema de maximización, esto implica que:

El valor óptimo de z para la relajación programación lineal >= al valor óptimo de z para el problema de
programación entera (2)

Este resultado será de importancia cuando se analice la solución de problemas de programación entera.
Para esclarecer más las propiedades de los problemas de programación veamos el sencillo problema si-
guiente:

max z  21 x1  11 x2
s.a. 7 x1  4 x2  13 (3)
x1 , x2  0 ; x1 , x2 entero

En el gráfico se observa que la región factible para este problema está formada por el conjunto de
puntos:

S = {(0,0), (0,1), (0,2), (0,3), (1,0), (1,1)}

A diferencia de la región factible para cualquier problema de programación lineal, la región factible para
(3) no es un conjunto convexo.
Mediante un simple cálculo y la comparación de los valores de z para cada uno de los seis puntos de la
región factible,

399106110.doc 200
Prof. Ing. Claudio L. R. Sturla

Punto Valor de z  21 x1  11 x 2
0,0 0
0,1 11
0,2 22
0,3 33
1,0 21
1,1 32

se halla que la solución óptima para (3) es z = 33, x1 = 0, x2 = 3.

Si la región factible para la relajación programación lineal de un problema de programación entera pura
es acotada, como en (3), la región factible de la programación entera estará formada por un número
finito de puntos.
En teoría, se podría resolver este problema enumerando los valores de z para cada punto factible, como
se describió en el párrafo anterior, y determinar el punto factible que tiene el mayor valor de z.
El problema con este método (como podría haber dicho el Dr. Carl Sagan) es que mayoría de los pro -
blemas de programación entera reales tienen regiones factibles que consisten en billones y billones de
puntos factibles.
En tales casos, una enumeración completa de todos los puntos factibles consumiría mucho tiempo de
computadora.
Pero a menudo se resuelven los problemas de programación entera mediante una enumeración inteli-
gente de todos los puntos en la región factible.
Un estudio complementario de (3) esclarece algunas otras propiedades interesantes de los problemas de
programación entera.
Supóngase que un analista ingenuo sugiere el método siguiente para resolver un problema de progra-
mación entera: Primero resuelva la relajación programación lineal; después redondee (hasta el entero

399106110.doc 201
Prof. Ing. Claudio L. R. Sturla

más cercano) cada variable que debe ser un número entero y que tiene un valor fraccionario en la solu-
ción óptima de la relajación programación lineal.
Cuando se aplica este método a (3), se obtiene primero la solución óptima de la relajación de progra -
mación lineal

x1  1,8571 ; x2  0

El redondeo de esta solución proporciona la solución

x1  2 ; x 2  0

como una posible solución óptima para (3).


Sin embargo, esta solución no es factible para (3) y, por lo tanto, no puede ser de ninguna manera una
solución óptima.
Aun si se redondea xi hacia abajo (produciendo la posible solución x1  1 ; x2  0 ), no se obtiene la
solución óptima.
Para algunos problemas de programación entera, incluso puede resultar que cada redondeo de la solu-
ción óptima de la relajación programación lineal no es factible para el problema de la programación
entera.
Para ver esto, considérese el siguiente problema de programación entera:
(GRAFICAR PORQUE SINÓ NO SE VE)
max z  4 x1  x 2
s.a. 2 x1  x2  5
2 x1  3 x2  5
x1 , x 2  0 ; x1 , x2 entero

La solución óptima para la relajación programación lineal de esta programación entera es

z  10 ; x1  2,5 ; x 2  0

La solución gráfica es:

399106110.doc 202
Prof. Ing. Claudio L. R. Sturla

El redondeo de esta solución proporciona como solución posible

x1  2 ; x 2  0 ó x1  3 ; x2  0

Ninguno de los dos candidatos es una solución factible para la programación entera.
Recuérdese que el algoritmo simplex permitía resolver los problemas de programación lineal yendo de
una solución básica factible a una mejor.
También recuérdese que, en la mayoría de los casos, el algoritmo simplex examina solamente una pe-
queña fracción de todas las soluciones básicas antes de encontrar la solución óptima.
Esta propiedad del algoritmo simplex permite resolver un problema de programación lineal relativa-
mente grande mediante una cantidad pequeña de cálculos.
De manera análoga al algoritmo simplex, se podría esperar resolver uno de programación entera me-
diante un algoritmo que pasara de una solución entera factible a una solución entera mejor.
Por desgracia no se conoce tal algoritmo.

Otro problema de programación entera


En esta sección se mostrará cómo se puede formular situaciones prácticas como problemas de progra-
mación entera.
Este ejemplo es un problema de presupuesto de capital similar al problema de la Star Oil, que hemos
visto en programación lineal genérica.

Ejemplo N° 3
Una empresa considera cuatro inversiones.
La inversión 1 proporcionará un valor actual neto (VAN) de 16.000 UM; la inversión 2 un VAN de
22.000 UM; la inversión 3 un VAN de 12.000 UM; y la inversión 4 un VAN de 8.000 UM.

399106110.doc 203
Prof. Ing. Claudio L. R. Sturla

Cada inversión requiere la del momento actual: la inversión 1, 5.000 UM; la inversión 2, 7.000 UM; la
inversión 3, 4.000 UM; y la inversión 4, 3.000 UM respectivamente.
Se dispone de 14 000 UM para la inversión.
Formule un problema de programación lineal entera cuya solución nos dirá cómo maximizar el VAN
obtenido de las inversiones 1, 2, 3 y 4.
SOLUCIÓN
Como en las formulaciones de los problemas de programación lineal, comenzamos con la definición de
una variable para cada decisión que se debe tomar.
Esto lleva a definir una variable 0-1:

1si se realiza la inversión j


x j  j  1, 2,3, 4  
0 de otra manera
Por ejemplo, x2 = 1 si se realiza la inversión 2, y x2 = 0 si no se realiza.
El VAN obtenido por Stockco (en miles de UM) es

VAN total obtenido por Stockco = 16 x1  22 x 2  12 x3  8 x 4 (4)

Por ejemplo, si Stockco invierte en las inversiones 1 y 4, se obtendrá un VAN de 16.000 + 8.000 =
24.000 UM.
Esto implica que la función objetivo para Stockco es

max z  16 x1  22 x 2  12 x3  8 x 4 (5)

La empresa se enfrenta a la restricción de que se puede invertir como máximo 14.000 UM.
Es posible mostrar, mediante el mismo razonamiento utilizado para desarrollar (4), que

Cautidad total invertida (en miles de UM) = 5 x1  7 x 2  4 x3  3 x 4 (6)

Ya que se pueden invertir 14.000 UM, se debe satisfacer

5 x1  7 x2  4 x3  3 x4  14 (7)

Al combinar (5) y (7) con las restricciones x j  0 ó 1  j  1, 2, 3, 4  , se tiene el siguiente problema de


programación entera 0-1:

max z 16 x1  22 x 2  12 x3  8 x 4
s.a. 5 x1  7 x 2  4 x3  3 x 4  14 (8)
x j  0 ó 1  j  1, 2, 3, 4 

Problemas de cobertura de conjuntos


El siguiente ejemplo es típico para una clase importante de problemas de programación entera, conoci-
dos como problemas de cobertura de conjuntos.

Ejemplo N° 4
Hay seis ciudades (ciudades 1–6) en el Municipio de Florencio Varela.
El municipio debe determinar en qué lugar construir cuarteles de bomberos.

399106110.doc 204
Prof. Ing. Claudio L. R. Sturla

El municipio quiere construir una cantidad mínima de cuarteles de bomberos para asegurar que por lo
menos un cuartel esté dentro de 15 minutos (tiempo de viaje) de cada ciudad.
En la tabla se muestran los tiempos requeridos (en minutos) para viajar entre las ciudades del municipio.
Formule un problema de programación entera, que indique cuántas estaciones de bomberos habría que
construir y en dónde.

Tiempo requerido para viajar entre ciudades en el condado de Kilroy

HACIA
DE Ciudad 1 Ciudad 2 Ciudad 3 Ciudad 4 Ciudad 5 Ciudad 6
Ciudad 1 0 10 20 30 30 20
Ciudad 2 10 0 25 35 20 10
Ciudad 3 20 25 0 15 30 20
Ciudad4 30 35 15 0 15 25
Ciudad 5 30 20 30 15 0 14
Ciudad 6 20 10 20 25 14 0

Solución

Para cada ciudad, el municipio debe determinar si se construye una estación de bomberos en esa ciudad
o no. Se definen las variables 0-1 x1 , x 2 , x3 , x 4 , x5 y x6 como

1 si se construye una estación de bomberos en la ciudad i


xj  
0 si no es así
Entonces el número total de estaciones de bomberos que se construyen está dado por x1 + x2 + x3 + x4 +
x5 + x6, y la función objetivo del municipio es minimizar

z  x1  x 2  x3  x4  x5  x6

¿Cuáles son las restricciones del municipio?


El Municipio de Florencio Varela tiene que asegurarse de que haya una estación de bomberos dentro de
15 minutos de cada ciudad.
La tabla indica las localidades que pueden comunicarse con la ciudad en 15 minutos o menos.

Ciudad 1 1, 2
Ciudad 2 1, 2, 6
Ciudad 3 3, 4
Ciudad 4 3, 4, 5
Ciudad 5 4, 5, 6
Ciudad 6 2, 5, 6

Para asegurarse de que por lo menos una estación de bomberos esté dentro de 15 minutos de la ciudad
1, añadimos la restricción

x1  x 2  1 (Restricción de la ciudad 1)

Esta restricción asegura que es imposible que x1 = x2 = 0, así que por lo menos una estación de bomberos
se construirá dentro de 15 minutos de la ciudad 1.
De manera similar, la restricción
399106110.doc 205
Prof. Ing. Claudio L. R. Sturla

x1  x 2  x6  1 (Restricción de la ciudad 2)

asegura que por lo menos una estación de bomberos se ubicará dentro de 15 minutos de la ciudad 2.
De manera similar, se obtienen las restricciones para las ciudades 3-6.
Al combinar estas seis restricciones con la función objetivo (y con el hecho de que cada variable debe ser
igual a 0 ó 1), se obtiene el siguiente problema de programación entera 0-1:

min z  x1  x2  x3  x 4  x5  x6
s.a. x1  x 2 1
x1  x2 x6  1
x3  x 4 1
x3  x 4  x5 1
x 4  x5  x 6  1
x2  x5  x 6  1

x j  0 ó 1  j  1, 2, 3, 4, 5, 6 

Una solución óptima para este problema de programación lineal es:

z  2 ; x 2  x4  1 ; x1  x3  x5  x6  0

Así, el Municipio de Florencio Varela puede construir dos estaciones de bomberos: una en la ciudad 2 y
una en la ciudad 4.
  

Ejemplo N° 5
Considérese el siguiente problema de ubicación.
Una ciudad está revisando la ubicación de sus comisarías.
La ciudad está constituida por una serie de barrios, como muestra la figura.

399106110.doc 206
Prof. Ing. Claudio L. R. Sturla

Los ejemplos representan una clase de problemas de la programación entera conocidos como problemas
de cobertura de conjuntos.
En un problema de cobertura de conjuntos, se debe "cubrir" cada miembro de un conjunto dado (llámelo
Conjunto 1) mediante un miembro aceptable de algún conjunto (llámelo Conjunto 2).
El objetivo en un problema de cobertura de conjuntos es minimizar el número de elementos del Con-
junto 2 que se necesitan para cubrir todos los elementos del Conjunto 1.
En el ejemplo, el Conjunto 1 está formado por las ciudades del Municipio de Florencio Varela y el
Conjunto 2 está formado por las estaciones de bomberos.
La estación en la ciudad 2 cubre las ciudades 1, 2, y 6; la estación 4 cubre las ciudades 3, 4, y 5.
Los problemas de cobertura de conjuntos tienen muchas aplicaciones en áreas como la programación de
las tripulaciones de aerolíneas, la división en distritos políticos, la programación de aerolíneas y la
programación de rutas de camiones.

Resolución de problemas de programación entera pura mediante el método


de ramificar y acotar (branch and bound)
En la práctica, la mayoría de los problemas de programación entera se resuelven mediante el uso de la
técnica de ramificar y acotar.
Los métodos de ramificar y acotar encuentran la solución óptima para un problema de programación
entera mediante la enumeración eficiente de los puntos en la región factible de un subproblema.
Antes de explicar cómo funciona la ramificación y el acotamiento, es necesario hacer la siguiente ob-
servación elemental, pero importante: si resuelve la relajación de programación lineal de una progra-
mación entera pura y obtiene una solución en la cual todas las variables son números enteros,
entonces la solución óptima de la relajación de programación lineal será también la solución óptima
de programación entera.
Para darse cuenta de la validez de esta observación, considérese el siguiente problema de programación
entera:

máx z  3 x1  2 x 2
s.a. 2 x1  x 2  6
x1 , x 2  0 ; x1 , x 2 entero

La solución óptima para la relajación programación lineal para esta programación entera pura es

x1  0 ; x 2  6 ; z  12

Ya que esta solución da valores enteros a cada variable, la observación anterior implica que

x1  0 ; x 2  6 ; z  12

también es la solución óptima para el problema de programación entera.


Obsérvese que la región factible para la programación entera es un subconjunto de todos los puntos en
la región factible de la relajación programación lineal.
Véase el gráfico

399106110.doc 207
Prof. Ing. Claudio L. R. Sturla

Así, el valor óptimo de z para la programación entera no puede ser mayor que el valor óptimo de z para
la relajación programación lineal.
Esto significa que el valor óptimo de z para la programación entera debe ser

z  12

Pero el punto x1  0 ; x 2  6 ; z  12 es factible para la programación entera y tiene z  12


Por lo tanto x1  0 ; x 2  6 ; z  12 debe ser óptimo para la programación entera
Ejemplo N° 6
La Telfa Corporation fabrica mesas y sillas.
Una mesa requiere 1 hora de trabajo y 9 pies de madera, y una silla necesita 1 hora de trabajo y 5 pies de
madera.
Actualmente se dispone de 6 horas de trabajo y 45 pies de madera.
Cada mesa contribuye con 8 UM a la utilidad, y cada silla contribuye con 5 UM.
Formule y resuelva un problema de programación lineal entera para maximizar la utilidad de Telfa.

Sean

x1 = número de mesas fabricadas


x2 = número de sillas fabricadas

Ya que x1 y x2 deben ser enteros, Telfa quiere resolver el siguiente problema de programación lineal
entera:

máx z  8 x1  5 x 2
s.a. x1  x 2  6 (restricción de trabajo)
9 x1  5 x 2  45 (restricción de madera)
x1 , x2  0 ; x1 , x2 enteros

399106110.doc 208
Prof. Ing. Claudio L. R. Sturla

El método de ramificar y acotar empieza por resolver la relajación programación lineal de la progra-
mación entera.
Si todas las variables de decisión toman valores enteros en la solución óptima de la relajación progra -
mación lineal, entonces la solución óptima para la relajación programación lineal será también la solu-
ción óptima para la programación entera.
Llamamos a la relajación programación lineal, subproblema 1.
Desafortunadamente, la solución óptima para la relajación programación lineal es

399106110.doc 209
Prof. Ing. Claudio L. R. Sturla

165 15 9
z ; x1   3,75 ; x 2   2,25
4 4 4

399106110.doc 210
Prof. Ing. Claudio L. R. Sturla

Sabemos que

valor óptimo de z para el problema de programación entera <= valor óptimo de z para la relajación
programación lineal

Esto significa que el valor óptimo de z para la programación entera no puede ser mayor que
165
 41,25
4
O sea que el valor óptimo para la relajación programación lineal es una cota superior para las utilidades
de Telfa.
El siguiente paso es dividir la región factible de la relajación programación lineal en un intento por
obtener más información acerca de la ubicación de la solución óptima para la programación entera.
Elegimos arbitrariamente una variable que es una fracción en la solución óptima para la relajación pro-
gramación lineal (por ejemplo x1 ).
Ahora obsérvese que cada punto en la región factible para la programación entera tiene que tener
x1  3 , o bien, x1  4 (¿Por qué no puede tener una solución factible para la programación entera

3 x1  4 ?).

Con esto en mente, "ramificamos" con respecto a la variable x1 y creamos los siguientes dos subpro-
blemas:

399106110.doc 211
Prof. Ing. Claudio L. R. Sturla

Subproblema 2 = Subproblema 1 + la restricción x1  4


Subproblema 3 = Subproblema 1 + la restricción x1  3

15
Obsérvese que ni el subproblema 2, ni el subproblema 3 incluyen puntos con x1 
4
Esto significa que la solución óptima para la relajación programación lineal no puede volver a aparecer
cuando resolvemos el subproblema 2 o el subproblema 3.
En el gráfico se observa que se incluyen todos los puntos en la región factible para la programación
entera de Telfa, en la región factible para el subproblema 2 o para el subproblema 3.
También observamos que las regiones factibles para los subproblemas 2 y 3 no tienen puntos en común.

Ya que se generaron los subproblemas 2 y 3 agregando restricciones en las que interviene x1 , decimos
que se crearon los subproblemas 2 y 3 mediante la ramificación con respecto a x1
Elegimos ahora cualquier subproblema que no se ha resuelto todavía como uno de programación lineal.
Arbitrariamente elegimos resolver el subproblema 2.

En el gráfico anterior vemos que la solución óptima para el subproblema 2 es

9
z  41 ; x1  4 , x 2   1,8
5

El punto C.

399106110.doc 212
Prof. Ing. Claudio L. R. Sturla

En el gráfico se resume lo ejecutado hasta ahora.


Por ejemplo, el subproblema 3 es:

Subproblema 1
165
z
4
t1 15
x1 
4
9
x2 
4

x1  4 x1  3

Subproblema 2
z  41
x1  4 Subproblema 3
9
x2 
5

La representación de todos los subproblemas que se han creado se llama árbol.


Cada subproblema es un nodo del árbol, y cada línea que une dos nodos del árbol se llama arco.

399106110.doc 213
Prof. Ing. Claudio L. R. Sturla

Las restricciones asociadas a cualquier nodo del árbol son las restricciones para la relajación progra-
mación lineal más las restricciones asociadas a los arcos que llevan del subproblema 1 al nodo.
Como la solución óptima para el subproblema 2 no proporcionó una solución con enteros puros, elegi-
mos utilizar el subproblema 2 para crear dos nuevos subproblemas.
Elegimos una variable con un valor fraccionario en la solución óptima para el subproblema 2 y después
ramificamos respecto a esta variable.
Como x 2 es la única variable fraccionaria en la solución óptima del subproblema 2, ramificamos con
respecto a x 2
Dividimos la región factible para el subproblema 2 en dos partes, que corresponden a los puntos con
x 2  2 y x 2  1 , respectivamente.
Así se crean los siguientes dos subproblemas:

Subproblema 4 = Subproblema 1 + las restricciones x1  4 y x 2  2 = subproblema 2 + la restricción


x2  2
Subproblema 5 = Subproblema 1 + las restricciones x1  4 y x 2  1 = subproblema 2 + la restricción
x2  1 .

Las regiones factibles para los subproblemas 4 y 5, se muestran en el gráfico siguiente:

El subconjunto de subproblemas no resueltos consta de los subproblemas 3, 4 y 5.


Ahora elegimos un subproblema para resolverlo.
Por razones que discutiremos más adelante, seleccionamos resolver el subproblema creado más re-
cientemente para resolverlo. (Esto se llama la regla LIFO, del inglés 1ast in flrst out.).
La regla LIFO señala que tendríamos que resolver ahora el subproblema 4 ó 5.
Elegimos arbitrariamente resolver el subproblema 4.
En el gráfico observamos que el subproblema 4 no es factible.

399106110.doc 214
Prof. Ing. Claudio L. R. Sturla

Por lo tanto, el subproblema 4 no puede proporcionar la solución óptima para el problema de progra-
mación entera.
Para indicar este hecho, colocamos una x junto al subproblema 4 (Ver árbol).

Como cualquiera rama que sale del subproblema 4 no proporcionará información útil, es inútil crear
cualquier rama que salga del subproblema 4.
Cuando una ramificación adicional respecto a un subproblema no proporciona información útil, decimos
que el subproblema (o el nodo) está agotado.
Ahora los únicos subproblemas sin resolver son los subproblemas 3 y 5.
La regla LIFO señala que habría que resolver ahora el subproblema 5.
En el gráfico de ejes cartesianos ortogonales observamos que la solución óptima para el subproblema 5
es el punto I

365 40
z ; x1  ; x2  1
9 9

Esta solución no proporciona inmediatamente información útil; por lo tanto, elegimos dividir la región
factible del subproblema 5 mediante la ramificación respecto a la variable fraccionaria x1

399106110.doc 215
Prof. Ing. Claudio L. R. Sturla

Esto proporciona dos nuevos subproblemas como se muestra en el gráfico:

Subproblema 6 = Subproblema 5 + la restricción x1  5


Subproblema 7 = Subproblema 5 + la restricción x1  4

Juntos, los subproblemas 6 y 7 abarcan todos los puntos enteros en la región factible del subproblema 5.
40
También, ningún punto con x1  puede estar en la región factible para el subproblema 6 o para el
9
subproblema 7.
La solución óptima para el subproblema 5 no volverá a aparecer cuando resolvamos los subproblemas 6
y 7.

399106110.doc 216
Prof. Ing. Claudio L. R. Sturla

Nuestro árbol tiene ahora el siguiente aspecto:

Ahora los subproblemas 3, 6 y 7 quedan sin resolver.


La regla LIFO señala que ahora tenemos que resolver el subproblema 6 o el subproblema 7.
Elegimos arbitrariamente, resolver el subproblema 7.
Del gráfico observamos que solución óptima para el subproblema 7 es el punto H

z  37 ; x1  4 ; x 2  1

Como tanto x1 como x 2 toman valores enteros, esta solución es factible para el problema original de
programación entera.
Una solución que se obtiene resolviendo un subproblema en el cual todas las variables tienen valores
enteros, es una solución candidato.
Como la solución candidato puede ser óptima, tenemos que conservar una solución candidato hasta en-
contrar una mejor solución factible para la programación entera (si la hay).
Tenemos una solución factible para la programación entera original, con z = 37; por lo tanto, se puede
concluir que el valor óptimo de z para la programación entera es  37
Así, el valor de z para la solución candidato es una cota inferior para el valor óptimo de z en la progra-
mación entera original.
Indicamos esto colocando la notación LB = 37 (LB = lower bound) en el cuadrito correspondiente al
siguiente subproblema por resolver.
Vea el árbol.

399106110.doc 217
Prof. Ing. Claudio L. R. Sturla

Sabemos ahora que el subproblema 7 proporciona una solución entera factible, con z = 37
También sabemos que el subproblema 7 no puede proporcionar una solución entera factible con z  37
Así, otra ramificación con respecto al subproblema 7 no proporcionará información nueva acerca de la
solución óptima para la programación entera, y subproblema se ha agotado.
El árbol hasta ahora es:

399106110.doc 218
Prof. Ing. Claudio L. R. Sturla

Los únicos subproblemas que quedan por resolver, son los subproblemas 6 y 3.
Según la regla LIFO, tenemos que resolver ahora el subproblema 6.
En el último gráfico vemos que la solución óptima para el subproblema 6 es el punto A:

z  40 ; x1  5 ; x 2  0

Como todas las variables de decisión tienen valores enteros, la solución del subproblema 6 es una solu-
ción candidato.
Dicha solución candidato tiene un valor de z de 40, que es mayor que el valor de z de la mejor solución
candidato anterior (el candidato 7, con z = 37).
O sea, el subproblema 7 no puede proporcionar la solución óptima para la programación entera (seña-
lamos este hecho colocando una X al lado del subproblema 7).
También actualizamos nuestra LB hasta 40.
Se indica el árbol.

399106110.doc 219
Prof. Ing. Claudio L. R. Sturla

Solamente queda el subproblema 3 por resolver.


Del segundo gráfico del problema, se obtiene que la solución óptima para el subproblema 3 es el punto
F:

z  39 ; x1  x 2  3

Ya que el subproblema 3 no puede proporcionar un valor de z mayor que la cota inferior actual de 40, el
subproblema 3 no puede proporcionar la solución óptima para la programación entera original.
Por lo tanto, colocamos una X al lado del subproblema 3.
En ese mismo árbol observamos que no quedan subproblemas por resolver y que sólo el subproblema 6
puede proporcionar la solución óptima para la programación entera.
Así, la solución óptima para la programación entera Telfa es fabricar 5 mesas y 0 sillas.
Esta solución contribuirá con 40 UM a las utilidades.

Aquí insertar el problema de página 21 del tutorial de Trick

Al utilizar el método de ramificar y acotar para resolver el problema de Telfa, hemos enumerado im-
plícitamente todos los puntos en la región factible de la programación entera.
Finalmente, se eliminan todos estos puntos (menos el punto correspondiente a la solución óptima) de la
consideración, y se termina el procedimiento de ramificar y acotar.
399106110.doc 220
Prof. Ing. Claudio L. R. Sturla

Para mostrar que en el procedimiento de ramificar y acotar realmente se consideran todos los puntos de
la región factible de la programación entera, examinamos varias soluciones posibles para el problema de
Telfa y mostramos cómo el procedimiento de ramificar y acotar consideró estos puntos como no
óptimos.
Por ejemplo, ¿cómo sabemos que x1  2 y x 2  3 no es óptimo?
Este punto está en la región factible para el subproblema 3, y sabemos que todos los puntos en la región
factible para el subproblema 3 tienen z  39
De esta manera el análisis del subproblema 3 muestra que x1  2 ; x 2  3 no puede vencer a z = 40 y
no puede ser óptimo.
Otro ejemplo es ¿por qué no es óptimo x1  4 ; x 2  2 ?
Siguiendo las ramas del árbol, encontramos que x1  4 ; x2  2 corresponde al subproblema 4.
Como ningún punto del subproblema 4 es factible, x1  4 ; x 2  2 no puede satisfacer las restricciones
de la programación entera original y, por lo tanto, no puede ser óptimo para el problema de Telfa.
De una manera similar, el análisis de ramificar y acotar ha eliminado todos los puntos x1 ; x 2 (menos
el punto que corresponde a la solución óptima) de la consideración.
Para el problema sencillo de Telfa, usar el método de ramificar y acotar puede parecer como si se utili-
zara un cañón para matar una mosca, pero para una programación entera en la cual la región factible
contiene un gran número de puntos enteros, el método de ramificar y acotar puede ser un método eficaz
para eliminar puntos no óptimos de la consideración.
Por ejemplo, suponga que aplicamos el método de ramificar y acotar y que el LB actual  42 .
Supóngase que resolvemos un subproblema que contiene 1 millón de puntos factibles para la progra-
mación entera.
Si la solución óptima para este subproblema tiene z < 42, ¡habremos eliminado 1 millón de puntos no
óptimos mediante la solución de uno sólo!
Los aspectos clave del método de ramificar y acotar para resolver problemas de programación entera
pura se pueden resumir de la manera siguiente:

Paso 1: Si no es necesario ramificar con respecto a un subproblema, éste se agotó. Las siguientes
tres situaciones llevan a un subproblema que se agota: (1) el subproblema no es factible.
(2) El subproblema proporciona una solución óptima en la cual todas las variables tienen
valores enteros. (3) El valor óptimo de z para el subproblema no es mayor (en un problema
de maximización) que la LB actual.
Paso 2: Se puede eliminar un subproblema de la consideración en las situaciones siguientes: (1)
el subproblema no es factible. En el problema de Telfa, el subproblema 4 se eliminó de la
consideración por esta razón. (2) La LB (que representa el valor de z para el mejor candi-
dato hasta ahora) es por lo menos tan grande como el valor de z para el subproblema. En el
problema de Telfa, se eliminaron los subproblemas 3 y 7 por esta razón.

Recuérdese que al resolver el problema de Telfa mediante el método de ramificar y acotar, se realizaron
muchas elecciones aparentemente arbitrarias.
Por ejemplo, cuando x1 y x 2 resultaron ser valores fraccionarios en la solución óptima subproblema 1,
¿cómo determinamos la variable para la ramificación?
O bien, ¿cómo determinamos qué subproblema resolver después?
La manera en la cual se contestan estas preguntas, puede proporcionar árboles que difieren mucho en
tamaño y en tiempo requerido por la computadora para obtener una solución óptima.
Mediante la experiencia y del ingenio, los usuarios del método de ramificar y acotar han ideado algunas
pautas para tomar las decisiones necesarias.
Se usan comúnmente dos procedimientos generales para determinar qué subproblema se tiene que re-
solver después.
Un procedimiento que se usa muchísimo es la regla LIFO, que elige resolver el subproblema creado más
recientemente.

399106110.doc 221
Prof. Ing. Claudio L. R. Sturla

LIFO nos baja por un lado del árbol de ramificar y acotar (como en el problema de Telfa) y rápidamente
encuentra una solución candidato.
Después regresamos subiendo hacia la raíz por el otro lado del árbol.
Por esta razón, el enfoque de LIFO se llama frecuentemente rastreo hacia atrás.
El segundo método que se usa comúnmente para determinar qué subproblema se tiene que resolver
después, se llama rastreo por brincos.
Cuando se ramifica respecto a un nodo, el procedimiento del rastreo por brincos resuelve todos los
problemas creados mediante la ramificación.
Después ramifica nuevamente respecto al nodo con el mejor valor de z
El rastreo por brincos pasa frecuentemente de un lado del árbol al otro.
Normalmente genera más subproblemas y requiere más memoria en la computadora que el rastreo hacia
atrás.
La base del rastreo por brincos es que el movimiento hacia los subproblemas con buenos valores de z,
nos debería llevar más rápidamente al mejor valor de z
Si dos o más variables son fraccionarias en la solución óptima de un subproblema, ¿con respecto a qué
variable tendríamos que ramificar?
Realizar la ramificación con respecto a la variable fraccionaria que tiene mayor importancia económica
es muchas veces la mejor estrategia.
Cuando más de una variable es fraccionaria en la solución de un subproblema, muchos programas de
cómputo ramificarán con respecto a la variable fraccionaria con la más baja numeración.
Así, si un programa de cómputo requiere la numeración de las variables, se tienen que numerar en el
orden de su importancia económica (1 = más importante, etc.).

La teoría del Profesor Michael Trick para ramificar es:


 Elegiremos un subproblema activo, o sea que no lo hemos elegido antes;
 Elegiremos el subproblema con el valor de solución mayor (si maximizamos).

Actualizado al 29/11/2.00
 D:\INVESTIGACIÓN OPERATIVA\FRBA PL ENTERA — Impreso el 9/10/2018

399106110.doc 222

Vous aimerez peut-être aussi