01a - Programacion Entera
01a - Programacion Entera
01a - Programacion Entera
INTRODUCCION
Un programa lineal entero es aquel en que algunas o todas las variables están restringidas a tener valores
enteros (o discretos), o incluso están más restringidas tomando exclusivamente los valores 0 ó 1. El
empleo de variables enteras hace más complejo el problema de programación lineal, debido a la ausencia
de continuidad. Si todas las variables de decisión deben ser enteras, tenemos un problema de
programación lineal entero puro (PE); si sólo algunas variables de decisión deben ser enteras, pudiendo
ser continuas las demás, se trata de un problema de programación lineal entero mixto (PEM).
Existen otras situaciones en la que todas o algunas de las variables enteras sólo pueden tomar valores de
0 ó 1 para encontrar una lógica adecuada y solucionar el problema. A estas variables se les llama variables
binarias.
Uno puede llegar a pensar que es más fácil encontrar la solución a un programa lineal entero que a uno
continuo, después de todo, el número de soluciones continuas es infinito mientras que en las enteras es
finito. Pero desafortunadamente no es así. Cuando se tiene un problema de dos variables se puede
encontrar la solución óptima entera muy fácil a partir de la solución óptima continua utilizando el
método gráfico y explorando las soluciones enteras cercanas dentro del área de soluciones factibles. Pero
resulta que en la vida real (o sea aquella que está más allá de los problemas introductorios de los textos
guías) los problemas muy pocas veces, tienen dos variables pues en un fenómeno por sencillo que sea
tendrá muchísimas variables relevantes dentro de su comportamiento y el modelo matemático entre más
se simplifique menos representativo será. Los problemas enteros son más difíciles de resolver que los
continuos, aún no existe un algoritmo que pueda resolverlos en forma consistente; el más popular -por
ahora- es este algoritmo, el de Ramificación y Acotamiento (Branch And Bound), la mayoría de los programas
comerciales elaborados para resolver para problemas lineales enteros utilizan este algoritmo.
APLICACIONES
* Una explicación más extendida sobre la consideración de la solución redondeada se encuentra en la lectura sugerida del capítulo 7:
Optimización con Enteros, Tema 1: Introducción a la optimización con enteros del libro INVESTIGACION DE OPERACIONES EN LA CIENCIA
ADMINISTRATIVA de G.D. Eppen y otros PRENTICE-HALL, México 2000, página 289.
En este último caso, la solución a un problema entero no debe determinarse mediante el redondeo de los
valores decimales que las variables adopten. Por ejemplo:
Un fabricante de muebles tiene 6 unidades de madera y 28 horas disponibles, durante las cuales fabricará estantes
decorativos. Estima que el modelo A requiere 2 unidades de madera y 7 horas de tiempo disponible, mientras que el
modelo B requiere 1 unidad de madera y 8 horas. Los precios de los estantes son $120 y $80, respectivamente.
¿Cuántos estantes de cada modelo debe fabricar con estos recursos si desea maximizar sus ingresos?
6
Declaración de variables:
A: # estantes del modelo A
5 B: # estantes del modelo B
Función objetivo:
4 Max Z = 120A + 80B
Restricciones:
3 2A + 1B ≤ 6
7A + 8B ≤ 28
A, B ≥ 0
2
Solución inicial:
A = 2.22; B = 1.56; Z = $391.11
1
A
1 2 3 4 5
Una vez realizada la gráfica de este problema, una solución entera obliga a la región factible a
reducirse a una malla de puntos dentro de la región anterior.
Declaración de variables:
6
A: # estantes del modelo A
B: # estantes del modelo B
5 Función objetivo:
Max Z = 120A + 80B
4 Restricciones:
2A + 1B ≤ 6
3 7A + 8B ≤ 28
A, B ≥ 0, y enteros
Solución inicial:
2
La solución anterior deja de ser factible
1
A
1 2 3 4 5
Nótese que si se redondea la solución óptima con decimales se tendría que A = 2 y B = 2, pero este
punto se encuentra fuera de la malla, así que no se la puede considerar siquiera como una solución
factible.
Declaración de variables:
6 A: # estantes del modelo A
B: # estantes del modelo B
5 Función objetivo:
Max Z = 120A + 80B
4
Restricciones:
2A + 1B ≤ 6
7A + 8B ≤ 28
3
A, B ≥ 0, y enteros
Solución inicial:
2
A = 2.22; B = 1.56; Z = $391.11
Solución por redondeo:
1 A = 2; B = 2; No es una solución factible
A
1 2 3 4 5
El aparente punto solución sería el más cercano al óptimo continuo, sin embargo Z no llega al
máximo:
Declaración de variables:
6 A: # estantes del modelo A
B: # estantes del modelo B
5 Función objetivo:
Max Z = 120A + 80B
4
Restricciones:
2A + 1B ≤ 6
7A + 8B ≤ 28
3
A, B ≥ 0, y enteros
Solución inicial:
2
A = 2.22; B = 1.56; Z = $391.11
Solución por redondeo:
1 A = 2; B = 2; No es una solución factible
Solución por truncamiento:
A = 2; B = 1; Z=$320
A
1 2 3 4 5
Solución óptima
B
Declaración de variables:
A: # estantes del modelo A
6
B: # estantes del modelo B
Función objetivo:
5
Max Z = 120A + 80B
Restricciones:
4 2A + 1B ≤ 6
7A + 8B ≤ 28
3 A, B ≥ 0, y enteros
Solución inicial:
2 A = 2.22; B = 1.56; Z = $391.11
Solución por redondeo:
1
A = 2; B = 2; No es una solución factible
Solución por truncamiento:
A = 2; B = 1; Z=$320
A Solución óptima:
1 2 3 4 5
A = 3; B = 0; Z=$360
Ramificación
Si la primera aproximación contiene una variable que no es entera, digamos xi, entonces
i1<xi<i2, donde i1 e i2 son enteros consecutivos no negativos; se generan dos nuevos programas
enteros al agregar al programa entero original una u otra de las siguientes restricciones: xi<i1 ,
xi>i2 . Este proceso, denominado ramificación, tiene el efecto de reducir la región factible en
forma tal, que elimina de consideraciones posteriores la solución anterior no entera para xi pero
conservando todas las posibles soluciones enteras al problema original.
Max Z = 10x1 + x2
x1 y x2 > 0, y enteros
Se considera el programa lineal eliminando la condición de que las variables sean enteras. Y se
determina la siguiente solución: x1 = 5.5, x2 = 0, con Z = 55. Ya que 5 < x1 < 6, por
ramificación se crean los dos nuevos programas enteros:
Max Z = 10x1 + x2
x1 < 5
x1 y x2 > 0, y enteros
Max Z = 10x1 + x2
x1 >6
x1 y x2 > 0, y enteros
Para los dos programas creados por el proceso de ramificación, se obtienen primeras
aproximaciones ignorando nuevamente los requerimientos de enteros y resolviendo los
programas lineales resultantes. Si cualquiera de las primeras aproximaciones es todavía no
entera, entonces el programa que la produjo se vuelve candidato para seguir realizando
ramificaciones. Z* = 50.2
2
x1 < 5 x1 = 5
Z* = 55 x2 = 0.2
1
x1 = 5.5
x2 = 0 x1 > 6 No factible
Encontramos que el programa (2) tiene la primera aproximación x1 = 5, x2 = 0.2, con Z = 50.2,
mientras que el programa (3) no tiene solución factible. Entonces, el programa (2) es candidato
para seguir realizando ramificaciones. Ya que 0 < x2 < 1, se agregan a (2) x2 < 0 ó x2 > 1, y
se obtienen los dos nuevos programas:
Max Z = 10x1 + x2
x1 < 5
x1 y x2 > 0, y enteros
Max Z = 10x1 + x2
x1 < 5
x2 > 1
x1 y x2 > 0, y enteros
Z* = 50
4
x2 < 0 x1 = 5
Z* = 50.2 x2 = 0
2
x1 < 5 x1 = 5
Z* = 55 Z* = 31
x2 = 0.2 x2 > 1
1 5
x1 = 5.5 x1 = 3
x2 = 0 No factible x2 = 1
x1 > 6
3
Acotamiento
El programa (4) tiene una solución entera con Z = 50; entonces, 50 se vuelve una cota inferior para el
problema. El programa (5) tiene una solución con Z = 31. Ya que 31 es menor que la cota inferior
de 50, el programa (5) se elimina en cuanto a consideraciones posteriores y se le habría eliminado de esta
forma aun si su primera aproximación hubiera sido no entera.
Siempre se realizan las ramificaciones a partir de aquel programa que parece estar más cerca del
valor óptimo. Cuando existen varios candidatos para continuar las ramificaciones, se selecciona
aquél que tenga el mayor valor Z, si se va maximizar la función objetivo, o aquél que tenga el menor
valor Z, si se va a minimizar la función objetivo.
Las restricciones adicionales se agregan una a una. Si una primera aproximación incluye a más de
una variable no entera, las nuevas restricciones se imponen a aquella variable que esté más lejos de
ser un entero; esto es, aquella variable cuya parte fraccionaria esté más cerca de 0.5. En caso de
empate, se selecciona arbitrariamente una de las variables.
Finalmente, es posible que un programa entero o un programa lineal tengan más de una solución
óptima. En ese caso, se selecciona arbitrariamente a una de las soluciones como la óptima y dejando
a un lado las demás.