Está en la página 1de 21

GUIA DE USUARIO DEL SOFTWARE DE OPTIMIZACION LINGO

CURSO: INVESTIGACION OPERACIONAL


Docentes: Luis Ulfe vega Gustavo Solis Vargas
Septiembre de 2010
Copyright 2010, Luis Ulfe / Gustavo Solis, Investigacin de operaciones S.A. Se pe
rmite la copia de este material indicando la procedencia de los autores

INVESTIGACION OPERACIONAL
INDICE
Introduccin Qu es LINGO? Definiendo un modelo en LINGO LA SECCION SETS DE UN MODELO C
onjunto Primitivo Conjunto Derivado Denso Conjunto Derivado No Denso LA SECCIN DAT
A DE UN MODELO LA SECCIN INIT DE UN MODELO LA SECCIN CALC DE UN MODELO FUNCIONES DE
LES Y CONJUNTOS La Funcin @FOR La Funcin @SUM Funciones Anidadas @SUM y Filtros Fu
nciones @MIN y @MAX DOMINIO DE LAS VARIABLES OPERADORES EN LINGO Operadores Arit
mticos Operadores Lgicos Operadores Relacionales INTERFASE CON ARCHIVOS EXTERNOS T
rabajando con Hojas de Clculo Trabajando con Bases de Datos COLOCANDO NOMBRES A L
AS RESTRICCIONES FUNCIONES DE REPORTE DE LINGO
Pag. 3 Pag. 3 Pag. 3 Pag. 4 Pag. 4 Pag. 5 Pag. 6 Pag. 7 Pag. 8 Pag. 9 Pag. 10 Pa
g. 10 Pag. 11 Pag. 11 Pag. 12 Pag. 12 Pag. 13 Pag. 14 Pag. 14 Pag. 14 Pag. 15 Pa
g. 15 Pag. 15 Pag. 16 Pag. 19 Pag. 19
Docentes:
Luis Ulfe Vega /
Gustavo Solis Vargas
2

INVESTIGACION OPERACIONAL
ENTORNO DE DESARROLLO DE MODELOS EN EL SOFTWARE LINGO
Introduccin El presente material describe los elementos principales del lenguaje
de modelamiento matemtico LINGO, se explica como definir las secciones principale
s del modelo asociados a ejemplos aplicados simples y se termina construyendo mo
delos medianamente complejos que requieren los tpicos revisados hasta ese punto. Q
u es LINGO? LINGO (Linear, INteractive, and General Optimizer), es un lenguaje de
modelacin matemtica, que provee un entorno en el cual se puede desarrollar, corre
r y modificar modelos matemticos. LINGO es una herramienta fcil de utilizar para d
esarrollar grandes modelos de optimizacin lineal y no lineal. Comnmente los grande
s modelos requieren expresar grupos de muchas restricciones, las cuales mantiene
n una estructura similar. Dada esta caracterstica, LINGO, permite manejarlo como
conjuntos (SET) de informacin y realizar las operaciones de una manera ms eficient
e. Usando el estilo del modelo directo, usted necesitar digitar de manera repetit
iva cada trmino de cada restriccin. Los SETS le permiten definir y trabajar con gr
upos de objetos que necesitan ser procesados de formas similares. En efecto, los
mismos objetos pueden incluso ser otros conjuntos. Los SETS son el fundamento d
el Lenguaje de Modelacin de LINGO. Con una definicin de conjuntos pude escribir un
a serie de restricciones similares en una sentencia simple y expresar formulacio
nes largas y complejas consistentemente. Esto le permite expresar sus modelos ms
grandes muy rpidamente, y de cierta manera es fcil de leer y entender.

Definiendo un modelo en LINGO En general, un modelo de optimizacin consistir de lo


s siguientes elementos: Las Variables: Que indican el mejor curso de accin a segu
ir Las Restricciones: Que expresan los limites en los recursos o condiciones esp
eciales restrictivas. La Funcin Objetivo: Que es aquella que expresa lo que se de
sea maximizar o minimizar. A continuacin mostramos un ejemplo con un modelo de op
timizacin que se desea maximizar expresado en el formato requerido por LINGO: MAX
= 100 * X + 150 * Y; X <= 100; Y <= 120; Note que cada una de las expresiones m
atemticas son finalizadas con el punto y coma ;, si no se coloca el ;, el modelo mand
ara un mensaje de error. Usando Comentarios: A continuacin mostramos el mismo eje
mplo pero colocando comentarios para documentar mejor el modelo, estos comentari
os deben comenzar con el smbolo de admiracin ! y terminar con punto y coma ; Esta es
funcin objetivo; MAX = 100 * X + 150 * Y; X <= 100; Esta es la primera restriccin;
Y <= 120; La variable Y debe ser menor o igual a 120;
Docentes:
Luis Ulfe Vega /
Gustavo Solis Vargas
3

INVESTIGACION OPERACIONAL
Usando Maysculas o Minsculas: En el modelo anterior definimos las variables con le
tras maysculas, pero, podemos definir una variable con mayscula y minscula en forma
indistinta para referenciar a la misma variable. Longitud y Caracteres Validos
Cuando definimos el nombre de una variable en LINGO, este debe comenzar con un c
arcter alfabtico (A-Z), los siguientes caracteres pueden ser alfabticos, numricos (0
-9) o el carcter under-line _, estos nombres pueden tener una longitud mxima de 32 c
aracteres.
LA SECCION SETS DE UN MODELO
Los SETS son la caracterstica ms poderosa en LINGO para modelar sistemas grandes, es
tos permite expresar muchas restricciones similares en pocas lneas. Antes de usar
conjuntos en un modelo LINGO, tenemos que definirlos en la seccin de conjuntos d
el modelo, la seccin de conjuntos comienza con la palabra clave SETS: (incluyendo l
os dos puntos) y termina con la palabra clave ENDSETS. Un modelo puede no tener la
seccin de conjuntos, una sola seccin o mltiples secciones. Una seccin de conjuntos
puede aparecer en cualquier lugar del modelo, la nica restriccin es que se debe de
finir cualquier conjunto y sus atributos antes de que los mismos sean referencia
dos en las restricciones del modelo. El nombre del conjunto es cualquiera que el
usuario seleccione, comenzando con un carcter alfabtico, seguido de hasta 31 cara
cteres alfanumricos o el carcter underline _. Un conjunto posee una lista de miembro
s o elementos del conjunto, la lista de miembros del conjunto son aquellas que c
onstituyen el conjunto, estos pueden ser listados en forma explicita o implcita.
Los miembros del conjunto pueden tener cero o ms atributos especificados en la li
sta de atributos de la definicin del conjunto, un atributo es simplemente alguna
propiedad que cada uno de los miembros del conjunto posee. Los SETS (conjuntos)
son simplemente grupos de objetos seleccionados. Un SET puede ser una lista de p
roductos, tareas, o stocks. Cada elemento del conjunto puede tener una o ms carac
tersticas asociadas con ste. Llamaremos a estas caractersticas atributos, por ejemp
lo, un SET de producto puede tener un atributo que lista el precio de cada produ
cto. Tipos de Conjuntos Primitivos Densos Derivados No Densos Filtros Lista Expl
icita
Conjunto Primitivo: Los conjuntos primitivos son los objetos fundamentales en un
modelo y no pueden ser desmenuzados en componentes ms pequeos. La definicin de un
conjunto primitivo requiere: El nombre del conjunto. Sus miembros (objetos conte
nidos en el conjunto). Opcionalmente, cualquier atributo que los miembros del co
njunto puedan tener.
Docentes:
Luis Ulfe Vega /
Gustavo Solis Vargas
4

INVESTIGACION OPERACIONAL
Sintaxis: nombre_conjunto / lista_miembros / [ : lista_atributos ] SUCURSAL / AR
EQUIPA, CUZCO, TRUJILLO / : INGRESOS; En algunos casos de definicin de conjuntos
no es necesario definir atributos asociados a los miembros del conjunto, por eje
mplo el caso anterior podra quedar as: SUCURSAL / AREQUIPA, CUZCO, TRUJILLO / : ;
Los miembros de los dos ejemplos anteriores han sido definidos por extensin, ahor
a veamos la siguiente definicin de conjunto: nombre_conjunto / 1 ..n / [ : lista_
atributos ] PROYECTO / 1 .. 3 / : RENTABILIDAD; Los miembros del ejemplo anterio
r han sido definidos por compresin. Ambos casos son validos. Conjunto Derivado De
nso: Los conjuntos derivados, son creados a partir de otros conjuntos (uno o ms d
e otros conjuntos). Estos conjuntos componentes son referenciados como los padre
s del conjunto derivado y pueden ser primitivos o derivados. Para definir un con
junto derivado se requiere: El nombre del conjunto Sus conjuntos padres Opcional
mente, sus miembros y Opcionalmente, cualquier atributo que los miembros del con
junto puedan tener. Se tiene la siguiente sintaxis: nombre_conjunto (Lista_conju
ntos_padres) [ /especificaciones_lista_miembros/ ] [ :lista_atributos ]; Conside
remos la siguiente seccin a manera de ejemplo. SETS: SUCURSAL / AREQUIPA, CUZCO /
:; PROYECTO / PROY1, PROY2/:; PERIODO / 1 .. 2 /:; SUC_PROY_PER(SUCURSAL, POYECT
O, PERIODO): TASA, INVMAXIMA; ENDSETS El nombre_conjunto es un nombre cualquiera q
ue se define para denominar al conjunto, en lo posible algo que sugiera de que c
onjuntos se deriva, o el uso que se le va a dar al conjunto. La Lista_conjuntos_p
adres es una lista de conjuntos previamente definidos, separados por comas. Sin e
specificar los elementos de especificaciones_lista_miembros, LINGO construye todas
las combinaciones de miembros de cada uno de los conjuntos padres para crear lo
s miembros del nuevo conjunto derivado.

Docentes:
Luis Ulfe Vega /
Gustavo Solis Vargas
5

INVESTIGACION OPERACIONAL
Miembros del conjunto SUC_PROY_PER Indice 1 2 3 4 5 6 7 8 Miembro ( AREQUIPA, (
AREQUIPA, ( AREQUIPA, ( AREQUIPA, ( CUZCO, (CUZCO, (CUZCO, (CUZCO,
PROY1, PROY1, PROY2, PROY2, PROY1, PROY1, PROY2, PROY2,
1) 2) 1) 2) 1) 2) 1) 2)
Los conjuntos SUCURSAL, PROYECTO y PERIODO son conjuntos primitivos que conforma
n el conjunto derivado SUC_PROY_PER. Tomando todas las combinaciones de los miem
bros de cada uno de los tres conjuntos padres, LINGO construye el conjunto SUC_P
ROY_PER: La lista de miembros es opcional y es usada cuando se desea limitar el
conjunto a algunos subconjuntos del conjunto completo. Una lista de miembros de
un conjunto derivado puede ser construido usando: Una lista de miembros explicit
a o Como un filtro de miembros. Tambin se podra generar un SET derivado a partir d
e un solo tipo de SET padre: SETS: SUCURSAL / AREQUIPA, CUZCO, TRUJILLO /:; CONE
XION(SUCURSAL, SUCURSAL): DISTANCIA; ENDSETS Miembros del conjunto CONEXION Indi
ce 1 2 3 4 5 6 7 8 9 Miembro ( AREQUIPA, ( AREQUIPA, ( AREQUIPA, ( CUZCO, ( CUZC
O, (CUZCO, (TRUJILLO, (TRUJILLO, (TRUJILLO,
AREQUIPA) CUZCO ) TRUJILLO ) AREQUIPA) CUZCO ) TRUJILLO ) AREQUIPA) CUZCO ) TRUJ
ILLO)
Conjunto Derivado No Denso (Usando una Lista de Miembros Explcita) nombre_conjunt
o (Lista_conjuntos_padres) [ /especificaciones_lista_miembros/ ] [ :lista_atribu
tos ]; SUC_PROY_PER (SUCURSAL, POYECTO, PERIODO) / AREQUIPA PROY1 1, AREQUIPA PR
OY2 2, CUZCO PROY2 1 / : TASA, INVMAXIMA; SUC_PROY_PER tendr solo tres miembros d
el conjunto disperso. ( AREQUIPA, PROY1, 1), ( AREQUIPA, PROY2, 2) y ( CUZCO, PR
OY2, 1) Conjunto Derivado No Denso (Usando un Filtro de Miembros) Nos permite de
finir una lista de miembros derivada del conjunto, esta involucra la especificac
in de una condicin lgica que cada miembro potencial del conjunto debe satisfacer pa
ra su inclusin en el conjunto.
Docentes:
Luis Ulfe Vega /
Gustavo Solis Vargas
6

INVESTIGACION OPERACIONAL

Suponga que tiene un conjunto llamado CAMIONES y cada camin tiene un atributo lla
mado CAPACIDAD. Adems, se desea generar un subconjunto solamente de aquellos cami
ones que son capaces de transportar grandes cargas. Se podra usar una lista de mi
embros explcita, e ingresar cada uno de los camiones que pueden transportar grand
es cargas, pero, por que hacer todo ese trabajo cuando se puede usar un filtro d
e miembros, tal como se describe a continuacin: CAMIONES_PESADOS(CAMIONES) | CAPA
CIDAD(&1) #GT# 50000;

El conjunto CAMIONES_PESADOS ha sido derivado del conjunto padre CAMIONES. La ba


rra vertical | es usada para marcar el inicio de un filtro de miembros (Ver ejempl
o en LINGO). Los operadores lgicos reconocidos por LINGO incluyen: #EQ# Igual #NE
# No igual #GE# Mayor que o igual a #LT# Menor que #LE# Menor que o igual a El f
iltro de miembros permite solo aquellos camiones que tienen una capacidad de car
ga (CAPACIDAD(&1)) mayor que (#GT) 50,000 en el conjunto CAMIONES_PESADOS. El smb
olo &1 en el filtro es conocido como un ubicador de ndice del conjunto. El primer
conjunto primitivo padre es colocado en &1, el segundo en &2 y as sucesivamente.
En este ejm. Solo tenemos un conjunto padre, de modo que &2 no tiene sentido.

Resumen de Conjuntos En resumen, LINGO reconoce dos tipos de conjuntos - primiti
vos y derivados. Los conjuntos primitivos son los objetos fundamentales en un mo
delo y no pueden ser desmenuzados en componentes ms pequeos. Los conjuntos derivad
os, por otro lado, son creados a partir de otros conjuntos. Estos conjuntos comp
onentes son referenciados como los padres del conjunto derivado y pueden ser pri
mitivos o derivados. Los datos que requiere el modelo son ledos desde la seccin de
datos, esta seccin es descrita a continuacin.
LA SECCIN DATA DE UN MODELO
Esta seccin comienza con la palabra reservada DATA: (incluyendo los dos puntos) y t
erminando con la palabra reservada ENDDATA, en esta seccin podemos realizar las sig
uientes operaciones: Asignar valores a algunos atributos de conjuntos. Aislar da
tos del resto del modelo. Mantenimiento fcil del modelo. Dimensionamiento fcil y rp
ido del modelo (Escalabilidad). Se pueden tener sentencias para inicializar los
atributos de los conjuntos definidos en la seccin SETS. Estas expresiones tienen la
siguiente sintaxis: Lista_Atributos = Lista_Valores;
A continuacin mostramos un ejemplo en el que se asignan valores a los atributos x e
y. SETS : CONJUNTO1 / 1..3 / : X, Y; ENDSETS
Docentes:
Luis Ulfe Vega /
Gustavo Solis Vargas
7

INVESTIGACION OPERACIONAL
DATA: X = 1 2 3; Y = 4 5 6; ENDDATA En el ejemplo mostrado a continuacin, podramos
pensar que a X se le asignaran los valores 1, 4 y 2, debido a su ubicacin en la
lista, en vez de los valores 1, 2 y 3. Cuando LINGO lee los datos, lo hace en co
lumnas en lugar de filas. SETS: CONJUNTO1 / 1..3 / : X, Y; ENDSETS DATA: X Y =
1 4 2 5 3 6;
ENDDATA LINGO, adems tiene la habilidad para especificar los miembros del conjunt
o en la seccin de datos, junto con los valores de los atributos. SETS: CONJUNTO1:
X, Y; ENDSETS DATA: CONJUNTO1 X Y = A 1 4 B 2 5 C 3 6; ENDDATA Usted necesitar d
ar valores a algunos atributos de SET (conjuntos) antes de que LINGO pueda resol
ver su modelo. Para este propsito LINGO usa una segunda seccin opcional, la seccin
DATA. Similar a la seccin SETS, la seccin DATA empieza con la palabra reservada DAT
A: (incluyendo los 2 puntos) y termina con la palabra ENDDATA (sin poner los 2 punt
os). En la seccin DATA se puede digitar las expresiones para inicializar los atri
butos de los SETS que defini en la seccin SETS. Estas expresiones tienen la sintax
is: Atributo = valor_lista El valor_lista debe tener el mismo nmero de valores co
mo el atributo que inicializa. Los nmeros de cada valor deben ser separados por e
spacios o comas. LA SECCIN INIT DE UN MODELO Esta es una seccion opcional ofrecida
por LINGO, los valores colocados en la seccion INIT son usados como puntos de in
icio por el solver no lineal de LINGO, de un modo distinto a la asignacin de valo
res en la seccion DATA, el solver de LINGO es libre de alterar los valores de la
s variables que son inicializadas en la seccion INIT. Los puntos de inicio espec
ificados en la seccion INIT son usados solamente en modelos No Lineales Una secc
ion INIT comienza con la palabra reservada INIT y termina con ENDINIT Por ejm. si re
solvemos el siguiente ejercicio (se recomienda crear el grafico de esta funcin en
la hoja de calculo Excel):
Docentes:
Luis Ulfe Vega /
Gustavo Solis Vargas
8

INVESTIGACION OPERACIONAL
MIN = X * @COS( 3.1416 * X); X < 6; La solucin ptima local ser:
y si resolvemos el mismo modelo usando una seccion de inicio INIT tal como se mu
estra en la parte inferior: INIT: X = 4.6; ENDINIT MIN = X * @COS( 3.1416 * X);
X < 6; La solucin ptima local partiendo de dicho punto ser:
LA SECCIN CALC DE UN MODELO En algunas ocasiones los datos iniciales ledos por el mo
delo requieren algunas operaciones adicionales para que estn en un formato adecua
do. La seccion de calculo comienza con la palabra reservada CALC: y termina con la
palabra reservada ENDCALC A continuacin mostramos un ejemplo donde se halla el pro
medio de X,Y y Z MODEL: DATA: X, Y, Z = 1, 2, 3; ENDDATA
Docentes:
Luis Ulfe Vega /
Gustavo Solis Vargas
9

INVESTIGACION OPERACIONAL
CALC: PROMEDIO = ( X + Y + Z) / 3; ENDCALC END FUNCIONES DE BUCLES Y CONJUNTOS E
stas funciones nos permiten aplicar una operacin a todos los miembros de un conju
nto usando una sentencia simple, estas son: @FOR @SUM @MIN @MAX La sintaxis para
estas sentencias es: @funcin (nombre_conjunto[ (lista_indices_conjunto) [ | cali
ficador_condicional ]]: lista_expresiones); La Funcin @FOR Ahora que puede defini
r los SETS y los atributos para almacenar informacin, necesitar una forma de acced
er a los elementos de esos SETS. La funcin @FOR le permite acceder a los elemento
s de un SET individual, sus atributos y ejecutar operaciones sobre ellas. Cuando
use el @FOR, LINGO crea y mantiene un ndice dentro de los miembros del SET y eje
cuta o realiza cualquier operacin que halla especificado sobre cada uno de los mi
embros. La sintaxis es la siguiente: @FOR (Set_index_list) | Conditional_qualifi
er : Expression); El Conditional_qualifier es opcional. Si lo usa, ste es precedi
do por la barra carcter ( | ) . Por lo menos se requiere una expresin para @FOR, p
ero un nmero ilimitado puede ser especificado; cada uno separado por un punto y c
oma ( ; ). El Set_index_list es opcional. Si no lo usa, LINGO aplicar Expression
para todos los miembros del SET. Si lo usa, los miembros de la funcin lista indic
arn los miembros del conjunto que est enlazando. Cuando lo ha especificado, el ndic
e en Set_index_list puede ser usado en el Conditional_qualifier . Ejemplo: MODEL
SETS Numeros / 1..5/ : X ; ENDSETS @FOR (Numeros( I ) : X( I ) = I - 1); END La
funcin @FOR es usada para generar restricciones con los miembros de un conjunto,
consideremos el siguiente ejemplo: SETS: CAMIONETAS / TOYOTA, HYUNDAI, FORD, NI
SSAN / : CARGA; ENDSETS Si el atributo CARGA es usado para denotar la capacidad
de carga de dicha camioneta, entonces podemos usar la funcin @FOR para restringir
dicha capacidad de carga con la siguiente expresin: @FOR (CAMIONETAS(C): CARGA(C
) <= 2500 );
Docentes:
Luis Ulfe Vega /
Gustavo Solis Vargas
10

INVESTIGACION OPERACIONAL
Una vez ingresado el cdigo arriba mostrado en LINGO, usando LINGO/Generate, veremos
que se generan las siguientes restricciones: CARGA(TOYOTA) <= 2500; CARGA(HYUND
AI) <= 2500; CARGA(FORD) <= 2500; CARGA(NISSAN) <= 2500;
el
comando
Ahora, mostramos
de cualquiera de
.. 5 / : VALOR,
(I): TRIPLE(I) =

un modelo usando la funcin @FOR para calcular el nmero triple de


los cinco nmeros ubicados en el atributo VALOR: SETS NUMEROS / 1
TRIPLE; ENDSETS DATA: VALOR = 3 4 2 7 10; ENDDATA @FOR (NUMEROS
3 * VALOR(I) );

La solucin del modelo anterior nos da los siguientes valores para los valores tri
ples: Variable TRIPLE(1) TRIPLE(2) TRIPLE(3) TRIPLE(4) TRIPLE(5) La Funcin @SUM C
alcula la suma de una expresin sobre todos los miembros de un conjunto, considere
mos el modelo: SETS: VENDEDOR / V1 V2 V3 V4 V5 / : DEMANDA; ENDSETS DATA: DEMAND
A = 5 1 3 4 6; ENDDATA Podramos sumar todos los valores de la DEMANDA usando la s
iguiente expresin despus de la sentencia ENDDATA: TOTAL_DEMANDA = @SUM(VENDEDOR: D
EMANDA ); Por ejemplo: @SUM (Peso: valor); Retornar la suma del atributo valor de
todos los miembros del conjunto Peso. Funciones Anidadas Estas funciones nos pe
rmiten definir diversas funciones de bucles dentro de otras, el siguiente, es un
ejemplo de la funcin @SUM anidada dentro de @FOR: Las restricciones de demanda:
@FOR ( VENDEDORES (J): @SUM ( ALMACENES (I): VOLUMEN (I,J)) = Value 9 12 6 21 30
DEMANDA (J) );
Docentes:
Luis Ulfe Vega /
Gustavo Solis Vargas
11

INVESTIGACION OPERACIONAL
Especficamente, para cada vendedor, sumamos los envos que van desde todos los alma
cenes a dicho vendedor e igualamos esta suma con la demanda del vendedor. Las fu
nciones @SUM, @MAX y @MIN pueden ser anidados dentro de cualquier funcin de bucle
, la funcin @FOR, por otra parte, solo puede ser anidada dentro de otra funcin @FO
R. Caso de Anlisis: Revisar en el anexo 1 el enunciado del caso de transporte y d
efinir para este modelo las restricciones de oferta y demanda usando las funcion
es @FOR y @SUM. Adems, deber implementar estas restricciones en el LINGO. @SUM y F
iltros Supongamos que deseamos sumar los primeros tres elementos de DEMANDA, ent
onces podramos usar un calificador condicional en el ndice del conjunto como sigue
: DEMANDA_3 = @SUM( VENDEDOR(J) | J #LE# 3 : DEMANDA(J) ); El smbolo #LE# es llam
ado un operador lgico, este operador compara el operando de la izquierda (J) con
el de la derecha (3) y retorna el valor de verdad si el operador de la izquierda
es menor que o igual al de la derecha, en otro caso, este retorna falso. El res
ultado final es que LINGO suma los primeros tres trminos en X, omitiendo el cuart
o y quinto trmino, para una suma total de 9. Caso de Anlisis: Para el modelo del a
nexo 1, modelo en el cual ya se crearon las restricciones asociadas, modificar l
as restricciones de modo tal que el origen 1 no pueda enviar nada al destino 4 F
unciones @MIN y @MAX @MIN calcula el valor mnimo de una expresin sobre todos los m
iembros de un conjunto @MAX calcula el valor mximo de una expresin sobre todos los
miembros de un conjunto, otra vez, consideremos el modelo:
SETS: VENDEDOR / V1 V2 V3 V4 V5 / : DEMANDA; ENDSETS DATA: X = 5 1 3 4 6; ENDDAT
A Para encontrar los valores mnimos de la DEMANDA, podemos usar: EL_MINIMO = @MIN
(VENDEDOR(J): DEMANDA(J)); EL_MINIMO = @MIN(VENDEDOR: DEMANDA); @MIN, @MAX y Fil
tros Suponga que deseamos calcular el valor mximo de los tres primeros elementos
de DEMANDA. Como con el ejemplo de @SUM, todo lo que necesitamos hacer es aadir e
l calificador condicional J #LE# 3, esto es: EL_MAXIMO = @MAX(VENDEDOR(J) | J #L
E# 3 : DEMANDA(J)); La solucin ser: Variable EL_MAXIMO
Value 5.000
Docentes:
Luis Ulfe Vega /
Gustavo Solis Vargas
12

INVESTIGACION OPERACIONAL
DOMINIO DE LAS VARIABLES Las variables en un modelo LINGO por default son no-negat
ivos y continuos, es decir, pueden asumir cualquier valor real de cero a infinit
o positivo, en muchos casos, sin embargo, este dominio de las variables es inapr
opiado pues, podramos desear que una variable tome valores negativos o que una va
riable sea restringida solo a valores enteros. LINGO provee 4 funciones de domin
io de variables: @GIN restringe los valores de una variable a enteros. @BIN crea
una variable binaria (0 o 1). @FREE permite que una variable asuma cualquier va
lor real, positivo o negativo. @BND limita una variable dentro de un rango finit
o. Variables Enteras General: Binary: @GIN - Define variables enteras con cualqu
ier valor @BIN - Define variables binarias con valores cero o uno
Variables Libres Por default, una variable LINGO tiene una cota inferior de cero
y una cota superior de infinito, @FREE elimina la cota inferior de cero y permi
te que la variable tome valores negativos, permitiendo que esta sea irrestricta
en signo o libre, la sintaxis es: @FREE( nombre_variable); Ejemplo 1: @FREE( X);
Ejemplo 2: @FREE( CANTIDAD( 4)); Ejemplo 3: @FOR( PRODUCTOS: @FREE( CANTIDAD));
Variables Acotadas La funcin @BND permite especificar cotas inferiores y superior
es en una variable, @BND limita el rango de una variable dentro de un intervalo
especfico. La sintaxis para @BND es: @BND( cota_inferior, nombre_variable, cota_s
uperior); En trminos matemticos, LINGO interpreta la funcin @BND como: Cota_inferio
r < Nombre_variable < Cota_supeior Ejemplo 1: Ejemplo 2: Ejemplo 3: @BND( -1, X,
1); @BND( 100, CANTIDAD( 4), 200); @FOR( PRODUCTOS: @BND( 10, CANTIDAD, 20)); @
FOR( PRODUCTOS: @BND( CI, CANTIDAD, CS));
Ejemplo 4:
Caso de Anlisis: Para el modelo del anexo 1 (caso de anlisis 2 - seleccin de proyec
tos), formular y resolver el modelo respectivo
Docentes:
Luis Ulfe Vega /
Gustavo Solis Vargas
13

INVESTIGACION OPERACIONAL

OPERADORES EN LINGO LINGO tiene tres tipos de operadores: Aritmticos


trabajan con
operandos numricos, LINGO tiene cinco operadores aritmticos Lgicos En LINGO, los o
peradores lgicos son principalmente usados en expresiones condicionales en las fu
nciones de bucles con conjuntos, para controlar que miembros de un conjunto debe
n ser incluidos o excluidos de la funcin. Relacionales
Los operadores relacionale
s son usados en un modelo para especificar cuando el lado izquierdo de una expre
sin debe ser igual a, menor que o igual a, o mayor que o igual al lado derecho. O
peradores Aritmticos ^ * / + Potencia Multiplicacin Divisin Adicin Substracci
Estos operadores deben parecernos familiares y ellos funcionan exactamente del m
odo ya conocido. Las prioridades de tales operadores estn dadas en la siguiente t
abla: Nivel PrioridadOperador(es) Alto - (negacin) ^ * / Bajo Operadores Lgicos Lo
s operadores lgicos retornan como resultado los valores Verdad o Falso. LINGO usa
el valor de 1 para representar el valor de Verdad y 0 para Falso. LINGO conside
ra que un argumento es verdadero si y solo si, este es igual a 1 Operador Valor
#NOT# Verdad si el operando a la derecha es Falso, en otro caso, Falso #EQ# Verd
ad si ambos operandos son iguales, de lo contrario Falso #NE# Verdad si ambos op
erandos son no iguales, en otro caso, Falso #GT# Verdad si el operando izquierdo
es mayor que el derecho, en otro caso, Falso #GE# Verdad si el operando izquier
do es mayor que o igual al operando derecho, en otro caso, Falso. #LT# Verdad si
el operando izquierdo es menor que el derecho, en otro caso, Falso #LE# Verdad
si el operando izquierdo es menor que o igual al del lado derecho, en otro caso,
Falso #AND# Verdad si ambos argumentos son verdaderos, en otro caso, Falso #OR#
Falso si ambos argumentos son falsos, en otro coso, Verdad +
El ranking de prioridades de los operadores lgicos es:
Docentes:
Luis Ulfe Vega /
Gustavo Solis Vargas
14

INVESTIGACION OPERACIONAL
Nivel de Prioridad Alto Bajo
Operador(es) #NOT# #EQ# #NE# #GT# #GE# #LT# #LE# #AND# #OR#
Operadores Relacionales Son usados para formar las restricciones de un modelo, s
on distintos de los operadores lgicos #EQ#, #LE# y #GE#, en que, ellos le indican
a LINGO que el resultado del modelo debe satisfacer la direccin del operador rel
acional. Los operadores lgicos, solamente reportan cuando una condicin es satisfec
ha o no, estos operadores son: = La expresin a la izquierda debe ser igual a la d
e la derecha. <= La expresin a la izquierda debe ser menor que o igual a la expre
sin de la derecha. >= La expresin a la izquierda debe ser mayor que o igual a la e
xpresin en la derecha.
LINGO acepta < como menor o igual que y > por mayor o igual que. LINGO no soporta op
eradores estrictamente menor que o mayor que. En general es inusual encontrar un
a buena formulacin que requiera tal caracterstica. Si se desea que A sea estrictam
ente menor que B: A < B, podemos convertir esta expresin a: A+e<B Donde e es una
constante pequea
INTERFASE CON ARCHIVOS EXTERNOS Resulta imprctico tratar de mantener su informacin
en un modelo LINGO, en la mayora de casos, los datos residen en archivos externo
s. En forma adicional, una solucin generada por LINGO es de poca utilizacin si no
puede exportarla a otras aplicaciones. Revisaremos los mtodos para mover informac
in hacia y desde LINGO, trabajando en base a: Archivos ASCII (No ser revisado) Hoj
as de Clculo Base de Datos Trabajando con Hojas de Clculo Las hojas de clculo son b
uenas para manipular desde una pequea hasta moderada cantidad de datos. LINGO per
mite al usuario importar datos de las hojas de clculo y exportarlas tambin hacia l
as hojas de clculo usando enlaces de tiempo-real Object Linking and Embedding (OL
E), cuyo procedimiento revisaremos a continuacin: Importar Datos desde Excel: Usa
ndo @OLE LINGO utiliza el comando @OLE para importar datos desde Excel, usando @
OLE, LINGO carga Excel, el archivo deseado y solicita los rangos de datos requer
idos en la hoja de clculo. La funcin @OLE puede ser usada en las secciones Data e Ini
t.
Docentes:
Luis Ulfe Vega /
Gustavo Solis Vargas
15

INVESTIGACION OPERACIONAL
La sintaxis al utilizar @OLE para importar datos en las secciones Datos e Init es: O
bjeto = @OLE( ArchivoHC [, Rango]); Ejemplo 1: COSTO = @OLE( ESPECIFICACIONES.XLS
); En este caso no se especifica el rango, debido a que el rango tiene el nombre
del atributo COSTO COSTO = @OLE( ESPECIFICACIONES , RANGOCOSTOS );
Ejemplo 2:
Exportar Datos hacia Excel: Usando @OLE La sintaxis al utilizar @OLE para export
ar datos en la seccin Datos es: @OLE( ArchivoHC [, Rango]) = Objeto ; Esta funcin es
ejecutada, al final de la ejecucin del modelo, ejem. @OLE( ManejoPersonal.Xls , R
angoAsignado ) = INICIAN; Observacin: Si se usa la funcin @OLE sin especificar el
nombre de la hoja de calculo y el rango asociado, el atributo al que se le asign
a los valores y el rango definido en la hoja de calculo deben tener el mismo nom
bre, adems, la hoja de calculo debe estar abierta con el archivo a usar, por ejem
plo en el siguiente caso: DATA: COSTO = @OLE(); @OLE() = PRODUCIR; ENDDATA Impli
ca que existe una hoja de clculo que tiene definido un rango de datos llamado COST
O, los valores que se encuentren en este rango sern asignados al atributo COSTO defi
nido en el modelo LINGO. Del mismo modo los valores del atributo PRODUCIR son envi
ados a la hoja de clculo, donde deber existir un rango de datos llamado PRODUCIR.
Trabajando con Bases de Datos Cuando los modelos comienzan a manejar una gran ca
ntidad de datos, los sistemas administradores de bases de datos (DBMSs), son, inc
uestionablemente, la mejor herramienta a utilizar, en la mayora de negocios, enco
ntraremos que la mayor parte de la informacin esta en una o muchas bases de datos
, LINGO acepta enlaces a cualquier DBMS que tenga un driver ODBC (Open DataBase
Connectivity). LINGO instala drivers ODBC para los siguientes DBMSs: Access, dBas
e, Excel, FoxPro, Oracle, Paradox, SQL Server y archivos de texto LINGO usa la f
uncin @ODBC para acceder a las bases de datos @ODBC es usada para importar y expo
rtar datos desde y hacia bases de datos. Un origen de datos ODBC es una base de
datos que reside en un DBMS, para el que tenemos un driver ODBC, esta base de da
tos debe ser registrada con el administrador ODBC. Creando un registro de datos
ODBC Para crear un registro de datos ODBC seleccionar:
Docentes:
Luis Ulfe Vega /
Gustavo Solis Vargas
16

INVESTIGACION OPERACIONAL
1.- Inicio/Configuracin/Panel de Control de las opciones de Windows 2.- Herramien
tas administrativas 3.- Orgenes de datos ODBC Luego aparecer un cuadro de dialogo
similar al mostrado a continuacin:
4.- En este cuadro seleccionar el botn Add donde aparecer el siguiente cuadro de dial
ogo que nos permitir seleccionar el driver deseado, en nuestro caso debemos selec
cionar Microsoft Access Driver (*mdb)
5.- Luego seleccionar el botn Finalizar, donde aparecer el siguiente cuadro de dialo
go donde definiremos lo siguiente:
Docentes:
Luis Ulfe Vega /
Gustavo Solis Vargas
17

INVESTIGACION OPERACIONAL
Nombre del origen de datos: Colocar un nombre con el cual se referenciar al regis
tro ODBC. Descripcin: Colocar algn texto descriptivo.

6.- Una vez que halla completado los campos respectivos seleccionar la base de d
atos, dando un clic en el botn Seleccionar para seleccionar la base de datos desead
a. Importando datos desde Access Para poder leer y enviar informacin a una base d
e datos se debe crear un registro de base de datos ODBC. En el siguiente ejemplo
se enva la informacin ubicada en el campo Requerido de la tabla TablaAsignaPersonal
l atributo REQUERIDO DATA: REQUERIDO = @ODBC( BDPERSONAL , TablaAsignaPersonal ,
Requerido ); ENDDATA Exportando datos hacia Access En el siguiente ejemplo se e
nva la informacin del atributo INICIAN al campo Asignado de la tabla TablaAsignaPers
l DATA: @ODBC( BDPERSONAL , TablaAsignaPersonal , Asignado ) = INICIAN; ENDDATA
Caso de Anlisis: Para el modelo del anexo 1 (caso de anlisis 1 modelo de transpor
te), modificar el modelo de modo que todos los datos sean ledos desde la base de
datos Access.
Docentes:
Luis Ulfe Vega /
Gustavo Solis Vargas
18

INVESTIGACION OPERACIONAL
COLOCANDO NOMBRES A LAS RESTRICCIONES LINGO permite colocarle nombres a las rest
ricciones en un modelo, esta es una buena prctica por dos razones:
Primero, que l
os nombres de las restricciones son usados en el reporte solucin, haciendo fcil su
interpretacin. Segundo, muchos mensajes de error de LINGO se refieren a una rest
riccin dada por su nombre, si no ha colocado nombres a sus restricciones, el rast
reo del origen de estos errores puede ser dificultoso. Lo que se requiere para c
olocar un nombre de una restriccin es colocar un nombre entre los brackets [nombre
de restriccin], el siguiente ejemplo de transporte muestra la asignacin de nombres
a las restricciones, implemente el cambio en su modelo y verifique el resultado
. MODEL: ! Un proble de transporte con 6 Origenes y 8 Destinos; SETS: ORIGEN/O1,
O2,O3,O4,O5,O6/: OFERTA; DESTINO/D1,D2,D3,D4,D5,D6,D7,D8/: DEMANDA; ORI_DES(ORIG
EN, DESTINO): COSTO, T; ENDSETS ! La Funcion Objetivo; [OBJETIVO] MIN = @SUM( OR
I_DES( I, J): COSTO( I, J) * T( I, J)); ! Restricciones de Demanda; @FOR( DESTIN
O( J): [FILA_DESTINO] @SUM( ORIGEN( I): T( I, J)) >= DEMANDA( J)); ! Restriccion
es de Oferta; @FOR( ORIGEN( I): [FILA_ORIGEN] @SUM( DESTINO( J): T( I, J)) <= OF
ERTA( I)); DATA: !Valores de los Atributos; OFERTA= 60 55 51 43 41 52; DEMANDA=
35 37 22 32 41 32 43 38; COSTO = 6 2 6 7 4 2 5 9 49538582 52197433 76739271 2395
7265 5 5 2 2 8 1 4 3; ENDDATA END FUNCIONES DE REPORTE DE LINGO Las funciones de
reporte de LINGO son usados para construir reportes basados en los resultados d
el modelo y son validos en las secciones de datos (DATA) y clculos (CALC), mostra
remos algunas opciones principales. @DUAL La funcin @DUAL permite obtener el valo
r dual cuando se asocia a una restriccin o los costos reducidos cuando se asocia
a una variable.
Docentes:
Luis Ulfe Vega /
Gustavo Solis Vargas
19

INVESTIGACION OPERACIONAL
En el modelo de transporte desarrollado anteriormente enviaremos los resultados
de los valores duales asociados a las restricciones de oferta a una hoja Excel.
MODEL: ! Un proble de transporte con 6 Origenes y 8 Destinos; SETS: ORIGEN/O1,O2
,O3,O4,O5,O6/: OFERTA; DESTINO/D1,D2,D3,D4,D5,D6,D7,D8/: DEMANDA; ORI_DES(ORIGEN
, DESTINO): COSTO, T; ENDSETS ! La Funcion Objetivo; [OBJETIVO] MIN = @SUM( ORI_
DES( I, J): COSTO( I, J) * T( I, J)); ! Restricciones de Demanda; @FOR( DESTINO(
J): [FILA_DESTINO] @SUM( ORIGEN( I): T( I, J)) >= DEMANDA( J)); ! Restricciones
de Oferta; @FOR( ORIGEN( I): [FILA_ORIGEN] @SUM( DESTINO( J): T( I, J)) <= OFER
TA( I)); DATA: !Valores de los Atributos; OFERTA= 60 55 51 43 41 52; DEMANDA= 35
37 22 32 41 32 43 38; COSTO = 6 2 6 7 4 2 5 9 49538582 52197433 76739271 239572
65 5 5 2 2 8 1 4 3; @OLE() = @DUAL(FILA_ORIGEN); ENDDATA END
Docentes:
Luis Ulfe Vega /
Gustavo Solis Vargas
20

También podría gustarte