LINGO Sintaxis
-
Author
shirley213 -
Category
Documents
-
view
253 -
download
3
Embed Size (px)
Transcript of LINGO Sintaxis
Optimizacin con LINGO oCarlos Ivorra
1
Introduccin o
LINGO es una aplicacin capaz de resolver modelos de programacin matemtica. Estas notas se han o o a elaborado considerando la versin 12.0. En esta primera seccin describiremos m o o nimamente el uso de la aplicacin en s mientras que en las siguientes describiremos el lenguaje que hemos de emplear para o , introducir los modelos en LINGO y la interpretacin de las soluciones que ste proporciona. o e Una vez instalado, LINGO trabaja con dos clases de documentos: documentos con extensin .lg4, en o los que escribimos el modelo que queremos resolver (y se crean desde el men File New) y documentos u con extensin .lgr, en los que LINGO escribe la solucin. Ambos se pueden guardar de la forma habitual, o o con los mens File Save y File Save as. . . u Una diferencia es que, si al salir de LINGO hay algn documento .lg4 sin guardar, aparece un cuadro u de dilogo que nos pregunta si queremos guardarlo, mientras que los documentos .lgr se pierden si no se a guardan. Por otro lado, una vez que LINGO ha creado un documento .lgr con datos sobre un modelo, podemos modicarlo a nuestro gusto, borrando cualquier informacin que no nos interese, aadiendo cualquier o n clase de explicaciones, t tulos, comentarios, etc., pegando en un unico documento el contenido de varios documentos .lgr o incluso .lg4, etc. Por el contrario, lo que escribamos en un documento .lg4 debe ser correcto en el lenguaje de LINGO, pues en otro caso al intentar resolver el problema obtendremos mensajes de error en lugar de la solucin o deseada. No vamos a describir aqu las funciones de los mens e iconos de LINGO, si bien muchos de ellos u realizan tareas t picas que podemos encontrar en muchas otras aplicaciones. Destacamos unicamente el men Edit Paste function, que despliega varios de los comandos y funciones disponibles en el lenguaje u de LINGO, y el men LINGO Options. . . , que nos permite congurar muchas caracter u sticas del funcionamiento de LINGO. De momento destacamos las siguientes: General Solver Dual computations: Podemos seleccionar que LINGO calcule los multiplicadores de Kuhn y Tucker o variables duales (Prices), o tambin los intervalos de sensibilidad de los coee cientes de la funcin objetivo (en programacin lineal) y de los trminos independientes de o o e las restricciones (Prices & Ranges) o nada (None). Hay una cuarta opcin que limita el o clculo de los multiplicadores para el caso en que ste consuma demasiado tiempo. a e Si la opcin Prices & Ranges est seleccionada, LINGO puede presentar mensajes de error o a con algunos problemas de programacin no lineal (incluso en algunos muy sencillos). o Variables assumed non-negative: Con esta opcin LINGO supone que todas las variables o de un problema son 0 salvo que se indique expl citamente lo contrario. En los ejemplos de estas notas supondremos siempre que esta opcin est seleccionada. o a Global Solver Use global solver: Esta opcin hace que LINGO busque ptimos globales en lugar de o o o ptimos locales. En problemas grandes puede ralentizar mucho el proceso de resolucin, pero en o 1
problemas pequeos mejora el resultado en muchas ocasiones. Naturalmente, slo es relevante n o en problemas no lineales. Model Generator Unary Minus Priority: Es conveniente jar esta opcin en Low. Su efecto es que, por o ejemplo, LINGO interprete 22 como 4 en lugar de como 4.
Assume model is linear: Esta opcin optimiza el precesamiento del modelo para problemas o lineales.
2
Introduccin bsica de un modelo en LINGO o aVeamos cmo introducir en LINGO el problema siguiente: o
Una empresa elabora tres tipos de piensos usando cuatro tipos de cereales. Cada saco de pienso contiene 50 kg. y se vende al precio (en euros) indicado en la tabla siguiente, que contiene tambin la e composicin de cada saco y las existencias de cereales en la fbrica: o a Pienso 1 2 3 Existencias Avena 25 0 20 50 000 Ma z 25 20 0 80 000 Cebada 0 20 30 40 000 Mijo 0 10 0 10 000 Precio 9 12 6.20
Determina el nmero de sacos que deber producir la empresa de cada tipo de pienso para maximizar u a el ingreso (supuesto que vende toda su produccin). o El modelo matemtico correspondiente a este problema es: a Max. 9x + 12y + 6.2z s.a 25x + 20z 50 000 25x + 20y 80 000 20y + 30z 40 000 10y 10 000 x, y, z 0 Y la forma de escribirlo en LINGO (en un documento .lg4) es la siguiente: [Ingresos] Max = 9*x+12*y+6.2*z; [Avena] 25*x+20*z < 50000; [Maiz] 25*x+20*y < 80000; [Cebada] 20*y+30*z < 40000; [Mijo] 10*y < 10000; Observaciones: La funcin objetivo se introduce precedida de Max = o de Min =. o Para introducir una desigualdad de o se escribre = aunque se puede abreviar a < o >. Para introducir una igualdad escribimos simplemente = Si hemos seleccionado la opcin Variables assumed non-negative no es necesario introducir las o condiciones de signo. Cada instruccin termina obligatoriamente con ; o 2
Los cambios de l nea son irrelevantes. Por claridad podemos escribir cada ecuacin en una l o nea, pero ser equivalente escribirlas todas seguidas en la misma l a nea. Rec procamente, si una restriccin o es muy larga, podemos partirla en dos o ms l a neas (teniendo en cuenta que un cambio de l nea es como un espacio en blanco, por lo que no podemos partir una palabra o un nmero). u Las etiquetas entre corchetes verb/[ ]/ son opcionales. Sirven unicamente para relacionar ms a fcilmente la solucin que proporciona LINGO con las distintas l a o neas del modelo. En caso de introducir etiquetas, stas no pueden contener espacios en blanco ni signos especiales, como acentos, e ees, etc. Una etiqueta puede contener nmeros, pero no empezar por un nmero. Podemos usar n u u el guin bajo para separar palabras (p.ej.: [Existencias_de_mijo]). o Las mismas consideraciones que acabamos de hacer para las etiquetas valen para los nombres de las variables. En lugar de x, y, z podr amos haber elegido x1, x2, x3, o incluso sacos_1, sacos_2, sacos_3. LINGO no distingue entre maysculas o minsculas, de modo que si en un lugar escribimos x y en u u otro X, para LINGO se tratar de la misma variable. Del mismo modo, da igual escribir Max, MAX a o max. No se pueden omitir los signos de multiplicacin *. Para introducir, por ejemplo, (x 5)3 , escrio bir amos (x-5)^3. Las funciones matemticas disponibles en LINGO (exponenciales, logaritmos, a etc.) pueden consultarse en el men Edit Paste function Mathematical / Trigonometrical u Es posible insertar l neas de comentarios (es decir, l neas que LINGO no leer) sin ms que empea a zarlas por un signo ! (y terminarlas igualmente con ;).
3
Interpretacin de la solucin o o
Una vez introducido un modelo, LINGO lo resuelve si seleccionamos el men LINGO Solve (o, u equivalentemente, pulsando en el icono en forma de diana). LINGO genera entonces un documento .lgr que, en el caso del ejemplo anterior (adems de alguna informacin tcnica) contiene lo siguiente: a o e Variable X Y Z Row INGRESOS AVENA MAIZ CEBADA MIJO Value 2000.000 1000.000 0.000000 Slack or Surplus 30000.00 0.000000 10000.00 20000.00 0.000000 Reduced Cost 0.000000 0.000000 1.000000 Dual Price 1.000000 0.3600000 0.000000 0.000000 1.200000
La columna titulada Value contiene el valor ptimo de cada variable. o En la columna titulada Slack or Surplus, la entrada correspondiente a la funcin objetivo (es o decir, la etiquetada como INGRESOS) contiene el valor ptimo de la funcin objetivo, mientras que o o las restantes contienen las variables de holgura de las restricciones. Por ejemplo, vemos que para la solucin ptima sobran 10 000 kg de ma o o z. La columna titulada Reduced Cost contiene (salvo el signo) los multiplicadores de Kuhn y Tucker de las variables del problema. El signo es el que se corresponde con la interpretacin siguiente: o
3
El coste reducido de una variable x indica aproximadamente lo que empeorar la funcin a o objetivo (es decir, disminuir en un problema de maximizar o aumentar en un problema a a de minimizar) por cada unidad que aumente el trmino independiente de la restriccin e o x 0. Estrictamente hablando, el coste reducido ha de entenderse como la derivada de la funcin valor o o ptimo respecto al trmino independiente indicado1 (cambiada de signo en los problemas de maxie mizar), por lo que la mejora de la funcin objetivo cuando la condicin de signo pasa a ser x c o o ser aproximadamente c, y sta aproximacin slo es vlida para valores de c sucientemente a e o o a pequeos. n Para problemas lineales el coste reducido tiene una interpretacin2 alternativa: o El coste reducido de una variable x que tome el valor 0 es lo que debe mejorar el coeciente de x en la funcin objetivo para que el valor ptimo de x pase a ser no nulo. (Las variables o o que ya son no nulas tienen coste reducido nulo.) As por ejemplo, por cada saco de pienso de tipo 3 que quisiramos fabricar, los ingresos dismi, e nuir en 1 C o, equivalentemente, para que resulte rentable fabricar sacos de pienso de tipo 3 es an necesario que su precio de venta aumente al menos en 1 C. La columna Dual Price contiene (salvo el signo) los multiplicadores de Kuhn y Tucker (o variables duales, en el caso de la programacin lineal) de las restricciones (excepto la entrada correspondiente o a la funcin objetivo, cuyo valor es siempre igual a 1). El signo es el que se corresponde con la o interpretacin siguiente: o El precio dual de una restriccin indica aproximadamente lo que mejorar la funcin o a o objetivo por cada unidad que aumente el trmino independiente de la restriccin. e o Esto ha de entenerse igualmente como una derivada en las mismas condiciones en que es vlida la a interpretacin de los costes reducidos. o Por ejemplo, por cada kg adicional de avena que pudiramos conseguir los ingresos aumentar en e an 0.36 C. Si hemos seleccionado la opcin para que LINGO calcule los intervalos de sensibilidad, podemos o obtenerlos en el men LINGO Range (teniendo activa la ventana correspondiente al documento .lg4). u El resultado es un nuevo documento .lgr con las tablas siguientes (que en la prctica podemos copiar y a pegar en la ventana que contiene la solucin del problema): o Objective Coefficient Ranges: Current Coefficient 9.000000 12.00000 6.200000 Allowable Increase INFINITY INFINITY 1.000000 Allowable Decrease 1.250000 12.00000 INFINITY
Variable X Y Z
1 Esto bajo el supuesto de que la solucin ptima sea un punto de Kuhn y Tucker y que la funcin valor ptimo sea o o o o diferenciable. En caso contrario la interpretacin anterior no es vlida. Esto sucede si y slo si la solucin ptima es un o a o o o punto regular del problema, es decir, si los gradientes de las restricciones saturadas son linealmente independientes. 2 La condicin necesaria y suciente para que cualquiera de las dos interpretaciones sea vlida en el caso de la programacin o a o lineal es que la solucin ptima no sea degenerada, es decir, que no tenga ninguna variable bsica nula. o o a
4
Righthand Side Ranges: Current RHS 50000.00 80000.00 40000.00 10000.00 Allowable Increase 10000.00 INFINITY INFINITY 5000.000 Allowable Decrease 50000.00 10000.00 20000.00 10000.00
Row AVENA MAIZ CEBADA MIJO
En problemas de programacin lineal, la interpretacin es la siguiente:3 o o La tabla titulada Objective Coefficient Ranges contiene el valor actual del coeciente de cada variable en la funcin objetivo junto con lo mximo que puede aumentar o disminuir para que la o a solucin ptima no cambie. o o Por ejemplo, mientras el precio de los sacos de tipo 1 no descienda ms de 1.25 C, la solucin ptima a o o del problema seguir siendo la misma. a La tabla titulada Righthand Side Ranges contiene el valor actual de trmino independiente de e cada restriccin junto con lo mximo que puede aumentar o disminuir para que las variables bsicas o a a de la solucin ptima sigan siendo las mismas. Si la restriccin no est saturada podemos decir que o o o a la solucin ptima seguir siendo la misma. o o a Por ejemplo, mientras la cantidad disponible de avena no aumente en ms de 10 000 kg seguir a a siendo cierto que 1. No convendr producir pienso de tipo 3 (z = 0), a 2. Agotaremos toda la avena disponible (la holgura de la avena ser nula), a 3. Agotaremos todo el mijo disponible (la holgura del mijo ser nula). a Se cumple que el precio dual de una restriccin slo es aplicable para determinar (de forma exacta o o en programacin lineal) la mejora de la funcin objetivo que tiene lugar cuando se produce un o o incremento en el trmino independiente de la restriccin que queda dentro del rango indicado en la e o tabla que acabamos de interpretar. Terminamos con algunas observaciones: Si intentamos resolver un problema infactible o no acotado, LINGO lo indica mediante un cuadro de dilogo. a Si resolvemos un problema sin funcin objetivo (por ejemplo, poniendo una exclamacin ante la o o primera l nea de nuestro modelo de ejemplo), LINGO estudia si las restricciones introducidas son o no factibles. Si no hemos puesto etiquetas a las restricciones, LINGO se referir a ellas con nmeros (segn el a u u orden en que las hemos escrito en el modelo), de ah la conveniencia de poner etiquetas.
4
Restricciones sobre los dominios de las variables La instruccin @BND(1000,x,1900); hace que la variable x pueda variar entre 1 000 y 1 900, es o decir, que tiene el mismo efecto que incorporar las restricciones x>1000; x-4; x