La programación de objetivos es una rama de la optimización multiobjetivo , que a su vez es una rama del análisis de decisiones multicriterio (MCDA). Puede considerarse como una extensión o generalización de la programación lineal para manejar múltiples medidas objetivas, normalmente conflictivas. A cada una de estas medidas se le asigna un objetivo o valor objetivo que se debe lograr. Las desviaciones de estos objetivos se miden tanto por encima como por debajo del objetivo. Las desviaciones no deseadas de este conjunto de valores objetivo se minimizan en una función de logro. Esta puede ser un vector o una suma ponderada que depende de la variante de programación de objetivos utilizada. Como se considera que la satisfacción del objetivo satisface a los tomadores de decisiones, se supone una filosofía de satisfacción subyacente . La programación de objetivos se utiliza para realizar tres tipos de análisis:
La programación por objetivos fue utilizada por primera vez por Charnes, Cooper y Ferguson en 1955, [1] aunque el nombre real apareció por primera vez en un texto de 1961 de Charnes y Cooper. [2] Le siguieron trabajos seminales de Lee, [3] Ignizio, [4] Ignizio y Cavalier, [5] y Romero [6] . Schniederjans proporciona una bibliografía de una gran cantidad de artículos anteriores a 1995 relacionados con la programación por objetivos, [7] y Jones y Tamiz proporcionan una bibliografía anotada del período 1990-2000. [8] Un libro de texto reciente de Jones y Tamiz. [9] ofrece una descripción general completa del estado del arte en programación por objetivos.
La primera aplicación ingenieril de la programación por objetivos, obra de Ignizio en 1962, fue el diseño y colocación de las antenas empleadas en la segunda etapa del Saturno V. Esta se utilizó para lanzar la cápsula espacial Apolo que llevó a los primeros hombres a la Luna.
Las formulaciones iniciales de programación de objetivos ordenaron las desviaciones no deseadas en una serie de niveles de prioridad, siendo la minimización de una desviación en un nivel de prioridad más alto infinitamente más importante que cualquier desviación en niveles de prioridad más bajos. Esto se conoce como programación de objetivos lexicográfica o preventiva. Ignizio [4] ofrece un algoritmo que muestra cómo un programa de objetivos lexicográficos puede resolverse como una serie de programas lineales. La programación de objetivos lexicográficos se utiliza cuando existe un orden de prioridad claro entre los objetivos que se deben lograr.
Si el responsable de la toma de decisiones está más interesado en las comparaciones directas de los objetivos, se debe utilizar la programación de objetivos ponderada o no preventiva. En este caso, todas las desviaciones no deseadas se multiplican por ponderaciones, lo que refleja su importancia relativa, y se suman como una única suma para formar la función de logro. Las desviaciones medidas en diferentes unidades no se pueden sumar directamente debido al fenómeno de la inconmensurabilidad .
Por lo tanto, cada desviación no deseada se multiplica por una constante de normalización para permitir una comparación directa. Las opciones populares para las constantes de normalización son el valor objetivo del objetivo correspondiente (convirtiendo así todas las desviaciones en porcentajes) o el rango del objetivo correspondiente (entre los mejores y los peores valores posibles, asignando así todas las desviaciones a un rango de cero a uno). [6] Para los tomadores de decisiones más interesados en obtener un equilibrio entre los objetivos en competencia, se utiliza la programación de objetivos de Chebyshev . Introducida por Flavell en 1976, [10] esta variante busca minimizar la desviación máxima no deseada, en lugar de la suma de las desviaciones. Esto utiliza la métrica de distancia de Chebyshev .
Una de las principales ventajas de la programación por objetivos es su simplicidad y facilidad de uso, lo que explica la gran cantidad de aplicaciones de la programación por objetivos en muchos y diversos campos. Los programas por objetivos lineales se pueden resolver utilizando software de programación lineal como un único programa lineal o, en el caso de la variante lexicográfica, como una serie de programas lineales conectados.
Por lo tanto, la programación por objetivos puede manejar cantidades relativamente grandes de variables, restricciones y objetivos. Una debilidad debatida es la capacidad de la programación por objetivos para producir soluciones que no son eficientes en el sentido de Pareto . Esto viola un concepto fundamental de la teoría de la decisión , que ningún tomador de decisiones racional elegirá conscientemente una solución que no sea eficiente en el sentido de Pareto. Sin embargo, existen técnicas disponibles [6] [11] [12] para detectar cuándo ocurre esto y proyectar la solución sobre la solución eficiente en el sentido de Pareto de una manera apropiada.
La fijación de pesos adecuados en el modelo de programación de objetivos es otro ámbito que ha generado debate, y algunos autores [13] sugieren el uso del proceso de jerarquía analítica o métodos interactivos [14] para este fin. Además, los pesos de las funciones objetivo se pueden calcular en función de su preferencia utilizando el enfoque de prioridad ordinal . [15]