INTRODUCCIÓN A LA MODELACIÓN MATEMÁTICA Y OPTIMIZACIÓN Carlos Julio Vidal Holguín UNIVERSIDAD DEL VALLE FACULTAD DE INGENIERÍA ESCUELA DE INGENIERÍA INDUSTRIAL Y ESTADÍSTICA 1. FORMULACIÓN DE MODELOS DE PROGRAMACIÓN LINEAL 1.1. ORÍGENES Y ANTECEDENTES HISTÓRICOS La Programación Lineal (PL) es una de las técnicas de la investigación de Operaciones. Muchos autores consideran que ha sido uno de los más importantes avances científicos del presente siglo y, de hecho, su gran aplicación y la magnitud de todos los problemas que ha resuelto, así lo confirman. Mediante la utilización de la PL se han logrado ahorros millonarios en las organizaciones que la han aplicado. Los orígenes de la PL se remontan hacia la década del 40, cuando el economista Leontief desarrolla el método de análisis insumo-producto. En 1947, Stigler plantea el conocido “problema de la dieta”, el cual trataba de buscar la combinación de alimentos más barata, que permitiera a la persona tener los requerimientos mínimos de proteínas, vitaminas, minerales, carbohidratos, etc. Y es en este mismo año cuando el Dr. George Dantzig concluye su desarrollo del método simplex de solución de problemas de PL. Sin este método la PL nunca hubiera tenido el desarrollo y la aplicación desde 1950 hasta nuestros días. Sin embargo, el método simplex tampoco hubiera sido tan útil sin la valiosa ayuda de los computadoras digitales, los cuales permitieron resolver problemas de gran magnitud rápida y eficientemente (en un estudio realizado por la IBM se concluyó que aproximadamente el 25% del tiempo de computador se dedica a cálculo de PL y sus afines). El método simplex se ha venido aplicando aproximadamente desde 1950 y su utilización actual es extensa, aunque todavía existen problemas de tal magnitud, los cuales son muy difíciles de resolver incluso con las capacidades computacionales que existen actualmente, debido precisamente a su tamaño y al tiempo de computador que se utilizaría en ellos. Uno de estos problemas son los de las compañías aéreas, los de las refinerías de petróleo y los de optimización de cadenas de suministro, los cuales normalmente tienen un alto número de variables y restricciones. Varios procedimientos especiales han sido diseñados para estos problemas, los cuales generalmente descomponen el problema original en una serie de subproblemas más fáciles de resolver. Igualmente, actualmente existen los denominados algoritmos de punto interior, los cuales compiten con el método simplex en algunos problemas y vienen implementados en el software especializado que resuelve modelos de programación lineal. 1.2. NATURALEZA LINEAL DE LA PROGRAMACIÓN La PL es la técnica de la Investigación de Operaciones más aplicada y mejor conocida. Básicamente, la PL trata de buscar la mejor forma de asignar recursos limitados a diferentes actividades competidoras. Las organizaciones disponen de diversos recursos (humanos, económicos, tecnológicos, etc.), los cuales son necesariamente limitados, debido a su naturaleza. Las formas en que se pueden distribuir y utilizar estos recursos son múltiples y diversas. Pero no todas ellas proporcionan beneficios a la organización. Sólo una o unas pocas brindarán el máximo beneficio a la organización. Son precisamente estas soluciones óptimas las que pueden encontrar las técnicas basadas en la PL. Lo expuesto anteriormente brinda una idea muy general de lo que busca la programación lineal. Esta idea debe enmarcarse en un contexto más definido. Primero, la palabra programación se refiere a la planeación de recursos y no a algo relacionado con la programación de computadores. Segundo, el término lineal hace referencia a la naturaleza de las variables, sus relaciones y las funciones que utiliza la programación lineal. Ellas deben ser, como su nombre lo indica, lineales. Más adelante se estudiarán los supuestos básicos que hacen que un problema se pueda clasificar como lineal. En los problemas que resuelve la PL debe existir primeramente un objetivo buscado por la organización. Este objetivo debe ser cuantificado por medio de una función objetivo lineal, la cual debe definirlo claramente. Ejemplos típicos de funciones objetivos son los de maximización de utilidades, minimización de costos, minimización de tiempos y maximización de probabilidades de éxito. Para definir claramente el objetivo buscado, deben identificarse con antelación las actividades que la organización puede desarrollar, representadas en las variables de decisión del problema. Una vez definidas las actividades y la función objetivo, se pasa a estudiar las restricciones del sistema, las cuales son el reflejo de los recursos limitados de que se dispone. El desarrollo de cada actividad consumirá parte de los recursos y la cuantificación total de la contribución de todas las actividades conformará las restricciones del sistema. Estas restricciones se expresan como funciones matemáticas lineales de igualdad o desigualdad. Una vez obtenidos la función objetivo y el cuerpo de restricciones, se pasa a la solución del modelo, si ésta existe, y a su análisis correspondiente. En PL es más importante la obtención del modelo que la solución del mismo, excepto en el caso de que existan condiciones especiales o en problemas de gran tamaño, donde la solución se vuelve dificultosa. Esto se explica porque actualmente la solución de grandes problemas de PL puede hacerse en forma muy eficiente utilizando el método simplex. Los problemas de PL son tipo P, ya que se conocen algoritmos polinomiales para resolverlos. Curiosamente, se conocen problemas para los cuales el algoritmo simplex corre en tiempo exponencial. Sin embargo, en la práctica nunca se ha observado este comportamiento del método simplex y por ello sigue siendo tal vez el método más eficiente de solución de problemas de programación lineal.1 Existen, por ejemplo, un gran número de procedimientos que resuelven subproblemas de PL miles de veces en forma eficiente. Por ejemplo, como se analizará más 1 Para mayores detalles sobre esta discusión, consultar Chvátal (1983), Capítulo 4, pág. 45–52. adelante, la solución de problemas de programación entera mediante las técnicas de ramificación y acotamiento requiere de la solución de un gran número de subproblemas de programación lineal continúa. La obtención del modelo se basa en la observación cuidadosa del sistema bajo estudio. Este paso es fundamental para que los resultados eventuales del modelo tengan validez. 1.3. SUPOSICIONES DE LOS PROGRAMACIÓN LINEAL MODELOS DE Las condiciones básicas que deben cumplirse para que tanto la función objetivo como cada una de las restricciones sean de naturaleza lineal son la proporcionalidad y la aditividad. Ellas se explican a continuación. 1.3.1. Proporcionalidad La proporcionalidad expresa básicamente que si una unidad de la actividad i cuesta $a y gasta b unidades del recurso j, entonces xi unidades de la misma actividad costarán $axi y consumirán bxi unidades del recurso j. Esto debe ser válido para cualquier actividad i y para cualquier recurso j, de tal forma que el modelo obtenido sea lineal. La proporcionalidad debe, por lo tanto, existir en todas las restricciones y en la función objetivo. Este no es el caso más común en la realidad. Sin embargo, dentro de ciertos rangos normales de operación de los sistemas, existe comúnmente la proporcionalidad. Fuera de estos rangos es probable que haya que utilizar otras técnicas, tales como la programación no-lineal. 1.3.2. Aditividad El hecho de que exista la proporcionalidad para todas las actividades no garantiza que todas las funciones sean lineales, ya que puede existir cierto grado de dependencia entre las actividades, lo que ocasionaría la aparición de no-linealidades. Lo que plantea la aditividad, por lo tanto, es que las contribuciones de cada actividad a la función objetivo y a las restricciones sean independientes de otras actividades. A manera de ilustración, supóngase que una empresa produce los artículos A y B, los cuales producen utilidades unitarias de $30/unidad y $20/unidad, respectivamente, e independientemente de las cantidades que se produzcan. Así, la función objetivo se escribiría como: = 30 + 20 [$] (3.1) Donde XA y XB son las cantidades a producir de A y B, respectivamente. Obsérvese, primero, que el supuesto de proporcionalidad está implícito en la función objetivo (3.1). Además, las contribuciones de cada actividad, XA y XB, son independientes entre sí. Supóngase ahora que el hecho de producir una mayor cantidad del artículo B, hace que los costos de producción del artículo A se incrementen. Así, por ejemplo, la utilidad unitaria del artículo A se vería disminuida mediante cierto factor y podría expresarse como $(30 – 0.0001XB)/unidad. La función objetivo sería por lo tanto: = (30 – 0.0001 ) + 20 [$] (3.2) Claramente, al aparecer el producto cruzado XAXB, la función objetivo deja de ser lineal, convirtiéndose en una función cuadrática de manejo dificultoso. Cabe la pregunta de por qué la PL se utiliza tan ampliamente si estos supuestos casi nunca se cumplen en la práctica? Una respuesta simple es que afortunadamente las no-linealidades de la práctica en la mayoría de los casos pueden adaptarse, transformarse o asumirse como lineales dentro de cierto rango de validez. A medida que se vayan desarrollando los modelos típicos se verá que realmente la suposición de linealidad es razonable en la mayoría de los casos analizados. 1.3.3. Certeza y Divisibilidad Algunos autores hablan de otros dos supuestos, la certeza y la divisibilidad (Ver Hillier y Lieberman (1997)). La divisibilidad se aplica fundamentalmente a problemas de números enteros. Existen muchos casos prácticos en los cuales las variables de decisión o actividades sólo tienen significado físico si sus valores son enteros. Por ejemplo, si una compañía de aviación está analizando cuántos aviones comprar de cierto tipo, es obvio que una respuesta de 2.33 aviones no es satisfactoria y deberá darse una respuesta entera en su lugar, la cual no necesariamente corresponde a alguno de los enteros vecinos. Para problemas enteros se han desarrollado técnicas de solución especiales, las cuales se siguen investigando actualmente. Una introducción a este tópico se presentará posteriormente. La certeza, más que un supuesto, es una característica propia de los modelos de PL. Se dice entonces que todos los valores de los parámetros que alimentan el modelo tienen valores determinísticos, o sea que no se consideran como variables aleatorias. Una demanda de un producto, por ejemplo, se obtiene como un valor promedio estimado, pero su distribución probabilística propia no se considera en el modelo. En la mayoría de los casos prácticos, ningún parámetro o variable puede considerarse determinístico. En la mayoría de los casos, los parámetros y variables tienen un rango de validez entre los cuales pueden oscilar sus valores y, por lo tanto, se constituyen en variables aleatorias cuya distribución probabilística puede o no ser conocida. Actualmente están en investigación y desarrollo técnicas de programación lineal estocástica y programación lineal con conjuntos difusos, donde se consideran algunos parámetros de los modelos como variables aleatorias2. Dado que el desarrollo de la programación lineal estocástica es muy incipiente, el problema de la incertidumbre de los parámetros de los modelos de PL aún se resuelve de una forma relativamente sencilla, haciendo uso de los análisis de sensibilidad. Normalmente se obtiene la solución óptima utilizando los mejores estimados de los parámetros y, posteriormente, se analizan los posibles efectos de su variación sobre la solución óptima original. Si estos efectos no son significativos, no se justifica invertir mayor esfuerzo, tiempo y dinero en su estimación más precisa. Si por el contrario, se observa que el efecto de cambios pequeños en los valores de ciertos parámetros es significativo, debe prestársele especial atención a su estimación más precisa y a su posibilidad de cambio real en el sistema bajo estudio. Igualmente, existen otras tendencias actuales tales como la combinación de modelos matemáticos con modelos de simulación3, los cuales representan de una manera más fiel los sistemas y sus variabilidades, y otros como el análisis de diversos escenarios aleatorios con la ayuda de modelos de optimización4. A continuación se presentan diversos ejemplos de formulación de modelos de programación lineal. Cada uno de ellos analiza aspectos diferentes e introduce distintos factores útiles para la formulación real de modelos aplicables en la práctica. 2 Ver, por ejemplo, Taha (1998), pág. 807. Ver, por ejemplo, Hicks (1999). 4 Ver, por ejemplo, Escudero et al. (1999). 3