Sei sulla pagina 1di 8

Introduccin a la programacin lineal y entera

Una simple presentacin


Miguel Mata Prez
miguel.matapr@uanl.edu.mx
Versin 0.1, 30 de septiembre de 2014

Resumen: Este trabajo es una presentacin de la optimizacin matemtica (particularmente, la


programacin lineal y la programacin entera). No es un texto para aprender dichas reas, sino slo una
introduccin a ellas. Este material fue ideado para presentar un modelo matemtico de optimizacin
lineal entera mixta, para proveer una introduccin a un lector no familiarizado con el rea, por lo que
no tiene el objetivo de profundizar ni de ensear las tcnicas de dicha disciplina.

La programacin matemtica ha mostrado ser una herramienta muy eficiente en la


solucin de problemas de optimizacin, por su gran versatilidad para modelar problemas
asociados con la optimizacin, y porque en la actualidad, gracias a los grandes avances
tericos en el rea y los impresionantes logros electrnicos, los ordenadores modernos
son capaces de dar excelentes soluciones en tiempos razonables.

1. Programacin lineal
En su sentido ms general, la programacin lineal es una rama de la programacin
matemtica que estudia la optimizacin de una funcin lineal que debe satisfacer un
conjunto de restricciones lineales de desigualdad o igualdad.

1.1. Breve historia


La programacin lineal fue concebida por George B. Dantzig quien la desarroll
alrededor de 1947 cuando funga como consejero de la Fuerza Area de los Estados
Unidos de Amrica para dar solucin a un programa de entrenamiento y abastecimiento
El presente material es libre y puede ser usado, distribuido y comunicado bajo las nicas condiciones
de atribucin (dar crdito y citar apropiadamente) y no comercializacin (no lucrar u obtener
beneficio alguno de su uso). Cualquier asunto relacionado con este material, sintase en libertad de
ponerse en contacto con el autor en la direccin de correo-e proporcionada.

1
Programacin matemtica 2

logstico durante la segunda guerra mundial. Dantzig no slo resolvi dicho problema,
sino que formul el problema general de programacin lineal y desarroll el mtodo
simplex de solucin, sin embargo su trabajo no estuvo disponible hasta 1949, ao de su
publicacin.

El nombre de programa no est asociado de manera alguna con un programa de


ordenador pues, de hecho, para la poca esto hubiera sido imposible. Dado que en la
fuerza area los planes y proyectos a implementar son llamados programas, Dantzig so-
la referirse a los problemas de programacin lineal como programa en una estructura
lineal, y no fue hasta 1948 que el matemtico Koopmans acu el trmino progra-
macin lineal.

Antes del primer trabajo de Dantzig fueron formulados y resueltos diversos proble-
mas del tipo de programacin lineal. Von Neumann proporcion su modelo de equilibrio
en 1937. En 1939 Kantorovich plante y resolvi un problema de organizacin y plani-
ficacin. En 1941 Hitchcok formul y resolvi el problema de transporte que fue inde-
pendientemente resulto por Koopmans en 1947. En 1942 Kantorovich tambin formul
el problema de transporte, pero no lo resolvi. En 1944 Von Neumann y Morgenstern
formularon la teora de juegos. Stigler trabaj el problema de la dieta en 1945.

Despus de la publicacin del mtodo simplex el campo de la programacin lineal


se ha visto ampliamente enriquecido. La programacin lineal ha sido favorablemente
aceptada por su inherente capacidad para modelar una gran diversidad de problemas
complejos y de gran importancia en fsica, geometra, administracin e ingeniera entre
otras. As mismo, gracias al desarrollo y cada vez mayor capacidad de los ordenadores
modernos, el mtodo simplex ha sido la herramienta de solucin de los problemas de
programacin lineal por excelencia.

Un desarrollo histrico ms detallado puede ser encontrado en [1] y [3].

1.2. Problema general de la programacin lineal


El problema general de la programacin lineal puede expresarse de la siguiente
manera:
minimizar c1 x1 + c2 x2 + + cn xn
sujeto a: a11 x1 + a12 x2 + + a1n xn b1 ,
a21 x1 + a22 x2 + + a2n xn b2 ,
.. .. .. ..
. . . .
am1 x1 + am2 x2 + + amn xn bm ,
x1 , x2 , . . . , xn 0.

En la formulacin anterior, c1 x1 + c2 x2 + + cn xn es la funcin objetivo que


debe minimizarse, los parmetros cj son los coeficientes de costo, las cantidades xj
son las variables de decisin que deben determinarse. La desigualdad ai1 x1 + ai2 x2 +
Programacin matemtica 3

+ ain xn bi es la i-sima restriccin, los parmetros aij se denominan coeficientes


tecnolgicos, los parmetros bi reciben el muy general nombre de valor del lado derecho
y representa los requerimientos que deben satisfacerse. Por ltimo, x1 , x2 , . . . , xn 0
son las restricciones de no negatividad tambin llamadas lgicas.

Un conjunto de valores para las variables x1 , x2 , . . . , xn que satisfacen todas las


restricciones se denomina punto factible. Al conjunto de todos los puntos factibles se le
llama regin factible.

1.2.1. Hiptesis de la programacin lineal


Para que la representac in de un problema de optimizacin como uno de programa-
cin lineal sea vlida se requiere cumplir con al menos las siguientes cuatro hiptesis:

1. Proporcionalidad: El costo de una variable es proporcional al valor que tome


as como la contribucin en cada restriccin. Esto es, dada una variable xj , su
contribucin al costo total es cj xj y a la i-sima restriccin es aij xj .

2. Aditividad: El costo total es la suma de los costos individuales y la contribucin


total en cada restriccin es la suma de las contribuciones de cada variable.

3. Divisibilidad: Las variables de decisin se pueden dividir en cualesquiera valores


fraccionales, permitiendo con ello valores no enteros para las variables.

4. Determinstica: Todos los coeficientes cj , aij y bi estn bien determinados, es-


to es, no hay componentes estocsticas o, si las hay, tales componentes pueden
aproximarse bien mediante los coeficientes.

1.3. Manipulaciones del problema general


Como ya se ha dicho, un programa lineal es un problema de maximizar o minimizar
una funcin lineal bajo restricciones lineales de desigualdad o igualdad. Todo problema
lineal puede transformarse de una forma a otra equivalente mediante manipulaciones
simples.

Desigualdades e igualdades: Una restriccin de desigualdad j aij xj bi puede


P

transformarse fcilmente en una de igualdad adicionando una variable de holgura si 0


obteniendo j aij xj + si = bi . Similarmente, la restriccin j aij xj bi se transforma
P P

en j aij xj si = bi sustrayendo la variable de exceso si 0. Por otra parte una restric-


P

cin de igualdad j aij xj = bi siempre puede transformarse en las dos desigualdades


P

j aij xj bi y j aij xj bi .
P P
Programacin matemtica 4

No negatividad en las variables: El mtodo simplex ha sido diseado para resolver


problemas cuyas variables sean no negativas. Si en la modelacin una variable se requiere
no positiva, i. e., xj 0, es posible la siguiente sustitucin xj = xj 0. Si una variable
xj no est restringida en signo, es posible reemplazarla por xj xj , donde xj , xj 0.
Si alguna variable est acotada inferiormente, xj lj , entonces la variable xj = xj lj
es claramente no negativa. Tambin si una variable est acotada superiormente xj uj
por una cantidad no positiva, i. e., uj 0, entonces con la sustitucin xj = uj xj se
consigue una variable no negativa.

Maximizacin y minimizacin: Todo problema de maximizacin puede convertirse


en uno de minimizacin y viceversa. A saber, es claro que:
X X
max cj xj = mn cj xj .
j j

As, todo problema de maximizacin (minimizacin) puede transformarse en uno


de minimizacin (maximizacin) multiplicando por 1 los coeficientes de la funcin
objetivo. Obsrvese que al completar la optimizacin el valor del problema original es
el simtrico aditivo.

1.4. Representacin matricial


Todo problema de programacin lineal puede escribirse en forma matricial. Por
ejemplo, veamos el siguiente problema:
n
mn cj xj
P
j=1
n
s.a: aij xj bi i = 1, . . . , m
P
j=1
xj 0 j = 1, . . . , n

puede escribirse matricialmente declarando las siguientes matrices:



x1 c1 b1 a11 a12 . . . a1n
x2 c2 b2 a21 a22 . . . a2n


.. , c = .. , b = .. , A = ..
x = .. .
..
. . . . . .
xn cn bm am1 am2 . . . amn

con lo cual el problema anterior puede expresarse como sigue:

mn c x
s.a: Ax b
x0

donde 0 es un vector de ceros de dimensin n.


Programacin matemtica 5

1.4.1. Formas cannica y estndar


Como ya se ha visto, un problema de programacin lineal puede expresarse en
diversas maneras haciendo alguna manipulacin. Existen dos formas particularmente
tiles llamadas forma cannica y forma estndar.

Se dice que un problema de programacin lineal se encuentra en forma estndar si


todas las restricciones son de igualdad y todas las variables son no negativas, es decir,
si el problema tiene la siguiente forma:
mn c x
s.a: Ax = b
x0

Un problema est en forma cannica si todas sus variables son no negativas y todas
las restricciones son de tipo para un problema de maximizar o todas son del tipo
si es un problema de minimizar. Esto es, si es de cualquiera de las siguientes formas:
mn c x max c x
s.a: Ax b s.a: Ax b
x0 x0
donde, como antes, A es una matriz n m, c e x es un vector n-dimensional y b es un
vector no negativo m-dimensional.

Es importante mencionar que el mtodo simplex est diseado para resolver proble-
mas en forma estndar. Excelentes desarrollos de la programacin lineal y el mtodo
simplex pueden ser encontrados en [2] y [5].

2. Programacin entera
La programacin entera es la rama de la programacin matemtica que trata de la
optimizacin de problemas cuyas variables deben ser discretas. Por ejemplo en muchos
modelos las variables deben tomar un valor de 0 o 1 y representan una decisin de si o
no que debe ser tomada.

Una gran variedad de los problemas de la prctica pueden ser formulados y resueltos
mediante programacin entera. Desafortunadamente los mtodos actuales de solucin,
aunque son cada vez ms eficientes, no son tan rpidos como los que existen para
programacin lineal.

En los ltimos aos ha habido notables avances en la capacidad para resolver1 pro-
blemas de programacin entera cada vez ms complicados. Avances como: mejoras en
1
En el sentido ms amplio, se entiende por resolver un problema entero al hecho de conseguir una
solucin suficientemente cercana al ptimo en un tiempo razonable.
Programacin matemtica 6

la modelacin, implementacin de mejores algoritmos de programacin lineal, ordena-


dores ms veloces, avances recientes en la teora e implementacin de planos cortantes,
nuevos mtodos heursticos, entre otros.

2.1. Clasificacin y formulaciones


Comenzamos haciendo una clasificacin de los problemas tpicos de la programacin
matemtica. Se muestran tambin sus formulaciones matemticas. Para un estudio de
stos problemas, ejemplos y mtodos de solucin ver [6].

Programacin lineal entera: El siguiente es un problema de programacin lineal


entera. Obsrvese que todas las variables deben tomar valores enteros.

max c x
s.a: Ax b
x Zn+

donde A es una matriz m n, c y x son vectores columna n-dimensionales, b un


vector columna m-dimensional y Zn+ representa el espacio n-dimensional de enteros no
negativos.

Programacin lineal entera mixta: En ocasiones no es necesario que todas las


variables tomen valores enteros, sino slo un grupo de ellas. El siguiente es un problema
entero mixto.
max c x + f y
s.a: Ax + By b
x Rn+
y Zp+
donde A, c, x y b son como antes, B es una matriz m p, f y y son vectores columna
p-dimensionales, Zp+ el espacio p-dimensional de enteros no negativos y Rn+ el espacio
n-dimensional de nmeros no negativos.

Programacin entera binaria: Si todos los valores de las variables estn restringi-
das a tomar valores en el conjunto {0, 1} se dice que tenemos un problema de progra-
macin entera binaria o simplemente un problema binario.

max c x
s.a: Ax b
x Bn

donde A, c, x y b son como ya se han definido y B = {1, 0}.


Programacin matemtica 7

Optimizacin combinatoria: Para finalizar, existe un tipo de problemas usualmen-


te ms complejo. Sea N = {1, . . . , n}, cj R, para cada j N, y N un conjunto de
subconjuntos factibles de N. Un problema de optimizacin combinatoria es:
X
max cj .
S N
jS

2.2. Ramificar y acotar


El algoritmo de ramificar y acotar (branch & bound en ingls) es quiz el mtodo
exacto ms empleado para resolver problemas enteros. En la actualidad existen diversas
y muy eficientes herramientas basadas en ramificar y acotar que son implementadas
computacionalmente modificando o enriqueciendo el algoritmo bsico. El algoritmo de
ramificar y acotar se basa en dos ideas claves.

2.2.1. Dividir y vencer


Consideremos el problema z = max{cx : x S}. Se busca dividirlo en problemas
ms pequeos de tal forma que resulte ms fcil de resolver. Este mtodo se basa en el
siguiente resultado.

Proposicin 1 Sea S = S1 SK una descomposicin de S en conjuntos ms


pequeos, sea z k = max{cx : x Sk } para k = 1, . . . , K. Entonces z = maxk z k .

2.2.2. Enumeracin implcita


Dado que la enumeracin exhaustiva es prcticamente irrealizable, esta idea consiste
en emplear inteligentemente algunas cotas de los valores z k . El siguiente resultado indica
cmo.

Proposicin 2 Sea S = S1 SK una descomposicin de S en conjuntos ms


pequeos, sea z k = max{cx : x Sk } para k = 1, . . . , K, z k una cota superior de
z k y z k una cota inferior de z k . Entonces z = maxk z k es una cota superior de z y
z = maxk z k es una cota inferior de z.

2.3. Algoritmo de ramificar y acotar


A continuacin presentamos el algoritmo de ramificar y acotar para el problema de
maximizar. Es fcil hacer la analoga en caso de que se tenga un problema de minimizar,
o bien puede transformarse el sentido de la optimizacin como se vio en la seccin 1.3.

Algoritmo 1 (Ramificar y acotar) Para el caso de minimizar.


0. Inicializacin: Colocar el problema inicial S0 con su formulacin P0 en la lista.
Cota inferior z = .
Solucin incumbente x vaca.
Programacin matemtica 8

1. Optimalidad: Si la lista est vaca, parar: Solucin incumbente x ptima.

2. Eleccin de problema: Elegir un problema Sk con su formulacin Pk .

3. Relajacin: Resolver una relajacin sobre Pk . Sea xk la solucin de la relajacin de


Pk y z k el valor del objetivo.

4. Infactibilidad: Si Pk = , truncar por infactibilidad e ir a 1.

5. Acotamiento: Si z k z, truncar por acotamiento e ir a 1.

6. Factibilidad: Si xk es entera actualizar:


Cota primal z z k .
Solucin incumbente x xk . Truncar por factibilidad e ir a 1.

7. Eleccin de variable: Elegir una variable no entera xj para ramificar. Hacer con la
variable elegida dos ramas redondendola al entero inmediato superior y al inme-
diato inferior. Agregar los dos subproblemas a la lista: Sk1 y Sk2 con formulaciones
Pk1 y Pk2 respectivamente.

La diversidad en la implementacin del algoritmo de ramificar y acotar consiste


principalmente en las elecciones efectuadas en los pasos 2 y 7. Distintas estrategias de
eleccin guan al algoritmo por diversas rutas. Mayores detalles de la implementacin
del algoritmo pueden encontrarse en [4] y [6].

Referencias
[1] Albers, D. J. y J. K. Reid, An interview with George B. Dantzig: the father of
linear programming, The College Mathematics Journal, 17(4), pp. 292-314, 1986.

[2] Bazaraa, M. S., J. J. Jarvis y H. D. Sherali, Programacin Lineal y Flujo


en Redes, 2a. edicin, Limusa, Mxico, 2004.

[3] Dantzig, G. B. Reminiscences about the origins of linear programming, Ope-


rations Research Letters, 1(2), pp. 43-48, 1982.

[4] Martin, R. K., Large Scale Linear and Integer Optimization: A United Aproach,
Kluwer Academic Publishers, Boston, 1999.

[5] Murty, K. G., Linear Programming, John Wiley & Sons, Nueva York, 1983.

[6] Wolsey, L. A., Integer Programming, Wiley-Intercience, Nueva York, 1998.

Potrebbero piacerti anche