Academia.eduAcademia.edu

TECNICAS Y HERRAMIENTAS DE IO

Pocas situaciones en la vida no son susceptibles de ser descritas en términos de optimización 1.1 ¿Qué es la Investigación Operativa? Existen varias definiciones diferentes de lo que es la Investigación Operativa (IO). Por ejemplo: • Un método científico para dotar a los departamentos ejecutivos de una base cuantitativa para las decisiones que tengan que ver con las operaciones bajo su control (McCord y Kimball, 1951). • El uso de la lógica y de la matemática de forma que no interfieran con el sentido común (Woolsey, 1980). • La ciencia que estudia el modelado de sistemas probabilísticos y determinísticos que se originan en la vida real desde un punto de vista de toma de decisiones óptimas (Hillier and Lieberman, 1990). • El estudio de cómo formular modelos matemáticos para problemas complejos de administración e ingeniería y cómo analizarlos para tener una visión de las posibles soluciones (Rardin, 1998). Quizás la definición de intencionalidad más generalista pero a la vez más completa en cuanto a lo descriptiva es la que aparece en el texto (Lawrence y Pasternak, 1998): Un enfoque científico para la toma de decisiones ejecutivas, que consiste en: a) el arte de modelar situaciones complejas; b) la ciencia de desarrollar técnicas de solución para resolver dichos modelos y c) la capacidad de comunicar efectivamente los resultados. A la que en mi opinión sólo le faltaría incluir el objetivo general de la IO: estudiar la asignación óptima de recursos escasos a determinada actividad. A menudo la Investigación Operativa es denominada Ciencia de la Administración. Esta ciencia, tal como la conocemos hoy, se desarrolló a partir de los grandes éxitos obtenidos mediante su aplicación a la resolución de problemas de organización militar en la Segunda Guerra Mundial. Por ello recibió el nombre de Investigación Operativa (Operations Research). Cuando estas técnicas fueron introduciéndose en el mundo de los negocios como ayuda a la toma de decisiones, se acuñó el término Ciencia de la Administración o Ciencias de la Gestión (Management Science). En la actualidad hay muy poca distinción entre ambos términos, y ambos se usan indistintamente en la literatura. 1.2 Comentarios históricos Hacer un uso óptimo de los recursos disponibles es un problema tan antiguo como la humanidad. Sin embargo, hasta finales del siglo XIX y principios del XX no empezaron a tomar forma los rudimentos de la Investigación Operativa tal y como la conocemos hoy. Las

1. La Investigación Operativa Pocas situaciones en la vida no son susceptibles de ser descritas en términos de optimización 1.1 ¿Qué es la Investigación Operativa? Existen varias definiciones diferentes de lo que es la Investigación Operativa (IO). Por ejemplo: • Un método científico para dotar a los departamentos ejecutivos de una base cuantitativa para las decisiones que tengan que ver con las operaciones bajo su control (McCord y Kimball, 1951). • El uso de la lógica y de la matemática de forma que no interfieran con el sentido común (Woolsey, 1980). • La ciencia que estudia el modelado de sistemas probabilísticos y determinísticos que se originan en la vida real desde un punto de vista de toma de decisiones óptimas (Hillier and Lieberman, 1990). • El estudio de cómo formular modelos matemáticos para problemas complejos de administración e ingeniería y cómo analizarlos para tener una visión de las posibles soluciones (Rardin, 1998). Quizás la definición de intencionalidad más generalista pero a la vez más completa en cuanto a lo descriptiva es la que aparece en el texto (Lawrence y Pasternak, 1998): Un enfoque científico para la toma de decisiones ejecutivas, que consiste en: a) el arte de modelar situaciones complejas; b) la ciencia de desarrollar técnicas de solución para resolver dichos modelos y c) la capacidad de comunicar efectivamente los resultados. A la que en mi opinión sólo le faltaría incluir el objetivo general de la IO: estudiar la asignación óptima de recursos escasos a determinada actividad. A menudo la Investigación Operativa es denominada Ciencia de la Administración. Esta ciencia, tal como la conocemos hoy, se desarrolló a partir de los grandes éxitos obtenidos mediante su aplicación a la resolución de problemas de organización militar en la Segunda Guerra Mundial. Por ello recibió el nombre de Investigación Operativa (Operations Research). Cuando estas técnicas fueron introduciéndose en el mundo de los negocios como ayuda a la toma de decisiones, se acuñó el término Ciencia de la Administración o Ciencias de la Gestión (Management Science). En la actualidad hay muy poca distinción entre ambos términos, y ambos se usan indistintamente en la literatura. 1.2 Comentarios históricos Hacer un uso óptimo de los recursos disponibles es un problema tan antiguo como la humanidad. Sin embargo, hasta finales del siglo XIX y principios del XX no empezaron a tomar forma los rudimentos de la Investigación Operativa tal y como la conocemos hoy. Las primeras investigaciones de interés son de las dos primeras décadas del siglo XX: los diagramas de Gantt para Planificación de Proyectos, los estudios de Markov sobre Procesos Estocásticos, la Teoría de Colas, etc. Pero muchos expertos en la materia sitúan sus orígenes en la Segunda Guerra Mundial, cuando la confianza en la intuición comenzó a desvanecerse, y se empezaron a utilizar técnicas de Investigación Operativa para la toma de decisiones bajo escasez de recursos. Para maximizar el rendimiento, era necesario asignar los recursos disponibles, de un modo efectivo, a las diversas operaciones y actividades. Los dirigentes militares británicos encargaron a científicos e ingenieros el análisis de varios problemas: despliegue de radares, manejo de operaciones de bombardeo, colocación de minas, etc. Las administraciones británica y americana formaron grupos de trabajo, compuestos por gran número de científicos (matemáticos, estadísticos, físicos, biólogos y psicólogos) para hacer una distribución racional, más fiable que la dada por la intuición, de los medios con los que contaban. Los esfuerzos de este primer grupo de Investigación Operativa fueron decisivos para ganar combates tan importantes como la Batalla Aérea Británica, la Batalla del Atlántico Norte y la Campaña de las Islas del Pacífico. Después de la guerra, estos éxitos atrajeron la atención de la industria, que quería solucionar nuevos problemas causados por el aumento de la complejidad de los procesos industriales y una mayor especialización en los mismos, lo que creaba una posible incompatibilidad de objetivos. Además, podemos identificar al menos otros dos factores que contribuyeron significativamente al gran avance de esta ciencia en ese período. De un lado, las mejoras sustanciales que se obtenían al desarrollar y perfeccionar las técnicas de Investigación Operativa, y de otro, el desarrollo paralelo de los ordenadores, que aumentó de forma espectacular la capacidad de almacenamiento de datos y la velocidad de resolución de los problemas. Uno de las áreas más importantes y activas de la Investigación Operativa es la Programación Lineal. Los problemas de Programación Lineal se basan en la optimización de una función lineal, la función objetivo, sujeta a una serie de restricciones lineales de igualdad o desigualdad de las variables. El reconocimiento de la importancia de este tipo de problema coincidió con el desarrollo de un método eficiente, el Método Símplex (George Dantzing, 1941) y un medio, el ordenador, para aplicarlo. Una buena parte de los fundamentos de la Programación Lineal se descubrió en un período sorprendentemente corto de tiempo de intensa labor de investigación y desarrollo, entre los años 1947 y 1949. En la actualidad, el Algoritmo Símplex es una herramienta estándar que ha ahorrado enormes cantidades de dinero a la mayoría de las empresas o compañías en los países industrializados, y su uso en otros sectores de la sociedad avanza rápidamente. Se han escrito docenas de libros sobre Programación Lineal y publicado centenares de artículos describiendo aplicaciones importantes. Recientemente, el Algoritmo Símplex ha sido elegido como uno de los diez algoritmos de mayor influencia en el desarrollo y la práctica de la ciencia y la ingeniería en el siglo XX (Nash, 2002). Uno de los descubrimientos más importantes en el desarrollo reciente de la Programación Lineal es el concepto de dualidad. Cada problema de Programación Lineal tiene asociado otro problema del mismo tipo que se denomina el problema dual. Las relaciones existentes entre el problema original (problema primal) y su dual son muy útiles en muchas situaciones. En 1954, Lemke desarrolló el Método Dual del Símplex que conduce desde una solución óptima que no cumple las condiciones de no negatividad a la solución final del problema. Este método será fundamental en el desarrollo de algunos algoritmos para Programación Entera. En 1956, Dantzing, Fold y Fulkerson desarrollaron el Algoritmo Primal-Dual General, que resuelve problemas de Programación Lineal trabajando simultáneamente con los problemas Primal y Dual. Originalmente, este algoritmo fue creado para resolver un tipo especial de problemas que surgieron en Flujo de Redes. Basándose en la Teoría de la Dualidad, se desarrolló el Análisis de Sensibilidad, que constituye una parte clave en cualquier estudio de Programación Lineal, pues muchos de los valores de los parámetros usados en los modelos son estimaciones y no valores exactos, y por tanto es necesario investigar qué efecto tendría la variación de alguno de ellos en la solución final. En los últimos años, la Programación Lineal ha vuelto a ser un foco de atención mayoritaria y un área de investigación muy activa. La causa de este auge ha sido el desarrollo de dos algoritmos que difieren radicalmente del Método Símplex: el primero es el Método del Elipsoide, desarrollado independientemente por Shor (1970) y Yudin y Nemiroviskii (1976) para Programación Convexa No Diferenciable, aunque fue Kachian quien demostró en 1979 que dicho método puede resolver problemas de Programación Lineal rápidamente en un sentido teórico, y el segundo es el Algoritmo de Punto Interior Proyectivo de Karmarkar (1984) que constituye una potente y prometedora herramienta para resolver problemas grandes, pues es un algoritmo de tiempo polinomial, a diferencia del Símplex, que es un algoritmo de tiempo exponencial. En muchas situaciones de la vida real, las variables representan objetos indivisibles y por tanto deben tomar valores enteros. Como respuesta a esta necesidad surgen algoritmos de resolución para problemas de Programación Lineal Entera. A finales de los años 50 y principios de los 60, Ralph Gomory inició sus trabajos en esta rama de la Optimización, y diseñó el Método de los Planos Cortantes de Gomory, que contribuye en gran medida a profundizar en el conocimiento del problema. En 1970 Mitten publicó un artículo en el que se recogían los Métodos de Separación y Acotación para la resolución de este tipo de problemas, que fueron desarrollados durante la década de los 60. Estos métodos se basan en principios muy simples y funcionan muy bien para problemas con menos de cien variables, pero un crecimiento pequeño del tamaño del problema puede provocar tiempos de computación demasiado grandes, ya que dichos periodos crecen exponencialmente. Muchos problemas importantes que surgían en la práctica no podían ser resueltos, y este crecimiento exponencial parecía difícil de superar. Sin embargo, a mediados de los años 80 se publicaron artículos clave que marcaron una nueva era en la metodología de la solución de problemas de Programación Entera. Las nuevas aproximaciones algorítmicas combinan el preprocesamiento automático de los problemas, la generación de planos cortantes y algunas técnicas de separación y acotación. Cuando ni siquiera estos algoritmos pueden encontrar la solución óptima para un modelo real, se suele resolver el problema sin la restricción de que los valores de las variables sean enteros, redondeando posteriormente la solución obtenida. Esta técnica resulta normalmente muy poco satisfactoria, pues la solución auténtica del problema puede estar muy lejos de la solución redondeada. Para solventar estos problemas, disponemos actualmente de Algoritmos Heurísticos bastante eficientes, los cuales suelen encontrar de una forma rápida soluciones factibles aceptables que, aunque no sean necesariamente óptimas, están más cerca de la solución final que las soluciones redondeadas. Dentro de los problemas de Programación Lineal existen dos que por su especial estructura permiten el desarrollo y aplicación de algoritmos especiales: el problema del transporte y el problema de asignación. En el problema del transporte, el objetivo es llevar ciertas cantidades de productos desde varios orígenes a diferentes destinos, de forma que alguna medida de la efectividad de la operación sea óptima. En 1941, Hitchcock formuló el problema en la forma que lo conocemos hoy. Asimismo, Koopman publicó en 1947 un artículo que también contribuyó significativamente al planteamiento original del problema, y Dantzing desarrolló en 1951 el Método Símplex para el Problema del Transporte. El problema de asignación es a su vez un caso especial del problema del transporte en el que se deben asignar ciertos objetos a ciertas tareas de forma unívoca. La estructura particular del problema hace que las soluciones sean degeneradas y permitió a los matemáticos húngaros König y Egerváry demostrar un teorema esencial para el desarrollo del método húngaro, que se fundamenta en la idea de que se puede sumar o restar una constante de cualquier fila o columna sin cambiar el conjunto de soluciones óptimas. Basándose en el trabajo de König, Kuhn ideó en 1955 el Método Húngaro. Uno de los desarrollos más espectaculares en Investigación Operativa ha sido el gran avance en la metodología y aplicación de los modelos de Optimización de Redes. El Análisis de Redes tiene sus fundamentos teóricos en la Teoría de Grafos, una rama de las matemáticas que nace en 1736 con la formulación (realizada por Leonhard Euler) del famoso problema de los puentes de Königsberg. En 1959, Dijkstra presentó en su trabajo “A note on two problems in connection with graphs” uno de los algoritmos más sencillos y eficientes para la resolución del problema del camino más corto, que se conoce con el nombre de Algoritmo de Dijkstra. Para el problema del flujo máximo, Fold y Fulkerson diseñaron en 1962 el Algoritmo del Aumento de Flujo. Asimismo, el Algoritmo para la Búsqueda del Árbol de Expansión Minimal se debe a Kruskal, que lo desarrolló en 1957. Otro tipo de problemas de redes de gran relevancia, en cuanto a aplicaciones prácticas se refiere, es la Planificación de Proyectos. Para dirigir con éxito un proyecto a gran escala se debe realizar cuidadosamente la planificación y coordinación de las diferentes actividades que lo componen. Para ayudar a esa tarea, a mediados de los años cincuenta se crearon procedimientos formales basados en el uso de redes. Los dos procedimientos más usados son CPM (Critical Path Method), que se emplea para determinar el retraso que puede sufrir la ejecución de cada actividad sin retrasar el proyecto, en el caso en que la duración de cada una de ellas se conozca con certidumbre, y PERT (Program Evaluation and Review Technique), desarrollado en 1950 por auditores que trabajaban en la construcción del misil Polaris, y que se usa cuando la duración de las diferentes actividades que componen el proyecto es incierta. Al usar estas dos técnicas en la construcción del misil Polaris, el proyecto se finalizó dos años antes de lo planificado inicialmente, lo cual hizo que ganaran muchos adeptos. Dos son las críticas que se hacen más frecuentemente a la Programación Lineal. En primer lugar, la hipótesis de linealidad de todas las funciones que aparecen en el modelo parece demasiado restrictiva, y muchos de los problemas reales no la cumplen y por tanto no se pueden resolver aplicando este tipo de técnicas. En segundo lugar, en los problemas reales casi nunca aparece una única y bien definida función objetivo a optimizar, sino que frecuentemente la decisión se debe tomar en base a varios objetivos, la mayoría de las veces incompatibles entre sí. Como respuesta a cada una de estas críticas tenemos nuevos temas dentro de la Investigación Operativa: La Programación no Lineal y la Teoría de la Decisión Multicriterio, de las que pasamos a hablar a continuación. Aunque los problemas de Programación Lineal tienen multitud de aplicaciones, en muchos problemas interesantes de optimización puede ocurrir que la función objetivo y/o las restricciones no sean lineales. Dos de los conceptos fundamentales para la resolución de problemas de este tipo son el concepto de convexidad de conjuntos, que fue estudiado en detalle por Minkowski en 1911, y el concepto de convexidad de funciones, que normalmente se atribuye a Jensen (1906). Desde que Lagrange (1736-1813) desarrolló la Teoría Fundamental de los Multiplicadores para el tratamiento de problemas de Optimización con Restricciones de Igualdad, se han creado muchos métodos para resolver diferentes problemas de Programación No Lineal, entre los cuales podemos destacar las Condiciones de KarushKuhn-Tucker para el caso general, que fueron desarrolladas independientemente por Karush (1939) y Kuhn y Tucker (1951). Para la Programación Convexa se trabaja actualmente con tres tipos de algoritmos diferentes: • Los algoritmos de tipo gradiente, entre los cuales merece la pena destacar el Método del Gradiente Reducido Generalizado (Lasdon y Warren, 1978). • Los algoritmos secuenciales irrestrictos, que incluyen el Método de Función Barrera que fue propuesto por Carroll en 1961, y el Método de Función de Penalización, cuyo uso en la resolución de problemas con restricciones se suele atribuir a Courant, aunque fueron Camp en 1955 y Pietrgykowski en 1962 quienes discutieron el uso de esta aproximación para resolver problemas de programación no lineal. • Los algoritmos de aproximación secuencial, (incluyendo los métodos de aproximación lineal y aproximación cuadrática), como por ejemplo el Algoritmo de Frank-Wolfe (1956), que combina aproximaciones lineales de la función objetivo (lo cual nos permite usar el Algoritmo Símplex) con el procedimiento de búsqueda unidimensional. El análisis de problemas de decisión con criterios múltiples constituye quizás el área de desarrollo más activa en los últimos años en el campo de las ciencias de la decisión. Esta importante rama de la Investigación Operativa surgió como crítica al paradigma decisional tradicional en el que se trataba de tomar decisiones en base a un único criterio, cuando en muchos casos de la vida ordinaria el decisor desea ordenar el conjunto de soluciones factibles atendiendo a diferentes criterios que reflejen sus particulares preferencias. Los primeros trabajos en esta rama se deben a Koopmans (1951), que desarrolla el concepto de vector eficiente o no-dominado, y a Kuhn y Tucker (1951), que deducen las condiciones que garantizan la existencia de soluciones eficientes. Otro trabajo crucial para el desarrollo del paradigma multicriterio es el de Charnes, Cooper y Ferguson (1955), donde se presentan los aspectos esenciales de la Programación Por Metas que posteriormente desarrollan Charnes y Cooper (1961) en su ya clásico trabajo Management Models and Industrial Applications of Linear Programming. El indiscutible éxito y apoyo sociológico por parte de la comunidad científica al paradigma multicriterio ha motivado la creación de sociedades y revistas especialmente dedicada a este tipo de temas. Los problemas de Optimización Combinatoria tratan de encontrar la solución óptima de un número finito o infinito numerable de alternativas. En las últimas décadas han surgido gran variedad de este tipo de problemas en áreas tan diversas como la Investigación Operativa, las Ciencias de la Computación, la Ingeniería, etc. Entre todos los problemas de Optimización Combinatoria tal vez el más conocido sea el Problema del Viajante de Comercio. Un logro importante en la resolución de este tipo de problemas es la conjetura establecida a finales de los años sesenta, que dice que existe una clase de problemas combinatorios con una complejidad intrínseca tan grande que cualquier algoritmo que lo resuelva requiere tiempos computacionales que crecen polinomialmente con el tamaño del problema. A partir de esta conjetura surge la Teoría de la NP-completitud y el concepto de Problema Duro, cuyos primeros artículos se deben a Cook (1971,1972), Karp (1972) y Levin (1973). Para este tipo de problemas se utilizan los llamados Algoritmos de Aproximación, que proporcionan soluciones próximas al óptimo en tiempos de computación razonables. Entre ellos merece destacarse las Técnicas de Enfriamiento Estadístico, que introdujeron Kirkpatrick, Gellat y Vechi (1982, 1983) e independientemente Cerny (1985). Los conceptos básicos de estas técnicas se basan en una fuerte analogía con el proceso físico de enfriamiento de sólidos. Un rasgo característico de este método es que encuentra soluciones de alta calidad que no dependen fuertemente de la elección de la solución inicial, es decir, es efectivo y robusto. Además es posible dar una cota superior de tipo polinomial sobre los tiempos de computación para algunas implementaciones del algoritmo. Así, el método no presenta los inconvenientes que presentan los algoritmos de búsqueda local y se puede aplicar de forma general, lo que lo convierte en un interesante algoritmo general de aproximación. En la misma línea de intentar imitar procesos naturales que se sigue en el diseño de las técnicas de Enfriamiento Estadístico se encuentran las técnicas agrupadas bajo el nombre de Algoritmos Evolutivos, quizás una de las áreas en las que más intensamente se trabaja en la actualidad. Los algoritmos evolutivos son un conjunto de metaheurísticos modernos utilizados con éxito en un número elevado de aplicaciones reales de gran complejidad. Su éxito resolviendo problemas difíciles ha sido el motor de un campo conocido como Computación Evolutiva, en el que se encuadran estudios sobre aplicabilidad, complejidad algorítmica, fundamentos de funcionamiento y muchos otros aspectos, con el objetivo de facilitar la promoción y comprensión de los algoritmos evolutivos a nuevos campos de trabajo. En la actualidad, se entiende la computación evolutiva como un concepto adaptable para la resolución de problemas, especialmente apropiado para problemas de optimización complejos. Esta visión es la alternativa a algunas descripciones en desuso que muestran a la computación evolutiva como una colección de algoritmos parecidos listos para ser usados en cualquier problema. En la actualidad, y dado el gran impacto de las técnicas de IO, hay muchas asociaciones profesionales dedicadas a este campo. Hoy en día hay más de cuarenta y cuatro países que son miembros de la International Federation of Operational Research Societies (IFORS, http://www.ifors.org), organización mundial cuyo objetivo es el desarrollo de la Investigación Operativa como una ciencia unificada y su avance en todas las naciones del mundo. 1.3 Clasificación de los problemas de Investigación Operativa Los problemas de IO se pueden clasificar de dos modos diferentes: a) atendiendo al objetivo del problema y b) por el grado de certidumbre de los datos. 1.3.1 Clasificación según el objetivo del problema De acuerdo a este criterio, los problemas de IO se clasifican en: • Modelos de optimización, cuyo objetivo es maximizar cierta cantidad (beneficio, eficiencia) o minimizar cierta medida (coste, tiempo), quizás teniendo en cuenta una serie de limitaciones o requisitos que restringen la decisión (disponibilidad de capital, personal, material, requisitos para cumplir fechas límite, etc.). Ejemplos célebres de modelos de optimización son: Problemas de secuenciación, que se ocupan de colocar objetos en cierto orden. Por ejemplo, supongamos que tenemos N trabajos que deben ser procesados en el mismo orden en M máquinas distintas en las que requieren tiempos de procesamiento diferentes. ¿De qué forma se deben ordenar los trabajos para que el tiempo total de procesamiento de éstos en cada una de las máquinas sea mínimo? Problemas de localización, que consisten en realizar una asignación de recursos a actividades de manera que se optimice cierta medida de efectividad. Por ejemplo, si la medida de efectividad viene dada por una función lineal con varias variables que debe cumplir un conjunto de restricciones definidas por funciones lineales de dichas variables, el problema es de Programación Lineal. Si hay que asignar unívocamente objetos a tareas para optimizar alguna medida como puede ser un tiempo o un costo, el problema es de Asignación. Si tenemos que distribuir objetos desde ciertos orígenes a varios destinos de forma que cierta función lineal alcance su valor óptimo, estamos ante un problema de Transporte o Transbordo. Problemas de rutas, que tratan de encontrar la ruta óptima desde un origen a un destino cuando existen varias alternativas posibles. El ejemplo más característico es el clásico Problema del Viajante de Comercio. Un viajante de comercio tiene que visitar N ciudades una y sólo una vez antes de volver a su origen. ¿ En qué orden debe visitarlas para minimizar la distancia total viajada?. Este problema de formulación tan sencilla es, en muchos casos, muy difícil de resolver. Problemas de búsqueda, que difieren de los otros tipos de problemas que hemos discutido en que hay que buscar cierta información que es necesaria para tomar una decisión. Algunos ejemplos son: buscar barcos enemigos en el océano, realizar auditorías en empresas en busca de trampas o errores, realizar exploraciones de la tierra para encontrar recursos naturales como petróleo, cobre, etc. En cada caso el objetivo es minimizar tanto los costos asociados con la recolección y análisis de datos para reducir los errores de decisión como los propios costos de decisión. La Teoría de la Decisión Estadística proporciona una base para resolver muchos problemas de búsqueda. • Modelos de predicción, cuyo objetivo es describir o predecir sucesos (nivel de ventas, fechas de terminación de proyectos, número de clientes, etc.) dadas ciertas condiciones. Ejemplos de estos modelos son: Problemas de reemplazamiento, que se ocupan de decidir el tiempo adecuado para reemplazar los equipos que fallan o se deterioran. Uno de los problemas que se ajusta a este planteamiento nos es muy conocido: ¿Cuándo debemos cambiar de coche?. Como cada uno tiene su propia medida de efectividad, no hay una respuesta única aún suponiendo que los coches tuvieran exactamente el mismo rendimiento. Otros problemas bastante cotidianos que encajan en este marco son el problema de reemplazamiento de maquinaria industrial, de ordenadores en centros de cálculo, establecimiento de garantías, etc. Problemas de inventario, que consisten en determinar la cantidad ideal de productos que se deben tener disponibles en una tienda o almacén. Si un cliente quiere comprar una cierta cantidad de productos pero no están disponibles, esto supondría una venta perdida. Por otro lado, si hay un exceso de productos, el costo de almacenamiento puede ser demasiado grande. El objetivo de este problema es encontrar un punto de equilibrio. Problemas de colas, que son desgraciadamente muy cotidianos. Esperamos en colas para coger el autobús, para poner una transferencia, etc. Cualquier problema en el que haya que esperar para obtener un servicio es un problema de colas. Estos problemas vienen definidos por la distribución de los tiempos entre dos llegadas consecutivas al sistema, la distribución de los tiempos de servicio de cada uno de los dependientes, el número de dependientes presentes en el sistema, la disciplina de la cola y el tamaño de la sala de espera. El objetivo del problema es encontrar una forma de mejorar el rendimiento global del sistema, que se mide normalmente atendiendo al tamaño de la cola, o bien al tiempo que transcurre desde que un cliente llega al sistema hasta que lo abandona (tiempo de respuesta). En la gran variedad existente de libros de Teoría de Colas se proponen soluciones para muchos modelos - de este tipo, pero los problemas reales son tan complejos y sus componentes están tan interconectadas que la simulación es un aspecto vital en este área. Problemas de competencia, que surgen cuando dos o más objetos compiten por un recurso. Muchas veces un problema de competencia consiste en una lucha para obtener un contrato para prestar cierto servicio o conseguir un privilegio. Resolver un problema de este tipo conlleva un proceso subyacente de Toma de Decisiones. 1.3.2 Clasificación según la naturaleza de los datos Otra clasificación que surge de los problemas de Investigación Operativa atiende más bien al tipo de modelo donde encaja el problema. En algunos casos tendremos que ajustar el problema con un Modelo Determinístico, en el cual todos los datos importantes del mismo se suponen conocidos, pero en otros, algunos de estos datos se consideran inciertos y normalmente vienen dados por una probabilidad por lo que será necesario la utilización de un Modelo Probabilístico. Sin embargo, existen modelos que conviene tratar como Híbridos de estas dos categorías. En la siguiente figura se hace una agrupación aproximada, a grandes rasgos, de los diferentes tipos de problema dentro de la categoría a la que pertenecen: Modelos de Investigación Operativa Determinísticos Híbridos Estocásticos Optimización No Lineal Optimización Lineal Planificación de proyectos Análisis de decisión Métodos clásicos Programación Lineal Programación Dinámica Procesos estocásticos Métodos de búsqueda Transporte y asignación Modelos de inventario Teoría de colas Programación No Lineal Programación Entera y Binaria Simulación Problemas de redes Programación Multicriterio Figura 1. Clasificación de los problemas de IO atendiendo a la naturaleza del modelo. Una vez clasificados los problemas de Investigación Operativa, pasamos a describir el proceso de resolución de los mismos. 1.4 Metodología de la Investigación Operativa En su forma más simple, la Investigación Operativa puede considerarse como un procedimiento que consta de cuatro pasos o etapas, tal como se muestra en la Figura 2: Paso 1 Definición del problema Paso 2 Modelado matemático Paso 3 Solución del modelo Paso 4 Presentación/Implementación resultados Figura 2. Metodología de la Investigación Operativa. Sin embargo, los proyectos raramente se ajustan totalmente a este esquema en cascada, sino que normalmente los modelos han de ser revisados, las soluciones han de ser modificadas o los informes han de ser reescritos a medida que se modifican y ajustan el conjunto inicial de datos e hipótesis. Por tanto, algunas partes del proceso deben repetirse hasta que se encuentra una solución adecuada. Paso 1. Definición del problema Quizás la parte más importante de todo el proceso sea la definición del problema. Una respuesta incorrecta a una pregunta correcta no suele tener consecuencias fatales, ya que se pueden hacer revisiones y explorar otras alternativas: sin embargo, la respuesta correcta a una pregunta incorrecta puede ser desastrosa. Es importante que el problema esté claramente definido antes de invertir una gran cantidad de trabajo y energía en resolverlo. A la hora de definir el problema, el analista debe enfrentarse a uno o más de los factores siguientes: datos incompletos, conflictivos o difusos; diferencias de opinión; presupuestos o tiempos limitados; cuestiones políticas; el decisor no tiene una idea firme de qué quiere realmente. Para tratar con estos problemas, un buen plan de trabajo es el siguiente: 1. Observar. El analista debe realizar un esfuerzo para contemplar el problema desde diferentes puntos de vista, de modo que termine entendiendo el problema tan bien o mejor que las personas directamente implicadas. 2. Ser consciente de las realidades políticas. Casi siempre hay conflictos entre los jefes y los trabajadores, o entre varios jefes. Para el analista, esto significa que a menudo recibirá información distorsionada o incompleta de cada grupo. 3. Decidir qué se quiere realmente. El analista debe estar seguro de que la compañía tiene claros sus objetivos antes de desarrollar y resolver un modelo. 4. Identificar las restricciones. Es importante saber qué tipo de limitaciones pueden afectar la decisión final, para posteriormente incluirlas en el modelo. 5. Buscar información de modo continuo. A lo largo de todo el proceso, el analista no debería perder el contacto con el decisor. Esto permite que ambos modifiquen de forma continua sus observaciones iniciales y estén al día del desarrollo del proceso. Paso 2. Modelado matemático El modelado matemático es un procedimiento que reconoce y verbaliza un problema para posteriormente cuantificarlo transformando las expresiones verbales en expresiones matemáticas. El modelado matemático es un arte, que mejora con la práctica. El proceso del modelado matemático consta de cuatro pasos, que se ilustran en la siguiente figura: MODELADO MATEMÁTICO Paso 1. Identificar las variables de decisión Paso 2. Identificar la función objetivo Paso 3. Identificar las restricciones Paso 4. Traducir los elementos anteriores a un modelo matemático Figura 3. Etapas del modelado matemático. 1. Identificar las variables de decisión. Un paso crucial en la construcción de un modelo matemático es determinar aquellos factores sobre los que el decisor tiene control, que normalmente se llaman variables de decisión del problema. Hay que distinguir entre lo que está a nuestro alcance cambiar (por ejemplo, la cantidad de artículos a producir de cada producto o el material a utilizar) de aquello que no podemos modificar (como el número de horas de trabajo disponibles o fechas límite a cumplir), que normalmente denominaremos parámetros. Según el tipo de problema, lo que a veces es una variable de decisión en otros casos puede ser un parámetro o viceversa. En muchos casos, definir las variables de decisión es la etapa más difícil, pues una vez que están bien definidas, el resto del proceso fluye de modo natural. Sin embargo, una definición incorrecta de las variables de decisión bloquea totalmente el resto del problema. Para identificar las variables de decisión, puede ser útil hacerse las siguientes preguntas: ¿qué es lo que hay que decidir? o ¿sobre qué elementos tenemos control? o ¿cuál sería una respuesta válida para este caso?. 2. Identificar la función objetivo. El objetivo de la mayoría de los estudios de IO, y el de todos los modelos de optimización, es encontrar el modo de optimizar alguna medida respetando las restricciones existentes. Aunque una compañía quizás esté satisfecha con una mejora sustancial de la situación actual, normalmente el objetivo es buscar el valor óptimo para cierta función. A la hora de encontrar la función objetivo, la pregunta que podemos hacernos es ¿qué es lo que queremos conseguir? o Si yo fuera el jefe de esta empresa, ¿qué me interesaría más?”. 3. Identificar las restricciones. En la búsqueda de la solución óptima, normalmente existen ciertas restricciones (limitaciones, requisitos) que limitan nuestra decisión. Ejemplos de restricciones frecuentes son: los recursos disponibles (trabajadores, máquinas, material, etc.) son limitados; fechas límite impuestas por los contratos; restricciones impuestas por la naturaleza del problema (por ejemplo: el flujo de entrada a un nodo debe ser igual al flujo de salida) 4. Traducir todos los elementos básicos a un modelo matemático. Una vez identificados los elementos básicos hay que expresarlos matemáticamente. Dependiendo de la naturaleza de las funciones matemáticas, el modelo será de un tipo u otro; por ejemplo, si todas ellas son lineales, el problema será de Programación Lineal; si existe más de una función objetivo, será de programación multicriterio, etc. Paso 3. Resolución del modelo Aceptado ya el modelo matemático que mejor describe la situación en estudio, se aplican los algoritmos y métodos matemáticos diseñados para su resolución. Las etapas en la resolución del modelo se detallan en la Figura 4. RESOLUCIÓN DEL MODELO Paso 1. Elegir la técnica de resolución adecuada Paso 2. Generar las soluciones del modelo Paso 3. Comprobar/validar los resultados Paso 4. Si los resultados son inaceptables, revisar el modelo matemático Paso 5. Realizar análisis de sensibilidad Figura 4. Etapas en la resolución del modelo. 1. Elegir la técnica de resolución adecuada. Afortunadamente, muchos de los modelos de IO pueden resolverse utilizando técnicas eficientes ya existentes, que proporcionan una solución óptima para el modelo. En otros casos, el problema es demasiado complejo o el algoritmo de resolución tiene una complejidad computacional inaceptable y hay que recurrir a métodos heurísticos de resolución. 2. Generar las soluciones del modelo. Una vez elegida la técnica de resolución, el siguiente paso es resolver el problema. Como normalmente la mayoría de los modelos conllevan la manipulación de una gran cantidad de datos, los problemas deben ser resueltos con ayuda del ordenador, utilizando alguno de los muchos programas de IO que existen o incluso hojas de cálculo (las versiones actuales de la mayoría de ellas incluyen operadores que realizan análisis de optimización). 3. Comprobar/validar los resultados. Dado que los modelos matemáticos no son más que simplificaciones de la realidad, las soluciones óptimas generadas para un modelo pueden no ser óptimas para el problema de la vida real. En el peor de los casos, puede que ni siquiera sean factibles. De este modo, comprobar la validez de dichas soluciones constituye un paso crucial, igual que comprobar que efectivamente proporcionan un mejor rendimiento que el plan de trabajo que actualmente sigue la empresa. 4. Si los resultados son inaceptables, revisar el modelo matemático. Como ningún modelo es totalmente exacto ni ninguna técnica de validación está exenta de errores, si los resultados de la validación son inaceptables puede ser necesario revisar el modelo. Las hipótesis deben ser estudiadas, la exactitud de los datos comprobada, las aproximaciones relajadas o endurecidas, las restricciones revisadas. 5. Realizar análisis de sensibilidad. Normalmente, la solución que nos proporciona el ordenador es una respuesta para el modelo. Pero el decisor suele querer no una solución, sino varias soluciones entre las que elegir. El analista debe estar preparado para estudiar los cambios posibles y su alcance. Para ello resulta muy útil realizar el llamado análisis de sensibilidad, que estudia los cambios que puede sufrir la solución si se alteran los parámetros del modelo, o bien en qué rango de variación de los parámetros la solución sigue siendo válida. Paso 4. Presentación/Implementación de los resultados Éste es el paso final dentro del proceso. En la Figura 5 detallamos los dos pasos de los que consta. PRESENTACIÓN DE RESULTADOS Paso 1. Preparar informes y/o presentaciones Paso 2. Vigilar el proceso de implementación de la solución propuesta Figura 5. Etapas en la presentación/implementación de los resultados. 1. Preparar informes y/o presentaciones. La comunicación efectiva de los resultados de un estudio es esencial para el éxito del mismo. La utilidad del análisis será nula si las personas que toman las decisiones no aprecian totalmente su valor. Los decisores deben comprender completamente el enfoque del analista, las hipótesis y simplificaciones que se han hecho, y la lógica subyacente en la recomendación. Las presentaciones orales (utilizando transparencias, videos o software especializado) y los informes son formas tradicionales para la comunicación. 2. Vigilar el proceso de implementación. Una vez que se ha emitido el informe o se ha hecho la presentación, debe implementarse la solución propuesta, que a veces puede suponer cambios que sean conflictivos y encuentren resistencia en los miembros de la empresa. El apoyo del analista puede resultar crítico. Una vez implementada la solución, debe ser supervisada de forma continua. Dada la naturaleza dinámica y cambiante de la mayoría de las empresas, es casi inevitable que haya que realizar cambios en el modelo. El analista debe estar preparado para saber cuándo ha llegado el momento de cambiar y para realizar dichos cambios.