Sei sulla pagina 1di 22

Investigacin Operativa 1 PONTIFICIA UNIVERSIDAD CATLICA DEL PER FACULTAD DE CIENCIAS E INGENIERA PRIMERA GUA DE LINGO PARA EL LABORATORIO

DE INVESTIGACIN OPERATIVA 1 Temas: El lenguaje de modelacin del software LINGO Resolucin de modelos de programacin lineal usando LINGO

1.

OBJETIVOS La gua tiene como finalidad exponer el lenguaje de modelacin del LINGO y que el alumno sea capaz de formular modelos de programacin lineal usando este lenguaje.

2.

METODOLOGA Los alumnos trabajarn individualmente en una computadora, bajo la tutora de los jefes de prctica de laboratorio.

3.
3.1

GUA DE LABORATORIO INTRODUCCIN AL LINGO

Segn el LINGO 11 Users Manual, LINGO es una herramienta que permite formular modelos de programacin lineal de manera sencilla y eficiente, para tal fin LINGO tiene, entre otras, las siguientes caractersticas: Un lenguaje algebraico para modelacin LINGO tiene un potente lenguaje de modelacin basado en sets que permite al usuario expresar los modelos matemticos de manera compacta y eficiente. Manejo de datos conveniente LINGO permite construir modelos que importan la informacin y exportan los resultados desde y hacia las hojas de clculo o bases de datos. Esta capacidad del LINGO facilita el anlisis de sensibilidad de los modelos de programacin lineal y la elaboracin de reportes y grficos apropiados para la toma de decisiones. Con estas ventajas, usted desarrollar habilidades para manejar un software potente que le permitir realizar trabajos de investigacin, tesis y usar la programacin lineal en situaciones reales cuando la cantidad de variables y restricciones es a menudo sumamente grande. Los requisitos para leer esta gua son aprender primero el funcionamiento del LINDO; luego instale el LINGO. Este software es de libre disponibilidad y se encuentra en la web de LINDO Systems cuya direccin electrnica es http://www.lindo.com/. Asimismo previamente debe leer el primer captulo Getting Started with LINGO del LINGO 11 Users Manual en donde se explica el entorno de este software; se sugiere leer dicho captulo y a la vez digite y resuelva los ejemplos en el LINGO. En el laboratorio de computadoras en el segundo piso del pabelln de Ingeniera Industrial est instalado este software. Luego de cumplir los requisitos, lea y simultneamente ejecute las indicaciones de esta gua en su editor de LINGO. 3.2 INICIO DEL MODELO EN LINGO

En LINGO, el modelo se inicia con el comando MODEL seguido del caracter :. En la figura 1 se muestra el editor del LINGO y el comando indicado.

Figura 1

En la imagen tambin se lee el comentario !Ejemplo en LINGO del primer laboratorio de Investigacin Operativa 1;, LINGO admite agregarlos con la condicin que empiecen con el caracter ! y finalicen con ;. 3.3 DISEO DE SETS

FINALIDAD E IDENTIFICACIN DE LOS SETS Una inquietud que quiz tenga el estudiante es por qu debe aprender otro software para la resolucin de modelos de programacin lineal. Si usted ya explor el LINDO habr notado que es necesario digitar completamente en su editor el programa lineal diseado; sta es una tarea muy laboriosa cuando los modelos son de gran magnitud, situacin frecuente en la realidad. Los sets son un grupo de objetos relacionados que permite agrupar parmetros, variables y restricciones las cuales se agrupan en una serie de familias de caractersticas similares con lo cual el ingreso de los programas lineales de gran tamao se hace de manera sencilla y gil con LINGO. Ejemplo 1 En cierta empresa manufacturera se fabrica 20 diferentes productos y cada uno pasa por una secuencia se siete procesos distintos en donde la materia prima se agrega en los cinco primeros. Los dos ltimos procesos son de acabado de los productos. La secuencia de los procesos para cada producto es la misma y se identifica con proceso 1 al primero, proceso 2 al segundo y as sucesivamente. En el anexo 1 se muestra los costos variables unitarios, los precios de venta, el margen de contribucin, la demanda mxima de los 20 productos y la mnima por obligaciones contractuales. En el anexo 2 se presenta el tiempo en cada proceso requerido por cada unidad de tipo de producto y en el anexo 3 se encuentran los datos de la cantidad de materia prima por cada kilogramo de producto terminado. Esta empresa desea determinar cuntos productos de cada tipo debe fabricar para maximizar las utilidades pero sujeta a las restricciones de recursos y demanda; para tal fin, las variables de decisin son: Pi: cantidad de kilogramos por fabricar de cada tipo de producto.
i= 1,2,320

En el anexo 4 se muestra el resto del modelo de programacin lineal y lo llamaremos modelo 1. Quiz usted ya habr notado que digitar el modelo 1 en el editor del LINDO es laborioso, asimismo, por su magnitud es probable que cometa varios errores en esta tarea. Por otro lado, la revisin de sus parmetros con el fin de detectar errores es tambin engorrosa porque exige observar exhaustivamente todo lo que se ingres en el editor. Usando notacin matemtica, el modelo 1 equivalente es el siguiente y lo llamaremos modelo 2: Modelo 2 Maximizar
i=1..20(MCi*Pi)

Restricciones de demanda: Pi Dmnima i


; i=1,220

Pi Dmxima i ; Restricciones de tiempo:


j=1..20(Tuji*Pj)

i=1,220

Ti MPi

i=1,27

Restriccones de materia prima:


j=1..20(MPuji*Pj) ; i=1,25

Ahora lea nuevamente el texto del ejemplo 1, observe el modelo 2 e identifique la siguiente lista de parmetros: El margen de contribucin de cada producto: MCi. La demanda mnima de cada producto: Dmnima i. La demanda mxima de cada producto: Dmxima i. Disponibilidad del recurso tiempo en cada proceso: Ti. Disponibilidad de recurso materia prima: MPi. El tiempo unitario de cada producto en cada proceso: Tuji. El consumo de materia prima de cada producto: MPuji. Finalmente, identifique la lista de las variables: Cantidad de cada tipo de producto por fabricar. SETS PRIMITIVOS En la lista de parmetros y variables anterior, identificamos tres grupos con caractersticas similares: el margen de contribucin, la demanda y las variables. Cada grupo se denomina atributo (attributes), y a este conjunto de grupos se denomina set. Revise los anexos 1, 2 y 3 y note que los atributos margen de contribucin y demanda tienen 20 datos; el atributo variables tendr 20 valores que se determinarn al resolver el programa lineal, stas son las variables de decisin. La dimensin 20 es una caracterstica comn de estos atributos del set al que llamaremos PRODUCTOS; LINGO permite que usted elija el nombre del set con un mximo de 32 caracteres pero necesariamente el primero es alfabtico. Para indicar la dimensin escriba despus de PRODUCTOS la secuencia de caracteres /1..20/ . Antes de ingresar los sets en el editor, primero escriba el comando SETS seguido del caracter : ; hasta aqu el editor del LINGO tendr la apariencia de la figura 2. Figura 2

Nuevamente se observa comentarios en el editor; en este caso se anot !Sets primitivos; y el otro referido a las variables de decisin. Para declarar los atributos del set PRODUCTOS usaremos las etiquetas MARGEN, DEMANDAMIN, DEMANDAMAX y P (usted puede elegir otros nombres). La etiqueta MARGEN contiene los 20 datos del margen de contribucin unitario de cada producto; las etiquetas

DEMANDAMIN y DEMANDAMAX contienen cada una los datos de la demanda mnima y mxima de los 20 productos respectivamente y la etiqueta P son las 20 variables de decisin de este modelo. Luego de digitar los nombres de estos atributos, la figura 3 muestra cmo se ver el editor. Figura 3

En la pantalla hemos anotado el comentario !VARIABLES DE DECISIN definidas en la matriz P; para recordar que cada elemento de la matriz P es una de las 20 variables de decisin. En la lista de parmetros identificamos otro set cuyo atributo es la disponibilidad del recurso tiempo en cada proceso, como son siete procesos, son siete los datos de este atributo (vea el anexo 2). No hay otro atributo con esta dimensin. En la figura 4 se muestra el set PROCESOS (usted puede elegir otro nombre) y para indicar su dimensin PROCESOS/1..7/:. Figura 4

Quiz se est preguntando por qu se digit PROCESOS: en vez de PROCESOS/1..7/:, es decir, sin dimensin. Esto es posible siempre y cuando se declare la dimensin en la zona de datos, este detalle se explicar ms adelante, sin embargo, si desea digite PROCESOS/1..7/:. Para declarar el nico atributo del set PROCESOS usaremos la etiqueta RECURSOT (u otro nombre) que contiene los siete datos del tiempo disponible de cada proceso, observe la figura 5. Figura 5

En la lista de parmetros tambin tenemos la disponibilidad del recurso materia prima en cada proceso, el texto del ejemplo 1 indica que slo en los cinco primeros procesos se agregan distintos tipos de materia prima. Este es otro atributo al que llamaremos RECURSOMP (u otro nombre) y

definimos el set PROCESOMP/1..5/ (vea el anexo 3 y verifique la dimensin). La figura 6 presenta este set y su atributo. Figura 6

Los tres primeros sets diseados son llamados sets primitivos y son semejantes a matrices cuya dimensin es una fila y n columnas, por ejemplo, el set PRODUCTOS es un arreglo de nmeros de 20 datos (columnas). La lista de parmetros muestra dos grupos de datos que son el tiempo unitario de cada producto en cada proceso y el consumo de materia prima de cada producto. Estos grupos de datos son de dos entradas: el primero tiene 140 datos porque son tiempos unitarios de los 20 productos en cada uno de los siete procesos; el segundo tiene 100 datos porque son los consumos de materia prima por cada unidad de los 20 productos en cada uno de los cinco procesos que s requieren estos materiales. SETS DERIVADOS Los sets derivados ayudan a definir los arreglos de datos o variables cuyo orden es nxm donde n es la cantidad de filas y m la cantidad de columnas. Como usted ya habr notado, tanto los datos de los tiempos unitarios como los de la materia prima por unidad son matrices de n filas y m columnas; as por ejemplo, el tiempo unitario tiene 20 filas y 7 columnas, (o viceversa, usted elija cmo) mientras que la materia prima por unidad tiene 20 filas y 5 columnas (en los anexos 2 y 3 verifique las dimensiones indicadas). Para el grupo de datos tiempos unitarios de cada producto en cada proceso, definamos el atributo TIEMPO (u otro nombre) dentro del set derivado MATRIZ1 (u otro nombre). Este set es derivado de los sets primitivos PRODUCTOS y PROCESOS cuyas dimensiones son 20 y 7 respectivamente, lo que permite indicar a LINGO que la MATRIZ1 (PRODUCTOS , PROCESOS) es de orden 20x7. Este set y su atributo se muestran en la figura 7. Figura 7

Por otro lado, los consumos de materia prima de cada producto en cada uno de los cinco primeros procesos, se asignarn al atributo MP (u otro nombre) dentro del set derivado MATRIZ2 (u otro nombre). Este set es derivado de los sets primitivos PRODUCTOS y PROCESOMP cuyas dimensiones son 20 y 5 respectivamente, lo que permite indicar a LINGO que la MATRIZ2 (PRODUCTOS , PROCESOMP) es de orden 20x5.

La zona de los sets termina con el comando ENDSETS, esto y todos los sets diseados se muestran en la figura 8. Figura 8

ASPECTOS CLAVES EN EL DISEO DE SETS Culminada la definicin de los sets, observe nuevamente la figura 8 y anotemos algunos aspectos claves que a menudo son fuentes de error: Los comentarios y las lneas que contienen los nombres de los sets y atributos terminan con el caracter ;. Despus de los comandos MODEL y SETS anote :, no el caracter ; . Termine la zona de los sets con el comando ENDSETS sin el caracter ; ni :. Los nombres de los atributos y de los sets primitivos invocados en los sets derivados se separan con comas, por ejemplo, MARGEN , DEMANDAMIN , DEMANDAMAX , P y (PRODUCTOS , PROCESOS). Se recomienda nombres para los sets y atributos que sean fciles de recordar (se sugiere que tengan relacin con los datos que contienen o las variables de decisin definidas) porque sern usados en el resto del programa y usted deber invocarlos exactamente igual a como los defini en la zona de sets. A menudo es fuente de error omitir alguna de las letras o agregar otras, por ejemplo, anotar en las restricciones PROCESO en vez de PROCESOS; LINGO no reconocer la etiqueta PROCESO y enviar un mensaje de error. Defina la dimensin de los sets, usando los caracteres /1..m/. Note que el primer nmero necesariamente es uno seguido de .. (dos puntos, no tres o ms) y m debe ser un nmero entero positivo. En caso omita la dimensin, deber ser definida en la zona de datos como se explicar en la siguiente seccin. Tambin es posible definir implcitamente la dimensin con nombres y otras secuencias de caracteres en cuyo caso la cantidad de nombres anotadas ser la dimensin. Si desea conocer ms detalles, consulte el segundo captulo del LINGO 11 Users Manual. 3.4 EL INGRESO DE DATOS

El ingreso de datos empieza con el comando DATA seguido del caracter :. Recuerde que el ejemplo 1 tiene varios conjuntos de datos, a saber, margen de contribucin unitario de cada producto; demanda mnima y mxima de cada producto; recurso tiempo disponible de cada proceso; recurso materia prima disponible de cada tipo; tiempo unitario de cada producto en cada proceso y cantidad de materia prima por unidad de cada tipo de producto en cada proceso. Estos datos se identificaron como atributos en la zona de sets y se les asign los nombres MARGEN, DEMANDAMIN, DEMANDAMAX, RECURSOT, RECURSOMP, TIEMPO y MP, respectivamente. Los datos de estos atributos son parmetros del modelo conocidos de antemano y deben ser ingresados al LINGO. El ingreso consiste en anotar el nombre del atributo seguido del caracter = y de los datos del atributo. Evite digitar los datos, cpielos directamente del archivo Excel Datos.xls que se proporcion junto con esta gua. Si los pega directamente desde el Excel al

editor del LINGO pegar tambin la cuadrcula, para evitar esto y as mejorar la apariencia del 1 modelo, primero pegue los datos del Excel al Bloc de notas y de ste al LINGO. En la figura 9 se muestra el ingreso de los datos MARGEN, DEMANDAMIN, DEMANDAMAX, RECURSOT y RECURSOMP. Figura 9

Note en la figura 9 que cada arreglo de datos culmina con ;. Un detalle pendiente de la seccin 3.3 fue por qu se omiti la dimensin del set primitivo PROCESOS en la zona de los sets. En la figura 9 observe en la zona sets que se escribi PROCESOS en vez de PROCESOS/1..7/, sin embargo, en la zona de datos implcitamente se ha definido su dimensin al anotar PROCESOS = seguido de siete etiquetas, la primera es PROCESO1 y as sucesivamente. Recuerda que la dimensin de este set es siete porque esa es la cantidad de procesos en la lnea de produccin?
1

Para ubicar el Bloc de notas presione el cono de Windows ubicado en la zona inferior izquierda y en el men busque Todos los programas y luego Accesorios, ah encontrar dicha aplicacin.

La figura 10 presenta el resto de datos, observe los atributos TIEMPO Y MP que son las matrices de orden 20x10 y 20x5 que se disearon con el apoyo de los sets derivados. La zona de datos finaliza con el comando ENDDATA. Figura 10

ASPECTOS CLAVES EN EL INGRESO DE DATOS Culminada la definicin de los datos, observe nuevamente las figuras 9 y 10 y anotemos algunos aspectos claves que a menudo son fuentes de error: Cada grupo de datos termina con el caracter ;. Despus del comando DATA anote :, no el caracter ;. Termine la zona de los datos con el comando ENDDATA sin el caracter ; ni :. No olvide de usar el nombre exacto de cada set o atributo tal como se defini en la zona de sets, cualquier diferencia en los nombres LINGO no las reconocer y automticamente enviar un mensaje de error. Por ejemplo, observe la figura 10, luego pruebe en su editor qu ocurre si en la zona de datos, en vez de usar la etiqueta TIEMPO usa TIEMPOS. Los datos de los atributos de sets derivados nxm deben anotarse en n filas y m columnas; n y m deben ser iguales a las dimensiones del primer y segundo set primitivo invocados en el set derivado, de lo contrario, LINGO generar un modelo que no corresponde al caso que usted

quiere resolver. Por ejemplo, TIEMPO es un atributo del set derivado MATRIZ1, ste invoca a los sets primitivos PRODUCTOS y PROCESOS as: MATRIZ1 (PRODUCTOS , PROCESOS). Como la dimensin de PRODUCTOS es 20 y la de PROCESOS es siete, entonces el orden del set derivado MATRIZ1 es 20x7 (20 filas y 7 columnas); luego los datos deben ser ingresados segn dicho orden: 20 filas y 7 columnas, verifique esto en la figura 10. Por ningn motivo ingrese los datos en 7 filas y 20 columnas. Observe de nuevo la figura 10, cmo se ha ingresado los datos del atributo MP? 3.5 DEFINICIN DE LA FUNCIN OBJETIVO, LAS RESTRICCIONES Y EL RANGO DE EXISTENCIA USANDO EL LENGUAJE DE MODELACIN

SET LOOPING FUNCTIONS Segn el LINGO 11 Users Manual, el poder de la modelacin basada en sets est en la habilidad de este software para aplicar una operacin a una parte o a todos los miembros de los sets usando una sola sentencia. Las funciones que permiten esto son las denominadas set looping functions En esta seccin presentaremos las funciones @SUM y @FOR, sin embargo, hay otras funciones que usted podr encontrar en el segundo captulo del Users Manual. LA FUNCIN OBJETIVO En el ejemplo 1 la funcin objetivo es la maximizacin de las utilidades (el margen de contribucin) y en el modelo 1 tenemos la siguiente funcin objetivo en lenguaje algebraico:
MAX 11P1+15.75P2+10.5P3+10.75P4+14.5P5+17.25P6+13.5P7+12P8+16P9+17P10+20P11+22P12+18.5P13+17P14 +15.5P15+19P16+21.5P17+21.5P18+15.5P19+14.5P20

Con el lenguaje de modelacin del LINGO evitaremos digitar esta expresin engorrosa, para tal fin, escriba en el editor lo que se muestra en la figura 11. Figura 11

En el modelo 2 se defini la funcin objetivo as: Maximizar


i=1..20(MCi*Pi)

En la tabla 1 compare cada uno de los componentes de la expresin anterior con la sintaxis de la funcin objetivo en LINGO. Tabla 1 Funcin objetivo en notacin matemtica Maximizar
i=1..20(

Funcin objetivo en LINGO MAX = @SUM( PRODUCTOS ( I ) : MARGEN ( I ) * P( I ) );

MCi * Pi)

La expresin @SUM( PRODUCTO ( I ): MARGEN( I )* P( I ) ) ; toma cada una de las 20 variables de decisin en el atributo P y las multiplica por sus correspondientes mrgenes de contribucin anotados en el atributo MARGEN. El caracter I es similar a un contador que empieza en uno y con un loop de 20 iteraciones suma el producto de cada margen de contribucin por cada variable de decisin.

Un aspecto relevante en la sintaxis de la funcin @SUM es que enseguida debe escribir el nombre de un set; en caso lo omita, LINGO enviar un mensaje de error en la sintaxis; tambin es posible que lea el atributo, lo confunda con un set y enve otro mensaje de error. Por ejemplo, vea la figura 11, luego en su editor omita el set PRODUCTO ( I ) y lea el mensaje que arroja LINGO. Finalmente, no se olvide de retornar a las condiciones originales. LAS RESTRICCIONES En el modelo 2 ubicado en la pgina 2 identifique esta lista de restricciones: Restricciones de demanda. Restricciones de tiempo disponible para cada proceso. Restricciones de materia prima disponible. En el anexo 4 se muestra las restricciones de demanda en lenguaje algebraico. Con el lenguaje de modelacin del LINGO evitaremos digitar estas restricciones, para tal fin, escriba en el editor lo que se muestra en la figura 12. Figura 12

En el modelo 2 se defini las restricciones de demanda as: Pi Dmnima i


; i=1,220

Pi Dmxima i ; i=1,220 En la tabla 2 compare cada uno de los componentes de la expresin anterior para la demanda mnima con la sintaxis de las restricciones en LINGO. Tabla 2 Restricciones de demanda en notacin matemtica Pi Dmnima i
i=1,220

Restricciones de demanda en LINGO P( I ) >= DEMANDAMIN ( I ) ); @FOR( PRODUCTOS ( I ):

La expresin @FOR( PRODUCTOS ( I ): P( I ) >= DEMANDAMIN( I ) ) ; toma cada una de las 20 variables de decisin en el atributo P e indica que sean mayores o iguales que la demanda mnima correspondiente que se registraron en los datos del atributo DEMANDAMIN. El caracter I es similar a un contador que empieza en uno y en con loop de 20 iteraciones genera las 20 restricciones de demanda mnima (o menos en caso algunas de las demandas mnimas sean cero). De manera similar usted puede explicar la sentencia para la demanda mxima escrita en la figura 12. En el anexo 4 se muestran las restricciones del recurso tiempo en lenguaje algebraico, stas son especialmente engorrosas de digitar. En la figura 13 se muestra cmo el lenguaje de modelacin del LINGO con una sola sentencia genera las siete restricciones de tiempo.

10

Figura 13

En el modelo 2 se defini las restricciones del recurso tiempo en cada proceso as:
j=1..20(Tuji*Pj)

Ti

i=1,27

En la tabla 3 compare cada uno de los componentes de la expresin anterior con la sintaxis de las restricciones en LINGO. Tabla 3 Restricciones de tiempo en notacin matemtica
j=1..20(Tuji*Pj) i=1,27

Ti

Restricciones de tiempo en LINGO @SUM( PRODUCTOS ( J ) : TIEMPO ( J , I )*P( J ) ) <= RECURSOT ( I ) ); @FOR( PROCESOS ( I ):

La expresin @SUM( PRODUCTOS ( J ): TIEMPO ( J , I )*P( J ) ) <= RECURSOT ( I ) ) suma para el proceso i los productos de cada tiempo unitario del producto j en el proceso i (elemento j,i del atributo TIEMPO) por la variable de decisin j (elemento j del atributo P). Por otro lado, la expresin @FOR( PROCESOS ( I ): despliega las siete restricciones correspondientes a los siete procesos apoyado en su contador I que empieza en uno y en con un loop de siete iteraciones genera las restricciones de tiempo. Nuevamente en el anexo 4 se muestra las restricciones del recurso materia prima en lenguaje algebraico, al igual que las restricciones de tiempo stas tambin son engorrosas. En la figura 14 se muestra en la ltima sentencia cmo se generan las restricciones de este recurso; para finalizar el modelo se agrega el comando END. Figura 14

De manera similar como se explic para las otras restricciones, descubra usted cmo se elabor la ltima sentencia para las restricciones de la materia prima.

11

EL RANGO DE EXISTENCIA Las variables de decisin del modelo del ejemplo 1 son no negativas (0), este tipo de variables no es necesario declararlas en LINGO porque el software asume que son no negativas cuando no se declaran. Para las variables de tipo enteras, sin restriccin de signo, acotadas o binarias (0 1) LINGO tiene comandos con el fin de declararlas, estos comandos los aprender en los prximos laboratorios. Finalmente, el rango de existencia se ubica antes del comando END. ASPECTOS CLAVES RESTRICCIONES EN LA MODELACIN DE LA FUNCIN OBJETIVO Y LAS

Culminada la definicin de la funcin objetivo y las restricciones, observe de nuevo las figuras 11 y 14 y anotemos algunos aspectos claves que a menudo son fuentes de error: En la funcin objetivo: La sentencia termina con el caracter ;. No olvide de usar el nombre exacto de cada atributo definido en la zona de sets, cualquier diferencia en los nombres LINGO no las reconocer y enviar un mensaje de error. Por ejemplo, en la restriccin de materia prima cambie MP por MPPROD, qu ocurre? LINGO no admite anidar la funcin @FOR dentro de la funcin @SUM. La sintaxis de la funcin @SUM exige que enseguida se escriba el nombre de un set. LINGO reconocer en @SUM exclusivamente los atributos (definidos en la zona de sets) asignados al set invocado. Por ejemplo, se digit la sentencia MAX = @SUM( PRODUCTOS ( I ): MARGEN ( I )*P( I ) ); aqu se invoca al set primitivo PRODUCTOS, si a continuacin escribe el atributo RECURSOT( I ), LINGO enviar un mensaje de error porque RECURSOT no est en el rango del set PRODUCTOS, confrmelo en la figura 5. Si la funcin objetivo es de minimizacin use el com ando MIN seguido del carcter =. En las restricciones: Cada sentencia termina con el caracter ;. La sintaxis de @FOR exige anotar enseguida el nombre de un set, en caso lo omita ocurrir algo similar a lo que antes se explic con @SUM. Una vez que anote el nombre del set en el comando @FOR, los atributos que se aniden dentro de esta funcin deben estar necesariamente en el rango del set anotado. Dicho de otra manera, ocurrir algo similar a lo explicado con @SUM. Vea la figura 14 y ejecute el siguiente ejemplo: en su editor en la sentencia @FOR( PROCESOS ( I ): @SUM( PRODUCTOS ( J ): TIEMPO ( J , I )*P( J ) ) <= RECURSOT ( I ) ) cambie TIEMPO ( J , I ) por MP ( J , I ). Lea el mensaje del LINGO; no reconoce a MP ( J , I )! Por qu? Porque MP ( J , I ) no est en el rango del set derivado MATRIZ1. Es cierto que este set no se escribi en la sentencia, pero fue implcitamente invocado a travs de los sets primitivos PROCESOS y PRODUCTOS. Tenga cuidado cuando defina el orden de los contadores en los atributos de los sets derivados. Por ejemplo, en la misma sentencia del acpite inmediato anterior observe que se anot TIEMPO ( J , I ) y no TIEMPO ( I , J ). Por qu? La respuesta se encuentra en la figura 8, vea que TIEMPO es un atributo en el rango del set derivado MATRIZ1, cuyo orden est dado por la dimensin de los sets PRODUCTOS y PROCESOS as: MATRIZ1 ( PRODUCTOS , PROCESOS). Como en la sentencia @FOR( PROCESOS ( I ): @SUM( PRODUCTOS ( J ): TIEMPO ( J , I )*P( J ) ) <= RECURSOT ( I ) ) se asign el contador J a PRODUCTOS y el contador I a PROCESOS, entonces, el orden correcto para el atributo TIEMPO es ( J , I ); en caso contrario, LINGO enviar un mensaje de error. Se recomienda que usted ejecute este ejemplo en su editor. Revise los parntesis, cuando los olvida LINGO enva el mensaje Missing right parenthesis, advirtiendo que se ha olvido un parntesis. Normalmente LINGO ubica el cursor donde olvid el signo, si no es claro dnde, entonces, primero subraye un parntesis y luego en la ventana Edit seleccione la aplicacin Match parenthesis, o presione Ctrl P, o el siguiente botn ubicado en el men.

12

LINGO marcar el parntesis que cierra el que usted subray, en caso contrario mostrar el mensaje de error No matching parenthesis was found, que indica que el parntesis de cierre no fue encontrado. No olvide el comando END. 3.6 SOLUCIN DEL MODELO

El modelo del ejemplo 1 est listo, para resolverlo seleccione en la ventana LINGO la aplicacin Solve como se muestra en la figura 15. Figura 15

Tambin puede presionar Ctrl U o presionar el siguiente botn en el men:

En caso no haya errores, LINGO mostrar la pantalla de la figura 16, esta ventana tiene informacin de la cantidad de variables y restricciones, en este modelo 20 y 52, respectivamente, sin incluir la funcin objetivo ni el rango de existencia, sin embargo, usted lee 53 porque LINGO asigna el nmero uno a la funcin objetivo y a la primera restriccin el nmero dos y as sucesivamente. Presione el botn Close en la ventana Solver Status []. Si luego de intentar resolver el modelo el LINGO enva mensaje de error, deber corregirlos; apyese con los aspectos claves explicados en esta gua. La figura 17 muestra la ventana [Solution Report-]. Este reporte muestra para los programas lineales, todos los parmetros del modelo y los resultados de las variables de decisin en el ptimo. Tambin presenta el valor ptimo de la funcin objetivo las variables de holgura y exceso, as como los costos reducidos y los precios sombra, de forma similar al reporte del LINDO.

13

Figura 16

Figura 17

14

La figura 18 muestra cmo obtener el reporte de sensibilidad, seleccione en la ventana LINGO la aplicacin Range. Esto deber ejecutarlo en la pantalla [LINGO Model] al que en esta gua la hemos llamado editor. No intente ejecutar Range en la pantalla [Solution Report-] porque en sta se desactivan la mayora de aplicaciones del men LINGO. Figura 18

La figura 19 muestra la pantalla con el reporte de sensibilidad. La figura 20 ilustra cmo obtener los valores ptimos de las variables de decisin omitiendo la lista de los parmetros, as el reporte estar en un formato resumido. Seleccione en la ventana LINGO la aplicacin Solution o presiones Ctrl W. LINGO mostrar la ventana Solution Report or Graph (vea la figura 21), en esta ventana seleccione en Attribute or Row Name: las variables de decisin que en este caso es el atributo P. Recuerde que esto necesariamente deber ejecutarlo en la pantalla [LINGO Mode[]. La figura 22 muestra el resultado. 3.7 GENERACIN DEL MODELO ALGEBRAICO

LINGO ofrece la aplicacin Generate para generar el modelo algebraico. En el men LINGO seleccione Generate/Display model o presione Ctrl G. La figura 23 muestra el resultado. En la ventana Solver Status [] presione el botn Close, luego la figura 24 muestra el modelo algebraico similar al que digit en LINDO.

15

Figura 19

Figura 20

16

Figura 21

Figura 22

Figura 23

17

Figura 24

4.

OBSERVACIONES FINALES

El ejemplo 1 de mediano tamao ayud a ilustrar las ventajas que ofrece el lenguaje de modelacin del LINGO, piense el ahorro de tiempo y reduccin de la probabilidad de error que se lograra con modelos de gran escala. Sin embargo, es evidente que resulta ms complejo preparar un modelo con el lenguaje del LINGO que digitarlo en el editor del LINDO. Moraleja, usted debe practicar elaborando una cantidad apreciable de modelos usando el lenguaje del LINGO. En las figuras 9 y 10 quiz tuvo la sensacin que resulta engorroso anotar esa gran cantidad de datos, sin embargo, es ms sencillo si los pega directamente desde el Excel, previo paso por el Bloc de notas. LINGO ofrece comandos que importan todos los datos anotados en Excel y as evitar digitarlos o copiarlos en el editor del LINGO. Tambin hay comandos que exportan los resultados al Excel. En los prximos laboratorios usted aprender estas ventajas del software.

Elaborado por: Ing. Christian Cornejo S.

18

Anexo 1
Costos variables unitarios en US$ Precio de venta en US$ Margen de contribucin en US$ Demanda mnima del producto en kilogramos Demanda mxima del producto en kilogramos

Producto 1 Producto 2 Producto 3 Producto 4 Producto 5 Producto 6 Producto 7 Producto 8 Producto 9 Producto 10 Producto 11 Producto 12 Producto 13 Producto 14 Producto 15 Producto 16 Producto 17 Producto 18 Producto 19 Producto 20

5.00 3.00 4.50 4.25 3.50 2.75 6.50 8.00 9.00 8.00 5.00 4.00 8.50 7.50 6.50 4.00 3.50 2.50 3.50 5.50

16.00 18.75 15.00 15.00 18.00 20.00 20.00 20.00 25.00 25.00 25.00 26.00 27.00 24.50 22.00 23.00 25.00 24.00 19.00 20.00

11.00 15.75 10.50 10.75 14.50 17.25 13.50 12.00 16.00 17.00 20.00 22.00 18.50 17.00 15.50 19.00 21.50 21.50 15.50 14.50

10.00 15.00 0.00 0.00 10.00 0.00 10.00 0.00 20.00 25.00 15.00 10.00 0.00 0.00 0.00 10.00 0.00 0.00 0.00 0.00

150 80 90 100 180 150 150 145 100 110 150 160 165 155 150 250 150 200 250 180

19

Anexo 2

Tiempo unitario de cada producto i en el proceso j en minutos Proceso 1 Producto 1 Producto 2 Producto 3 Producto 4 Producto 5 Producto 6 Producto 7 Producto 8 Producto 9 Producto 10 Producto 11 Producto 12 Producto 13 Producto 14 Producto 15 Producto 16 Producto 17 Producto 18 Producto 19 Producto 20
Disponibilidad de tiempo en horas

Proceso 2 5 4 8 9 2 2 3 4 5 6 5 8 10 11 5 3 4 2 3 2 250

Proceso 3 6 4 10 11 12 13 8 11 14 15 10 13 15 14 13 12 12 11 10 9 600

Proceso 4 4 5 4 6 6 7 8 9 10 11 7 9 6 10 4 5 4 6 7 8 380

Proceso 5 3 2 4 4 4 5 7 6 8 9 5 7 4 8 2 3 3 4 5 6 270

Proceso 6 6 7 7 8 8 9 9 8 10 11 10 11 5 6 8 9 8 9 10 9 450

Proceso 7 5 6 3 4 7 8 7 6 5 6 7 7 8 7 4 3 2 9 8 4 300

10 12 25 12 15 17 19 30 20 21 20 22 20 15 18 17 15 16 14 12 900

20

Anexo 3

Materia prima requerida por el producto i en el proceso j en gramos Proceso 1 Producto 1 Producto 2 Producto 3 Producto 4 Producto 5 Producto 6 Producto 7 Producto 8 Producto 9 Producto 10 Producto 11 Producto 12 Producto 13 Producto 14 Producto 15 Producto 16 Producto 17 Producto 18 Producto 19 Producto 20
Disponibilidad de materia prima en kilogramos

Proceso 2 200 200 300 300 300 150 300 300 300 200 150 50 200 250 150 50 200 250 250 200 650

Proceso 3 200 100 100 200 100 0 0 200 300 200 250 200 200 300 300 100 250 250 200 200 600

Proceso 4 100 200 100 100 100 150 100 0 100 100 150 150 50 0 100 200 100 100 100 150 350

Proceso 5 100 200 100 100 100 200 200 0 0 100 100 150 50 200 100 200 50 100 100 150 400

400 300 400 300 400 500 400 500 300 400 350 450 500 250 350 450 400 300 350 300 1200

21

Anexo 4 Modelo 1
MAX 11P1+15.75P2+10.5P3+10.75P4+14.5P5+17.25P6+13.5P7+12P8+16P9+17P10+20P11+22P12+18.5P13+17P14 +15.5P15+19P16+21.5P17+21.5P18+15.5P19+14.5P20 SUBJECT TO !Restricciones de demanda: P1>=10 P2>=15 P5>=10 P7>=10 P9>=20 P10>=25 P11>=15 P12>=10 P16>=10 P1<=150 P2<=80 P3<=90 P4<=100 P5<=180 P6<=150 P7<=150 P8<=145 P9<=100 P10<=110 P11<=150 P12<=160 P13<=165 P14<=155 P15<=150 P16<=250 P17<=150 P18<=200 P19<=250 P20<=180 !Restricciones de tiempo: 0.167P1+0.2P2+0.417P3+0.2P4+0.25P5+0.283P6+0.317P7+0.5P8+0.333P9+0.35P10+0.333P11+0.367P12+ 0.333P13+0.25P14+0.3P15+0.283P16+0.25P17+0.267P18+0.233P19+0.2P20 <= 900 0.083P1+0.067P2+0.133P3+0.15P4+0.033P5+0.033P6+0.05P7+0.067P8+0.083P9+0.1P10+0.083P11+0.133 P12+0.167P13+0.183P14+0.083P15+0.05P16+0.067P17+0.033P18+0.05P19+0.033P20 <= 250 0.1P1+0.067P2+0.167P3+0.183P4+0.2P5+0.217P6+0.133P7+0.183P8+0.233P9+0.25P10+0.167P11+0.217P 12+0.25P13+0.233P14+0.217P15+0.2P16+0.2P17+0.183P18+0.167P19+0.15P20 <= 600 0.067P1+0.083P2+0.067P3+0.1P4+0.1P5+0.117P6+0.133P7+0.15P8+0.167P9+0.183P10+0.117P11+0.15P1 2+0.1P13+0.167P14+0.067P15+0.083P16+0.067P17+0.1P18+0.117P19+0.133P20 <= 380 0.05P1+0.033P2+0.067P3+0.067P4+0.067P5+0.083P6+0.117P7+0.1P8+0.133P9+0.15P10+0.083P11+0.117 P12+0.067P13+0.133P14+0.033P15+0.05P16+0.05P17+0.067P18+0.083P19+0.1P20 <= 270 0.1P1+0.117P2+0.117P3+0.133P4+0.133P5+0.15P6+0.15P7+0.133P8+0.167P9+0.183P10+0.167P11+0.183 P12+0.083P13+0.1P14+0.133P15+0.15P16+0.133P17+0.15P18+0.167P19+0.15P20 <= 450 0.083P1+0.1P2+0.05P3+0.067P4+0.117P5+0.133P6+0.117P7+0.1P8+0.083P9+0.1P10+0.117P11+0.117P12 +0.133P13+0.117P14+0.067P15+0.05P16+0.033P17+0.15P18+0.133P19+0.067P20 <= 300 !Restricciones de material prima: 0.4P1+0.3P2+0.4P3+0.3P4+0.4P5+0.5P6+0.4P7+0.5P8+0.3P9+0.4P10+0.35P11+0.45P12+0.5P13+0.25P14 +0.35P15+0.45P16+0.4P17+0.3P18+0.35P19+0.3P20 <= 1200 0.2P1+0.2P2+0.3P3+0.3P4+0.3P5+0.15P6+0.3P7+0.3P8+0.3P9+0.2P10+0.15P11+0.05P12+0.2P13+0.25P1 4+0.15P15+0.05P16+0.2P17+0.25P18+0.25P19+0.2P20 <= 650 0.2P1+0.1P2+0.1P3+0.2P4+0.1P5+0P6+0P7+0.2P8+0.3P9+0.2P10+0.25P11+0.2P12+0.2P13+0.3P14+0.3P1 5+0.1P16+0.25P17+0.25P18+0.2P19+0.2P20 <= 600 0.1P1+0.2P2+0.1P3+0.1P4+0.1P5+0.15P6+0.1P7+0P8+0.1P9+0.1P10+0.15P11+0.15P12+0.05P13+0P14+0. 1P15+0.2P16+0.1P17+0.1P18+0.1P19+0.15P20 <= 350 0.1P1+0.2P2+0.1P3+0.1P4+0.1P5+0.2P6+0.2P7+0P8+0P9+0.1P10+0.1P11+0.15P12+0.05P13+0.2P14+0.1P 15+0.2P16+0.05P17+0.1P18+0.1P19+0.15P20 <= 400 END

22

Potrebbero piacerti anche