Está en la página 1de 17

MANUAL DE LINGO

Ing. Eduardo López S.


Pcinelop@upc.edu.pe

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-research-
license-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
Permite obtener la solución del modelo.
(Ctrl + S)

SOLUTION Permite generar un reporte texto o gráfico de la solución del modelo o de algunas variables
(Ctrl + O) (opción disponible solamente después de haber obtenido la solución del modelo).

RANGE 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
(Ctrl + R) solución del modelo).

OPTIONS
Permite ingresar a las diversas opciones de configuración de LINGO.
(Ctrl + I)

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

PICTURE
Permite generar una ventana con un gráfico matricial de los coeficientes del modelo.
(Ctrl + K)

MODEL
STATISTICS 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.)
(Ctrl + E)

LOOK Permite generar una ventana para observar el modelo con la característica de que cada línea de
(Ctrl + L) 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
(Ctrl + 5) la tapa.

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.

Es verdadero si el operando de la izquierda es estrictamente mayor que de la


#GT#
derecha, de otro modo es falso.

Página 4
Es verdadero si el operando de la izquierda es mayor o igual que de la derecha, de
#GE#
otro modo es falso.

Es verdadero si el operando de la izquierda es estrictamente menor que de la


#LT#
derecha, de otro modo es falso.

Es verdadero si el operando de la izquierda es menor o igual que de la derecha, de


#LE#
otro modo es falso.

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

#OR# 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) El límite para los nombres de las variables es de 32 caracteres alfanuméricos (comenzando con un carácter alfabético).
b) 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.
c) Se debe procurar no utilizar, como nombres de variables, de conjuntos o de índices, las palabras reservadas de LINGO.
d) Cada sentencia debe terminar con punto y coma (;)
e) Los comentarios empiezan con un signo de exclamación (!) y termina con punto y coma (;)
f) Cualquier fila puede ser etiquetada con [ número o nombre].
g) 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))
h) 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;)
i) El orden de las sentencias en LINGO no es importante. (ejm. la función objetivo puede ir después de las restricciones)

2.4 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 Value
X 10.00000
Y 20.00000

Página 5
Row Slack or Surplus
1 0.0000000
2 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: 75.00000

Variable Value Reduced Cost


X 0.0000000 1.333333
Y 15.00000 0.0000000

Row Slack or Surplus Dual Price


1 75.00000 1.000000
2 37.00000 0.000000
3 0.00000 1.666667

2.5 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 802, SISTEMAS 803, INDUSTRIAL 804, INDUSTRIAL


805/ num_alumnos, aprobados, desaprobados;

• 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:


Variable Value
EDAD( JUAN) 20.00000
EDAD( ARTURO) 19.00000
EDAD( SILVIA) 18.00000
EDAD( CONSUELO) 21.00000
SEXO( JUAN) 1.000000
SEXO( ARTURO) 1.000000
SEXO( SILVIA) 0.0000000
SEXO( CONSUELO) 0.0000000
GASTO( JUAN) 70.00000
Resultado de las sentencias @for GASTO( ARTURO) 76.00000
GASTO( SILVIA) 72.00000
GASTO( CONSUELO) 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 21.00000
Resultados de @max, @min y @sum MINIMO 18.00000
SUMA 78.00000
EDAD( JUAN) 20.00000
EDAD( ARTURO) 19.00000
EDAD( SILVIA) 18.00000
EDAD( CONSUELO) 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 ) Retorna el valor absoluto de X.
@COS(X ) Retorna el coseno de X, donde X es el ángulo en radianes.
@EXP(X ) Retorna la constante e (2.718281...) a la potencia X.
Retorna la parte entera de X. Para ser especifico, si X ≥ 0, @FLOOR el
@FLOOR(X ) 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,
@LGM(X )
ln(X – 1)!.
@LOG(X ) Retorna el logaritmo natural de X. (base 10).
@SIGN(X ) Retorna -1 si X < 0. De otro modo, retorna +1.
@SIN(X) Retorna el seno de X, donde X es el ángulo en radianes.
@SMAX(X1, X2,..., Xn) Retorna el valor máximo de X1, X2,..., Xn.
@SMIN(X1, X2,..., Xn) Retorna el valor mínimo de X1, X2,..., Xn.
@TAN(X) 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:
Tiempo disponible (horas a
Tipo de Máquina
la semana)
Fresadora 1450
Torno 1350
Rectificadora 350

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

Tipo de Máquina
Producto
Fresadora Torno Rectificadora
A 9 5 3
B 3 4 0
C 5 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; Declaración de


maquina/fresadora,torno,rectificadora/: disponibilidad; conjuntos y atributos
pxm(producto,maquina):requerimiento;

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 En estos casos los
índices i, j son
Max = @sum(producto(i):utilidad(i)*X(i)); opcionales

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

end end es opcional

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] 9 X( A) + 3 X( B) + 5 X( C) <= 1450
3] 5 X( A) + 4 X( B) <= 1350
4] 3 X( A) + 2 X( C) <= 350
5] X( A) >= 100
6] X( B) >= 100
7] X( C) >= 20

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 Fábrica de muebles ($ / ton.)


maderera 1 2 3
A 2 3 5
B 2.5 4 4
C 3 3.5 3

5.2.1 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 <= 250;


X12 <= 250;
X13 <= 250;
X21 <= 250;
X22 <= 250;
X23 <= 250;
X31 <= 250;
X32 <= 250;
X33 <= 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;
En lugar de escribir: 1,2,3 se puede hacer
endsets colocando dos puntos en forma consecutiva
entre el primer y el último número
data:

capacidad_surtir = 2000,1500,500; Se pueden utilizar


requerimiento = 500,700,600; comas o solamente
costo = 2.0 3.0 5.0 espacios
2.5 4.0 4.0
3.0 3.5 3.0; Los datos se pueden colocar en una sola línea,
enddata 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)); En estos casos si
@for(cia_maderera(i): son necesarios los
@sum( fabrica(j): X(i,j)) <= capacidad_surtir(i)); índices.
@for(cia_maderera(i):
@for(fabrica(j): X(i,j) <= 250));

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

Indica el Estado actual de solución. Los estados posibles son: "Global Optimum" (Optimo
State 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

Número de ramas en el método del árbol de ramificación y acotamiento


Branches
(Sólo para modelos de programación entera)

Valor de la Función Objetivo para la mejor solución entera encontrada


Best IP
(Sólo para modelos de programación entera)

IP Bound 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

También podría gustarte