Instrumentos económicos en la gestión y asignación de recursos hídricos (TAYGA 10/11) INTRODUCCIÓN A LA PROGRAMACIÓN MATEMÁTICA. Cuando se está mencionando el concepto de búsqueda del mejor es prácticamente inmediato relacionarlo con un problema de optimización; entra en escena la optimización matemática, que puede ser definida como la rama de las matemáticas (de la ciencia de la computación) que trata de dar respuesta a la pregunta ¿qué es mejor? a partir de un modelo simplificado de la realidad. Considerando el caso común de optimización en el cuerpo de los números reales, el problema más simple de optimización es el denominado estudio de óptimos libres (sin restringir) de una función, que puede ser resuelto con cálculo diferencial elemental. Algo más complejos resultan los denominados problemas de optimización condicionada con restricciones de igualdad, que necesitan acudir a la construcción del lagrangiano asociado. La optimización matemática condicionada con restricciones de desigualdad constituyen en general los problemas más complejos, que tienen en el conocido teorema de Kuhn-Tucker su aproximación diferencial. Una de las posibles clasificaciones que se pueden realizar de los tipos de problemas de optimización matemática es la presentada en la siguiente tabla, en la que se han considerado cuatro características básicas: Tabla 1 Tipos de problemas de optimización matemática Característica Propiedad Número de variables de Una decisión Más de una Número reales Tipología de las variables de Enteros decisión Reales y enteros Enteros en permutaciones Sujeta a restricciones Formulación No sujeta a restricciones Lineales Tipos de funciones de las Cuadráticas variables de decisión No lineales diferentes de las cuadráticas Fuente: Elaboración propia Clasificación Univariante Multivariante Continua Discreta ( o entera) Mixta entera Combinatoria Restringida Libre Lineal Cuadrática No lineal Bajo el término de programación matemática se hace referencia al conjunto de procedimientos relacionados con el análisis de problemas de optimización restringida. Los problemas de optimización que se van a utilizar en este trabajo son generalmente aquellos en los que un centro decisor desea optimizar alguna(s) medida(s) de satisfacción seleccionando los valores de un conjunto de variables, satisfaciendo una serie de condicionantes y/o restricciones que surgen de la misma naturaleza y realidad del proceso optimizado. Así, la formulación genérica de un programa matemático de optimización restringida, utilizando un sistema algebraico de representación, vendrá dada por la siguiente expresión: Optimizar F( x ) Sujeto a (s.t.) G( x ) ∈ R1 x ∈ R2 @jmpaz 1 donde x representa el vector de variables de decisión, llamadas así porque son aquellas sobre las que el decisor puede actuar, modificando sus valores y que constituyen las “incógnitas” del problema. Los valores de x son elegidos de forma que el objetivo del decisor sea optimizado, para lo cual se debe optimizar (optimización que se concreta generalmente en maximizar o minimizar) una(s) función(es) F(x). Esta(s) función(es) objetivo del problema es/son una(s) expresión(es) algebraica(s) de dicho(s) objetivo(s) formulado(s) como una expresión de las variables de decisión. A su vez, el conjunto de restricciones o acotaciones que deben cumplir las variables de decisión se representan algebraicamente mediante la verificación de unas ecuaciones que aseguran el cumplimiento de las mismas y que restringen el espacio de soluciones posibles a un subconjunto representado por R1. La misma naturaleza de las variables de decisiones lleva a plasmar unas restricciones individuales de las mismas, que forman el subconjunto R2. La formulación de optimización restringida más conocida es la denomina programación lineal, considerada como la aproximación clásica de la programación matemática. Desde que en 1947 G. Dantzing presentara sus trabajos para planificar las actividades de las fuerzas aéreas de los Estados Unidos, las aplicaciones de la programación matemática han tenido un gran desarrollo, especialmente en su aplicación a temas económicos. En general se conoce como programa lineal a aquel en el que tanto la función objetivo como las restricciones tienen una formulación lineal sobre las variables de decisión. Los programas lineales reales tienen en el algoritmo simplex asegurada su resolución. Siendo el programa lineal real el tipo más simple, dependiendo de la naturaleza y características de los distintos elementos que se acaban de definir surgen diferentes tipos de problemas: Un problema de optimización se denomina problema de programación lineal si las funciones F(X) y G(X) son lineales y los valores de X son no negativos. Si no se cumple la condición de linealidad en la función objetivo y/o restricciones se trata de un problema de programación no lineal. Si la no linealidad sólo afecta a la función objetivo, y esta es de naturaleza cuadrática se presenta un problema de programación cuadrática. La característica de la función objetivo también marca la distinción de dos tipos básicos de programas de optimización: si sólo se considera un objetivo se hablara de programación monocriterio (también conocida como tradicional); si por el contrario se esta construyendo un problema de optimización con criterios múltiples, la programación pasa a considerarse multicriterio. Respecto a la naturaleza de las variables de decisión lo más usual es encontrar una restricción de no negatividad de las mismas dentro del cuerpo de los números reales. Pero si, como es usual en muchas formulaciones, estas variables solo pueden tomar valores enteros, surgen los denominados problemas de programación entera, que pueden ser puros si todas las variables de decisión pertenecen al cuerpo de los números enteros o mixtos, si unas variables son enteras y otras reales. Un caso particular de la programación entera es aquella en la que la naturaleza de las variables es de carácter binario, (del tipo 0,1 o si, no), obteniendo problemas de programación matemática binaria también denominados problemas enteros cero-uno (puros o mixtos). Otra característica del problema que debe ser considerado es su dimensión temporal: si se considera únicamente un período estaremos en el ámbito de la optimización estática. Si por el contrario el problema incluye una dimensión temporal, con diferentes períodos de tiempo involucrados en el análisis, la optimización pasa a denominarse dinámica. Otro aspecto importante de un programa es su carácter respecto a la certidumbre. Un programa de optimización se considera determinístico cuando los coeficientes de la función objetivo y las restricciones son constantes conocidas. Cuando alguno de dichos coeficientes no es constante, sino que es variable, pero se conoce su función de distribución el programa de optimización toma un carácter estocástico o probabilístico. Si ni tan siquiera se conoce dicha función de distribución la programación pasa a ser @jmpaz 2 posibilística. Esta clasificación se deriva de los entornos en los que se puede desarrollar cualquier problema de la teoría de la decisión y la investigación operativa, de los que son parte las técnicas de optimización. La acotación del tipo de programa de optimización, dado por las características que se acaban de mencionar, es muy importante desde un punto de vista empírico ya que, por ejemplo, determina el algoritmo matemático que se debe usar en su resolución. Uno de los elementos básicos de las técnicas de programación matemática es la del modelo. En cualquier ciencia un modelo es una descripción significada de la realidad; al ser simplificada nunca será exacta, y es una cuestión importante definir cuál es el grado de aproximación que se acepta con la simplificación, de modo que tal simplificación mantenga la situación real que se intenta describir. Así los modelos de programación representan la realidad mediante la formulación matemática de la misma. En la fase de construcción de los modelos la estructura propuesta por Heady y Candler´s 1º Determinación del espacio de variables de decisión. 2º Desarrollo de las restricciones del modelo. 3º Construcción de la función objetivo, determinando su dirección de optimización. 4º Desarrollo de la estructura del modelo, en un proceso iterativo de incorporación de restricciones, eliminación de redundancias,... terminando con la formulación en forma matricial del mismo. 5º Chequeo de los coeficientes técnicos (en el objetivo y las restricciones) incorporados al modelo, comprobando condiciones como unidades homogéneas o aditividad. También es de interés el escalamiento del modelo de forma que el rango numérico de las variables no sea muy dispar entre ellas, lo cual agilizará la búsqueda de solución del problema en bastantes algoritmos. 6º Chequeo estructural simple del modelo desarrollado, con un análisis numérico del mismo, viendo la validez de las funciones matemáticas en las que son expresados objetivos y restricciones. 7º Simplificación del modelo, fundamentalmente eliminando restricciones contenidas implícitamente en otras u otras. Es cada vez más frecuente que el software de resolución de este tipo de problemas contenga módulos que realizan de forma automática esta función, especialmente importante para simplificar procedimientos numéricos complejos. 8º Resolución del programa, utilizando el método y algoritmo apropiado a las características del problema. 9º Validación del modelo: esta es una fase fundamentalmente empírica que trata de constatar si el modelo tiene finalmente la utilidad para la que fue creado. En un modelo predictivo la realidad es la prueba definitiva. Si el modelo es prescriptivo el test final de validación es el propio decisor. @jmpaz 3