Manual Lingo

  • Uploaded by: Omar Suárez Jacay
  • 0
  • 0
  • March 2021
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Manual Lingo as PDF for free.

More details

  • Words: 4,484
  • Pages: 17
Loading documents preview...
MANUAL DE LINGO Ing. Eduardo López S. [email protected]

Página 1

CAPÍTULO I CONOCIENDO LINGO

1.1

INTRODUCCIÓN

LINGO (Linear, INteractive and General Optimizer), es un lenguaje de modelación matemática que ha sido desarrollado por LINDO SYSTEMS INC. Permite resolver modelos de Programación Lineal y No Lineal y puede obtenerse una versión DEMO en la siguiente dirección: http://lindo.com/index.php/component/content/article/80-news/120-requesting-an-educational-researchlicense-for-lingo

1.2

¿COMO USARLO?

Al ingresar a LINGO, el programa presenta por defecto la ventana de ingreso del modelo. Los reportes de solución, modelos generados, rangos de sensibilidad, estadísticas del modelo, gráficas, etc. son presentadas en distintas ventanas. LINGO trabaja con ventanas, su uso es similar a la mayoría de los programas. En la ventana de ingreso del modelo (LINGO Model), se debe digitar el modelo a solucionar. Luego de ingresar el modelo, Ud. podrá resolverlo, para lo cual debe hacer clic en el menú en la opción SOLVER / SOLVE:

Página 2

En el menú desplegable se pueden apreciar las siguientes opciones: SOLVE (Ctrl + S) SOLUTION (Ctrl + O) RANGE (Ctrl + R)

Permite obtener la solución del modelo.

Permite generar un reporte texto o gráfico de la solución del modelo o de algunas variables (opción disponible solamente después de haber obtenido la solución del modelo). Permite obtener los rangos de sensibilidad de los coeficientes de la función objetivo y de los coeficientes del lado derecho (opción disponible solamente después de haber obtenido la solución del modelo).

OPTIONS (Ctrl + I) GENERATE

Permite ingresar a las diversas opciones de configuración de LINGO.

Permite generar la formulación del modelo en forma algebraica.

PICTURE (Ctrl + K) MODEL STATISTICS (Ctrl + E) LOOK (Ctrl + L)

Permite generar una ventana con un gráfico matricial de los coeficientes del modelo.

Brinda información acerca de las estadísticas del modelo (número de contrastes, número total de variables, número de los diferentes tipos de contrastes, etc.)

Permite generar una ventana para observar el modelo con la característica de que cada línea de código se encuentra numerada.

Si desea que aparezcan los rengos de sensibilidad, seguir los siguientes pasos: • • • • •

Ingresar a Solver / Options En la pestaña General Solver: En Dual Computations; elegir: Prices & Ranges. Click en Save (si desea que siempre esté activo). Click en OK.

Importante: El reporte de rangos de sensibilidad no aplica cuando el modelo posee al menos una variable restringida a entera o binaria. Aparte de los habituales iconos de todo programa en entorno Windows; hay unos iconos propios del LINGO en la barra principal; a continuación una breve descripción de esos iconos: Find

Encontrar cadena de caracteres.

(Ctrl + F)

Go to line

Ir a una línea específica del modelo formulado.

(Ctrl + T)

Match Parenthesis

Busca los parentesis de apertura y cierre de una expresión.

(Ctrl + P)

Solve

Resolver el modelo formulado.

(Ctrl + S)

Solution

Permite observar en forma particular el valor de cualquier variable.

(Ctrl + O)

Página 3

Matrix Picture

Ejecuta el comando PICTURE.

(Ctrl + K)

Options

Ingresa a LINGO/OPTIONS.

(Ctrl + I)

Send to back

Permite cambiar de una ventana a otra entre todas las ventanas activas.

(Ctrl + B)

Close all

Cierra todas las ventanas activas.

(Ctrl + 3)

Tile windows

Ordena en forma horizontal o vertical todas las ventanas activas.

(Ctrl + 4)

Otras opciones útiles de LINGO son: Select All

Selecciona toda la ventana activa.

(Ctrl + A)

Select Font

Selecciona un nuevo estilo de fuente para la ventana activa.

(Ctrl + J)

Cascade

Arregla todas las ventanas activas en forma de cascada, con la ventana activa en la tapa.

(Ctrl + 5)

NOTA: Cuando se utilice los atajos, trabajar con teclas numéricas del cuerpo principal del teclado, más no con las del bloque numérico. 1.3

OPERADORES

LINGO tiene dos tipos de operadores: los clásicos operadores aritméticos y los operadores lógicos; además de las relaciones de igualdad y/o desigualdad.

Operadores Aritméticos

Símbolos de igualdad y desigualdad

Potencia

^

Igual

=

Multiplicación

*

Mayor

>

División

/

Menor

<

Adición

+

Mayor igual

>=

Resta

-

Menor igual

<=

Operadores Lógicos #NOT#

Niega el valor lógico del operando

#EQ#

Es verdadero si los operandos son iguales, de otro modo es falso.

#NE#

Es verdadero si los operandos no son iguales, de otro modo es falso.

#GT#

Es verdadero si el operando de la izquierda es estrictamente mayor que de la derecha, de otro modo es falso.

Página 4

#GE#

Es verdadero si el operando de la izquierda es mayor o igual que de la derecha, de otro modo es falso.

#LT#

Es verdadero si el operando de la izquierda es estrictamente menor que de la derecha, de otro modo es falso.

#LE#

Es verdadero si el operando de la izquierda es menor o igual que de la derecha, de otro modo es falso.

#AND# #OR#

Es verdadero si ambos operandos son verdaderos, de otro modo es falso. Es falso si ambos operandos son falsos, de otro modo es verdadero.

CAPÍTULO II LENGUAJE LINGO Y MODELOS

2.1

LENGUAJE

LINGO es un lenguaje de modelamiento matemático. LINGO permite expresar el problema en una forma sencilla y clara, muy cercana a la notación matemática estándar. LINGO permite utilizar variables con índices a diferencia de otros lenguajes. 2.2

MODELOS

LINGO resuelve tanto modelos lineales como no lineales. En este manual sólo se mencionan modelos lineales (En la carpeta donde se instaló LINGO, existe una carpeta denominada Samples, en la cual hay una gran variedad de modelos). 2.3 REGLAS DEL LENGUAJE LINGO A continuación, se presentan unas reglas importantes que deben tenerse en cuenta para la correcta formulación de los modelos. a) b) c) d) e) f) g) h) i) 2.4

El límite para los nombres de las variables es de 32 caracteres alfanuméricos (comenzando con un carácter alfabético). LINGO no diferencia los caracteres alfabéticos mayúsculas y minúsculas. Es decir, es equivalente usar la letra minúscula f que la letra mayúscula F. Se debe procurar no utilizar, como nombres de variables, de conjuntos o de índices, las palabras reservadas de LINGO. Cada sentencia debe terminar con punto y coma (;) Los comentarios empiezan con un signo de exclamación (!) y termina con punto y coma (;) Cualquier fila puede ser etiquetada con [ número o nombre]. Cuando se realiza una multiplicación, está debe ser correctamente especificada mediante el uso de su correspondiente operador, el asterisco (ejm. 3*X1); aún inclusive si se utiliza paréntesis (ejm. 3*(X1 + X2)) La función objetivo se expresa con los término max o min precedido de un signo de igualdad (ejm. max = 3*X1 + 4*X2;) El orden de las sentencias en LINGO no es importante. (ejm. la función objetivo puede ir después de las restricciones) MODELOS

• Modelo Directo Un modelo simple directo es un sistema de ecuaciones simultáneas como: Model: 2*X + 3*Y = 80; 5*X + 2*Y = 90; End El término directo significa que se pueden calcular los valores de las variables directamente. Luego de ingresar las sentencias anteriores, LINGO presenta el siguiente reporte: Variable X Y

Value 10.00000 20.00000 Página 5

Row 1 2

Slack or Surplus 0.0000000 0.0000000

• Modelo de Programación Lineal En este tipo de modelos de optimización se busca obtener un conjunto de valores de las variables sujetas a un conjunto de restricciones, de manera que optimice (máximo o mínimo) el valor de la función objetivo. Model: Max = 2*X + 5*Y; X + Y <= 52; 2*X + 3*Y <= 45; End LINGO presenta el siguiente reporte: Objective value: Variable X Y Row 1 2 3 2.5

75.00000 Value 0.0000000 15.00000 Slack or Surplus 75.00000 37.00000 0.00000

Reduced Cost 1.333333 0.0000000 Dual Price 1.000000 0.000000 1.666667

INTERPRETACIÓN DEL REPORTE

La interpretación de los valores que aparecen en cada columna es la siguiente: •

Costo reducido (Reduced Cost) Hay dos formas de interpretar la columna de costo reducido: a)

Usted puede interpretar el costo reducido de una variable como la cantidad en que debería mejorar el coeficiente de una variable en la función objetivo, antes de que la variable llegue a convertirse en una variable básica. b) El costo reducido de una variable puede ser interpretado como la cantidad de multa que usted debería pagar para introducir una unidad de esa variable en la solución.



Holgura o Exceso (Slack or Surplus) La columna Slack or Surplus contiene los valores de las variables de holgura (≤) y/o exceso (≥). Si la restricción es satisfecha exactamente como una igualdad, el valor de la holgura será cero y la restricción será catalogada como Restricción Activa. Si una restricción es violentada, como ocurre en una solución no factible, el valor de su holgura será negativo. Saber esto puede ayudarle a encontrar las restricciones violentadas en un modelo no factible (un modelo para el cual no existan valores para las variables de decisión, de tal manera que satisfaga simultáneamente todas las restricciones). Las restricciones no limitantes (restricciones con holgura mayor que cero) tendrán un valor positivo distinto de cero en esta columna.



Precio Dual (Dual Price) Usted puede interpretar el precio dual de una restricción como la cantidad en que mejoraría (aumentaría o disminuiría) el valor óptimo de la función objetivo, si el término independiente o valor constante de la restricción (recurso disponible) fuese aumentado o disminuido en una unidad. Los precios duales también son conocidos como precios sombra. Estos precios indican lo que usted estaría dispuesto a pagar (por debajo) por unidades adicionales de recurso. También indican, los precios unitarios que usted estaría dispuesto a vender sus recursos (por encima).

Página 6

Página 7

CAPÍTULO III MANEJO DE CONJUNTOS (Sets)

3.1

CONJUNTOS



Los conjuntos son el fundamento de LINGO.



Un conjunto es un grupo de objetos relacionados. Un conjunto puede ser una lista de productos, tareas, o inventarios. Cada elemento en el conjunto puede tener una o más características (atributos) asociadas con este. Ejemplos: a) Un conjunto de productos tiene el atributo correspondiente a sus precios. b) Cada tarea en un conjunto tiene el atributo del tiempo que requiere para ser ejecutada. c) Un conjunto de productos tiene el atributo que representa la cantidad a comprarse de cada uno.

LINGO reconoce dos tipos de conjuntos: primitivos y derivados. •

Conjunto primitivo: es un conjunto compuesto de únicamente objetos que no pueden ser reducidos. Un conjunto de cinco almacenes es un conjunto primitivo.



Conjunto derivado: es un conjunto que es construido de uno o más conjuntos, es un subconjunto de otro conjunto o combinaciones de elementos de otros conjuntos. Un conjunto compuesto por las rutas entre los cinco almacenes y diez clientes es un ejemplo de un conjunto derivado.

3.1.1 Sección Sets Los conjuntos son definidos en la sección SETS de LINGO. La sección SETS empieza con la palabra SETS: (los dos puntos inclusive) y termina con ENDSETS La definición de un conjunto tiene la siguiente definición: nombre / miembros / : atributos; Ejemplo 3.1: SETS: ESTUDIANTES/Juan,Arturo,Silvia,Consuelo/: EDAD, SEXO; ENDSETS

Ejemplo 3.2: SETS: ESTUDIANTES /1..n/ : EDAD, SEXO; ENDSETS 3.1.2

Sección Data

En esta sección se asignan valores a algunos conjuntos de atributos. Empieza con la palabra DATA: (los dos puntos inclusive) y termina con ENDDATA. Ejemplo 3.3: DATA: EDAD = 20, 19, 18, 21; SEXO = 1, 1, 0, 0; ENDDATA NOTA: Los valores de los atributos en lugar de estar separados por comas (,), también pueden estar separados solamente por espacios.

Página 8



Ingreso de valores durante la ejecución del modelo: Algunas veces es necesario ingresar los valores de una variable en el momento de la ejecución de un modelo con LINGO. Para este fin, se reemplaza en la lista de valores el dato correspondiente por el signo ?.

Ejemplo 3.4: DATA: INGRESO = 200,?, 400, 600; ENDDATA

Cuando se ejecute el modelo anterior, LINGO presenta la siguiente pantalla en que se deberá ingresar el valor que corresponda.

3.2 CONJUNTOS DERIVADOS Un conjunto derivado se obtiene a partir de conjuntos primitivos. Es decir, un conjunto derivado origina sus miembros en combinación de otros conjuntos. Existen tres formas de definir conjuntos derivados: •

Conjunto derivado denso. El formato de un conjunto denso es: Nombre_conjunto(conjuntos_primitivos): [atributos];

Ejemplo 3.5: IO_I(SECCION,FACULTAD):num_alumnos, aprobados, desaprobados;



Conjunto derivado no denso con lista explícita. El formato de este tipo de conjuntos es: Nombre_conjunto (conjuntos_primitivos) / lista explícita / : [atributos];

Ejemplo 3.6: IO_I(SECCION,FACULTAD): /SISTEMAS 801,SISTEMAS 805/ num_alumnos, aprobados, desaprobados;



802, SISTEMAS 803, INDUSTRIAL

804, INDUSTRIAL

Conjunto derivado no denso con filtros. El formato de este tipo de conjunto es: Nombre_conjunto (conjuntos_primitivos) | condición:[atributos];

Ejemplo 3.7: PAR(I,I) | &1#LT#&2: C, X ;

Tipos de Conjuntos * Primitivos

Densos * Derivados

Lista Explícita No Densos Filtros

3.3

FUNCIONES PARA MANEJAR CONJUNTOS (set-looping functions) Página 9

3.2.1 la función @for La función @for permite acceder a elementos del conjunto y a sus atributos y a realizar operaciones con ellos. @for crea y mantiene un índice para los elementos del conjunto y ejecuta cualquier operación que sea haya especificado en cada uno de los miembros. La sintaxis de la función @for es: @for(conjunto(índice) | calificador_condicional : expresión); Donde: índice es opcional. Los índices pueden ser usados en el calificador_condicional que también es opcional, pero si se usa debe estar precedido por | . Ejemplo 3.8: Model: SETS: ESTUDIANTES/JUAN,ARTURO,SILVIA,CONSUELO/: EDAD, SEXO, GASTO; ENDSETS DATA: EDAD = 20, 19, 18, 21; SEXO = 1, 1, 0, 0; ENDDATA @for(ESTUDIANTES(I)| EDAD(I)#EQ#20: GASTO=3.5*EDAD (I)); @for(ESTUDIANTES(I)| EDAD(I)#NE#20: GASTO=4*EDAD (I));

El reporte de LINGO es:

Resultado de las sentencias @for

Variable EDAD( JUAN) EDAD( ARTURO) EDAD( SILVIA) EDAD( CONSUELO) SEXO( JUAN) SEXO( ARTURO) SEXO( SILVIA) SEXO( CONSUELO) GASTO( JUAN) GASTO( ARTURO) GASTO( SILVIA) GASTO( CONSUELO)

Value 20.00000 19.00000 18.00000 21.00000 1.000000 1.000000 0.0000000 0.0000000 70.00000 76.00000 72.00000 84.00000

3.2.2 La función @SUM La función @sum permite calcular la suma de un atributo sobre todos los miembros del conjunto. La sintaxis es:

@sum(conjunto(índice) | calificador_condicional : expresión);

Donde: índice y calificador_condicional son opcionales. 3.2.3 Las funciones @MIN y @MAX La función @MIN permite obtener el mínimo valor entre todos los miembros del conjunto. La función @MAX permite obtener el máximo valor entre todos los miembros del conjunto. Ejemplo 3.9: Model: SETS: ESTUDIANTES /JUAN, ARTURO, SILVIA , CONSUELO/ : EDAD; ENDSETS DATA: EDAD = 20, 19, 18, 21; ENDDATA @max(estudiantes:edad) = Maximo; @min(estudiantes:edad) = Minimo; @sum(estudiantes:edad) = Suma; El reporte de LINGO es:

Variable

Value Página 10

MAXIMO MINIMO SUMA EDAD( JUAN) EDAD( ARTURO) EDAD( SILVIA) EDAD( CONSUELO)

Resultados de @max, @min y @sum

21.00000 18.00000 78.00000 20.00000 19.00000 18.00000 21.00000

Página 11

CAPÍTULO IV FUNCIONES DE LINGO

4.1

FUNCIONES DE DOMINIO

LINGO trabaja únicamente con variables numéricas: enteras y continuas. Todas las variables son continuas por omisión. Si se desean cambiar los valores de las variables se pueden usar los siguientes comandos o también denominados funciones de dominio: @gin, @bin, @free y @bnd. Estas funciones sirven para señalar a LINGO de manera específica, los valores posibles que pueden asumir las variables. 4.1.1 Variables enteras Una variable entera es aquella que puede asumir únicamente valores enteros 0, 1, 2, .... Para indicar a LINGO que una variable es entera, el formato es el siguiente: @GIN(nombre_variable); 4.1.2

Variables binarias

Una variable binaria sólo puede asumir los valores 0 y 1. Este tipo de variable es usada para tomar una decisión, como por ejemplo, contratar o no contratar a una persona, producir o no producir un artículo, vender o no a un cliente, etc. El formato de esta función es: @BIN(nombre_variable); 4.1.3

Variables libres y acotadas

Una variable libre es aquella que puede asumir cualquier valor real. LINGO requiere que se especifique que una variable sea libre porque de otra manera la considera positiva. Una variable libre es usada para resolver algunos modelos duales. El formato de esta función es: @FREE(nombre_variable); Una variable acotada es aquella que sólo puede tomar valores dentro de un intervalo posible. El formato de esta función es: @BND(límite_inferior, nombre_variable, límite_superior); Por ejemplo, si se desea que la variable X se encuentre en el intervalo [10, 20], entonces se debe escribir: @BND(10, X, 20); 4.2

OTRAS FUNCIONES MATEMÁTICAS DE LINGO

LINGO ofrece dos tipos de funciones matemáticas: funciones generales y funciones trigonométricas. Estas funciones son: @ABS(X ) @COS(X ) @EXP(X ) @FLOOR(X ) @LGM(X ) @LOG(X ) @SIGN(X ) @SIN(X) @SMAX(X1, X2,..., Xn) @SMIN(X1, X2,..., Xn) @TAN(X)

Retorna el valor absoluto de X. Retorna el coseno de X, donde X es el ángulo en radianes. Retorna la constante e (2.718281...) a la potencia X. Retorna la parte entera de X. Para ser especifico, si X ≥ 0, @FLOOR el entero más grande, I, tal que I ≤ X. Si X es negativo, @FLOOR el entero más negativo, I, tal que I ≥ X. Retorna el logaritmo natural (base e) de la función gamma de X, es decir, ln(X – 1)!. Retorna el logaritmo natural de X. (base 10). Retorna -1 si X < 0. De otro modo, retorna +1. Retorna el seno de X, donde X es el ángulo en radianes. Retorna el valor máximo de X1, X2,..., Xn. Retorna el valor mínimo de X1, X2,..., Xn. Retorna la tangente de X, donde X es el ángulo en radianes.

Página 12

CAPÍTULO V MODELAMIENTO DE PROBLEMAS 5.1 PROBLEMA DE PRODUCCIÓN (índice simple) Cierta empresa manufacturera ha descontinuado la producción de cierta línea de productos no provechosa; eso creo un exceso considerable de la capacidad de producción. El gerente está considerando dedicar esta capacidad en exceso a tres productos: A, B y C. La capacidad disponible de las máquinas que podría limitar la producción se resume en la tabla siguiente: Tipo de Máquina Fresadora Torno Rectificadora

Tiempo disponible (horas a la semana) 1450 1350 350

El número de horas de máquina requeridas por cada unidad de los productos se da a continuación: Producto A B C

Fresadora 9 3 5

Tipo de Máquina Torno Rectificadora 5 3 4 0 0 2

El departamento de ventas indica que la demanda mínima esperada para los productos A y B es 100 unidades semanalmente y para el producto C es de 20 unidades por semana. La utilidad unitaria será de $30, $12 y $15, para los productos A, B y C, respectivamente. 5.1.1 Planteamiento en forma algebraica Definición de variables: Xi : Número de productos tipo i a producir

i = A, B, y C

Model: Max = 30*X1 + 12*X2 + 15*X3; 9*X1 + 3*X2 + 5*X3 <= 1450; 5*X1 + 4*X2 <= 1350; 3*X1 + + 2*X3 <= 350; X1 >= 100; X2 >= 100; X3 >= 20; End 5.1.2

Planteamiento en forma estructurada

model: Variable de decisión sets: producto/A,B,C/: utilidad,demanda_minima,X; maquina/fresadora,torno,rectificadora/: disponibilidad; pxm(producto,maquina):requerimiento;

Declaración de conjuntos y atributos

endsets Conjunto derivado data: utilidad = 30 12 15; demanda_minima = 100 100 20; disponibilidad = 1450 1350 350; requerimiento = 9 5 3 3 4 0 5 0 2; Página 13

enddata Max = @sum(producto(i):utilidad(i)*X(i));

En estos casos los índices i, j son opcionales

@for(maquina(j): @sum(producto(i): requerimiento(i,j)*X(i))<= disponibilidad(j)); @for(producto(j): X(j) >= demanda_minima(j)); end es opcional

end

NOTA: Como se puede apreciar, se tiene que tener mucho cuidado con los paréntesis; cada paréntesis de apertura debe tener su respectivo paréntesis de clausura Utilizando la opción GENERATE (Ctrl + G) del menú LINGO, se obtiene lo siguiente en una nueva ventana: MAX

30 X( A) + 12 X( B) + 15 X( C)

SUBJECT TO 2] 3] 4] 5] 6] 7]

9 X( A) + 3 X( B) + 5 X( C) <= 5 X( A) + 4 X( B) <= 1350 3 X( A) + 2 X( C) <= 350 X( A) >= 100 X( B) >= 100 X( C) >= 20

1450

END En el reporte se aprecia el problema en su forma algebraica; escrita en el formato LINDO (software de programación lineal) 5.2 PROBLEMA DE TRANSPORTE (índice doble) Un fabricante de muebles tiene tres fábricas que requieren semanalmente: 500, 700 y 600 toneladas de madera. El fabricante puede comprar la madera a 3 compañías madereras, quienes pueden surtir un máximo de 2 000, 1 500 y 500 toneladas por semana. Las compañías madereras utilizan camiones para transportar la madera, lo cual limita a 250 toneladas el peso máximo que pueden enviar a cada fábrica de muebles. En la tabla siguiente se da el costo de transporte desde las compañías madereras hacia las fábricas de muebles. Compañía maderera A B C 5.2.1

1 2 2.5 3

Fábrica de muebles ($ / ton.) 2 3 4 3.5

3 5 4 3

Planteamiento en forma algebraica

Definición de variables: Xij : Número de toneladas a enviar desde la compañía maderera i hacia la fábrica j i = A, B, y C j = 1, 2 y 3 model: Min = 2*X11 + 3*X12 + 5*X13 + 2.5*X21+ 4*X22+ 4*X23+ 3*X31+ 3.5*X32+ 3*X33; X11 + X12 + X13 <= 2000; X21 + X22 + X23 <= 1500; X31 + X32 + X33 <= 500; X11 + X21 + X31 >= 500; X12 + X22 + X32 >= 700; Página 14

X13 + X23 + X33 >= 600; X11 X12 X13 X21 X22 X23 X31 X32 X33

<= <= <= <= <= <= <= <= <=

250; 250; 250; 250; 250; 250; 250; 250; 250;

end 5.2.2

Planteamiento en forma estructurada

Model: sets: Variable de decisión cia_maderera/A,B,C/: capacidad_surtir; fabrica/1..3/: requerimiento; envio(cia_maderera,fabrica): costo, X; endsets

En lugar de escribir: 1,2,3 se puede hacer colocando dos puntos en forma consecutiva entre el primer y el último número

data: capacidad_surtir = 2000,1500,500; requerimiento = 500,700,600; costo = 2.0 3.0 5.0 2.5 4.0 4.0 3.0 3.5 3.0; enddata

Se pueden utilizar comas o solamente espacios Los datos se pueden colocar en una sola línea, teniendo siempre cuidado en que orden se definio el conjunto derivado al que pertenece la variavle

min = @sum(envio: costo * X); @for( fabrica(j): @sum( cia_maderera(i): X(i,j)) = requerimiento(j)); @for(cia_maderera(i): @sum( fabrica(j): X(i,j)) <= capacidad_surtir(i)); @for(cia_maderera(i): @for(fabrica(j): X(i,j) <= 250));

En estos casos si son necesarios los índices.

end

Página 15

ANEXO Al momento de resolver el modelo, aparecerá la siguiente ventana:

A continuación una breve descripción de cada uno de los campos que aparecen en la ventana del SOLVER STATUS. Variables Indica el conteo del número total de variables enteras que hay en el modelo. En general, mientras más variables no lineales haya y mientras más variables enteras haya en el modelo, más difícil será encontrar una solución óptima en una cantidad de tiempo razonable. Los más rápidos de solucionar son los modelos lineales puros, sin variables enteras. El conteo de variables no incluye aquellas variables que LINGO determina tienen un valor fijo. Por ejemplo, considere las siguientes restricciones: X = 1; X + Y = 3; De la primera restricción LINGO determina que X tiene un valor fijo de 1. Usando esta información en la restricción 2 LINGO determina que Y tiene un valor fijo de 2. X e Y serán luego sustituidas en el modelo y no contribuirán en la contabilización del total de variables. Constraints Muestra el total de restricciones y el número de éstas que son no lineales. Una restricción es considerada como no lineal si una o más variables tienen relaciones no lineales en esa restricción. LINGO busca en su modelo restricciones que sean fijas. Una restricción es considerada fija si todas las variables en ella son fijas. Las restricciones fijas son sustituidas y sacadas del modelo por lo que no contribuyen en la contabilización del total de restricciones. Nonzeros Muestra el número total de coeficientes distintos de cero en el modelo y de éstos cuantos están asociados a variables no lineales. En una restricción específica aparece sólo un grupo pequeño de variables del total de variables del modelo. El coeficiente implícito para todas las variables que no aparecen es cero, mientras que los coeficientes de las variables que si aparecen son "nonzeros". Por lo tanto se puede interpretar el número total de coeficientes distintos de cero como la contabilización del número de veces que las variables aparecen en todas las restricciones. El número de coeficientes distintos de cero, no lineales, se puede interpretar como el número de veces que las variables no lineales aparecen en todas las restricciones. Generator Memory Used Indica la cantidad de memoria que el generador de modelo de LINGO está actualmente usando de su memoria compartida. Usted puede cambiar el tamaño de la asignación de memoria al generador de modelo usando el comando "Options" de LINGO. Elapsed Runtime Muestra el total de tiempo usado hasta el momento para generar y resolver el modelo.

Página 16

Optimizer Status Muestra el estado actual de optimización y la descripción de cada campo aparece en la siguiente tabla: Campo

Descripción

State

Indica el Estado actual de solución. Los estados posibles son: "Global Optimum" (Optimo global), "Local Optimum" (Optimo local), "Feasible" (Factible), "Infeasible" (No factible), "Unbounded" (No acotado), "Interrupted" (Interrumpida) y "Undetermined" (Indeterminada)

Objective

Valor actual de la Función Objetivo

Infeasibility

Cantidad en la que las restricciones que no se cumplen están sobrepasadas.

Iterations

Número de iteraciones ocupadas para llegar a la solución actual

Branches

Best IP IP Bound

Número de ramas en el método del árbol de ramificación y acotamiento (Sólo para modelos de programación entera) Valor de la Función Objetivo para la mejor solución entera encontrada (Sólo para modelos de programación entera) Límite teórico del valor de la de la Función Objetivo para modelos de programación entera

Cuando LINGO comienza a resolver su problema, el estado inicial de la solución actual será "indeterminada". Esto se debe a que "Solver" no ha tenido aún la oportunidad de generar una solución para su problema. Una vez que "Solver" comienza las iteraciones el estado avanzará a la condición "no factible". En el estado no factible LINGO ha generado soluciones tentativas, pero ninguna que satisfaga todas las restricciones del modelo. Asumiendo que existe una solución factible "Solver" luego avanzará al estado "Factible". En el estado factible LINGO ha encontrado una solución que satisface todas las restricciones del modelo, pero aún no ha encontrado la mejor solución para su modelo. Una vez que "Solver" ya no puede encontrar mejores soluciones para su modelo terminará ya sea en el estado "Optimo Global" o bien en el "Optimo Local". Si su modelo no tiene restricciones no lineales, cualquier solución óptima local será también óptima global. Por lo tanto, todo modelo lineal terminará en el estado "Optimo Global". Si, por otro lado, su modelo tiene una o más restricciones no lineales, entonces cualquier solución óptima local puede no ser la mejor solución a su modelo. Si un modelo termina en el estado "No Acotado", significa que LINGO puede mejorar la función objetivo sin tener un límite. En la vida real esto correspondería a una situación en la que usted podría generar utilidades infinitas. Debido a que esa situación es por decir lo menos "extraña", sino imposible, lo que realmente ocurre es que usted o bien ha omitido o ha planteado erróneamente en su modelo, alguna restricción del sistema. Finalmente, el estado "Interrumpida" ocurrirá cuando usted prematuramente interrumpa el trabajo de LINGO antes de que haya encontrado la solución final para su modelo.

Página 17

Related Documents

Manual Lingo
March 2021 0
Lingo Tutorial
January 2021 1
Modul Lingo
January 2021 1
Lingo 14
January 2021 12
Lingo Modelling
January 2021 11
02 Modul Pelatihan Lingo
January 2021 0

More Documents from "Cynthia Ayuningtyas"