FACULTAD DE CIENCIAS ECONÓMICAS Y EMPRESARIALES PROGRAMACIÓN MATEMÁTICA Práctica de informática del programa LINDO Curso 2004-05 LINDO 6.1 es un programa de entorno Windows, que sirve para resolver problemas de programación lineal. 1º) Introducir un problema: El formato que hemos de seguir para introducir el problema es muy simple, tal y como vemos en el siguiente ejemplo: Max 4x+3y subject to x + y <=5 2x+y<=8 x>=1 • El programa asume las condiciones de no negatividad de las variables del problema. • Si el criterio de optimización es de mínimo, sustituimos “Max” por “Min” en el problema. Además, podemos sustituir “subject to” por “st”. • Podemos asignar un número o un comentario para cada restricción de la siguiente forma: Max 4x+3y st R1)x + y <=5 R2)2x+y<=8 x>=1 • Podemos introducir comentarios aclaratorios en algunas líneas del problema, sin más que comenzar la línea con el símbolo “!”. Por ejemplo: ! Problema del beneficio Max 4x+3y subject to x + y <=5 2x+y<=8 x>=1 1 El símbolo “!” nos puede servir también para que LINDO no tenga en cuenta una línea. Por ejemplo, si deseamos resolver el problema anterior sin la restricción x>=1, no es necesario borrarla, basta con incluir el símbolo “!” delante de ella: ! Problema del beneficio Max 4x+3y subject to x + y <=5 2x+y<=8 !x>=1 • Los nombres de las variables del problema pueden ser de hasta 8 caracteres. 2º) Resolver un problema: Una vez introducido un problema, lo resolveremos de la siguiente forma: • Para resolver el problema presionaremos el botón de la barra de herramientas, o bien, a través del teclado, presionamos Ctrl+S. Aparecerán en pantalla dos ventanas, una que resume de la resolución del problema (nº de iteraciones realizadas para resolver, valor de la función objetivo, etc.) y otra en la que nos preguntan si deseamos realizar análisis de sensibilidad del problema: 2 Tras responder a la pregunta correspondiente al análisis de sensibilidad y cerrar la ventana Lindo Solver Status, Lindo muestra la solución del problema en una ventana nueva a la que denomina Reports Window (Ventana de Resultados), y a la que podemos acceder de distintas formas: • Presionando el botón : • En el menú Window, marcando Reports Window. de la barra de herramientas. La ventana de resultados muestra la siguiente información: 1) 18.00000: VARIABLE X Y ROW 2) 3) 4) VALUE 3.000000 2.000000 REDUCED COST 0.000000 0.000000 SLACK OR SURPLUS 0.000000 0.000000 2.000000 NO. ITERATIONS= DUAL PRICES 2.000000 1.000000 0.000000 1 RANGES IN WHICH THE BASIS IS UNCHANGED: CURRENT COEF 4.000000 3.000000 OBJ COEFFICIENT RANGES ALLOWABLE ALLOWABLE INCREASE DECREASE 2.000000 1.000000 1.000000 1.000000 2 3 CURRENT RHS 5.000000 8.000000 RIGHTHAND SIDE RANGES ALLOWABLE INCREASE 2.000000 2.000000 4 1.000000 2.000000 VARIABLE X Y ROW 3 ALLOWABLE DECREASE 1.000000 2.000000 INFINITY Interpretación de estos resultados: 1) Valor de la función objetivo en el óptimo 1) 18.00000: 2) Punto óptimo: (x= 3, y = 2). REDUCED COST es el zj – cj de cada variable en la tabla del simplex. VARIABLE X VALUE 3.000000 REDUCED COST 0.000000 Y 2.000000 0.000000 3) Restricciones (variables de holgura): Cada fila corresponde a una restricción: ROW 2) 3) 4) SLACK OR SURPLUS 0.000000 0.000000 2.000000 DUAL PRICES 2.000000 1.000000 0.000000 SLACK OR SURPLUS: Mide lo que queda del recurso en la restricción y, por tanto, es el valor de la variable de holgura asociada a esa restricción. DUAL PRICES: Precio sombra o valor de la variable dual. Es, por tanto, el zj de la variable de holgura correspondiente a esa restricción. (En este caso, los cj = 0, luego también se interpretan como zj – cj). Por tanto, en nuestro problema las soluciones de las variables de holgura y los zj de las mismas son: x3 = 0, x4 = 0 y x5 = 2 z3 = 2, z4 = 1 y z5 = 0 4 4) Análisis de sensibilidad: RANGES IN WHICH THE BASIS IS UNCHANGED: 4a) Análisis de sensibilidad de costes: VARIABLE X Y OBJ COEFFICIENT RANGES CURRENT ALLOWABLE ALLOWABLE COEF INCREASE DECREASE 4.000000 2.000000 1.000000 3.000000 1.000000 1.000000 • CURRENT COEF: Valor de coeficiente de la variable en la función objetivo. • ALLOWABLE INCREASE: Cantidad en la que puedo incrementar el coeficiente sin que cambie la base. • ALLOWABLE DECREASE: Cantidad en la que puedo reducir el coeficiente sin que cambie la base. Los intervalos de sensibilidad para los costes del problema son: C1 ∈ [3, 6] y C2 ∈ [2, 4] 4b) Análisis de sensibilidad de recursos: 2 3 CURRENT RHS 5.000000 8.000000 RIGHTHAND SIDE RANGES ALLOWABLE INCREASE 2.000000 2.000000 4 1.000000 2.000000 ROW ALLOWABLE DECREASE 1.000000 2.000000 INFINITY • CURRENT RHS: Valor del recurso en la restricción. • ALLOWABLE INCREASE: Cantidad en la que puedo incrementar el coeficiente sin que cambie la base. • ALLOWABLE DECREASE: Cantidad en la que puedo reducir el coeficiente sin que cambie la base. Los intervalos de sensibilidad para los recursos del problema son: 5 b1 ∈ [4, 7], b2 ∈ [6, 10], b3 ∈ (-∞, 3] 3º) Notas: 1. Si, una vez resuelto el problema queremos modificarlo, volvemos a la ventana en la que tenemos el problema y realizamos los cambios correspondientes. Si, seguidamente lo resolvemos, la solución aparecerá en la ventana de resultados (Reports Window) seguida de la anterior. 2. Si el problema resuelto tiene infinitas soluciones, el programa no “avisa” de ello y, por tanto, para detectarlo debemos revisar las columnas DUAL PRICE Y REDUCED COST de la solución, comprobando que las variables no básicas (las que son nulas si la solución es no degenerada) tienen un zj-cj nulo. 3. Si el problema que resolvemos no posee soluciones factibles (conjunto de oportunidades vacío), aparece en pantalla la siguiente ventana: 4. Si el problema que resolvemos posee solución ilimitada, aparecerá en pantalla la siguiente ventana: 6 5. Si queremos guardar el problema o la ventana de resultados, lo haremos con los comandos Archivo, Guardar, como en cualquier programa de entorno Window. El nombre del archivo debe tener, como mucho, 8 caracteres. Los archivos Lindo tienen la extensión ltx (*.ltx). 4º) Variables: • FREE (Nombre de la Variable): Elimina las cotas de la variable. Con ello elimina la condición de no negatividad de la variable que el programa asume inicialmente. • GIN (Nombre de la Variable): La variable toma valores enteros y no negativos. • INT (Nombre de la Variable): La variable es binaria, sus valores quedan restringidos a 0 ó 1. 5º) Descripción de algunos comandos de utilidad para utilizar el programa. • Menú FILE: o New :Crea un nuevo fichero de LINDO. o Open :Abre un fichero ya existente de LINDO. o View: Abre un fichero modelo de LINDO. o Save: Graba el fichero activo (correspondiente a un problema o a resultados) en disco. . El nombre del archivo debe tener, como mucho, 8 caracteres. Los archivos Lindo tienen la extensión ltx (*.ltx). o Save As: Graba el fichero activo (correspondiente a un problema o a resultados) en un lugar distinto o con un nombre distinto. o Close: Cierra la ventana activa. o Print: Imprime el contenido de la ventana activa. o Exit: Salir de LINDO • Menú EDIT: o Undo. Deshace la última acción. o Cut: Corta el texto seleccionado. o Copy: Copia el texto seleccionado. 7 o Paste: Pega el texto anteriormente cortado o copiado. o Clear: Borra el texto seleccionado. o Find/Replace: Busca una palabra, frase,... en la ventana activa y, opcionalmente la reemplaza por otra. o Options: Configurar LINDO. o Go to Line: Ir a una línea de la ventana activa. o Paste Symbol: Muestra la lista de símbolos reservados en el programa, las y los nombre de las variables del problema. o Select All: Selecciona todo el texto de la ventana activa. o Clear All: Borra todo el texto de la ventana activa. o Choose New Font: Cambia la fuente (tipo de letra) en la ventana activa. • Menú SOLVE: o Solve: Resuelve el problema de la ventana activa. o Compile Model: Compila el problema de la ventana activa. • . Menú REPORTS: o Solution: Muestra, en la ventana de resultados, la solución óptima para el problema de la ventana activa. o Range: Muestra, en la ventana de resultados, el análisis de sensibilidad de la solución óptima para el problema de la ventana activa. o Parametrics: Realiza un análisis paramétrico de los recursos de las restricciones. El resultado lo muestra mediante una gráfica que indica cómo cambia la función objetivo ante el cambio en el recurso. o Tableau: Muestra la tabla óptima del simplex de problema. La primera fila de esta tabla es la de zj –cj, que nosotros colocamos en último lugar. o Formulation: Muestra en la ventana de resultados el problema que estamos resolviendo. 8 • Menú WINDOWS: o Open Status Window: Abre la ventana de resolución (Solver Status Window), que puede ser utilizada para seguir el proceso de resolución de un problema. o Send To Back: Cambia la ventana activa actual por la siguiente. o Cascade: Coloca todas las ventanas abiertas en cascada. o Tile: Coloca todas las ventanas abiertas en forma de “mosaico”. o Close All: Cierra todas las ventanas abiertas. 9 PROBLEMA DEL BENEFICIO Y LA CONTAMINACIÓN: 1) MÉTODO DE LAS PONDERACIONES Max λ (4x +3y) +(1-λ)(-3x-2y) st x+y<=5 2x+y<=8 x>=1 Funciones objetivo ponderadas: Vector de Pesos λ (4x +3y) +(1-λ)(-3x-2y) Solución λ=0 -3x-2y (1, 0, 4, 6, 0) λ = 0.125 -2.125x-1.375y (1, 0, 4, 6, 0) λ=0.25 -1.25x-0.75y (1, 0, 4, 6, 0) λ=0.375 -0.375x-0.125y (1, 0, 4, 6, 0) λ=0.4 -0.2x λ=0.45 0.15x+0.25y λ=0.5 0.5x+0.5y λ=0.625 1.375x+1.125y Segmento que une los puntos (1,0) y (1,4) (1,4,0,2,0) Segmento que une los puntos (1,4) y (3,2) (3,2,0,0,2) 2) PROGRAMACIÓN POR METAS LEXICOGRÁFICA Nivel 1: Introducir el problema: Min n1 st x+y<=5 2x+y<=8 x>=1 4x+3y+n1-p1=10 Solución: LP OPTIMUM FOUND AT STEP 2 OBJECTIVE FUNCTION VALUE 1) 0.0000000E+00 10 VARIABLE VALUE N1 0.000000 X 2.500000 Y 0.000000 P1 0.000000 ROW PRICES 2) 3) 4) 5) REDUCED COST 1.000000 0.000000 0.000000 0.000000 SLACK OR SURPLUS 2.500000 3.000000 1.500000 0.000000 NO. ITERATIONS= DUAL 0.000000 0.000000 0.000000 0.000000 2 Puesto que n1=0, pasamos al nivel 2 Nivel 2: Min p2 st x+y<=5 2x+y<=8 x>=1 4x+3y+n1-p1=10 3x+2y+n2-p2=6 n1=0 Solución: LP OPTIMUM FOUND AT STEP 2 OBJECTIVE FUNCTION VALUE 1) 1.000000 VARIABLE VALUE P2 1.000000 X 1.000000 Y 2.000000 N1 0.000000 P1 0.000000 N2 0.000000 ROW 2) 3) 4) 5) REDUCED COST 0.000000 0.000000 0.000000 0.000000 0.666667 1.000000 SLACK OR SURPLUS DUAL PRICES 2.000000 0.000000 4.000000 0.000000 0.000000 -0.333333 0.000000 -0.666667 11 6) 7) 0.000000 0.000000 NO. ITERATIONS= 1.000000 0.666667 2 Luego, la solución del problema es x = 1, y = 2, n1 = 0, p2 = 1. Puesto que la variable no deseada p2 es distinta de 0, la solución obtenida no es satisfactoria. 12