Investigación Operativa 1 PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ FACULTAD DE CIENCIAS E INGENIERÍA PRIMERA GUÍA DE LINGO PARA EL LABORATORIO

DE INVESTIGACIÓN OPERATIVA 1 Temas: El lenguaje de modelación del software LINGO Resolución de modelos de programación lineal usando LINGO

1.

OBJETIVOS La guía tiene como finalidad exponer el lenguaje de modelación del LINGO y que el alumno sea capaz de formular modelos de programación lineal usando este lenguaje.

2.

METODOLOGÍA Los alumnos trabajarán individualmente en una computadora, bajo la tutoría de los jefes de práctica de laboratorio.

3.
3.1

GUÍA DE LABORATORIO INTRODUCCIÓN AL LINGO

Según el LINGO 11 Users Manual, LINGO es una herramienta que permite formular modelos de programación lineal de manera sencilla y eficiente, para tal fin LINGO tiene, entre otras, las siguientes características: Un lenguaje algebraico para modelación LINGO tiene un potente lenguaje de modelación basado en sets que permite al usuario expresar los modelos matemáticos de manera compacta y eficiente. Manejo de datos conveniente LINGO permite construir modelos que importan la información y exportan los resultados desde y hacia las hojas de cálculo o bases de datos. Esta capacidad del LINGO facilita el análisis de sensibilidad de los modelos de programación lineal y la elaboración de reportes y gráficos apropiados para la toma de decisiones. Con estas ventajas, usted desarrollará habilidades para manejar un software potente que le permitirá realizar trabajos de investigación, tesis y usar la programación lineal en situaciones reales cuando la cantidad de variables y restricciones es a menudo sumamente grande. Los requisitos para leer esta guía 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 dirección electrónica es http://www.lindo.com/. Asimismo previamente debe leer el primer capítulo Getting Started with LINGO del LINGO 11 Users Manual en donde se explica el entorno de este software; se sugiere leer dicho capítulo y a la vez digite y resuelva los ejemplos en el LINGO. En el laboratorio de computadoras en el segundo piso del pabellón de Ingeniería Industrial está instalado este software. Luego de cumplir los requisitos, lea y simultáneamente ejecute las indicaciones de esta guía 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 también se lee el comentario “!Ejemplo en LINGO del primer laboratorio de Investigación Operativa 1;”, LINGO admite agregarlos con la condición que empiecen con el caracter “!” y finalicen con “;”. 3.3 DISEÑO DE SETS

FINALIDAD E IDENTIFICACIÓN DE LOS SETS Una inquietud que quizá tenga el estudiante es por qué debe aprender otro software para la resolución de modelos de programación lineal. Si usted ya exploró el LINDO habrá notado que es necesario digitar completamente en su editor el programa lineal diseñado; ésta es una tarea muy laboriosa cuando los modelos son de gran magnitud, situación frecuente en la realidad. Los sets son un grupo de objetos relacionados que permite agrupar parámetros, variables y restricciones las cuales se agrupan en una serie de familias de características similares con lo cual el ingreso de los programas lineales de gran tamaño 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 contribución, la demanda máxima de los 20 productos y la mínima 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 cuántos 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 decisión son: Pi: cantidad de kilogramos por fabricar de cada tipo de producto.
i= 1,2,3…20

En el anexo 4 se muestra el resto del modelo de programación 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 revisión de sus parámetros con el fin de detectar errores es también engorrosa porque exige observar exhaustivamente todo lo que se ingresó en el editor. Usando notación matemática, el modelo 1 equivalente es el siguiente y lo llamaremos modelo 2: Modelo 2 Maximizar
i=1..20(MCi*Pi)

Restricciones de demanda: Pi ≥ Dmínima i
; i=1,2…20

2

la demanda y las variables. SETS PRIMITIVOS En la lista de parámetros y variables anterior.. Figura 2 Nuevamente se observa comentarios en el editor. observe el modelo 2 e identifique la siguiente lista de parámetros: El margen de contribución de cada producto: MCi.20/” . las etiquetas 3 . i=1.20(MPuji*Pj) .2…7 Restriccones de materia prima: j=1. i=1.20(Tuji*Pj) i=1. DEMANDAMIN. El consumo de materia prima de cada producto: MPuji. DEMANDAMAX y P (usted puede elegir otros nombres).2…20 ≤ Ti ≤ MPi . hasta aquí el editor del LINGO tendrá la apariencia de la figura 2. Finalmente. Antes de ingresar los sets en el editor. LINGO permite que usted elija el nombre del set con un máximo de 32 caracteres pero necesariamente el primero es alfabético. identificamos tres grupos con características similares: el margen de contribución. primero escriba el comando SETS seguido del caracter “:” . Revise los anexos 1. Disponibilidad del recurso tiempo en cada proceso: Ti. El tiempo unitario de cada producto en cada proceso: Tuji..Pi ≤ Dmáxima i . Para indicar la dimensión escriba después de PRODUCTOS la secuencia de caracteres “/1. La demanda mínima de cada producto: Dmínima i. en este caso se anotó “!Sets primitivos. Restricciones de tiempo: j=1. Disponibilidad de recurso materia prima: MPi. y a este conjunto de grupos se denomina set. éstas son las variables de decisión. La demanda máxima de cada producto: Dmáxima i.” y el otro referido a las variables de decisión. La etiqueta MARGEN contiene los 20 datos del margen de contribución unitario de cada producto. Cada grupo se denomina atributo (attributes). 2 y 3 y note que los atributos margen de contribución y demanda tienen 20 datos. Para declarar los atributos del set PRODUCTOS usaremos las etiquetas MARGEN. La dimensión 20 es una característica común de estos atributos del set al que llamaremos PRODUCTOS.2…5 Ahora lea nuevamente el texto del ejemplo 1. el atributo variables tendrá 20 valores que se determinarán al resolver el programa lineal.. identifique la lista de las variables: Cantidad de cada tipo de producto por fabricar.

En la lista de parámetros identificamos otro set cuyo atributo es la disponibilidad del recurso tiempo en cada proceso. Figura 3 En la pantalla hemos anotado el comentario “!VARIABLES DE DECISIÓN definidas en la matriz P. el texto del ejemplo 1 indica que sólo en los cinco primeros procesos se agregan distintos tipos de materia prima. observe la figura 5.. En la figura 4 se muestra el set PROCESOS (usted puede elegir otro nombre) y para indicar su dimensión PROCESOS/1. son siete los datos de este atributo (vea el anexo 2).7/:.7/:. si desea digite PROCESOS/1.. este detalle se explicará más adelante. la figura 3 muestra cómo se verá el editor. Figura 4 Quizá se esté preguntando por qué se digitó PROCESOS: en vez de PROCESOS/1. 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. sin embargo. Este es otro atributo al que llamaremos RECURSOMP (u otro nombre) y 4 . Esto es posible siempre y cuando se declare la dimensión en la zona de datos.” para recordar que cada elemento de la matriz P es una de las 20 variables de decisión. es decir. sin dimensión.DEMANDAMIN y DEMANDAMAX contienen cada una los datos de la demanda mínima y máxima de los 20 productos respectivamente y la etiqueta P son las 20 variables de decisión de este modelo. No hay otro atributo con esta dimensión. Figura 5 En la lista de parámetros también tenemos la disponibilidad del recurso materia prima en cada proceso. Luego de digitar los nombres de estos atributos.. como son siete procesos.7/:.

PROCESOS) es de orden 20x7. definamos el atributo TIEMPO (u otro nombre) dentro del set derivado MATRIZ1 (u otro nombre). 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.. los consumos de materia prima de cada producto en cada uno de los cinco primeros procesos. Como usted ya habrá notado. así por ejemplo. tanto los datos de los tiempos unitarios como los de la materia prima por unidad son matrices de n filas y m columnas. Este set es derivado de los sets primitivos PRODUCTOS y PROCESOS cuyas dimensiones son 20 y 7 respectivamente. 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. PROCESOMP) es de orden 20x5. Este set es derivado de los sets primitivos PRODUCTOS y PROCESOMP cuyas dimensiones son 20 y 5 respectivamente. Figura 7 Por otro lado. Este set y su atributo se muestran en la figura 7. lo que permite indicar a LINGO que la MATRIZ1 (PRODUCTOS .definimos el set PROCESOMP/1. 5 .5/ (vea el anexo 3 y verifique la dimensión). Figura 6 Los tres primeros sets diseñados son llamados sets primitivos y son semejantes a matrices cuya dimensión es una fila y n columnas. se asignarán al atributo MP (u otro nombre) dentro del set derivado MATRIZ2 (u otro nombre). usted elija cómo) mientras que la materia prima por unidad tiene 20 filas y 5 columnas (en los anexos 2 y 3 verifique las dimensiones indicadas). por ejemplo. La lista de parámetros 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. (o viceversa. Para el grupo de datos tiempos unitarios de cada producto en cada proceso. lo que permite indicar a LINGO que la MATRIZ2 (PRODUCTOS . el tiempo unitario tiene 20 filas y 7 columnas. el set PRODUCTOS es un arreglo de números de 20 datos (columnas). 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. La figura 6 presenta este set y su atributo.

En caso omita la dimensión. recurso materia prima disponible de cada tipo. consulte el segundo capítulo del LINGO 11 Users Manual. DEMANDAMAX . Note que el primer número necesariamente es uno seguido de “. Los nombres de los atributos y de los sets primitivos invocados en los sets derivados se separan con comas. A menudo es fuente de error omitir alguna de las letras o agregar otras. margen de contribución unitario de cada producto. tiempo unitario de cada producto en cada proceso y cantidad de materia prima por unidad de cada tipo de producto en cada proceso.La zona de los sets termina con el comando ENDSETS. esto y todos los sets diseñados se muestran en la figura 8. anotar en las restricciones PROCESO en vez de PROCESOS. Los datos de estos atributos son parámetros del modelo conocidos de antemano y deben ser ingresados al LINGO. Defina la dimensión de los sets. Si los pega directamente desde el Excel al 6 . DEMANDAMIN . También es posible definir implícitamente la dimensión con nombres y otras secuencias de caracteres en cuyo caso la cantidad de nombres anotadas será la dimensión. Evite digitar los datos..xls” que se proporcionó junto con esta guía. deberá ser definida en la zona de datos como se explicará en la siguiente sección. Figura 8 ASPECTOS CLAVES EN EL DISEÑO DE SETS Culminada la definición de los sets. RECURSOMP. recurso tiempo disponible de cada proceso. RECURSOT. El ingreso consiste en anotar el nombre del atributo seguido del caracter “=” y de los datos del atributo.4 EL INGRESO DE DATOS El ingreso de datos empieza con el comando DATA seguido del caracter “:”. usando los caracteres “/1. Después de los comandos MODEL y SETS anote “:”.” ni “:”. LINGO no reconocerá la etiqueta PROCESO y enviará un mensaje de error. MARGEN .”. TIEMPO y MP. a saber.. DEMANDAMAX. Si desea conocer más detalles. observe nuevamente la figura 8 y anotemos algunos aspectos claves que a menudo son fuentes de error: Los comentarios y las líneas que contienen los nombres de los sets y atributos terminan con el caracter “.m/”. por ejemplo. Recuerde que el ejemplo 1 tiene varios conjuntos de datos. cópielos directamente del archivo Excel “Datos. Termine la zona de los sets con el comando ENDSETS sin el caracter “. P y (PRODUCTOS .” (dos puntos. PROCESOS). respectivamente. demanda mínima y máxima de cada producto. por ejemplo.” . DEMANDAMIN. 3. Se recomienda nombres para los sets y atributos que sean fáciles de recordar (se sugiere que tengan relación con los datos que contienen o las variables de decisión definidas) porque serán usados en el resto del programa y usted deberá invocarlos exactamente igual a como los definió en la zona de sets. no tres o más) y m debe ser un número entero positivo. Estos datos se identificaron como atributos en la zona de sets y se les asignó los nombres MARGEN. no el caracter “.

primero pegue los datos del Excel al Bloc de notas y de éste al LINGO. la primera es PROCESO1 y así sucesivamente. ¿Recuerda que la dimensión de este set es siete porque esa es la cantidad de procesos en la línea de producción? 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”.7/. DEMANDAMIN..3 fue por qué se omitió la dimensión del set primitivo PROCESOS en la zona de los sets. 7 . DEMANDAMAX. en la zona de datos implícitamente se ha definido su dimensión al anotar “PROCESOS =” seguido de siete etiquetas. ahí encontrará dicha aplicación. En la figura 9 se muestra el ingreso de los datos MARGEN. En la figura 9 observe en la zona sets que se escribió PROCESOS en vez de PROCESOS/1. para evitar esto y así mejorar la apariencia del 1 modelo. Figura 9 Note en la figura 9 que cada arreglo de datos culmina con “. Un detalle pendiente de la sección 3. RECURSOT y RECURSOMP.”.editor del LINGO pegará también la cuadrícula. sin embargo.

Los datos de los atributos de sets derivados nxm deben anotarse en n filas y m columnas. Termine la zona de los datos con el comando ENDDATA sin el caracter “. en vez de usar la etiqueta TIEMPO usa TIEMPOS. no el caracter “. luego pruebe en su editor qué ocurre si en la zona de datos.” ni “:”. 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 “. Por ejemplo. observe la figura 10. cualquier diferencia en los nombres LINGO no las reconocerá y automáticamente enviará un mensaje de error.”. La zona de datos finaliza con el comando ENDDATA. LINGO generará un modelo que no corresponde al caso que usted 8 . n y m deben ser iguales a las dimensiones del primer y segundo set primitivo invocados en el set derivado.”. Después del comando DATA anote “:”. de lo contrario. observe los atributos TIEMPO Y MP que son las matrices de orden 20x10 y 20x5 que se diseñaron con el apoyo de los sets derivados. No olvide de usar el nombre exacto de cada set o atributo tal como se definió en la zona de sets. Figura 10 ASPECTOS CLAVES EN EL INGRESO DE DATOS Culminada la definición de los datos.La figura 10 presenta el resto de datos.

75P2+10..5P17+21. TIEMPO es un atributo del set derivado MATRIZ1. Por ejemplo. escriba en el editor lo que se muestra en la figura 11.75P4+14.quiere resolver. LAS RESTRICCIONES Y EL RANGO DE EXISTENCIA USANDO EL LENGUAJE DE MODELACIÓN SET LOOPING FUNCTIONS Según el LINGO 11 Users Manual.5P7+12P8+16P9+17P10+20P11+22P12+18. Tabla 1 Función objetivo en notación matemática Maximizar i=1. el poder de la modelación basada en sets está en la habilidad de este software para aplicar una operación a una parte o a todos los miembros de los sets usando una sola sentencia. luego los datos deben ser ingresados según dicho orden: 20 filas y 7 columnas. MCi * Pi) La expresión “@SUM( PRODUCTO ( I ): MARGEN( I )* P( I ) ) . Observe de nuevo la figura 10..5P3+10. hay otras funciones que usted podrá encontrar en el segundo capítulo del Users Manual. sin embargo. para tal fin.5P13+17P14 +15. Las funciones que permiten esto son las denominadas set looping functions En esta sección presentaremos las funciones @SUM y @FOR. éste invoca a los sets primitivos PRODUCTOS y PROCESOS así: MATRIZ1 (PRODUCTOS .25P6+13.20( Función objetivo en LINGO MAX = @SUM( PRODUCTOS ( I ) : MARGEN ( I ) * P( I ) ).5P20 Con el lenguaje de modelación del LINGO evitaremos digitar esta expresión engorrosa.5 DEFINICIÓN DE LA FUNCIÓN OBJETIVO.20(MCi*Pi) En la tabla 1 compare cada uno de los componentes de la expresión anterior con la sintaxis de la función objetivo en LINGO. 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 contribución por cada variable de decisión.5P5+17.5P18+15. Figura 11 En el modelo 2 se definió la función objetivo así: Maximizar i=1. LA FUNCIÓN OBJETIVO En el ejemplo 1 la función objetivo es la maximización de las utilidades (el margen de contribución) y en el modelo 1 tenemos la siguiente función objetivo en lenguaje algebraico: MAX 11P1+15. Por ningún motivo ingrese los datos en 7 filas y 20 columnas.5P19+14.5P15+19P16+21. Como la dimensión de PRODUCTOS es 20 y la de PROCESOS es siete. ¿cómo se ha ingresado los datos del atributo MP? 3. verifique esto en la figura 10.” toma cada una de las 20 variables de decisión en el atributo P y las multiplica por sus correspondientes márgenes de contribución anotados en el atributo MARGEN. entonces el orden del set derivado MATRIZ1 es 20x7 (20 filas y 7 columnas). 9 . PROCESOS).

escriba en el editor lo que se muestra en la figura 12. i=1. en caso lo omita. i=1. Finalmente. vea la figura 11. LAS RESTRICCIONES En el modelo 2 ubicado en la página 2 identifique esta lista de restricciones: Restricciones de demanda. Restricciones de tiempo disponible para cada proceso. 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 mínima (o menos en caso algunas de las demandas mínimas sean cero).” toma cada una de las 20 variables de decisión en el atributo P e indica que sean mayores o iguales que la demanda mínima correspondiente que se registraron en los datos del atributo DEMANDAMIN. LINGO enviará un mensaje de error en la sintaxis. En el anexo 4 se muestran las restricciones del recurso tiempo en lenguaje algebraico. En la figura 13 se muestra cómo el lenguaje de modelación del LINGO con una sola sentencia genera las siete restricciones de tiempo.2…20 En la tabla 2 compare cada uno de los componentes de la expresión anterior para la demanda mínima con la sintaxis de las restricciones en LINGO. Figura 12 En el modelo 2 se definió las restricciones de demanda así: Pi ≥ Dmínima i .Un aspecto relevante en la sintaxis de la función @SUM es que enseguida debe escribir el nombre de un set. Tabla 2 Restricciones de demanda en notación matemática Pi ≥ Dmínima i i=1. 10 . Por ejemplo. lo confunda con un set y envíe otro mensaje de error. Con el lenguaje de modelación del LINGO evitaremos digitar estas restricciones. también es posible que lea el atributo.2…20 Restricciones de demanda en LINGO P( I ) >= DEMANDAMIN ( I ) ). En el anexo 4 se muestra las restricciones de demanda en lenguaje algebraico. éstas son especialmente engorrosas de digitar.2…20 Pi ≤ Dmáxima i . @FOR( PRODUCTOS ( I ): La expresión “@FOR( PRODUCTOS ( I ): P( I ) >= DEMANDAMIN( I ) ) . para tal fin. Restricciones de materia prima disponible. De manera similar usted puede explicar la sentencia para la demanda máxima escrita en la figura 12. luego en su editor omita el set PRODUCTO ( I ) y lea el mensaje que arroja LINGO. no se olvide de retornar a las condiciones originales.

11 . Figura 14 De manera similar como se explicó para las otras restricciones.2…7 ≤ Ti Restricciones de tiempo en LINGO @SUM( PRODUCTOS ( J ) : TIEMPO ( J .. i=1. I )*P( J ) ) <= RECURSOT ( I ) ). al igual que las restricciones de tiempo éstas también son engorrosas. la expresión “@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. Por otro lado. @FOR( PROCESOS ( I ): La expresión “@SUM( PRODUCTOS ( J ): TIEMPO ( J .20(Tuji*Pj) i=1.2…7 En la tabla 3 compare cada uno de los componentes de la expresión anterior con la sintaxis de las restricciones en LINGO. descubra usted cómo se elaboró la última sentencia para las restricciones de la materia prima.i del atributo TIEMPO) por la variable de decisión j (elemento j del atributo P). Tabla 3 Restricciones de tiempo en notación matemática j=1. Nuevamente en el anexo 4 se muestra las restricciones del recurso materia prima en lenguaje algebraico. En la figura 14 se muestra en la última sentencia cómo se generan las restricciones de este recurso. para finalizar el modelo se agrega el comando END. 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..Figura 13 En el modelo 2 se definió las restricciones del recurso tiempo en cada proceso así: j=1.20(Tuji*Pj) ≤ Ti .

Tenga cuidado cuando defina el orden de los contadores en los atributos de los sets derivados. el orden correcto para el atributo TIEMPO es ( J . Se recomienda que usted ejecute este ejemplo en su editor. Por ejemplo.”. el rango de existencia se ubica antes del comando END. Por ejemplo. PROCESOS). ocurrirá algo similar a lo explicado con @SUM. advirtiendo que se ha olvido un paréntesis. LINGO enviará un mensaje de error. aquí se invoca al set primitivo PRODUCTOS. estos comandos los aprenderá en los próximos laboratorios. o el siguiente botón ubicado en el menú. o presione Ctrl P. cualquier diferencia en los nombres LINGO no las reconocerá y enviará un mensaje de error. pero fue implícitamente invocado a través de los sets primitivos PROCESOS y PRODUCTOS. primero subraye un paréntesis y luego en la ventana Edit seleccione la aplicación Match parenthesis. si a continuación escribe el atributo RECURSOT( I ). en caso lo omita ocurrirá algo similar a lo que antes se explicó con @SUM. cuando los olvida LINGO envía el mensaje Missing right parenthesis. No olvide de usar el nombre exacto de cada atributo definido en la zona de sets. entonces. La sintaxis de la función @SUM exige que enseguida se escriba el nombre de un set. Revise los paréntesis. acotadas o binarias (0 ó 1) LINGO tiene comandos con el fin de declararlas. En las restricciones: Cada sentencia termina con el caracter “. La sintaxis de @FOR exige anotar enseguida el nombre de un set. I ). en caso contrario. I )*P( J ) ) <= RECURSOT ( I ) )” se asignó el contador “J“ a PRODUCTOS y el contador “I“ a PROCESOS. Para las variables de tipo enteras.EL RANGO DE EXISTENCIA Las variables de decisión del modelo del ejemplo 1 son no negativas (≥0). Si la función objetivo es de minimización use el com ando MIN seguido del carácter “=”. observe de nuevo las figuras 11 y 14 y anotemos algunos aspectos claves que a menudo son fuentes de error: En la función objetivo: La sentencia termina con el caracter “. LINGO reconocerá en @SUM exclusivamente los atributos (definidos en la zona de sets) asignados al set invocado. Dicho de otra manera. Lea el mensaje del LINGO. Finalmente. ¡no reconoce a MP ( J . confírmelo en la figura 5. los atributos que se aniden dentro de esta función deben estar necesariamente en el rango del set anotado. I ) por MP ( J . en la restricción de materia prima cambie MP por MPPROD. ASPECTOS CLAVES RESTRICCIONES EN LA MODELACIÓN DE LA FUNCIÓN OBJETIVO Y LAS Culminada la definición de la función objetivo y las restricciones. cuyo orden está dado por la dimensión de los sets PRODUCTOS y PROCESOS así: MATRIZ1 ( PRODUCTOS . Como en la sentencia “@FOR( PROCESOS ( I ): @SUM( PRODUCTOS ( J ): TIEMPO ( J . I ) no está en el rango del set derivado MATRIZ1. I ) y no TIEMPO ( I . Por ejemplo. ¿Por qué? La respuesta se encuentra en la figura 8. Vea la figura 14 y ejecute el siguiente ejemplo: en su editor en la sentencia “@FOR( PROCESOS ( I ): @SUM( PRODUCTOS ( J ): TIEMPO ( J . LINGO enviará un mensaje de error porque RECURSOT no está en el rango del set PRODUCTOS. en la misma sentencia del acápite inmediato anterior observe que se anotó TIEMPO ( J . se digitó la sentencia “MAX = @SUM( PRODUCTOS ( I ): MARGEN ( I )*P( I ) )”. vea que TIEMPO es un atributo en el rango del set derivado MATRIZ1. Una vez que anote el nombre del set en el comando @FOR. Es cierto que este set no se escribió en la sentencia. Normalmente LINGO ubica el cursor donde olvidó el signo.”. este tipo de variables no es necesario declararlas en LINGO porque el software asume que son no negativas cuando no se declaran. J ). I )*P( J ) ) <= RECURSOT ( I ) )” cambie TIEMPO ( J . sin restricción de signo. ¿qué ocurre? LINGO no admite anidar la función @FOR dentro de la función @SUM. entonces. 12 . si no es claro dónde. I ). I )! ¿Por qué? Porque MP ( J .

esta ventana tiene información de la cantidad de variables y restricciones. usted lee 53 porque LINGO asigna el número uno a la función objetivo y a la primera restricción el número dos y así sucesivamente. sin incluir la función objetivo ni el rango de existencia. LINGO mostrará la pantalla de la figura 16. en caso contrario mostrará el mensaje de error No matching parenthesis was found. Si luego de intentar resolver el modelo el LINGO envía mensaje de error. apóyese con los aspectos claves explicados en esta guía. 3. Figura 15 También puede presionar Ctrl U o presionar el siguiente botón en el menú: En caso no haya errores.6 SOLUCIÓN DEL MODELO El modelo del ejemplo 1 está listo. para resolverlo seleccione en la ventana LINGO la aplicación Solve como se muestra en la figura 15. sin embargo. deberá corregirlos. respectivamente. También presenta el valor óptimo de la función objetivo las variables de holgura y exceso.LINGO marcará el paréntesis que cierra el que usted subrayó. La figura 17 muestra la ventana [Solution Report-…]. Este reporte muestra para los programas lineales. así como los costos reducidos y los precios sombra. de forma similar al reporte del LINDO. que indica que el paréntesis de cierre no fue encontrado. No olvide el comando END. 13 . todos los parámetros del modelo y los resultados de las variables de decisión en el óptimo. Presione el botón Close en la ventana Solver Status […]. en este modelo 20 y 52.

Figura 16 Figura 17 14 .

Seleccione en la ventana LINGO la aplicación Solution o presiones Ctrl W. En la ventana Solver Status […] presione el botón Close. luego la figura 24 muestra el modelo algebraico similar al que digitó en LINDO. así el reporte estará en un formato resumido. Recuerde que esto necesariamente deberá ejecutarlo en la pantalla [LINGO Mode[…]. seleccione en la ventana LINGO la aplicación Range. La figura 23 muestra el resultado. No intente ejecutar Range en la pantalla [Solution Report-…] porque en ésta se desactivan la mayoría de aplicaciones del menú LINGO. La figura 22 muestra el resultado. Figura 18 La figura 19 muestra la pantalla con el reporte de sensibilidad. 15 . En el menú LINGO seleccione Generate/Display model o presione Ctrl G. 3.La figura 18 muestra cómo obtener el reporte de sensibilidad. La figura 20 ilustra cómo obtener los valores óptimos de las variables de decisión omitiendo la lista de los parámetros.7 GENERACIÓN DEL MODELO ALGEBRAICO LINGO ofrece la aplicación Generate para generar el modelo algebraico. LINGO mostrará la ventana Solution Report or Graph (vea la figura 21). Esto deberá ejecutarlo en la pantalla [LINGO Model…] al que en esta guía la hemos llamado editor. en esta ventana seleccione en “Attribute or Row Name:” las variables de decisión que en este caso es el atributo P.

Figura 19 Figura 20 16 .

Figura 21 Figura 22 Figura 23 17 .

Elaborado por: Ing. previo paso por el Bloc de notas. es evidente que resulta más complejo preparar un modelo con el lenguaje del LINGO que digitarlo en el editor del LINDO. sin embargo. Moraleja. OBSERVACIONES FINALES El ejemplo 1 de mediano tamaño ayudó a ilustrar las ventajas que ofrece el lenguaje de modelación del LINGO. También hay comandos que exportan los resultados al Excel. Christian Cornejo S. 18 .Figura 24 4. En las figuras 9 y 10 quizá tuvo la sensación que resulta engorroso anotar esa gran cantidad de datos. Sin embargo. piense el ahorro de tiempo y reducción de la probabilidad de error que se lograría con modelos de gran escala. usted debe practicar elaborando una cantidad apreciable de modelos usando el lenguaje del LINGO. LINGO ofrece comandos que importan todos los datos anotados en Excel y así evitará digitarlos o copiarlos en el editor del LINGO. En los próximos laboratorios usted aprenderá estas ventajas del software. es más sencillo si los pega directamente desde el Excel.

00 9.25 13.00 25.50 6.75 14.00 3.00 4.50 12.00 16.00 22.50 4.50 8.50 21.00 8.75 6.00 15.50 2.00 20.00 3.50 19.00 10.00 0.00 19.00 18.00 20.50 17.50 15.00 20.50 7.50 22.00 10.50 10.00 0.75 15.00 0.00 8.00 20.00 21.00 150 80 90 100 180 150 150 145 100 110 150 160 165 155 150 250 150 200 250 180 19 .00 20.00 25.00 0.00 10.00 15.50 17.00 0.00 0.50 16.00 24.00 4.50 3.00 15.00 0.50 5.00 15.50 2.00 18.00 0.00 25.50 10.00 24.00 25.00 20.25 3.00 0.Anexo 1 Costos variables unitarios en US$ Precio de venta en US$ Margen de contribución en US$ Demanda mínima del producto en kilogramos Demanda máxima 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 26.00 27.00 18.00 15.00 11.00 25.00 5.50 4.00 23.75 10.00 0.00 17.00 0.00 10.50 14.

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 .

15P6+0.083P11+0.05P17+0.25P6+13.2P4+0.5P3+10.4P10+0.15P11+0.35P11+0.033P17+0.283P6+0.35P10+0.033P18+0.25P17+0.2P10+0.5P15+19P16+21.3P3+0.167P1+0.05P19+0.2P20 <= 600 0.133 P12+0.35P15+0.4P17+0.217P 12+0.233P19+0.5P8+0.333P11+0.083P13+0.05P17+0.083P1+0.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.167P13+0.067P18+0.4P7+0.217P15+0.75P4+14.033P15+0.5P13+0.1P10+0.3P2+0.05P3+0.1P4+0.1P10+0.183 P12+0.3P4+0.1P17+0.5P17+21.1P18+0.2P5+0.067P3+0.033P20 <= 250 0.167P11+0.133P14+0.067P20 <= 300 !Restricciones de material prima: 0.05P16+0.3P15+0.1P10+0.15P18+0.05P16+0.15P11+0.1P18+0.2P16+0.1P5+0P6+0P7+0.133P19+0.117P7+0.133P17+0.25P18+0.133P15+0.1P4+0.2P4+0.3P5+0.067P1+0.75P2+10.1P13+0.067P5+0.3P4+0.5P18+15.167P11+0.2P19+0.1P1+0.1P5+0.117P6+0.117 P12+0.25P13+0.367P12+ 0.117P11+0.05P12+0.183P10+0.267P18+0.25P17+0.067P4+0.183P18+0.1P10+0.35P19+0.15P15+0.05P13+0.1P20 <= 270 0.133P7+0.167P19+0.417P3+0.067P2+0.1P 15+0.05P13+0P14+0.2P10+0.117P11+0.2P6+0.25P14 +0.167P9+0.2P7+0P8+0P9+0.1P3+0.333P13+0.067P15+0.25P10+0.2P1+0.15P4+0.317P7+0.233P9+0.133P3+0.133P8+0.117P12 +0.117P5+0.4P1+0.2P20 <= 900 0.4P3+0.5P5+17.1P1+0.2P2+0.2P2+0.15P1 2+0.45P16+0.1P2+0.067P15+0.033P2+0.183P14+0.133P6+0.25P5+0.25P14+0.117P3+0.1P7+0P8+0.5P7+12P8+16P9+17P10+20P11+22P12+18.1P1+0.3P18+0.25P18+0.15P6+0. 1P15+0.1P5+0.083P11+0.1P8+0.183P8+0.3P9+0.117P19+0.067P4+0.15P10+0.083P15+0.1P11+0.167P9+0.233P14+0.2P17+0.083P6+0.067P3+0.1P18+0.083P9+0.15P20 <= 350 0.15P12+0.067P17+0.183P4+0.083P1+0.2P16+0.117P14+0.1P1+0.083P2+0.067P8+0.1P5+0.117P2+0.3P1 5+0.5P8+0.5P6+0.083P19+0.283P16+0.3P20 <= 1200 0.1P2+0.1P16+0.133P4+0.183P10+0.2P1+0.3P14+0.1P14+0.5P13+17P14 +15.15P20 <= 400 END 22 .3P7+0.15P16+0.4P5+0.15P8+0.217P6+0.25P11+0.117P7+0.067P13+0.167P14+0.1P19+0.2P13+0.2P14+0.333P9+0.1P3+0.05P7+0.3P8+0.067P17+0.2P8+0.1P9+0.2P17+0.133P5+0.067P2+0.2P20 <= 650 0.3P9+0.167P19+0.15P6+0.Anexo 4 Modelo 1 MAX 11P1+15.2P13+0.05P16+0.083P9+0.1P4+0.3P9+0.1P3+0.45P12+0.25P19+0.2P2+0.2P16+0.15P12+0.1P8+0.1P19+0.05P16+0.033P5+0.133P9+0.133P20 <= 380 0.167P3+0.2P2+0.15P20 <= 450 0.033P6+0.25P1 4+0.083P16+0.2P12+0.15P7+0.15P18+0.05P1+0.15P20 <= 600 0.133P13+0.133P7+0.