Programacion Entera PDF
Programacion Entera PDF
Programacion Entera PDF
Introducción. Programación entera. Clasificación. Algoritmo de Gomory. Ramificación y acotamiento. Manejo de software específico
Bibliografía
Los problemas de programación lineal en que se requiere que algunas o todas las variables tomen valores enteros, son de programación
entera. La programación entera a llegado a ser un área muy especializada de la ciencia de la administración.
Un enfoque práctico:
Una empresa que fabrica costales para alimento de ganado y una solución lineal requiere que se fabriquen 3000,472 costales, carecerá de
sentido. En tales situaciones, a menudo se adopta la solución no entera al requerimiento de enteros simplemente redondeando los resultados al
entero más próximo. Esto produce lo que se llama la “solución redondeada”. Mediante ese recurso se obtienen soluciones aceptables para el
administrador en aquellas situaciones en las que, con sentido practico, sencillamente no importa el redondeo. Por ejemplo, no hay diferencia
significativa, ya sea en la función objetivo o en las restricciones, entre producir 19.283,64 y 19.283 costales de alimento para ganado, En
realidad, probablemente baste para el ajuste de los datos del modelo que satisfaga al administrador una producción cercana a los 19.000
costales.
Existen muchos problemas importantes en los que la “solución redondeada” simplemente no funciona. Esta complicación puede deberse a
la escala de las variables por considerar. Por ejemplo, si la solución de un modelo de programación lineal recomienda que la Boeing construya
11,6 aparatos 747 y 6,8 aparatos 727, el administrador probablemente no quedara contento con la simple medida de tomar la decisión de construir
11 de los primeros y 6 de los segundos, o cualquier otra solución redondeada. La magnitud del rendimiento y la asignación de recursos asociados
con cada unidad del problema aconsejan determinar la mejor solución entera posible. Con otro ejemplo, sé vera que muchos modelos usan
variables enteras para indicar decisiones lógicas. Por ejemplo, veremos que problemas en los que queramos que una variable “x” sea igual a 1 si
vamos a construir un almacén o x sea igual a cero (si-no). Supóngase que la solución de una versión de programación lineal de este problema
produce un valor no entero, por ejemplo, x = 0,38. Vemos que este valor no contiene información aprovechable como solución al problema real.
Es claro que no podemos construir 0,38 de un almacén. Es cierto que podemos elegir almacenes de diversos tamaños, pero en todo caso,
o bien tenemos un almacén o no lo tenemos. Se podría suponer que en un caso como este se trataría de redondear al entero más próximo (0 en
este caso) como forma de salvar la dificultad. Por desgracia, esto no garantiza que se obtenga una buena (y no digamos óptima) solución.
En realidad, veremos que el redondeo no siempre conduce a solucione factibles en casos como este.
El fondo del asunto es que existen muchos problemas administrativos importantes que serian de programación lineal si no fuese por el
requerimiento de que sean enteros los valores de algunas variables de decisión, en los que no se puede encontrar una buena solución mediante el
uso del método Simplex seguido del redondeo de los valores óptimos resultantes para variables de decisión. Estos problemas deben ser resueltos
mediante algoritmos especialmente diseñados para resolver problemas de programación entera.
A pesar del impresionante avance en nuestra capacidad para resolver problemas de programación entera, la tecnología aun dista mucho
de la que hay disponible para manejar problemas en los que no es necesario que las variables de decisión sean enteras. Muchos problemas que se
resuelven fácilmente como problemas de programación lineal llegan a ser irresolubles para propósitos prácticos cuando se exige que las variables
de decisión sean enteras (es decir, que el tiempo y el costo necesario para los cálculos resultan demasiado grandes)
Programación Entera es un termino general para los modelos de programación matemática que presentan condiciones de integridad
(condiciones que estipulan que algunas o todas las variables de decisión deben tener valores enteros). Ya hemos apuntado que los modelos de
programación lineal entera son modelos de programación lineal que tienen la característica adicional de que algunas de las variables de decisión
deben tener valores enteros. Existen diversas clasificaciones de esta categoría de modelos.
Un modelo entero puro (PLE) es, como su nombre lo indica, un problema en el que se exige que todas las variables de decisión tengan
www.geocities.ws/mdmoli/archivos/ioi2/unidad2ioi.html 1/9
02/11/13 Programación Entera
valores enteros. Por ejemplo
Es un modelo entero puro. Sin las restricciones adicionales de que x1, x2, x3 sean enteros (o sea las condiciones de integralidad) seria un
problema de programación lineal
Un problema en el que solo se requieren que algunas variables tengan valores enteros mientras que otras pueden asumir cualquier
numero no negativo (es decir, cualquier valor continuo) se llama programación lineal entera mixta (PLEM). Por ejemplo, supóngase que en el
problema anterior solo x1 y x2 deben ser enteros y x3 no. El problema resultante es:
En algunos problemas se restringe el valor de las variables a 0 o 1. Dichos problemas se llaman binarios o programas lineales enteros 0-1.
Son de particular interés debido a que se pueden usar las variables 0-1 para representar decisiones dicotómicas (sí o no). Diversos problemas de
asignación, ubicación de plantas, planes de producción y elaboración de cartera, son de programación lineal entera 0-1.
Existen dos métodos para generar las restricciones especiales que fuercen la solución óptima del problema, hacia la solución óptima
entera deseada:
En ambos métodos las restricciones agregadas eliminan partes del espacio de soluciones, pero nunca alguno de los puntos enteros
factibles. Desafortunadamente, ninguno de los dos métodos es efectivo en la solución de problemas de programación lineal entera. No obstante
los métodos de ramificar y acotar son mucho mejores en cuanto al calculo se refiere que los métodos de plano de corte. Por esta razón, la
mayoría de los códigos comerciales se basan en el procedimiento de ramificar y acotar.
En este momento será más conveniente explicar los fundamentos del algoritmo de ramificar y acotar (R y A), por medio de un ejemplo
numérico:
Sujeto a
x1 + x2 <=5
10x1 + 6x2 <=45
En la siguiente figura se muestra el espacio de soluciones de la programación lineal entera representado por los puntos. El espacio de
soluciones de programación lineal asociado, programación lineal óptima, se define por cancelación de las restricciones enteras. La solución
www.geocities.ws/mdmoli/archivos/ioi2/unidad2ioi.html 2/9
02/11/13 Programación Entera
programación lineal óptima se da como x1 = 3,75, x2 = 1,25 y z = 23,75.
El procedimiento de Ramificar y Acotar se basa en tratar solo con el problema programación lineal. Como la solución óptima (x1 = 3,75,
x2 = 1,25 y z = 23,75) pero no satisface la necesidad de valores enteros, el algoritmo de R y A exige “modificar” el espacio de soluciones lineales
de forma tal que nos permita identificar, finalmente, para conseguir la solución óptima entera.
Primero seleccionaremos una de las variables cuyo valor corriente en la solución óptima no cumple el requisito de valor entero.
Seleccionando x1=3,75 arbitrariamente, observamos que la región ( 3 < x1 < 4 ) del espacio de soluciones lineales, no puede incluir ninguna
espacio solución factible entera. Entonces podemos modificar el espacio de soluciones lineales eliminando esta región no prometedora, lo que, en
realidad, es equivalente a reemplazar el espacio original por dos espacios los PL1 y PL2, definidos de la manera siguiente:
Esta figura muestra los espacios PL1 y PL2 en forma grafica. Se ve que los dos espacios contienen los mismos puntos enteros factibles
del modelo PLE. Esto significa que, desde el punto de vista del problema original de PLE, tratar con PL1 y PL2 es igual que tratar con el original
PLO. La diferencia principal es que la selección de las nuevas restricciones e acotamiento ( x1 >= 3 y x1 <= 4 ) mejoraran la oportunidad de
forzar a los puntos extremos óptimos de PL1 y PL2 hacia la satisfacción del requisito de valor entero. Además el hecho que las restricciones de
acotamiento están en la “vecindad inmediata” del optimo continuo del PLO, incrementara las posibilidades de producir “buenas” soluciones
enteras.
Las nuevas restricciones x1 >= 3 y x1 <= 4 son mutuamente excluyentes, PL1 y PL2 deben tratarse como dos programas lineales
separados. Esta dicotomía da lugar al concepto de ramificación en el algoritmo de R y A. En efecto, ramificar significa subdividir un espacio de
soluciones corrientes en subespacios mutuamente excluyentes.
www.geocities.ws/mdmoli/archivos/ioi2/unidad2ioi.html 3/9
02/11/13 Programación Entera
Sabemos que la solución óptima entera debe encontrarse en PL1 o PL2. Sin embargo, en ausencia del espacio grafico de soluciones, no
tenemos manera de determinar donde puede encontrarse la solución óptima, por lo que nuestra única opción es investigar ambos problemas.
Hacemos esto trabajando con un problema a la vez (PL1 o PL2). Supongamos que escogemos a PL1 asociado con x1 <= 3. En efecto, debemos
resolver el siguiente problema:
Sujeto a
x1 + x2 <=5
10x1 + 6x2 <=45
x1 <=3
x1, x2 >= 0
Como se indico antes PL1 es el mismo que el PLO con la restricción adicional de acotamiento superior, x1 <= 3. así podemos aplicar el
algoritmo primal de acotamiento superior para resolver el problema. Esto da la nueva solución óptima.
X1 = 3, x2 = 2 y z = 23
Como esta solución satisface el requisito de valor entero, se dice que el PL1 esta agotado, vació, lo que significa que el PL1 no puede
producir ninguna solución mejor y no necesita investigarse mas a fondo.
Determinar una solución factible entera en una etapa temprana de los cálculos es crucial para incrementar la eficiencia del algoritmo R y
A. Tal solución fija una cota inferior al valor objetivo optimo, que a su vez se puede usar para descartar automáticamente cualquier subproblema
no explorado (como el PL2) que no dan mejor solución entera. En este ejemplo el PL1 produce la cota inferior z = 23. Esto significa que cualquier
solución entera mejorada debe tener el valor de z mayor 23. Sin embargo, como la solución óptima del problema PLO tiene z = 23,75 y como
todos los coeficientes de la función objetivo son enteros, se infiere que ningún subproblema que proceda del PLO puede producir un valor de z
mejor que 23. En consecuencia, podemos descartar al PL2 porque no puede dar una mejor solución entera.
Del análisis anterior vemos que un subproblema esta agotado si no satisface una de las siguientes condiciones:
1. El subproblema da una solución factible entera
2. El subproblema no puede dar una mejor solución que la mejor cota inferior disponible (valor z) del problema (Un caso especial de esta
condición es que el subproblema no tendrá ninguna solución factible en absoluto)
Pero si en nuestro ejemplo decidimos investigar PL2 primero la solución resultante será: x1 = 4, x2 = 0,8333, z = 23,3333. Como x2 no es
entero el PL2 debe investigarse mas a fondo creándose el PL3 y PL4 y usando las respectivas ramas x2 >=0 y x2 >=1. Esto significa que
Espacio PL3 = espacio PLO + (x1 >= 4) + (x2 <=0)
Espacio PL4 = espacio PLO + (x1 >= 4) + (x2 >=1)
En este momento para escoger tres subproblemas, el PL1, PL3 y PL4. (Observe nuevamente que estos tres subproblemas incluyen todas las
soluciones enteras factibles del problema original PLE.) Si seleccionamos arbitrariamente el PL4, descubrimos que no tiene solución factible y por
ello esta agotado. A continuación seleccionamos el PL3 para investigarlo. Su solución la da x1 = 4,5, x2 = 0 y z = 22,5. Como x1 = 4,5 no es
entero, creamos dos subproblemas, el PL5 y PL6 del PL4, usando las restricciones x1 <= 4 y x1 >= 5 respectivamente.
Obtenemos entonces:
Espacio PL5 = espacio PLO + (x1 >= 4) + (x2 <=0) + (x1 <= 4)
Espacio PL6 = espacio PLO + (x1 >= 4) + (x2 <=0) + (x1 >= 5)
Escogemos ahora el PL6, para investigarlo. Como el PL6 no tiene solución factible, esta agotado. A continuación escogemos el PL5 cuya
www.geocities.ws/mdmoli/archivos/ioi2/unidad2ioi.html 4/9
02/11/13 Programación Entera
solución óptima (x1 = 4, x2 = 0, z = 20) satisface el requisito de valor entero. Finalmente, hemos encontrado una solución entera que fija una cota
inferior (z = 20) a la solución entra óptima. Desafortunadamente, esta cota inferior es “muy débil” y “muy tardía” para ser útil. El único nodo
restante, PL1, queda agotado a continuación con z = 23, lo que fija una nueva cota inferior. Como no quedan ya subproblemas por investigar, la
ultima cota inferior asocia la solución óptima del PLE con PL1.
La pero secuencia posible de solución, mostrada en al figura siguiente, se ha escogido intencionalmente para evidenciar una de las principales
debilidades del algoritmo de R y A. Esto es, un subproblema especifico, ¿cómo seleccionamos a la variable de ramificación? Y, de entre todos los
subproblemas no explorados, ¿Cuál debe investigarse a continuación? Observe que en la figura, encontramos una buena solución en el primer
subproblema PL1, lo que nos permitió declarar agotado al PL2 sin ninguna investigación posterior. Básicamente, el problema PLE se resolvió
investigando solo un subproblema. En el siguiente caso tuvimos que resolver seis subproblemas antes de alcanzar la optimidad. Este caso no es
raro y puede encontrarse situaciones reales. Aunque existen muchos métodos para aumentar l habilidad del algoritmo de R y A de “ver adelante”
y hacer una buena “conjetura”, respecto a sí una rama dada conducirá a una solución mejorada del PLE, no existe una teoría consistente que
produzca resultados concretos uniformes para la solución del problema general de PLE.
Resumiremos ahora los pasos del algoritmo de R y A. Suponiendo un problema de maximización, definiremos z como la cota inferior de la
solución entera óptima del problema. Hacemos inicialmente z = - ¥ e i = 0.
Paso 1: Agotamiento y ramificación. Seleccione PLi como el próximo subproblema por investigarse. Resolvemos el PLi y trataremos de
agotarlo usando las condiciones apropiadas.
(a) Si el PLi se declara agotado (solución inferior, infactible o entera), ponga al día la cota inferior z si se encuentra una mejor solución
del PLE; si no es así, seleccione un nuevo subproblema i y repita el paso 1. Si todos los subproblemas se han investigado, la solución
óptima del PLE esta asociada con la ultima cota inferior z en caso de que exista, si no es así
(b) Si el PLi no esta agotado, siga con el paso 2 para efectuar la ramificación del PLi.
Paso 2: Ramificación. Seleccione una de las variables xj cuyo valor optimo en la solución del PLi no satisfaga la restricción del valor entero.
Elimine la región creando dos subproblemas PL que correspondan a las dos siguientes restricciones mutuamente excluyentes, vuelva al paso 1.
El concepto de plano de corte lo ilustraremos primero con un ejemplo. Considere el problema de progrmacion lineal entera:
www.geocities.ws/mdmoli/archivos/ioi2/unidad2ioi.html 5/9
02/11/13 Programación Entera
Sujeto a:
-x1 + 3x2 <=6
7x1 + x2 <=35
La idea del algoritmo de planos de corte es cambiar el conjunto convexo del espacio de soluciones, de tal manera que los puntos extremos
apropiados lleguen a ser todos enteros. Tales cambios en las fronteras del espacio de soluciones, deben proporcionar todavía conjuntos convexos.
También este cambio deberá hacerse sin “partir” ninguna de las soluciones enteras factibles del problema original. La figura muestra como dos
restricciones secundarias (arbitrariamente elegidas) se agregan al problema proporcionando la solución óptima entera en el punto extremo nuevo
(4, 3). Note que el área cortada del espacio de soluciones original no incluye ningún valor entero.
Un requisito básico para la aplicación de este algoritmo es que todos los coeficientes y la constante del segundo miembro de cada restricción
deben ser enteros.
Donde no aparecen fracciones. Lo ultimo se logra multiplicando ambos lados de la restricción original por el mínimo común múltiplo de los
denominadores.
El requisito anterior se impone ya que, como se mostrara posteriormente, el algoritmo entero puro no diferencia entre las variables de holgura
y las regulares del problema en el sentido de que todas las variables deben ser enteras. La presencia de coeficientes fraccionarios en las
restricciones, por consiguiente, puede no permitir que las variables de holgura tengan valores enteros. En este caso, el algoritmo fraccional puede
indicar que no existe solución factible, aunque el problema pueda tener una solución entera factible en función de las variables que no son de
holgura.
Los detalles del algoritmo los veremos ahora. Primero, el problema PL queda resuelto, esto sin tomar en cuenta la condición de entero. Se
desarrollan de la siguiente manera las restricciones secundarias que forzaran la solución entera. Sea la tabla óptima final para el problema lineal la
siguiente:
Básica x1 xi xm wi wj wn Solución
z 0 0 0 C1 Cj Cn b0
x1 1 0 0 a11 an1 an1 b1
www.geocities.ws/mdmoli/archivos/ioi2/unidad2ioi.html 6/9
02/11/13 Programación Entera
x2 0 1 0 a1i ani ani bi
x3 0 0 1 a1m anm anm bm
Las variables xi (i = 1,2 ...,m) representan las variables básicas mientras que las variables wj(j = 1,2 ...,n) son las variables no básicas. Estas
variables han sido arregladas como tales por conveniencia.
Considere la i-esima ecuación donde la variable básica x tiene un valor que no es entero.
nj
xi = bi - å a w, no es entero
J=1 i j
Cualquiera de tales ecuaciones se denominara como un renglón fuente. Ya que en general los coeficientes de la función objetivo pueden
hacerse enteros, la variable z también es entera y la ecuación z puede elegirse como un renglón fuente. Realmente la prueba del algoritmo de
convergencia exige que z sea entera
Sea:
bi = [bi] + ¦i
aj = [aj] + ¦ij
i i
Donde N = [a] es el mayor entero tal que N <= a. Se deduce que 0 < ¦i < 1 y 0 <= ¦ij <1; ósea, ¦i es una fracción estrictamente positiva y ¦ij es
una fracción no negativa.
Por ejemplo:
a [a] f = a – [a]
1½ 1 ½
-2 1/3 -3 2/3
-1 -1 0
-2/5 -1 3/5
A fin de que todas las variables xi y wj sean enteras, el segundo miembro de la ecuación anterior debe ser entero. Esto implica que el primer
miembro debe también ser entero. Dado que fij >= 0 y wj >=0 para toda i y j, se deduce que å = ¦ij wj >= 0. En consecuencia
¦i - å ¦ij wj <= ¦i <1
Como ¦i - å ¦ij wj debe ser entro por construcción, una condición necesaria para satisfacer la integridad será:
¦i - å ¦ij wj <= 0
Donde Si es una variable de holgura no negativa que por definición debe ser entera. Esta ecuación de restricción define el llamado corte
fraccional. De la ultima tabla, wj = 0 y, por consiguiente, Si = -¦i, los cuales in factible. Esto significa que la nueva restricción no esta
satisfecha por la solución dada. El método dual simplex
Puede ser utilizado entonces para aclarar el espacio de soluciones hacia la solución óptima entera. La nueva tabla después de agregar el
corte fraccional, será:
Si la nueva solución (después de aplicar el método dual simplex) es entera, termina el procedimiento. En cualquier otro caso se construye
un nuevo corte fraccional de la tabla resultante y se utiliza de nuevo el método dual simplex para quitar la infactibilidad. Este procedimiento se
repite hasta que se logra una solución entera. Pero si en cualquier iteración el algoritmo dual simplex indica que no existe solución factible, el
problema no tiene solución factible entera.
Consideremos el problema que fue resuelto gráficamente al iniciar la sección. La solución continua esta dada por
Básica x1 x2 x3 x4 Solución
z 0 0 28/11 15/11 63
X2 0 1 7/22 1/22 7/2
X1 1 0 -1/22 3/22 9/2
Ya que esta solución no es entera, debe agregarse un corte fraccional a la tabla. Usualmente se elige la ecuación correspondiente a max
{¦i}. Ya que ambas ecuaciones en este problema tienen el mismo valor de ¦i esto es ¦1 = ¦2 = ½ una u otra pueden ser utilizadas, la
ecuación x2 da:
X2 + 7/22 x3 + 1/22 x4 = 3 ½
S1 - 7/22 x3 + 1/22 x4 = - ½
Básica x1 x2 x3 x4 S1 L.D.
Z 0 0 8/11 15/11 0 63
X2 0 1 7/22 1/22 0 3½
X1 1 0 -1/22 3/22 0 4½
Si 0 0 -7/22 -1/22 1 -1/2
Simplex proporcionó:
Básica x1 x2 x3 x4 S1 L.D.
Z 0 0 0 1 8 59
X2 0 1 0 0 1 3
X1 1 0 0 1/7 -1/7 4 4/7
X3 0 0 1 1/7 -22/7 1 4/7
Ya que la solución todavía no es entera, se elabora un nuevo corte. La ecuación x1 se escribe como:
Básica x1 x2 x3 x4 S1 S2 L.D.
z 0 0 0 1 8 0 59
x2 0 1 0 0 1 0 3
x1 1 0 0 1/7 -1/7 0 4 4/7
x3 0 0 1 1/7 -22/7 0 1 4/7
www.geocities.ws/mdmoli/archivos/ioi2/unidad2ioi.html 8/9
02/11/13 Programación Entera
S2 0 0 0 -1/7 -6/7 1 -4/7
Básica x1 x2 x3 x4 S1 S2 L.D.
z 0 0 0 0 2 7 55
x2 0 1 0 0 1 0 3
x1 1 0 0 0 -1 1 4
x3 0 0 1 0 -4 1 1
X4 0 0 0 1 6 -7 4
www.geocities.ws/mdmoli/archivos/ioi2/unidad2ioi.html 9/9