Vous êtes sur la page 1sur 91

Universidad Catlica del Norte

Facultad de Ingeniera y Ciencias Geolgicas


Departamento de Ingeniera de Sistemas y Computacin
Ingeniera Civil Industrial

Manual de Usuario
Software Lingo
Versin 8.0

Preparado por Csar Galleguillos Moro

Diciembre de 2005

INDICE
INDICE............................................................................................................................ 2
1.

INTRODUCCIN AL PROGRAMA LINGO 8.0 .............................................. 3

2.

HERRAMIENTAS DE LINGO ............................................................................ 4

2.1
Men File.......................................................................................................... 4
2.2
Men Edit ......................................................................................................... 7
2.3
Men Lingo ...................................................................................................... 9
3. CREACIN DE UN MODELO DE OPTIMIZACIN EN LINGO ................. 11
3.1
Ejemplo The Dakota Company................................................................... 12
3.2
Solucin del problema The Dakota Company en Lingo............................. 14
4. USO DE LISTAS EN LINGO ............................................................................. 18
4.1
Ejemplo Sailco Inventory............................................................................ 18
4.2
Solucin del problema Sailco Inventory en Lingo...................................... 20
5. OPERADORES Y FUNCIONES EN LINGO ................................................... 21
5.1
Funciones de Ciclo ......................................................................................... 21
5.2
Operadores lgicos ......................................................................................... 21
6. LA SECCIN DE DATOS EN LINGO ............................................................. 26
7.

6.1
Importacin de datos desde hojas de clculo.................................................. 26
TIPOS DE VARIABLES EN LINGO ................................................................ 31

8.

EJEMPLOS DE PROGRAMACIN EN LINGO............................................ 32


8.1
Problemas de transporte.................................................................................. 32
8.1.1
Ejemplo Powerco Formulation.......................................................... 32
8.1.2
Ejemplo Sailco Inventory ................................................................... 38
8.2
Problemas de programacin entera................................................................. 47
8.2.1
Ejemplo The Lockbox Problem .......................................................... 47
8.3
Problemas de programacin no lineal ............................................................ 54
8.3.1
Ejemplo Warehouse Location ............................................................ 54
8.3.2
Ejemplo ThePortfolio Problem .......................................................... 58
8.4
Problemas de Flujo Mximo .......................................................................... 62
8.4.1
Ejemplo Maximum Flow .................................................................... 62
8.4.2
Ejemplo Seervada Park Problem ....................................................... 68
8.5 Problema de Ruta Crtica..................................................................................... 73
8.5.1
Ejemplo Drawing a Project Network................................................. 73
8.6
Problema de Ruta ms Corta .......................................................................... 78
8.6.1
Ejemplo Seervada Park Problem ....................................................... 78
8.7
Administracin de la produccin 2................................................................. 82
8.7.1
Balance de lnea de ensamble, minimizar el tiempo de ciclo................. 82
8.7.2
Balance de lnea de ensamble Auto de Friccin ............................... 87

1.

INTRODUCCIN AL PROGRAMA LINGO 8.0

Lingo 1 (Linear INteractive General Optimizer) es un software que sirve como


herramienta para construir y resolver modelos de optimizacin lineal, no lineal y entera
de manera fcil y rpida ofreciendo una interfase de Windows amigable. Adems, posee
la opcin de usar un lenguaje de modelamiento avanzado, libreras de funciones
matemticas y posee la habilidad de leer datos desde archivos externos como las hojas
de clculo de Excel. Lingo permite a los usuarios ingresar la formulacin del modelo de
manera rpida, ste lo resuelve y determina las correcciones adecuadas a la
programacin. Adems, posee un amplio rango de comandos los cuales poden ser
utilizados en cualquier momento, en donde, Lingo verifica si ese comando en particular
tiene sentido en un contexto en particular.

Autor de Lingo es LINDO Systems 1415 N. Dayton St., Chicago IL 60622 USA.

2.

HERRAMIENTAS DE LINGO

Al iniciar Lingo se despliega una ventana blanca denominada Lingo Model, en donde
se ingresar el modelo a optimizar. La salida en Lingo se muestra a travs de una
ventana llamada Solution Report. La siguiente es una lista de los principales
comandos disponibles.

2.1

Men File

Figura 1: Barra de herramientas de Lingo

New F2
Se usa el comando NEW desde el men File, o presionando F2, o pulsando el botn
para crear un nuevo modelo de optimizacin en Lingo Model.

Open F3
Se usa el comando OPEN desde el men File, o presionando F3, o pulsando el botn
para abrir un archivo Lingo ya existente de.

Save F4
Se usa el comando SAVE desde el men File, o presionando F4, o pulsando el botn
para guardar una ventana activa (la que est ms al frente). De esta manera si la ventana
es un nuevo modelo o un reporte de solucin, SAVE abrir la ventana de dilogo SAVE
AS para guardar el archivo con el nombre deseado.

Save As
Se usa el comando SAVE AS desde el men File, o presionando F5, para guardar la
ventana activa bajo el nombre que se ingrese en la ventana de dilogo.

Close F6
Se usa el comando CLOSE desde el men File, o presionando F6, para cerrar la ventana
activa, si la ventana es nuevo modelo Lingo Model o se ha alterado el archivo, se le
preguntar al usuario si quiere guardar los cambios.

Print F7
Se usa el comando PRINT desde el men File, o pulsando el botn, o presionando F7
para imprimir la ventana activa.

Print Setup F8
Se usa el comando PRINT SETUP desde el men File, o presionando F8, para
configurar la impresin.

Print Preview Shift + F8


Se usa el comando PRINT PREVIEW desde el men File, o presionando Shift + F8,
para mostrar como se ver la ventana activa seleccionada despus de la impresin.

Import Lindo File F12


Se usa el comando IMPORT LINDO FILE desde el men File, o presionando F12, para
abrir un archivo que contiene un modelo LINDO en formato LINDO TAKE.

Export File
Se usa los sub-comandos MPS FORMAT o MPI FORMAT para exportar un modelo. El
formato de archivo MPS es un formato estndar industrial desarrollado por IBM y es
muy til para pasar desde un modelo de solucin a otro. El formato de archivo MPI es
un formato especial desarrollado por LINDO SYSTEMS para representar toda clase de
programas matemticos (lineal, entera y no lineal).

License
Se usa el comando LICENSE desde el men File para ingresar un nuevo password. El
password acta como una clave que permite abrir la aplicacin de Lingo. Si se quiere
mejorar sus potencialidades, ser necesario ingresar un nuevo password.
Data Base User Info

Se usa el comando DATA BASE USER INFO desde el men File para que los modelos
desarrollados puedan acceder directamente a alguna base de datos, a travs del uso de la
funcin @ODBC().

Exit F 10
Se usa el comando EXIT desde el men File, o presionando F10, para abandonar
Lingo.

2.2

Men Edit

Las funciones Cortar, Copiar, Pegar, Deshacer, Rehacer, Pegado Especial y Seleccionar
Todo actan de la misma manera en que lo hacen en el procesador de textos Word. A
continuacin se explicar el funcionamiento de los comandos de edicin propios de
Lingo.

Find Ctrl+ F

Se usa el comando FIND desde el men Edit, o presionando Ctrl + F, o pulsando el


botn para buscar una palabra deseada perteneciente al cdigo de la ventana activa.
Find Next Ctrl + N

Se usa el comando FIND NEXT desde el men Edit, o presionando Ctrl + N, para
encontrar la siguiente instancia del texto recientemente buscado usando el comando
FIND de la ventana activa.

Replace Ctrl + H
Se usa el comando REPLACE desde el men Edit, o presionando Ctrl + H, para
remplazar un texto determinado por otro en la ventana activa

GoTo Line Ctrl + T


Se usa el comando GO TO LINE desde el men Edit, o presionando Ctrl + T, o
pulsando el botn para acceder a alguna sentencia del programa desarrollado en la
ventana activa.

Match Parntesis Ctrl + P


Se usa el comando MATCH PARENTHESIS desde el men Edit, o presionando el
Botn, o presionando Ctrl + P para encontrar los parntesis que cierra el parntesis
abierto que se ha seleccionado. Adems de este comando, existe otra manera de
encontrar los parntesis, Lingo destacar la pareja del parntesis posicionando el cursor
sobre el parntesis del cual se quiere saber su pareja (notar que el color del parntesis
cambia de color negro a color rojo).

Paste Function
Se usa el comando PASTE FUNCTION desde el men Edit para pegar cualquier
funcin existente de Lingo en el punto donde se sita el cursor. Se escoge la categora
de la funcin de Lingo que se quiere insertar, despus se selecciona la funcin desde el
men de cascada.

Select Font Ctrl + J


Se usa el comando SELECT FONT desde el men Edit, o presionando Ctrl + J, para
cambiar la fuente del texto seleccionado en el cdigo del programa.

Insert New Object


Se usa el comando INSERT NEW OBJECT desde el men Edit para ingresar un objeto
en el documento Lingo (Grficos, diapositivas, imgenes, etc.).

Links
Se usa el comando LINKS desde el men Edit para controlar el acceso a objetos
externos desde Lingo.

Object Properties Alt + Enter


Se usa el comando OBJECT PROPERTIES desde el men Edit, o presionando
Alt+Enter, para mostrar las propiedades de un objeto seleccionado.

2.3

Men Lingo

Solve Ctrl + S
Se usa el comando SOLVE desde el men Lingo, haciendo click en el botn, o
presionando Ctrl + S para resolver el modelo de la ventana activa.

Solution Ctrl + O
Se usa el comando SOLUTIONS desde el men Lingo, o haciendo click en el botn, o
presionando Ctrl + O para abrir el cuadro de dialogo de soluciones, en donde se puede
especificar la manera que se quiere mostrar el reporte de solucin.

Range Ctrl + R
Se usa el comando RANGE desde el men Lingo, o presionando Ctrl + R, para ver en el
reporte de solucin un rango estndar especfico.

Options Ctrl + I
Se usa el comando OPTIONS desde el men Lingo, o presionando Ctrl + I, o pulsando
el botn para cambiar la configuracin de algunos mtodos de solucin para los
diferentes tipos de problemas (Programacin lineal, no lineal, entera, etc.)

Generate Ctrl + G/ Ctrl + Q


Se usa los sub-comandos DISPLAY MODEL y DONT DISPLAY MODEL desde el
comando GENERATE desde el men Lingo o presionando Ctrl + G o Ctrl + Q,
respectivamente, para crear una versin extendida del modelo actual. El modelo
extendido muestra todas las restricciones y las variables generadas en el modelo. Si se
escoge visualizar el modelo (Display), Lingo mostrar una copia del modelo generado
en una nueva ventana la cual se puede examinar, imprimir o guardar. Si se escoge
DONT DISPLAY MODEL, Lingo resolver el modelo sin mostrarlo, pero se
almacenar el modelo generado para su posterior uso.

Picture Crl + K
Se usa el comando PICTURE desde el men Lingo, o presionando Ctrl + K, para
visualizar un modelo en forma de matriz y as identificar estructuras especiales que
posea.

Model Statistics Ctrl + E


Se usa el comando MODEL STATISTICS desde el men Lingo, o presionando Ctrl +
E, para mostrar un resumen estadstico del modelo. Las estadsticas varan ligeramente
de un modelo a otro, dependiendo si se est trabajando con un modelo lineal o no lineal.

Look Ctrl + L
Se usa el comando LOOK desde el men Lingo, o presionando Ctrl + L, para generar
un reporte que contiene la formulacin del modelo. El comando LOOK permite escoger
algunas o todas las lneas del cdigo del modelo para que sea visualizado.

10

3. CREACIN DE UN MODELO DE OPTIMIZACIN EN LINGO


En General, un modelo de optimizacin consiste en tres partes:
Funcin Objetivo: Frmula que describe exactamente lo que el modelo debera
optimizar. En aquellos modelos orientados a los negocios, esta ser usualmente
una funcin de ganancias que se querr maximizar, o una funcin de costos que
se querr minimizar. Los modelos pueden tener, a lo ms, una funcin objetivo.
Variables: Son las cantidades que pueden cambiar para producir un valor
ptimo en la funcin objetivo. Por esta razn, las variables a veces son llamadas
variables de decisin. El objetivo de la optimizacin es encontrar valores de las
variables del modelo que generen el mejor valor para la funcin objetivo, sujetas
a cualquier limitante que condicione su valor.
Restricciones: Frmulas que definen los lmites que pueden tomar los valores
de las variables. Casi sin excepcin habr alguna limitante sobre los valores que
pueden tomar las variables, es decir, en un modelo se puede asumir que al
menos un recurso ser limitado (ej., tiempo, materia prima, presupuesto, etc.).
Estos lmites son expresados en trminos de frmulas que son una funcin de las
variables del modelo. Estas frmulas son referidas como restricciones, ya que
ellas restringen los valores que las variables pueden tomar.

11

3.1

Ejemplo The Dakota Company 2

La fbrica de Muebles Dakota elabora escritorios, mesas y sillas. La fabricacin de cada


tipo de mueble requiere madera y dos tipos de trabajo especializado: terminado y
carpintera. El recurso necesario para construir cada tipo de mueble es entregado en la
siguiente tabla.

Recursos
Escritorios
Madera (Pie)
8
Trminado (Horas)
4
Carpintera (Horas)
2

Mesas
6
2
1,5

Sillas
1
1,5
0,5

Tabla 1: Requerimientos de recursos para Dakota Company.

Actualmente, se dispone de 48 pies de tablas de madera, 20 horas de terminado y 8


horas de carpintera. Un escritorio se vende por $60, una mesa por $30 y una silla por
$20. Dakota cree que la demanda por escritorios y sillas es ilimitada, pero no ms de
cinco mesas pueden ser vendidas. Ya que los recursos disponibles ya han sido
comprados, Dakota quiere maximizar los ingresos.

Solucin
Definiendo las variables decisin como:

X1 = Nmero de escritorios producidos.


X2 = Nmero de mesas producidas.
X3 = Nmero de sillas producidas.

Problema extrado del texto gua Winston 4 ed. captulo 4, ejemplo 2.

12

Es fcil ver que Dakota debera resolver la siguiente programacin lineal


max z = 60x1 + 30x2 + 20x3

(FO: Maximizar ingresos)

s.a.
x3 48

8x1 +

6x2 +

4x1 +

2x2 + 1.5x3 20

2x1 + 1.5x2 + 0.5x3 8


x2

x1, x2, x3 0

(Capacidad de madera)
(Capacidad de trabajo de terminado)
(Capacidad de trabajo de carpintera)
(Limitacin de demanda de mesas)
(Variables no negativas)

13

3.2

Solucin del problema The Dakota Company en Lingo

La funcin objetivo es escrita en la primera lnea de la ventana de modelo (LINGO


MODEL)
max = 60*x1 + 30*x2 + 20*x3; 3
Posteriormente, se anotan las restricciones de capacidad del modelo:
8*x1 + 6*x2 + x3 <= 48;
4*x1 + 2*x2 + 1.5*x3 <= 20;
2*x1 + 1.5*x2 + 0.5*x3 <= 8;
x2

<= 50;

x1 >=0;
x2 >=0;
x3 >=0;
Despus de ingresar la funcin objetivo y las restricciones, la ventana de modelo de
lingo debera verse de la siguiente forma:

Figura 1: Ventana Lingo Model.

3
4

La declaracin de cualquier sentencia en la programacin en Lingo termina con un punto y coma.


Los comentarios en el cdigo empiezan con un signo de exclamacin y finalizan con un punto y coma.

14

Finalmente, para resolver el problema lineal se debe seleccionar desde la barra de tareas
solve
Solve

Figura 2: Barra de herramientas de Lingo

Al hacer click en tal cono se despliega por pantalla una ventana, la cual provee
informacin respecto del nmero de variables no lineales, enteras y totales presentes en
el modelo. Adems, se muestra las restricciones no lineales y totales usadas y el nmero
de coeficientes de las variables no negativas y totales del modelo. El cuadro Solver
Status detalla:

Clasificacin del modelo:


LP: Problema de programacin lineal.
QP: Problema de programacin cuadrtica.
ILP: Problema de programacin lineal entera.
IQP: Problema de programacin cuadrtica entera
NLP: Problema de programacin no lineal.

Adems, se muestra el estado de la solucin actual (ptimo global o local, factible o no


factible, etc.), el valor de la funcin objetivo, la infactibilidad del modelo (suma de
restricciones violadas) y el nmero de iteraciones requeridas para resolver el modelo. El
cuadro Extended Solver Status

detalla informacin similar para otros tipos de

algoritmos ms avanzados de resolucin, tales como: branch-and-bound, global y


multistart.

El cuadro Generator Memory Used muestra la cantidad de memoria utilizada para


resolver el modelo del total de la memoria asignada al generador de la solucin.

15

Figura 3: Ventana Solver Status

Por lo tanto, se desprende del cuadro, que se resolvi un problema de programacin


lineal (LP) y encontr un ptimo global con un mximo de $280. Adems, existen tres
variables lineales, ocho restricciones (incluyendo la funcin objetivo) y diecisis
coeficientes de las variables totales no negativas y se utiliz para resolver el modelo 5
Kb de memoria.

Posteriormente al cerrar la ventana Solver Status se desplegar por pantalla el


siguiente reporte de solucin.

Figura 4: Salida del modelo Solution Report

16

De la figura anterior se desprende:


Global optimal solution found.
Objective value:

0
280.0000

La salida de Lingo muestra que el ptimo es z = 280


Variable
X1
X2
X3

Value
2.000000
0.000000
8.000000

Reduced Cost
0.000000
5.000000
0.000000

Value entrega el valor de las variables en la solucin ptima de la P.L. As, la solucin
ptima ser producir 2 escritorios, 0 mesas y 8 sillas.

Reduced Cost es el costo reducido de la variable no bsica X2 (mesas); que es


5.000000, es decir, si Dakota quisiese producir una mesa, las ganancias disminuiran en
$5.
Row
1
2
3
4
5
6
7
8

Slack or Surplus
280.0000
24.00000
0.000000
0.000000
50.00000
2.000000
0.000000
8.000000

Dual Price
1.000000
0.000000
10.00000
10.00000
0.000000
0.000000
0.000000
0.000000

Slack or surplus entrega el valor de las holguras en la solucin ptima, as:

S1= holgura de la fila 2 (Capacidad de madera) = 24


S2= holgura de la fila 3 (Capacidad de trabajo terminado) = 0
S3= holgura de la fila 4 (Capacidad de trabajo de carpintera) = 0
S4= holgura de la fila 5 (Limitacin de demanda de mesas) = 50
Dual Price de una restriccin muestra en que cantidad se incrementarn los ingresos, de
la funcin objetivo, si es que se dispone de una unidad adicional de la restriccin. Por
ejemplo, si aumenta la capacidad de trabajo terminado de la restriccin 2 en una
unidad entonces los ingresos de Dakota Company aumentarn en $10.

17

4.

USO DE LISTAS EN LINGO

Cualquiera sea la situacin del mundo real que se est modelando habr tpicamente
ms de un grupo de objetos relacionados. Ejemplos de tales objetos pueden ser:
fbricas, clientes, vehculos, empleados, etc. Lingo permite agrupar estos objetos
relacionados en listas. Una vez que los objetos del modelo estn agrupados en listas, se
puede hacer uso de funciones basadas en tales listas y as aumentar las potencialidades
del lenguaje de modelamiento en Lingo.

El uso de las listas es fundamental en Lingo para aumentar sus capacidades. Con un
entendimiento del uso de las listas, se puede escribir una serie de restricciones similares
en una sola sentencia y expresar de manera concisa formulas largas y complejas
permitiendo expresar grandes modelos de manera fcil y rpida.

Una lista puede ser un conjunto de productos, camiones o empleados. Cada miembro en
la lista tiene una o ms caractersticas asociadas a ella. Tales caractersticas se
denominan atributos. Los valores de los atributos pueden ser conocidos de antemano o
ser valores desconocidos que lingo resolver. Para explicar de mejor manera el
funcionamiento de las listas en la programacin en lingo se muestra a continuacin un
ejemplo.

4.1

Ejemplo Sailco Inventory 5

La corporacin Sailco debe determinar cuntos veleros deberan ser producidos durante
los siguientes cuatro trimestres. La demanda durante cada uno de los siguientes cuatro
trimestres es el siguiente: primer trimestre, 40 veleros; segundo trimestre, 60 veleros;
tercer trimestre, 75 veleros y cuarto trimestre, 25 veleros. Al comienzo del primer
trimestre, Sailco tiene un inventario de 10 veleros. Al comienzo de cada trimestre,
Sailco debe decidir cuantos veleros se deben producir en aquel trimestre. Para
simplificar, se asume que los veleros manufacturados durante un trimestre pueden ser
usados para satisfacer la demanda de aquel trimestre. En cada trimestre, Sailco puede
producir hasta cuatro veleros con tiempo regular de trabajo a un costo total de $400 por
velero. Los empleados tienen la posibilidad de trabajar horas extras durante cada
5

Problema extrado del texto gua Winston 4 ed. captulo 3, ejemplo 14.

18

trimestre, Sailco puede producir veleros adicionales con trabajo en sobretiempo a un


costo total de $450 por velero.
Al final de cada trimestre (despus de que la produccin ha ocurrido y que la demanda
ha sido satisfecha) se incurre en un costo de mantener o llevar en inventario de $20 por
velero. Usando programacin lineal determinar la planificacin de la produccin para
minimizar

los costos de produccin y de inventario durante los siguientes cuatro

trimestres.
Costos
Produccin en
tiempo regular
Produccin en
sobretiempo
Inventario final

$400
$450
$20

Tabla 2: Costos de Produccin e Inventario

Solucin
Q1
40

Q2
60

Q3
75

Q4
25

RP1

RP2

RP3

RP4

OP1

OP2

OP3

OP4

INV1
Tabla 3: Variables involucradas

INV2

INV3

INV4

Trimestre
Demanda
Produccin en
tiempo regular
Produccin en
sobretiempo
Inventario final

Variables de decisin

Variables de decisin:

RP: Produccin en tiempo regular.


OP: Produccin en sobretiempo.
INV: Cantidad de inventario al final del trimestre.

Entonces el PPL quedar de la siguiente forma:


4

t =1

t =1

t =1

min z = 400 RPt + 450 OPt + 20 INVt


Sujeto a:

INVt = INVt 1 + RPt + OPt Dt , t t = 1, 2,3, 4


RPt 40, t
19

4.2

Solucin del problema Sailco Inventory en Lingo

Listas
Como se tiene varias variables de decisin conviene establecer listas, en este caso
declararemos la lista trimestre que tiene como atributos: Tiempo (TIME), Demanda
(DEM), Produccin en tiempo regular (RP), Produccin en sobretiempo (OP) e
Inventario final (INV).
Lista Trimestre
QUARTERS
TIME
DEM
RP
OP
INV

Nombre de la lista
Atributos

Objetos (miembros) tipo QUARTERS


Q1
TIME
DEM
RP
OP
INV

Q2
TIME
DEM
RP
OP
INV

Q3
TIME
DEM
RP
OP
INV

Q4
TIME
DEM
RP
OP
INV

Los objetos son instancias de la lista, es decir, cada uno de los objetos difieren entre si
en uno de sus atributos. As definimos cuatro objetos del tipo QUARTERS que cada
una diferirn entre s en al menos un atributo.

En Lingo la declaracin de la lista comienza con el comando SETS: y termina con el


comando ENDSETS y queda como sigue:

SETS
Nombre de la lista/miembro 1,miembro 2,,miembro n/atributo 1,.,atributo n;
ENDSETS

Por lo tanto, la lista QUARTERS queda de la siguiente forma:


Lista
SETS:
QUARTERS/Q1,Q2,Q3,Q4/:TIME,DEM,RP,OP,INV;
ENDSETS

Atributos

Objetos

20

5.
5.1

OPERADORES Y FUNCIONES EN LINGO

Funciones de Ciclo

Como se ha mencionado anteriormente la potencialidad de las listas viene de la


habilidad de aplicar una operacin a todos los miembros de una lista utilizando una sola
sentencia. Las funciones que posee Lingo que permitirn hacer lo anterior se denominan
funciones de ciclo.

Las funciones de ciclo permiten aplicar a todos los miembros de una lista alguna
operacin determinada. Existen cuatro funciones de ciclo en Lingo. Los nombres de
aquellas funciones y sus usos son:
Funcin

@FOR
@SUM
@MIN
@MAX

Uso de la funcin
Es usada para aplicar una restriccin a todos los miembros de una lista.
Calcula la suma de una expresin sobre todos los miembros de una lista.
Calcula el mnimo de una expresin sobre todos los miembros de una lista.
Calcula el mximo de una expresin sobre todos los miembros de una lista.

Tabla 4: Usos de las funciones de Ciclo.

Las cuales siguen la siguiente sintaxis:


@funcin(Nombre de la lista (Subndice de la lista)/Calificador condicional:Expresin
de la lista);

5.2

Operadores lgicos

Los operadores lgicos son usados en una primera instancia en expresiones


condicionales sobre un conjunto de funciones de ciclo para seleccionar cuales miembros
de una lista sern incluidas o excluidas en la funcin. Ellos tambin sirven para
establecer condiciones dentro de los miembros de las listas.

Los operadores lgicos devuelven verdadero o falso como resultado. Lingo el valor cero
para representar falso. Lingo considera un valor como falso si y slo si este es igual a
cero. As, por ejemplo, argumentos de 1, 2, -1 y 0.3265 todos se consideraran como
verdadero.

21

Lingo tiene nueve operadores lgicos, los cuales son todos binarios con la sola
excepcin del operador #NOT#, el cual es unario. Los operadores lgicos y sus valores
de retornos son listados a continuacin:
Operador
Lgico
#NOT#
#EQ#
#NE#
#GT#
#GE#
#LT#
#LE#
#AND#
#OR#

Valor de Retorno
VERDADERO si el operando inmediatamente al lado derecho es
FALSO, en caso contrario es VERDADERO
VERDADERO si ambos operandos son iguales, en caso contrario es
FALSO
VERDADERO si ambos operandos no son iguales, en caso contrario
es FALSO
VERDADERO si el operando izquierdo es estrictamente mayor que el
operando derecho, en caso contrario es FALSO
VERDADERO si el operando izquierdo es mayor o igual que el
operando derecho, en caso contrario es FALSO
VERDADERO si el operando izquierdo es estrictamente menor que el
operando derecho, en caso contrario es FALSO
VERDADERO si el operando izquierdo es menor o igual que el
operando derecho, en caso contrario es FALSO
VERDADERO slo si ambos argumentos son VERDADEROS, en caso
contrario es FALSO
FALSO slo si ambos argumentos son FALSOS, en caso contrario es
VERDADERO

Tabla 5: Usos de Los operadores lgicos.

Para explicar de mejor manera las funciones de ciclo y los operadores lgicos se sigue
desarrollando el ejemplo antes expuesto.

Funcin Objetivo
La funcin objetivo minimiza los costos totales de cada trimestre, es decir, se minimiza
los costos totales incurridos en cada objeto (Q1, Q2, Q3). As para cada trimestre se
calcula los costos totales 400*(Produccin en tiempo regular) + 450*(Produccin en
sobretiempo) + 20*(Inventario final).
Costos totales de cada objeto

MIN=@SUM(QUARTERS:400*RP+450*OP+20*INV);
Sumatoria de los costos de n objetos, en este caso de los costos de los 4 Quarters

Lingo evala la funcin @SUM primero inicializando un acumulador interno en cero.


Lingo despus comienza el ciclo sobre los miembros del tipo QUARTERS el puntero
inicialmente apunta al primer miembro de la clase QUARTERS, que es

22

QUARTERS(Q1) y se agregan al acumulador todos los costos referentes a ese objeto y


as sucesivamente se van agregando los costos de los otros tres trimestres.
Notar que esta sentencia crea la funcin objetivo adecuada, ya sea para 4 trimestres o
40, 400 o 4.000 trimestres.

Restricciones
El problema de Sailco posee tres tipos de restricciones, a saber:
Capacidad mxima de produccin en tiempo regular es de 40 unidades.
Balance de inventario.
Balance de inventario en el primer trimestre (que utiliza como dato el

inventario inicial de 10 veleros)

NOTA: Balance de inventario

Dt

I0

t=1

It
Xt

Entonces, la ecuacin de balance de inventario es:

I t = I t 1 + X t Dt
Donde:
It = Inventario al final del perodo t
Xt = Cantidad de produccin en el perodo t
Dt = Demanda en el perodo t
Figura 5: Balance de Inventario.

23

Restriccin de capacidad
La funcin @FOR permite crear las restricciones a lo largo de los miembros de la lista
(mientras que los lenguajes para modelacin basados en escalares requieren
explcitamente ingresar cada restriccin). Por consiguiente, las restricciones de
capacidad de produccin, con tiempo regular, de cada uno de los trimestres quedan de
la siguiente forma:
@FOR(QUARTERS(I):RP(I)<40);
Desde I= Q1 hasta Q4 se debe cumplir que RP(I) < 40

Que es lo mismo que:


RP(Q1) <= 40;
RP(Q2) <= 40;
RP(Q3) <= 40;
RP(Q4) <= 40;

Balance de Inventario

D1

I0

T=1

T=2

D4

T=3

I1
X1

D3

D2

I2

X2

T=4
I3

X3

I4
X4

La produccin Xt corresponde a produccin


en horas de trabajo en tiempo regular y en
sobretiempo.

La primera restriccin de balance de inventario corresponde a los trimestres 2, 3 y 4.


@FOR(QUARTERS(I)|TIME(I)#GT#1:INV(I)=INV(I-1)+RP(I)+OP(I)DEM(I));
#GT#

Este operador se utiliza para que la restriccin considere slo el balance de inventario de
las etapas, en donde TIME(I) > 1, es decir los trimestres 2, 3 y 4.

24

La segunda restriccin de balance de inventario se refiere a que inicialmente se tiene un


inventario inicial de 10 veleros.
INV(1)=10+RP(1)+OP(1)-DEM(1);

25

6.

LA SECCIN DE DATOS EN LINGO

Lingo dispone de una seccin separada denominada seccin de datos en la cual se


definen los valores de las variables. Los miembros de las listas pueden ser inicializados
en esta seccin, los atributos de las listas pueden ser definidos y tambin se puede
asignar parmetros escalares a las variables. La seccin de datos comienza con la
palabra clave DATA: (incluyendo los dos puntos) y termina con la palabra clave
ENDDATA. Las sentencias dentro de la seccin de datos sigue la sintaxis:

Objeto de Lista = Valor de la Lista

Objeto de Lista contiene los nombres de los atributos y/o objetos cuyos miembros se
quieren inicializar. No puede haber ms de un objeto en Objeto de Lista, mientras que
puede haber cualquier cantidad de atributos.

Valor de la Lista contiene el valor que se quiere asignar a los miembros del Objeto de
Lista, opcionalmente separados por comas.

Por lo tanto la seccin de datos, del ejemplo que se est estudiando, queda de la
siguiente forma:
DATA:
DEM=40,60,75,25;
TIME=1,2,3,4;
ENDDATA

En donde se asigna los nmeros a cada trimestre (denotado por el atributo TIME) y sus
demandas respectivas (denotado por el atributo DEM).

6.1

Importacin de datos desde hojas de clculo

Lingo dispone de la funcin @OLE para importar datos desde hojas de clculo. @OLE
transfiere directamente los datos desde Excel hacia Lingo.
Cuando se hace uso de la funcin @OLE, Lingo abre Excel y le dice a ste que cargue
la hoja de clculo deseada y los rangos de datos requeridos.

26

@OLE puede leer miembros de las listas o tambin sus atributos (los miembros de las
listas se esperan que tengan formato de texto, mientras que sus atributos se espera que
tengan formato numrico). Listas primitivas requieren una celda de datos por cada
miembro (objeto de lista). Por lo tanto, se necesitarn n celdas de valores para inicializar
cada una de las n dimensiones derivadas de los miembros de las listas, donde las
primeras n celdas contiene los primeros miembros de la lista.
@OLE puede leer rangos de uno o dos dimensiones (rangos sobre una hoja en Excel)
pero no puede leer rangos discontinuos o en tres dimensiones (rangos que traspasen ms
de una hoja de clculo en Excel). Los rangos se leen de izquierda a derecha desde arriba
hacia abajo
La sintaxis de la funcin @OLE para importar datos es:
Objeto de Lista = @OLE( 'Archivo Excel', 'Nombre del rango');
El Objeto de Lista es un conjunto de objetos del modelo, opcionalmente separados por
comas, que sern inicializados desde la hoja de clculo. El objeto de lista puede
contener cualquier combinacin de nombres de listas, conjuntos de atributos y variables
escalares.

El Archivo Excel es el nombre del archivo de la hoja de clculo de Excel de donde se


rescatarn los datos

El Nombre del Rango es el conjunto de nombres que se les asigna al conjunto de datos
que se rescatarn desde Excel. Para asignar un nombre a un rango de datos en Excel se
selecciona el conjunto de datos en la hoja de clculo y posteriormente se selecciona
insertar de la barra de herramientas y luego la opcin nombre y definir.
Existen tres opciones en Lingo para especificar los rangos:

Ejemplo1:

COST, CAPACITY = @OLE( 'SPECS.XLS');

No se especifican los nombres de los rangos, as que, por defecto, Lingo usa los
nombres del objeto. As, COST y CAPACITY son inicializados por los rangos de
valores encontrados en el archivo SPECS.XLS cuyos nombres son COST y
CAPACITY.

27

Ejemplo 2:

COST, CAPACITY = @OLE( 'SPECS.XLS', 'DATATABLE');

En este ejemplo, se especifica un slo rango para inicializar ambas variables COST y
CAPACITY. Asumiendo que el rango de DATATABLE tiene dos columnas, Lingo
inicializar la variable COST con los datos correspondientes a la primera columna y la
variable CAPACITY con los datos de la segunda columna.

Ejemplo 3:

COST, CAPACITY = @OLE( 'SPECS.XLS', 'COST01', 'CAP01');

En este ejemplo, se especifica un rango individual para cada una de las variables COST
y CAPACITY, las cuales sern inicializadas con los datos presentes en los rangos de
nombres COST01 y CAP01, respectivamente.

En ejemplo de Sailco Inventory la seccin de datos queda de la siguiente manera:

DATA:
DEM, TIME=@OLE('C:\Documents and Settings\CESAR\Escritorio\Prctica\bd excel
para lingo\Sailco Inventory.xls','demanda','t');
ENDDATA
Nombre del rango seleccionado (C7:F7)

Figura 6: Ventana Excel, Sailco Invenory.

28

Por lo tanto, el modelo queda de la siguiente forma:

Figura 7: Programacin de Sailco Inventory.

Al resolver el problema se obtiene el siguiente reporte:


Global optimal solution found at iteration:
Objective value:
Variable
TIME( Q1)
TIME( Q2)
TIME( Q3)
TIME( Q4)
DEM( Q1)
DEM( Q2)
DEM( Q3)
DEM( Q4)
RP( Q1)
RP( Q2)
RP( Q3)
RP( Q4)
OP( Q1)
OP( Q2)
OP( Q3)
OP( Q4)
INV( Q1)
INV( Q2)
INV( Q3)
INV( Q4)
Row
1
2
3
4
5
6
7
8
9

Value
1.000000
2.000000
3.000000
4.000000
40.00000
60.00000
75.00000
25.00000
40.00000
40.00000
40.00000
25.00000
0.000000
10.00000
35.00000
0.000000
10.00000
0.000000
0.000000
0.000000
Slack or Surplus
78450.00
0.000000
0.000000
0.000000
15.00000
0.000000
0.000000
0.000000
0.000000

5
78450.00
Reduced Cost
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
20.00000
0.000000
0.000000
50.00000
0.000000
20.00000
70.00000
420.0000
Dual Price
-1.000000
30.00000
50.00000
50.00000
0.000000
450.0000
450.0000
400.0000
430.0000

29

La planificacin de la produccin, que minimiza los costos, para los prximos cuatro
trimestres queda como sigue:
Trimestre
Demanda
Produccin en
tiempo regular
Produccin en
sobretiempo
Inventario final

Q1
40

Q2
60

Q3
75

Q4
25

40

40

40

25

10

35

10

Tabla 6: planificacin de la produccin de Sailco Inventory

Con un costo total de $78.450.

30

7.

TIPOS DE VARIABLES EN LINGO

Todas las variables en Lingo son consideradas como no-negativas y continuas a menos
que se especifique lo contrario. Lingo posee cuatro funciones de dominio que pueden
ser usadas para anular la naturaleza de las variables que poseen por defecto (continuas y
no-negativas). Las funciones de dominio son:
Funcin
@GIN
@BIN
@FREE
@BND

Uso de la Funcin
Restringe una variable a ser un valor entero.
Hace que una variable sea binaria (es decir, 0 1).
Permite que una variable asuma cualquier valor, positivo o negativo.
Hace que una variable caiga dentro de un rango finito.

Tabla 7: Usos de Las funciones de dominio.

Y poseen la siguiente sintaxis:


Para las funciones @GIN, @BIN, @FREE

@DOMAIN FUNCTION (nombre de la variable);


Para la funcin @BND

@BND( lmite inferior, nombre de la variable, lmite superior);

En trminos matemticos la funcin de dominio @BND se puede interpretar como:


Lmite inferior nombre de la variable lmite superior

31

8.
8.1

EJEMPLOS DE PROGRAMACIN EN LINGO

Problemas de transporte

8.1.1 Ejemplo Powerco Formulation 6


Powerco tiene tres plantas elctricas que suministran electricidad a tres ciudades. Cada
planta puede suministrar las siguientes cantidades de electricidad en kwh. La planta uno,
35 millones; la planta 2, 50 millones; la planta 3, 40 millones. El peak de la demanda de
aquellas ciudades ocurre al mismo tiempo y son las siguientes (en kwh). Ciudad 1, 45
millones; ciudad 2, 20 millones; ciudad 3, 30 millones y ciudad 4, 30 millones. Los
costos de mandar 1 kwh. de electricidad de la planta a la ciudad depende de la distancia
existente entre ellas. Formular una programacin lineal que minimice los costos de
satisfacer los peak de demanda de las 4 ciudades.
A
Desde
Planta 1
Planta 2
Planta 3
Demanda
(millones de
kwh)

Ciudad 1

Ciudad 2

Ciudad 3

Ciudad 4

8
9
14

6
12
9

10
13
16

9
7
5

45

20

30

30

Suministro
(millones de
kwh)
35
50
40

Tabla 8: Tabla de datos ejemplo Powerco Formulation.

Problema extrado del texto gua Winston 4 ed. captulo 7, ejemplo 1.

32

Puntos de Suministro

Puntos de demanda

Ciudad 1

X11

s1 = 35

d1 =45

X12

Planta 1

x13

x14

d2 =20
Ciudad 2

X21

s2 = 50

X22

Planta 2

x23

X24
X32

x31

s3 = 40

Ciudad 3

x33

Planta 3

d3 =30

x34

Ciudad 4

d4 =30

Solucin
3

min cij xij


i =1 j =1

Sujeto a:
4

x
j =1

ij

x
i =1

ij

si

( i = 1, 2, 3)

dj

(j = 1, 2, 3, 4)

xij 0

(i = 1, 2, 3; j = 1, 2, 3, 4)

33

Solucin del problema Powerco Formulation en Lingo


Se declaran tres listas correspondientes a: Plantas (PLANTS) en donde tiene como
atributo la capacidad (CAP) de produccin de cada una de ellas, ciudades (CITIES) que
tiene como atributo la demanda (DEM) de cada una de las ciudades y una lista de enlace
(LINKS) que permitir obtener los costos y las cantidad de envo de cada una de las
plantas a cada una de las ciudades y sus atributos son costo (COST) y cantidad
transportada (SHIP).
SETS:
PLANTS/P1,P2,P3/:CAP;
CITIES/C1,C2,C3,C4/:DEM;
LINKS(PLANTS,CITIES):COST,SHIP;
ENDSETS

Funcin objetivo
La funcin objetivo minimiza todos los costos de transporte desde cada una de las
plantas a cada una de las ciudades registrados en la lista LINKS.
MIN=@SUM(LINKS:COST*SHIP);

Restriccin de suministro
Esta restriccin hace que la demanda total de todas las ciudades a cada una de las
plantas no exceda la capacidad de cada una de ellas.
@FOR(PLANTS(I):@SUM(CITIES(J):SHIP(I,J))<CAP(I));

Restriccin de demanda
La restriccin de demanda establece que la demanda de cada ciudad debe satisfacerse
completamente con los suministros de las plantas existentes.
@FOR(CITIES(J):@SUM(PLANTS(I):SHIP(I,J))>DEM(J));

34

Seccin de Datos
La seccin de datos tiene los datos necesarios para resolver el problema. En donde se
define la capacidad de cada planta, la demanda de cada ciudad y los costos unitarios de
transporte desde cada planta a cada ciudad.
DATA:
CAP=35,50,40;
DEM=45,20,30,30;
COST=8,6,10,9,
9,12,13,7, 7
14,9,16,5;
ENDDATA
Desde
Planta 1
Planta 2
Planta 3

A
Ciudad 1 Ciudad 2 Ciudad 3 Ciudad 4
8
6
10
9
9
12
13
7
14
9
16
5

Matriz de costos (3*4)

Tabla 9: Matriz de costos ejemplo Powerco Formulation.

O en su forma alternativa desde un archivo Excel:


DATA:
CAP, DEM, COST=@OLE('C:\Documents and Settings\memorista\Mis documentos\
Prctica\bd excel para lingo\transporte1.xls', 'cap','demanda','costos');

ENDDATA

Nombre del rango (F7:F9) = cap


Nombre del rango (B10:E10) = demanda
Figura 8: Asignacin de nombre a rango de datos en Powerco Formulation

Por lo tanto, la programacin en Lingo queda de la siguiente forma:


7

Para ingresar matrices en la seccin de datos se ingresan los datos (por fila) separados por comas y se
finaliza el ingreso de la matriz con un punto y coma.

35

Figura 9: Programacin de Powerco Formulation .

Al resolver el problema presionando el cono Solve se despliega el siguiente reporte de


solucin.
Global optimal solution found at iteration:
Objective value:

Variable
CAP( P1)
CAP( P2)
CAP( P3)
DEM( C1)
DEM( C2)
DEM( C3)
DEM( C4)
COST( P1, C1)
COST( P1, C2)
COST( P1, C3)
COST( P1, C4)
COST( P2, C1)
COST( P2, C2)
COST( P2, C3)
COST( P2, C4)
COST( P3, C1)
COST( P3, C2)
COST( P3, C3)
COST( P3, C4)
SHIP( P1, C1)
SHIP( P1, C2)
SHIP( P1, C3)
SHIP( P1, C4)
SHIP( P2, C1)
SHIP( P2, C2)
SHIP( P2, C3)
SHIP( P2, C4)
SHIP( P3, C1)
SHIP( P3, C2)
SHIP( P3, C3)
SHIP( P3, C4)

Value
35.00000
50.00000
40.00000
45.00000
20.00000
30.00000
30.00000
8.000000
6.000000
10.00000
9.000000
9.000000
12.00000
13.00000
7.000000
14.00000
9.000000
16.00000
5.000000
0.000000
10.00000
25.00000
0.000000
45.00000
0.000000
5.000000
0.000000
0.000000
10.00000
0.000000
30.00000

7
1020.000

Reduced Cost
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
2.000000
0.000000
0.000000
7.000000
0.000000
3.000000
0.000000
2.000000
5.000000
0.000000
3.000000
0.000000

36

En donde se puede apreciar la siguiente programacin ptima con un costo total de


US$1.020.000:
Planta 1:

X11 = N de (millones) de kwh. producidos en la planta 1 enviado a la ciudad 1


X11 = Ship (P1, C1) = 0
X12 = N de (millones) de kwh. producidos en la planta 1 enviado a la ciudad 2
X12 = Ship (P1, C2) = 10
X13 = N de (millones) de kwh. producidos en la planta 1 enviado a la ciudad 3
X13 = Ship (P1, C3) = 25
X14 = N de (millones) de kwh. producidos en la planta 1 enviado a la ciudad 4
X14 = Ship (P1, C4) = 0

Planta 2:

X21 = N de (millones) de kwh. producidos en la planta 2 enviado a la ciudad 1


X21 = Ship (P2, C1) = 45
X22 = N de (millones) de kwh. producidos en la planta 2 enviado a la ciudad 2
X22 = Ship (P2, C2) = 0
X23 = N de (millones) de kwh. producidos en la planta 2 enviado a la ciudad 3
X23 = Ship (P2, C3) = 5
X24 = N de (millones) de kwh. producidos en la planta 2 enviado a la ciudad 4
X24 = Ship (P2, C4) = 0

Planta 3:

X31 = N de (millones) de kwh. producidos en la planta 3 enviado a la ciudad 1


X31 = Ship (P3, C1) = 0
X32 = N de (millones) de kwh. producidos en la planta 3 enviado a la ciudad 2
X32 = Ship (P3, C2) = 10
X33 = N de (millones) de kwh. producidos en la planta 3 enviado a la ciudad 3
X33 = Ship (P3, C3) = 0
X34 = N de (millones) de kwh. producidos en la planta 3 enviado a la ciudad 4
X34 = Ship (P3, C4) = 30

37

8.1.2 Ejemplo Sailco Inventory8


A continuacin se muestra como se puede resolver un problema de inventario Sailco
Inventory como un problema de transporte.
El objetivo era encontrar la planificacin de la produccin que minimice los costos de
produccin en tiempo regular, produccin en sobretiempo y mantener inventario. En
donde se tiene la siguiente informacin.
Trimestre
Demanda

Q1
40

Q2
60

Q3
75

Q4
25

Tabla 10: Demanda trimestral de veleros en Sailco Inventory

Costos
Produccin en
tiempo regular
Produccin en
sobretiempo
Inventario final

C1

$400

C2

$450

C3

$20

Tabla 11: Costos unitarios en Sailco Inventory

Y Sailco posee 10 unidades de inventario inicial

Solucin
Se definen las siguientes variables para identificar los costos asociados al problema.
CRij: Costo producir en tiempo regular en el perodo i para satisfacer la demanda

del perodo j.
COij: Costo producir en sobretiempo en el perodo i para satisfacer la demanda

del perodo j.
CHij: Costo de mantener inventario final desde el perodo i +1 hasta el perodo j.

Problema extrado de texto gua Winston 4 ed. captulo 3, ejemplo 14.

38

As, el costo de producir en tiempo regular en el perodo 1 para satisfacer la demanda


del perodo 2 ser:

CR12 = CR11 + CH12 = 400 + 20 = $420


No se aceptan entregas atrasadas, por consiguiente se le asigna un costo de M (Infinito)
a una entrega desde un perodo a un perodo anterior.

Se establece una demanda ficticia ya que la capacidad total de suministro de todos los
trimestres supera la demanda total de los cuatro trimestres. El problema de transporte se
puede apreciar a continuacin.

Puntos de Suministro
Inventario Inicial

Puntos de demanda

I0
CH02
CH03

1 Trimestre

2 Trimestre

3 Trimestre

4 Trimestre

Ficticia

CR11
Produccin RT

CR12

RP1

1 Trimestre
CO11
Produccin OT

OP1

Produccin RT

RP2

CO11

2 Trimestre
Produccin OT

OP2

4 Trimestre

Como se puede apreciar en los cuadros de ms abajo la capacidad de las plantas excede
la demanda total de las ciudades, por lo que se requerir de una demanda ficticia.

39

Trimestre
Capacidad de
Produccin en
tiempo regular
Capacidad de
Produccin en
sobretiempo
Inventario final
Total

Q1

Q2

Q3

Q4

40

40

40

40

Total

160
150

150

150

150

10

600
10

770

Tabla 12: Capacidad de suministro en Sailco Inventory

Q1
40

Trimestre
Demanda

Q2
60

Q3
75

Q4
25

Total
200

Tabla 13: Demanda en Sailco Inventory

Por lo tanto, la demanda ficticia ser:


D ficticia = 770-200 = 570
Una vez balanceado el problema de transporte se resuelve de la siguiente manera.

Solucin
9

min cij xij


i =1 j =1

Sujeto a:
n

x
j =1

ij

x
i =1

ij

si

( i = 1, 2, 3,..m)

dj

(j = 1, 2, 3.. n)

xij 0

(i = 1, 2,.m; j = 1, 2,.. n)

40

Finalmente al resolver el tableu del problema de transporte se llega a la siguiente


solucin

Produccion
Periodo
Metodo
Inv. inicial
1

RT
OT
RT

2
OT
RT
3
OT
RT
4
OT
Demanda

1
0

10
400

30
450
0
10000400
0
10000450
0
20000400
0
20000450
0
30000400
0
30000450
0
40

Demanda por periodo


2
3
200
400
0
0
440
460
10
0
490
510
0
0
400
420
40
0
450
510
10
0
10000400
400
0
40
10000450
450
0
35
20000400
10000400
0
0
20000450
10000450
0
0
60
75

4
600
0
480
0
530
0
440
0
530
0
420
0
530
0
400

25
450
0
25

Dda. Ficticia
5
Capacidad
0
10
0
10
0
40
0
40
0
150
150
150
0
40
0
40
0
150
140
150
0
40
0
40
0
150
115
150
0
40
15
40
0
150
150
150
570

Tabla 13: Tableu de transporte en Sailco Inventory

41

Solucin del problema Sailco Inventory en Lingo


Se declaran tres tipos de listas, dos del tipo primitivas y una derivada de las dos
anteriores, las cuales son:

La lista Node que permite registrar cada uno de los nueve puntos de suministros, es
decir, INV1, RT1, OT1,., OT4 y posee el atributo CAP que guarda las capacidades de
cada nodo, en donde la capacidad de produccin RT (en tiempo regular) es de 40, la
capacidad de produccin OT (en sobre tiempo) es de 150 para los cuatro trimestres y
INV1 (inventario inicial) es 10 unidades.
La lista DEMAND permite registrar la demanda de veleros en cada uno de los cuatro
trimestres.

La lista derivada LINKS es una matriz que registra, con el atributo COST, los costos
asociados al envo de unidades de veleros desde cada uno de los nodos hacia cada uno
de los trimestres, es decir los costos asociados a mantener inventario, produccin en
tiempo regular y en sobretiempo para satisfacer la demanda en un cierto trimestre.
Adems posee el atributo SHIP que muestra la cantidad de veleros producidos (en
tiempo regular o en sobretiempo) para cada uno de los cuatro trimestres.
SETS:
NODE/1..9/:CAP;
DEMAND/D1,D2,D3,D4,D5/:DEM;
LINKS(NODE,DEMAND):COST,SHIP;
ENDSETS

Funcin Objetivo
La funcin objetivo minimiza los costos de transporte de producir veleros para
satisfacer la demanda trimestral.
MIN=@SUM(LINKS:COST*SHIP);

Restricciones
Restriccin que hace que la demanda trimestral sea totalmente satisfecha por las
distintas opciones de produccin (nodos).

42

@FOR(DEMAND(J):@SUM(NODE(I):SHIP(I,J))>DEM(J));

Restriccin de capacidad, es decir, no se debe exceder la capacidad de produccin de


cada uno de los nodos (Ya sea en tiempo regular o en sobretiempo).
@FOR(NODE(I):@SUM(DEMAND(J):SHIP(I,J))<CAP(I));

Seccin de datos
Se declaran los datos que se tienen inicialmente, es decir:
CAP: Capacidad de produccin de cada uno de los miembros de la lista Node.
Node
INV1
RT1
OT1
RT2
OT2
RT3
OT3
RT4
OT4

Capacidad
10
40
150
40
150
40
150
40
150

DEM: Se inicializa la variable DEM con la demanda de cada uno de los trimestres
(incluyendo la demanda ficticia para balancear el problema).
Perodo
Demanda

Q1
40

Q2
60

Q3
75

Q4
25

Ficticia
570

Cost: costos asociados a satisfacer la demanda a cada uno de los cuatro trimestres.

43

INV1
RT1
OT1
RT2
OT2
RT3
OT3
RT4
OT4

Q1
0
400
450
10.000.400
10.000.450
20.000.400
20.000.450
30.000.400
30.000.450

Q2
200
420
470
400
450
10.000.400
10.000.450
20.000.400
20.000.450

Q3
400
440
490
420
470
400
450
10.000.400
10.000.450

Q4
600
460
510
440
490
420
470
400
450

Ficticia
0
0
0
0
0
0
0
0
0

En donde,

INV1: El inventario inicial de 10 unidades, al comienzo del primer trimestre, incurrir


en algn costo slo si se mantienen algunas de estas unidades para satisfacer la demanda
de posteriores perodos, entonces el costo de mantener inventario para el perodo 2 es
20($/perodo-un)*10(un)*1(perodo) = 200 ($), para el segundo es 20*10*2 = 400 ($) y
as sucesivamente.

RT1 : El costo de produccin en tiempo regular para satisfacer la demanda de cada uno
de los trimestres es: Costo de produccin en RT + Costo de mantener inventario de un
perodo a otro, as por ejemplo para satisfacer la demanda del perodo 3 el costo de
produccin en RT2 es de: 400($/un) + 20($/perodo-un)*1(perodo) = 420($/un). Para
no permitir que el modelo asigne unidades a perodos anteriores al cual ellas fueron
producidas se le asigna un costo de escasez bien alto, en este caso de 10.000.000.
Luego, el costo de satisfacer la demanda del perodo 2 con produccin en RT en el
perodo 3 es: 400($/un) + 1(Perodos de escasez)*10.000.000($/perodo de escasez-un)
= 10.000.400 ($/un)

OT: De la misma forma que los costos en tiempo regular los costos de produccin en
sobretiempo para satisfacer la demanda trimestral se calcula como sigue: Costo de
produccin en OT + Costo de mantener inventario de un perodo a otro, as por ejemplo
el costo de produccin en sobretiempo en el perodo 2 para satisfacer la demanda del
perodo 3 ser: 450($/un) + 20 ($/perodo-un)*1(perodo)= 470($/un). El costo de
escasez se calcula de la misma forma que en la produccin en RT, por ejemplo producir
en OT en el perodo 4 para satisfacer la demanda del perodo 1 es: 450($/un)+
3(Perodos)* 10.000.000($/perodo de escasez-un) = 30.000.450.

44

A continuacin se muestra como se inicializan estas variables a partir del archivo Excel
transporte2.xls.
DATA:
CAP, DEM, COST=@OLE('C:\Documents and Settings\memorista\
Mis documentos\Prctica\bd excel para lingo
\transporte2.xls' ,'capacidad','demanda','costos');
ENDDATA

Finalmente la programacin queda de la siguiente forma.

Figura 10: Programacin de Sailco Problem .

Al resolver el modelo de programacin lineal el reporte de solucin mostrar la


siguiente informacin.
Global optimal solution found at iteration:

18

45

Objective value:

78450.00
Variable
SHIP( 1, D1)
SHIP( 1, D2)
SHIP( 1, D3)
SHIP( 1, D4)
SHIP( 1, D5)
SHIP( 2, D1)
SHIP( 2, D2)
SHIP( 2, D3)
SHIP( 2, D4)
SHIP( 2, D5)
SHIP( 3, D1)
SHIP( 3, D2)
SHIP( 3, D3)
SHIP( 3, D4)
SHIP( 3, D5)
SHIP( 4, D1)
SHIP( 4, D2)
SHIP( 4, D3)
SHIP( 4, D4)
SHIP( 4, D5)
SHIP( 5, D1)
SHIP( 5, D2)
SHIP( 5, D3)
SHIP( 5, D4)
SHIP( 5, D5)
SHIP( 6, D1)
SHIP( 6, D2)
SHIP( 6, D3)
SHIP( 6, D4)
SHIP( 6, D5)
SHIP( 7, D1)
SHIP( 7, D2)
SHIP( 7, D3)
SHIP( 7, D4)
SHIP( 7, D5)
SHIP( 8, D1)
SHIP( 8, D2)
SHIP( 8, D3)
SHIP( 8, D4)
SHIP( 8, D5)
SHIP( 9, D1)
SHIP( 9, D2)
SHIP( 9, D3)
SHIP( 9, D4)
SHIP( 9, D5)

Value
10.00000
0.000000
0.000000
0.000000
0.000000
30.00000
10.00000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
150.0000
0.000000
40.00000
0.000000
0.000000
0.000000
0.000000
10.00000
0.000000
0.000000
140.0000
0.000000
0.000000
40.00000
0.000000
0.000000
0.000000
0.000000
35.00000
0.000000
115.0000
0.000000
0.000000
0.000000
25.00000
15.00000
0.000000
0.000000
0.000000
0.000000
150.0000

Reduced Cost
0.000000
180.0000
380.0000
630.0000
430.0000
0.000000
0.000000
20.00000
90.00000
30.00000
20.00000
20.00000
40.00000
110.0000
0.000000
0.1000002E+08
0.000000
20.00000
90.00000
50.00000
0.1000002E+08
0.000000
20.00000
90.00000
0.000000
0.2000002E+08
0.1000000E+08
0.000000
70.00000
50.00000
0.2000002E+08
0.1000000E+08
0.000000
70.00000
0.000000
0.2999997E+08
0.1999995E+08
9999950.
0.000000
0.000000
0.3000002E+08
0.2000000E+08
0.1000000E+08
50.00000
0.000000

Por lo tanto, la planificacin de la produccin queda como sigue:


Q1

Q2

Q3

Q4

Ficticia

10

30
0

10
0

0
0

0
0

0
150

RT2
OT2

40
10

140

INV1
RT1
OT1

RT3

40

OT3

35

115

RT4
OT4

0
0

0
0

0
0

25
0

15
150

Tabla 14: Planificacin de la produccin Sailco Inventory

Con un costo mnimo de $78.450.

46

8.2

Problemas de programacin entera

8.2.1 Ejemplo The Lockbox Problem 9


J. C. Nickles recibe pagos por tarjeta de crdito desde cuatro regiones del pas (Oeste,
Centro-Oeste, Este y Sur). El valor diario promedio de los pagos enviados por los
clientes de cada regin es como sigue: Desde el Oeste, $70.000; del Centro-Oeste,
$50.000; del Este, $60.000; del Sur, $40.000. Nickles debe decidir a donde los clientes
deberan enviar sus pagos. Ya que, Nickles puede tener ganancias de 20% de inters
anual por invertir aquellos pagos, lo ideal sera recibir las liquidaciones lo ms rpido
posible. Nickles est considerando crear operaciones para procesar los pagos
(frecuentemente designado a cajas fuertes) en cuatro diferentes ciudades: Los ngeles,
Chicago, Nueva York y Atlanta. El nmero promedio de das (desde que el pago es
enviado) hasta que el cheque se cobra y Nickles puede depositar el dinero depende de la
ciudad de destino del pago, como se muestra en la tabla 15. Por ejemplo, si un cheque
es enviado desde el Oeste hacia Atlanta, tomara en promedio ocho das antes de que
Nickles pudiese ganar inters a partir del pago. El costo anual de mantener una caja
fuerte en cualquier ciudad es de $50.000.

Se pide formular un problema de programacin entera (IP) que Nickles puede usar para
minimizar la suma de los costos debido a la prdida de intereses y a las operaciones de
las cajas fuertes. Asumir que cada regin debe enviar todo su dinero a una sola ciudad y
las cajas fuertes no tienen lmites de capacidad.

Ciudad 1
Ciudad 2
Desde
Los Angeles Chicago
Regin 1 Oeste
2
6
Regin 2 Centro
6
2
Regin 3 Este
8
5
Regin 4 Sur
8
5

Hacia
Ciudad 3
Nueva York
8
5
2
3

Ciudad 4
Atlanta
8
5
5
2

Tabla 15: Nmero promedio de das desde el envo del pago hasta que se liquida.

Problema extrado del texto gua Winston 4 ed. captulo 9, ejemplo 4.

47

Solucin
Existen dos variables de decisin. Primero, se debe decidir en que ciudades deben
operar las cajas fuertes:

1, si la caja fuerte es operada en la ciudad j,

j=0, 1, 2, 3, 4.

yj =

0, de otra manera

Segundo, se debe determinar a donde, a que regin, deberan ser enviados los pagos:

1, si la regin i enva pagos a la ciudad j,

i=1, 2, 3, 4 y j=1, 2, 3, 4

xij =
0, de otra manera

PPL
min z = 28x11 + 84x12 + 112x13 + 112x14 + 60x21 + 20x22 + 50x23 + 50x24 +

96x31 +

60x32 + 24x33 + 60x34 + 64x41 + 40x42 + 40x43 + 16x44 + 50y1 + 50y2 + 50y3 + 50y4

Restriccin 1

Cada regin debe enviar sus pagos a slo una ciudad.

x1 j = 1
j =1

x2 j = 1
j =1

x3 j = 1
j =1

x
j =1

4j

=1

x11 + x12 + x13 + x14 = 1 (Restriccin de la regin del oeste)


x21 + x22 + x23 + x24 = 1 (Restriccin de la regin del Centro-Oeste)
x31 + x32 + x33 + x34 = 1 (Restriccin de la regin del este)
x41 + x42 + x43 + x44 = 1 (Restriccin de la regin del sur)

Restriccin 2

xij yj

(i = 1, 2, 3, 4; j = 1, 2, 3, 4)

48

Solucin del problema The Lockbox Problem en Lingo


Listas
Se declaran tres listas llamadas REGIONS, CITIES y LINKS, en donde:

REGIONS: Lista en donde sus objetos (miembros) son: W (Regin 1 oeste), MW

(Regin 2 centro-oeste), E (Regin 3 este), S (Regin 4 sur). El atributo de la lista es


DEMAND que representa el valor diario promedio de los pagos enviados por los
clientes a la regin correspondiente.

CITIES: Lista que incorpora las ciudades a donde pueden enviar los pagos los clientes,

a saber: LA (Los ngeles), CHIC (Chicago), NY (Nueva York), ATL (Atlanta) en


donde el objeto CITIES posee como atributo la variable dicotmica Y que puede tomar
valores de cero o uno (uno si la caja fuerte es operada en la ciudad y cero si es que no).

LINKS: Matriz que rene las regiones y las ciudades de envo. El atributo DAYS

Captura los das necesarios para que un pago desde una regin especfica (W, MW, E o
S) llegue a una ciudad determinada (LA, CHIC, NY o ATL), el atributo COST
representa la prdida de intereses anuales por demora del envo de los pagos desde una
regin a una ciudad y el atributo ASSIGN determina si una regin enva algn pago
desde la regin i a la ciudad j (1 si la regin i enva pagos a la ciudad j, 0 de otra
manera)
SETS:
REGIONS/W,MW,E,S/:DEMAND;
CITIES/LA,CHIC,NY,ATL/:Y;
LINKS(REGIONS,CITIES):DAYS,COST,ASSIGN;
ENDSETS

49

Funcin objetivo
La funcin objetivo minimiza los costos asociados a la prdida de inters anual y a los
costos de operacin de las cajas fuertes en cada una de las ciudades.
1, si se enva el pago desde la regin a la ciudad.
2, si no se realiza envo desde la regin a la ciudad.

MIN=@SUM(CITIES:50000*Y)+@SUM(LINKS:COST*ASSIGN);
Prdida de inters anual por demora en el de
envo de los pagos desde una regin a una ciudad.

Costo de operacin de caja fuerte en la ciudad.

Restricciones
Si se hace envo de algn pago desde la regin i a la ciudad j, entonces debe

operar una caja fuerte en la ciudad j, es decir, si x13 = 1, entonces y3 = 1


@FOR(LINKS(I,J):ASSIGN(I,J)<Y(J));
Si se realiza un pago desde cualquiera regin a la ciudad
j, entonces debe operar una caja fuerte en tal ciudad.

El envo de cada uno de los pagos se realiza slo a uno de las ciudades.
@FOR(REGIONS(I):@SUM(CITIES(J):ASSIGN(I,J))=1);
La suma de todas las asignaciones (pagos) desde una
regin a cada una de las ciudades debe ser igual 1.

Restriccin que establece que el atributo Y es una variable binaria (0, 1), en

donde 1 significa que opera la caja fuerte en la ciudad y 0 si es que no opera.


@FOR(CITIES(I):@BIN(Y(I)););
Restriccin que permite limitar al atributo ASSING de la lista LINKS a ser una

variable binaria, en donde ASSIGN (I, J) = 1 se enva el pago desde la regin i a


la ciudad j y ASSIGN (I, J) = 0 no se enva el pago desde la regin i a la ciudad
j.
@FOR(LINKS(I,J):@BIN(ASSIGN(I,J)););

50

Prdida de inters anual por demora en el envo de los pagos desde cada una de

las regiones a cada una de las ciudades para que sean depositados en la cuenta de
ahorro para que ganen intereses.
@FOR(LINKS(I,J):COST(I,J)=.20*DEMAND(I)*DAYS(I,J));
Costo por prdida de intereses anuales: inters*valor
del pago enviado*das de demora

Seccin de datos
En la seccin de datos el atributo DAYS registra los das promedio de demora desde
que se envan los pagos desde las regiones hasta que llegan a las respectivas ciudades y
el atributo DEMAND captura el valor diario promedio de los pagos enviados por los
clientes de cada regin.
DATA:
DAYS=2,6,8,8,
6,2,5,5,
8,5,2,5,
8,5,5,2;
DEMAND=70000,50000,60000,40000;
ENDDATA

O en su forma alternativa rescatando los valores desde un archivo Excel Entera1.xls.


DATA:
DAYS, DEMAND=@OLE('C:\Documents and Settings\memorista\Mis
documentos\ Prctica\bd excel para lingo\entera1.xls',
'dias','demanda');
ENDDATA

51

Finalmente, la programacin en Lingo de The Lockbox Problem queda de la siguiente


manera:

Figura 11: Programacin de The Lockbox Problem.

52

En el reporte de solucin de la programacin entera se obtiene lo siguiente:


Global optimal solution found.
Objective value:
Extended solver steps:
Total solver iterations:

Variable
Y( LA)
Y( CHIC)
Y( NY)
Y( ATL)
ASSIGN( W, LA)
ASSIGN( W, CHIC)
ASSIGN( W, NY)
ASSIGN( W, ATL)
ASSIGN( MW, LA)
ASSIGN( MW, CHIC)
ASSIGN( MW, NY)
ASSIGN( MW, ATL)
ASSIGN( E, LA)
ASSIGN( E, CHIC)
ASSIGN( E, NY)
ASSIGN( E, ATL)
ASSIGN( S, LA)
ASSIGN( S, CHIC)
ASSIGN( S, NY)
ASSIGN( S, ATL)

242000.0
0
0

Value
1.000000
0.000000
1.000000
0.000000
1.000000
0.000000
0.000000
0.000000
0.000000
0.000000
1.000000
0.000000
0.000000
0.000000
1.000000
0.000000
0.000000
0.000000
1.000000
0.000000

Reduced Cost
50000.00
50000.00
50000.00
50000.00
28000.00
84000.00
112000.0
112000.0
60000.00
20000.00
50000.00
50000.00
96000.00
60000.00
24000.00
60000.00
64000.00
40000.00
40000.00
16000.00

De la informacin anterior, se obtiene que deben existir cajas fuertes en las ciudades de
Los ngeles y Nueva York y se enviarn los siguientes pagos:
Desde la regin Oeste se enviarn pagos hacia la ciudad de Los ngeles.
Desde la regin Centro-Oeste se enviarn pagos hacia la ciudad de Nueva York.
Desde la regin Este se enviarn pagos hacia la ciudad de Nueva York.
Desde la regin Sur se enviarn pagos hacia la ciudad de Nueva York.

Con un costo total de $US 242.000.

53

8.3

Problemas de programacin no lineal

8.3.1 Ejemplo Warehouse Location 10


Truckco est intentando determinar donde debera ubicarse su nica bodega. La
posicin en el plano x-y (en miles) de cuatro clientes y el nmero de entregas anuales
hechas a cada cliente se muestra en la tabla 16. Truckco quiere localizar la bodega que
minimice la distancia total que los camiones deben viajar anualmente desde la bodega
hacia los cuatro clientes.
Consumidor
1
2
3
4

N de
Entregas
200
150
200
300

Coordenada
x
y
5
10
10
5
0
12
12
0

Tabla 16: Datos problema Warehouse Location

Solucin
X : Coordenada x de la bodega.
Y : Coordenada y de la bodega.
Di : Distancia desde el cliente i hasta la bodega.
Ni : Nmero de entregas del cliente i.

D1 = ( x 5) 2 + ( y 10) 2

1
D1

Bodega(x,y)

10

Problema extrado del texto gua Winston 4 ed. captulo 11, ejemplo 10.

54

Min Z = N i Di
i =1

Sujeto a:

D1 = ( x 5) 2 + ( y 10)2
D2 = ( x 10) 2 + ( y 5) 2
D3 = x 2 + ( y 12) 2
D4 = ( x 12) 2 + y 2

55

Solucin del problema Warehouse Location en Lingo

Listas
Se declara una lista denominada CUSTOMERS la cual tiene como miembros los cuatro
clientes de Truckco (C1, C2, C3 y C4) y como atributos las variables X e Y que
representan la ubicacin de cada uno de los clientes, la variable SHIP que representa la
cantidad de entregas anuales hechas a cada cliente y la variable D que registra la
distancia final que tendr cada cliente hacia la bodega.
SETS:
CUSTOMERS/C1,C2,C3,C4/:X,Y,SHIP,D;
ENDSETS

Funcin Objetivo
La funcin objetivo minimiza la cantidad enviada de entregas por unidad de distancia de
cada cliente (C1, C2, C3 y C4).
MIN=@SUM(CUSTOMERS:SHIP*D);

Restriccin
La restriccin corresponde a la distancia D(i) desde cada uno de los clientes hacia la
bodega, que es funcin de la ubicacin final de la bodega.
@FOR(CUSTOMERS(I):D(I)=((WX-X(I))^2+(WY-Y(I))^2)^.5);

Seccin de datos
En la seccin de datos se inicializan las posiciones de los cuatro clientes y la cantidad de
entregas anuales que realiza Truckco a cada uno de los clientes.
DATA:
X=5,10,0,12;
Y=10,5,12,0;
SHIP=200,150,200,300;
ENDDATA

56

Finalmente, la programacin quedar como sigue:

Figura 12: Programacin de The Lockbox Problem.

Al resolver la programacin en lingo se entrega el siguiente resultado:


Local optimal solution found at iteration:
Objective value:

Variable
WX
WY
X( C1)
X( C2)
X( C3)
X( C4)
Y( C1)
Y( C2)
Y( C3)
Y( C4)
SHIP( C1)
SHIP( C2)
SHIP( C3)
SHIP( C4)
D( C1)
D( C2)
D( C3)
D( C4)

Value
9.314164
5.028704
5.000000
10.00000
0.000000
12.00000
10.00000
5.000000
12.00000
0.000000
200.0000
150.0000
200.0000
300.0000
6.582233
0.6864367
11.63411
5.701016

184
5456.540

Reduced Cost
0.1537645E-06
0.8831086E-07
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000

Por lo tanto, la ubicacin ptima de la bodega ser (WX, WY) = (9.314164, 5.028704)
con Z = 5456.54 que es la cantidad enviada de entregas a cada uno de los clientes por
unidad de distancia.

57

8.3.2 Ejemplo ThePortfolio Problem 11


La inversin en un portafolio de inversiones (inversin en un conjunto de acciones de
diferentes empresas) tiene asociado dos factores: El retorno esperado (ganancia) y el
riesgo de cada una de estas acciones. Por consiguiente, la programacin no lineal
intentar minimizar el riesgo del portafolio y alcanzar un algn retorno esperado.

Por ejemplo, se quiere invertir en acciones de cuatro tipos de compaas USX (United
States Steel Corporation, industria de acero), ATT (American Telephone and Telegraph,
industria

de

telecomunicaciones),

IBM

(International

Business

Machines

Corporation, industria informtica), y T-Bill (Letras del tesoro estadounidense,

emitidos por el estado)

Las medias, las varianzas histricas y sus covarianzas de los retornos de las acciones se
muestran a continuacin:
Cov (i,j) ij
ATT
IBM
USX
TBILL

ATT
0,032
0,005
0,03
0

IBM
0,005
0,1
0,085
0

USX
0,03
0,085
0,333
0

TBILL
0
0
0
0

Tabla 17: Covarianzas acciones The Portfolio Problem

Acciones
ATT
IBM
USX
TBILL

j
0,2
0,42
1
0,04

Tabla 18: Medias de los retornos The Portfolio Problem

Como se debera invertir en las acciones para tener un retorno esperado mnimo del
portafolio de 0,35.

11

Mayor explicacin a la teora de portafolios en el texto gua Hillier 7 ed. captulo 13.

58

Solucin
El retorno esperado del portafolio de acciones y su varianza (riesgo asociado al
portafolio) se definen como:
n

R ( x) = j x j

(1)

j =1

V ( x) = ij xi x j

(2)

i =1 j =1

En donde,

j = La media del retorno de la accin j.


xi = Fraccin del presupuesto total a ser invertido en la accin i.

ij = Covarianza entre la accin i y j. Si i=j, entonces ii es la varianza de la accin i.

Por lo tanto, el objetivo ser minimizar el riesgo del portafolio e imponiendo como
restriccin que el retorno esperado de l no sea menor que un retorno mnimo aceptable.

El modelo de programacin no lineal sera:


n

Min V ( x) = ij xi x j
i =1 j =1

Sujeto a
n

x
j =1

=1

x
j =1

En donde, L es el retorno esperado mnimo aceptable.

59

Solucin del problema The portfolio Problem en Lingo


Se declaran dos tipos de listas.
STOCK: Lista primitiva que posee como atributos X, fraccin del presupuesto
invertida en la accin, y RET, retorno medio de la accin.
SXS: Matriz derivada en donde se registra las covarianzas y varianzas de las acciones, a
travs del atributo COVR.
SETS:
STOCK: X, RET;
SXS( STOCK, STOCK): COVR;
ENDSETS

Funcin Objetivo
La funcin objetivo minimiza el riesgo del portafolio representado por la ec (2).
MIN = @SUM( SXS(I, J): X(I) * X(J) * COVR(I, J));

Restricciones
Se usa exactamente el 100% del presupuesto disponible para la inversin en el
portafolio de acciones.
@SUM( STOCK: X) = 1;

El retorno esperado debe ser mayor o igual al retorno mnimo aceptable.


@SUM( STOCK: X * RET) >= L;

Seccin de datos
En la seccin de datos se inicializan las variables STOCK, en donde se nombran las
cuatro acciones en donde se invertir, RET, que representa el retorno medio de cada
accin, COVR, que registra las covarianzas entre cada una de las acciones y sus
varianzas y la variable L que es el retorno mnimo aceptable, 0.35%.
DATA:
STOCK = ATT IBM USX TBILL;
RET = .20 .42 1.00 .04;
COVR = .032 .005 .03
0
.005 .10 .085
0
.030 .085 .333
0
0
0
0
0;
L = .35;
ENDDATA

60

Luego, la programacin de Portfolio Problem queda de la siguiente manera:

Figura 13: Programacin de The Portfolio Problem.

Al resolver la programacin no lineal, Lingo presenta el siguiente reporte de solucin.


Local optimal solution found at iteration:
Objective value:

Variable
L
X( ATT)
X( IBM)
X( USX)
X( TBILL)
RET( ATT)
RET( IBM)
RET( USX)
RET( TBILL)
COVR( ATT, ATT)
COVR( ATT, IBM)
COVR( ATT, USX)
COVR( ATT, TBILL)
COVR( IBM, ATT)
COVR( IBM, IBM)
COVR( IBM, USX)
COVR( IBM, TBILL)
COVR( USX, ATT)
COVR( USX, IBM)
COVR( USX, USX)
COVR( USX, TBILL)
COVR( TBILL, ATT)
COVR( TBILL, IBM)
COVR( TBILL, USX)
COVR( TBILL, TBILL)

31
0.2994732E-01

Value
0.3500000
0.2583006
0.1752634
0.2104915
0.3559445
0.2000000
0.4200000
1.000000
0.4000000E-01
0.3200000E-01
0.5000000E-02
0.3000000E-01
0.000000
0.5000000E-02
0.1000000
0.8500000E-01
0.000000
0.3000000E-01
0.8500000E-01
0.3330000
0.000000
0.000000
0.000000
0.000000
0.000000

Reduced Cost
0.000000
0.3529442E-08
0.1055016E-07
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000

Por lo tanto, el portafolio ptimo que minimiza su riesgo y que tiene un retorno de
0.35% es, aproximadamente, invertir un 26 % en ATT, 17% en IBM, 21% en USX y
36 % en T-Bill.
61

8.4

Problemas de Flujo Mximo

8.4.1 Ejemplo Maximum Flow12


Sunco Oil desea enviar la mxima suma posible de aceite (por hora) por una tubera
desde el nodo SO al nodo SI, como se puede apreciar en la figura 14. De esta manera el
aceite debe pasar desde el nodo SO al nodo SI por algunas o todas las estaciones (1, 2 y
3). Los arcos representan tuberas de diferente dimetro. El nmero mximo de barriles
de aceite (millones de barriles por hora) que pueden ser bombeados por cada arco se
muestra en la tabla 10. Formular para determinar el nmero mximo de barriles de
aceite por hora que puede ser enviado desde el nodo SI al nodo SO.

so

si

Figura 14: Modelo de Redes para Sunco Oil

Arco
(so ,1)
(so,2 )
(1,2)
(1,3)
(3,si )
(2,si )

Capacidad
2
3
3
4
1
2

Tabla 19: Capacidades de los arcos Maximum Flow

12

Problema extrado del texto gua Winston 4 ed. captulo 8, ejemplo 3.

62

Solucin
Xij: Millones de barriles de aceite por hora que pasarn a travs del arco (i,j).
Se tienen que cumplir dos condiciones para que las soluciones sean factibles:

1)

0 Flujo a travs de cada arco Capacidad del arco .

2)

Flujo que entra al nodo i = flujo que sale desde el nodo i.

El objetivo es maximizar el flujo entre el nodo SO y SI, para hacer esto se establece un
arco ficticio que denotar el flujo desde el nodo SI al nodo SO

3
1

so

si
X0

Luego, el flujo del arco (SI, SO) ser igual al flujo entre SO y SI por la condicin (1) de
conservacin de flujo y denotamos al flujo (SI, SO) por X0
Por lo tanto, la programacin lineal quedar de la siguiente forma:

Max z = X0

Sujeto a
Restricciones de capacidad de arco
XSO,1 2
XSO,2 3
X1,2 3
X2,SI 2
X1,3 4
X,3,SI 1

63

Restricciones de balance de flujo


Balance de flujo en el nodo SO

XO = XSO,1 + XSO,2
Balance de flujo en el nodo 1

XSO,1 = X1,2 + X1,3


Balance de flujo en el nodo 2

XSO,2 + X1,,2= X2,SI


Balance de flujo en el nodo 3

X1,3 = X,3,SI
Balance de flujo en el nodo SI

X,3,SI + X2,SI = XO

64

Solucin del problema Maximum Flow en Lingo


Listas
Se declaran dos tipos de listas una del tipo primitiva que es NODE la cual tiene los
miembros 1, 2, 3, 4, 5 que representan cada uno de los nodos del modelo de redes y la
lista (matriz 5*5) ARCS que es derivada de la anterior la cual registra como miembro
los arcos existentes entre los nodos (la tabla registra los miembros declarados) y tiene
como atributos CAP y FLOW que capturan la capacidad y el flujo de cada uno de los
arcos existentes, respectivamente.

SO
Nodo
1
2
3
4
5

SI
3

Cada ARCS (i,j) (celda en amarillo)


tiene como atributo CAP y FLOW.

Tabla 20: Matriz de arcos existentes en el modelo de redes

SETS:
NODES/1..5/;
ARCS(NODES,NODES)/1,2 1,3 2,3 2,4 3,5 4,5
ENDSETS

5,1/:CAP,FLOW;

Funcin Objetivo
El objetivo es maximizar el flujo entre los nodos SO y SI, que es lo mismo que
maximizar el flujo entre SI y SO, FLOW(5,1).
MAX=FLOW(5,1);

Restricciones
Flujo del arco FLOW(i,j) no debe superar su capacidad mxima, esto para todos

los arcos declarados en la seccin de listas.


@FOR(ARCS(I,J):FLOW(I,J)<CAP(I,J));
Balance de flujo. Todo el aceite que entra a un nodo debe ser igual a todo el

aceite que sale de l, esto para cada uno de los nodos.


@FOR(NODES(I):@SUM(ARCS(J,I):FLOW(J,I))=@SUM(ARCS(I,J):FLOW(I,J)));

65

Seccin de datos
En esta seccin se inicializa slo la variable CAP, capacidad de envo de cada uno de
los arcos (tuberas).
DATA:
CAP=@OLE('C:\Documents and Settings\memorista\Mis documentos\Prctica\
bd excel para lingo\Flujo maximo1.xls','duracion');
ENDDATA

Por lo tanto, el modelo queda como sigue:

Figura 15: Programacin de Maximum Flow.

66

Al resolver la programacin lineal se desplegar por pantalla el siguiente reporte:


Global optimal solution found at iteration:
Objective value:

Variable
CAP( 1, 2)
CAP( 1, 3)
CAP( 2, 3)
CAP( 2, 4)
CAP( 3, 5)
CAP( 4, 5)
CAP( 5, 1)
FLOW( 1, 2)
FLOW( 1, 3)
FLOW( 2, 3)
FLOW( 2, 4)
FLOW( 3, 5)
FLOW( 4, 5)
FLOW( 5, 1)

4
3.000000

Value
2.000000
3.000000
3.000000
4.000000
2.000000
1.000000
1000.000
1.000000
2.000000
0.000000
1.000000
2.000000
1.000000
3.000000

Reduced Cost
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000

La solucin ptima 13 es Z = 3, XSO,1 = 1, XSO,2 = 2, X1,2 = 0, X1,3 = 1, X2,SI = 2,


X3,SI = 1, XO = 3.

1
1

so

2
2

13

si
3

En realidad es una solucin ptima, otra puede ser: XSO,2 = 1, XSO,1 = 2, X1,3 = 1, X1,2 = 1, X,3,SI = 1,

X2,SI = 2, XO = 3.

67

8.4.2 Ejemplo Seervada Park Problem14


Seervada Park es un parque que posee el siguiente sistema de carretera dentro de ella, en
donde O es la entrada y T es la estacin principal y las dems letras son estaciones
secundarias. Esto se puede ver en la figura siguiente.

A
D
B

Para los perodos peak de visitas se quiere maximizar el flujo de turistas que lleguen al
parque y logren visitar la estacin T, es decir, maximizar el flujo entre O y T.

La capacidad mxima (en nmero de personas) de cada tramo desde una estacin a otra,
es la siguiente.
Arco Capacidad
O A
5
O B
7
O C
4
A B
1
A D
3
B C
2
B D
4
B E
5
C E
4
D T
9
E D
1
E T
6
Tabla 21: Capacidades de los arcos Seervada Park Problem

14

Problema extrado de texto gua Hiller 8 ed. captulo 9.

68

Solucin
Al igual que el ejemplo anterior se establece un arco

ficticio entre T y O para

maximizar este flujo y as maximizar el flujo entre O y T, ya que se debe cumplir la


conservacin de flujo.
X0
A
D
B

Por consiguiente, la programacin lineal ser.

Funcin objetivo
Max z = x0

Restricciones de capacidad de arco


XO,A 5, XO,B 7, XO,C 4, XA,B 1, XA,D 3, XB,C 2, XB,D 4,
XB,E 5, XC,E 4, X,D,T 9, XE,D 1, XE,T 6.

Restricciones de balance de flujo


XO = XO,A + XO,B+ XO,C
XO,A = XA,B + XA,D
XA,B + XO,B = XB,C + XB,D + XB,E
XO,C + XB,C = XC,E
XA,D + XB,D + XE,D = XD,T
XB,E + XC,E = XE,D + XE,T
XD,T + XE,T = XO

69

Solucin del problema Seervada Park Problem en Lingo


Listas
Existen dos tipos de listas; una de las cuales es primitiva denominada NODE, la cual
permite identificar las siete estaciones del modelo de redes y la otra derivada de la
anterior que se llama ARCS, que es una matriz que tiene como miembros los arcos
existentes en el problema y que posee como atributo CAP y FLOW que permiten
registrar la capacidad mxima y el flujo de cada uno de los arcos existentes.
SETS:
NODES/1..7/;
ARCS(NODES,NODES)/1,2 1,3 1,4 2,3 2,5 3,4 3,5 3,6 4,6 5,7
6,5 6,7 7,1/:CAP,FLOW;
ENDSETS

Funcin Objetivo
La funcin objetivo maximiza el flujo de personas desde la entrada al parque, O, hacia
la estacin T. Que es lo mismo que maximizar el flujo existente entre la estacin T y O
MAX=FLOW(7,1);

Restricciones
Restriccin correspondiente a que el flujo en un arco no debe sobrepasar su capacidad
mxima, esto para cada uno de los arcos existentes.
@FOR(ARCS(I,J):FLOW(I,J)<CAP(I,J));

Restriccin correspondiente a los balances de flujo en cada nodo del modelo de redes.
@FOR(NODES(I):@SUM(ARCS(J,I):FLOW(J,I))=@SUM(ARCS(I,J):FLOW
(I,J)));

70

Seccin de datos
En esta seccin se inicializa la variable CAP, que guarda la capacidad mxima de flujo
de cada uno de los arcos del modelo de redes. Esto se realiza rescatando los datos desde
un archivo Excel, Flujo maximo2.xls.
DATA:
CAP=@OLE('C:\Documents and Settings\memorista\Mis
documentos\Prctica\bd excel para lingo\Flujo
maximo2.xls','duracion');
ENDDATA

Luego, la programacin del modelo de redes quedar de la siguiente forma:

Figura 16: Programacin de Seervada Park Problem.

71

Y al resolver este modelo de redes en Lingo se entrega el siguiente reporte de solucin.


Global optimal solution found at iteration:
Objective value:

Variable
CAP( 1, 2)
CAP( 1, 3)
CAP( 1, 4)
CAP( 2, 3)
CAP( 2, 5)
CAP( 3, 4)
CAP( 3, 5)
CAP( 3, 6)
CAP( 4, 6)
CAP( 5, 7)
CAP( 6, 5)
CAP( 6, 7)
CAP( 7, 1)
FLOW( 1, 2)
FLOW( 1, 3)
FLOW( 1, 4)
FLOW( 2, 3)
FLOW( 2, 5)
FLOW( 3, 4)
FLOW( 3, 5)
FLOW( 3, 6)
FLOW( 4, 6)
FLOW( 5, 7)
FLOW( 6, 5)
FLOW( 6, 7)
FLOW( 7, 1)

8
14.00000

Value
3.000000
7.000000
4.000000
0.000000
3.000000
0.000000
4.000000
3.000000
4.000000
8.000000
1.000000
6.000000
1000.000
3.000000
7.000000
4.000000
0.000000
3.000000
0.000000
4.000000
3.000000
4.000000
8.000000
1.000000
6.000000
14.00000

Reduced Cost
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000

Por lo tanto, el flujo mximo que pasa a travs de la red es de 14, en donde los flujos de
sus arcos son: XO,A = 3, XO,B = 7, XO,C = 4, XA,B = 0, XA,D = 3, XB,C = 0, XB,D = 4,
XB,E = 3, XC,E = 4, XD,T = 8, XE,D = 1, XE,T = 6 y X0 = 14.
14
A
3

0
7

3
4

0
C

T
1

72

8.5 Problema de Ruta Crtica


8.5.1 Ejemplo Drawing a Project Network15
Widgetco est a punto de introducir un nuevo producto (Producto 3). Una unidad del
producto 3 es producido por el ensamble de una unidad del producto uno y una unidad
del producto dos. Antes que comience la produccin de cualquiera de los dos productos,
las materias primas deben ser adquiridas y los trabajadores deben ser capacitados. Antes
que los productos 1 y 2 sean ensamblados para producir el producto 3, el producto 2
terminado debe ser inspeccionado. Una lista de actividades y sus predecesoras y la
duracin de cada actividad se entrega en la tabla 22. Determine la ruta crtica del
proyecto.

Activity
A = train workers
B = purchase raw materials
C = produce product 1
D = produce product 2
E = test product 2
F = assemble products 1and 2

Predecessors

A, B
A, B
D
C, E

(Days)
6
9
8
7
10
12

Tabla 22: Duracin de actividades y sus predecesoras

Solucin
El diagrama del proyecto se muestra a continuacin, en donde el nmero de cada arco
representa la duracin de la actividad en das. El nodo A es el comienzo del proyecto y
el nodo F es el nodo final que representa el trmino del proyecto, el arco ficticio (B, C)
es necesario para asegurar que los nodos B y C estn conectados (Condicin necesaria
para la construccin de diagramas de proyectos)

A6

C8

F12

E10

D7

B9
2

15

Problema extrado del texto gua Winston 4 ed. captulo 8, ejemplo 6.

73

Clculo de Tiempo de Evento ms Temprano

Para calcular la ruta crtica del proyecto se calcular el tiempo de evento ms temprano
del ltimo evento (que pone trmino al proyecto), es decir se debe calcular el ET(F),
para cumplir con esto se deben calcular el tiempo de evento ms temprano de todas los
nodos predecesores comenzando con el nodo 1.
ET(1) = 0
ET(2) = ET(1) + 9 (Duracin de la actividad B) = 9
Para que ocurra el evento 3, debe haberse completado la actividad A y B, entonces:

ET (1) + 6 = 6 (Instante en que la actividad A termina)


ET(3)= mx

=9
ET(2) + 0 = 9 (Instante en que la actividad B termina)

El nodo 3 slo es predecesor inmediato del nodo 4, As:

ET(4) = ET(3) + 7 = 16
Los predecesores inmediatos del nodo 5 son los nodos 3 y 4, entonces:
ET (3) + 8 = 17 (Instante en que la actividad C termina)
ET(5)= mx

ET(4) + 10 = 26 (Instante en que la actividad E termina)

= 26

Finalmente, el nodo 6 tiene como nico nodo predecesor el nodo 5, por lo tanto:
ET(6) = ET(5) + 26 = 38
Se puede apreciar que con el clculo del tiempo de evento ms temprano el proyecto
puede terminarse en 38 das, es decir, el producto 3 puede ser ensamblado en 38 das.

74

Solucin del problema Drawing a Project Network en Lingo


Listas
Se declaran 2 tipos de listas una primitiva NODES que denotan los nodos del modelo de
redes que tiene como atributo TIME que registra el tiempo en que ocurre el evento y
una lista (matriz 6*6) derivada de la anterior denominada ARCS que registra las
actividades (arcos) entre cada uno de los eventos y posee el atributo DUR que permite
guardar la duracin de estas actividades.
SETS:
NODES/1..6/:TIME;
ARCS(NODES,NODES)/
1,2 1,3 2,3 3,4 3,5 4,5 5,6/:DUR;
ENDSETS

Funcin Objetivo
El objetivo del problema es determinar la duracin mnima del proyecto representado
por la ruta crtica, para esto se debe minimizar la vida del proyecto que es el tiempo de
ocurrencia del evento 6 menos el tiempo de ocurrencia del evento 1.
MIN=TIME(6)-TIME(1);

Restriccin
La restriccin denota que para cada arco (actividad) el tiempo en que comienza la
actividad j debe ser mayor que el tiempo en que comienza la actividad i ms la duracin
de la actividad (i,j).

@FOR(ARCS(I,J):TIME(J)>TIME(I)+DUR(I,J));

Seccin de datos
En esta seccin se inicializa la duracin de cada una de las actividades que se mostraron
en la tabla 22, a partir del archivo Excel CPM.xls

DATA:
DUR=@OLE('C:\Documents and Settings\memorista\Mis
documentos\Prctica\ bd excel para lingo\CPM.xls','dias');
ENDDATA

75

La programacin en Lingo de Drawing a Project Network, por tanto quedar de la


siguiente manera:

Figura 17: Programacin de Drawing a Project Network.

Y al resolver la programacin lineal el Lingo se despliega el siguiente reporte de


solucin:
Global optimal solution found at iteration:
Objective value:

Variable
TIME( 1)
TIME( 2)
TIME( 3)
TIME( 4)
TIME( 5)
TIME( 6)
DUR( 1, 2)
DUR( 1, 3)
DUR( 2, 3)
DUR( 3, 4)
DUR( 3, 5)
DUR( 4, 5)
DUR( 5, 6)

Value
0.000000
9.000000
9.000000
16.00000
26.00000
38.00000
9.000000
6.000000
0.000000
7.000000
8.000000
10.00000
12.00000

7
38.00000

Reduced Cost
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000

76

Se desprende de la solucin anterior que la duracin mnima del proyecto es de 38 das,


en donde la ocurrencia de cada uno de los eventos es como sigue:
Time (1) = 0 tiempo en comienza el proyecto nace el nodo 1.
Time (2) = 9 tiempo en que termina la actividad B.
Time (3) = 9 tiempo en que las actividades A y B son completadas.
Time (4) = 16 tiempo en que termina la actividad D.
Time (5) = 26 tiempo en que las actividades C y E son completadas.
Time (6) = 38 tiempo en que las actividad F es completada.

77

8.6

Problema de Ruta ms Corta

8.6.1 Ejemplo Seervada Park Problem 16


Para el mismo ejemplo 8.4.2 mencionado anteriormente se pide determinar cul ruta,
desde la entrada al parque a la estacin T, tiene la distancia total menor. El modelo de
redes se muestra a continuacin.

A
2

2
5

7
4

1
C

T
1

3
4

Solucin
Aplicando el algoritmo de la ruta ms corta se obtuvo la siguiente tabla.
Nodos resueltos
Nodo no resuelto
conectados a nodos conectado ms
n
no resueltos
cercano
1
O
A
O
C
2,3
A
B
A
D
B
E
C
E
4
A
D
B
D
5
E
D
D
T
6
E
T

Distancia total
2
4
2+2=4
2+7=9
4+3=7
4+4=8
2+7=9
4+4=8
7+1=8
8+5=13
7+7=14

Nodo i-simo
ms cercano
A

Distancia
mnima
2

ltima
Conexin
OA

C,B

4,4

OC, AB

BE

D, D

8,8

BD, ED

13

DT

Tabla 23: Algoritmo de la ruta ms corta

A partir de la tabla anterior, se puede identificar dos rutas ms cortas que unen la
entrada con la estacin T (desde atrs hacia adelante) las cuales son: T D B A
O y T D E B A O. Por consiguiente, las dos alternativas de ruta ms

corta desde el origen al destino han sido identificadas como: O A B D T y


O A B E D T.

16

Ejercicio resuelto texto gua Hillier 8 ed. captulo 9, seccin 9.3.

78

Solucin del problema Seervada Park Problem en Lingo


Listas: Se declaran dos tipos de listas una denominada NODE para identificar a cada
uno de los nodos del modelo de redes y la otra, que es una matriz, llamada ARC para
registrar los arcos existentes en el modelo que tiene como atributos DIST y X que
guardan la distancia de cada uno de los arcos existentes y si se reconoce al ste como
parte de la ruta ms corta, respectivamente.
SETS:
NODE : ;
ARC( NODE, NODE): DIST,X;
ENDSETS

Funcin objetivo
El objetivo es minimizar la distancia total de los arcos seleccionados, se decir, en donde
x(i,j) = 1.
MIN = @SUM( ARC: DIST * X);

Restricciones
N registrar el nmero de nodos existentes en el modelo de redes, en este caso el
tamao del vector NODE es 7 (S, A, ., T).
N = @SIZE( NODE);

Para el nodo K, excepto para el primero y el ltimo, todo el flujo que entra en el nodo es
igual al flujo que sale de l.
@FOR( NODE( K)|K #GT# 1 #AND# K #LT# N: @SUM( NODE( I)| I
#NE# K: X( I, K))= @SUM( NODE( J)| J #NE# K: X( K, J)););

En la solucin debe existir al menos un arco que comience desde el nodo 1.


@SUM( NODE( J)| J #GT# 1: X( 1, J)) = 1;

En la solucin debe existir al menos un arco que conecte al ltimo nodo.


@SUM( NODE( I)| I #LT# N: X( I, N)) = 1;

79

Seccin de datos
En esta seccin se inicializan las variables NODE para identificar los siete nodos, desde
la entrada al parque hasta la estacin T y DIST que identifica la distancia de cada uno
de los arcos existentes (para los arcos inexistentes se le asigna un valor muy grande para
que el modelo no asigne estos arcos a la solucin final).
NODE, DIST=@OLE('C:\Documents and Settings\memorista\Mis
documentos\ Prctica\bd excel para
lingo\Rutamascorta.xls','nodos','distancia');

Luego la programacin lineal queda como lo muestra la figura:

Figura 18: Programacin de Seervada Park Problem Shortest Path.

80

Posteriormente, al resolver la programacin lineal, Lingo entrega el siguiente reporte:


Global optimal solution found at iteration:
Objective value:

Variable
N
X( O, O)
X( O, A)
X( O, B)
X( O, C)
X( O, D)
X( O, E)
X( O, T)
X( A, O)
X( A, A)
X( A, B)
X( A, C)
X( A, D)
X( A, E)
X( A, T)
X( B, O)
X( B, A)
X( B, B)
X( B, C)
X( B, D)
X( B, E)
X( B, T)
X( C, O)
X( C, A)
X( C, B)
X( C, C)
X( C, D)
X( C, E)
X( C, T)
X( D, O)
X( D, A)
X( D, B)
X( D, C)
X( D, D)
X( D, E)
X( D, T)
X( E, O)
X( E, A)
X( E, B)
X( E, C)
X( E, D)
X( E, E)
X( E, T)
X( T, O)
X( T, A)
X( T, B)
X( T, C)
X( T, D)
X( T, E)
X( T, T)

Value
7.000000
0.000000
1.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
1.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
1.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
1.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000

4
13.00000

Reduced Cost
0.000000
0.000000
0.000000
1.000000
1.000000
992.0000
993.0000
987.0000
1.000000
0.000000
0.000000
999.0000
1.000000
995.0000
989.0000
6.000000
4.000000
0.000000
2.000000
0.000000
0.000000
991.0000
4.000000
1001.000
0.000000
0.000000
995.0000
0.000000
990.0000
1005.000
13.00000
8.000000
1005.000
0.000000
2.000000
0.000000
1004.000
1005.000
6.000000
8.000000
0.000000
0.000000
1.000000
1000.000
1001.000
999.0000
1000.000
0.000000
3.000000
0.000000

Por lo tanto, la ruta ms corta del modelo de redes es la siguiente:


O A B D T con una distancia total de 13 (un).

81

8.7

Administracin de la produccin 2

8.7.1 Balance de lnea de ensamble, minimizar el tiempo de ciclo


Se tiene la siguiente lnea de ensamble, en donde los tiempos de ensamble de cada tarea
y sus predecesores inmediatas se muestran en el cuadro.

Task
A
B
C
D
E
F
G
H
I
J
K

Assembly
Time
(Minutes)
45
11
9
50
15
12
12
12
12
8
9

Immediate
predecessors
A
B
D
C
C
E
E
F,G,H, I
J

Tabla 24: Tiempos de ensamble de las tareas y precedencia

Se dispone de cuatro estaciones de trabajo. Se pide asignar las once tareas a las cuatro
estaciones de trabajo de tal manera que se minimice el tiempo de ciclo de la lnea de
ensamble.

G
J

H
D

E
I

82

Solucin del problema Balance de Lneas de Ensamble en Lingo


Declaracin de listas
En este problema de balanceo de lnea de ensamble se considerarn cuatro tipos de
listas, de las cuales dos son del tipo primitivas y las otras dos son derivadas de las dos
anteriores.

TASK: La lista de tareas a ser asignadas en donde sus miembros son las tareas A, B, C,

D, ., K cada una con un tiempo de procesamiento T.

STATIONS: Esta lista registra las cuatro estaciones de trabajo en donde van a ser

procesadas las tareas.


PRED: La matriz PRED registra las tareas predecesoras de cada una de las tareas, en

donde PRED(A, B) significa que la tarea A es predecesora inmediata de la tarea B.


TXS: Esta matriz muestra la asignacin que tendr cada una de las tareas a cada

estacin de trabajo y posee como atributo la variable entera binaria X, en donde


X(A,1)=1 significa que la tarea A ser asignada a la estacin de trabajo 1, si X(A,1)=0
significa que la tarea A no es asignada a la estacin de trabajo 1.
SETS:
TASK/ A B C D E F G H I J K/: T;
STATION/1..4/;
PRED( TASK, TASK)/ A,B B,C C,F
E,H E,I H,J I,J /;
TXS( TASK, STATION): X;
ENDSETS

C,G

F,J

G,J J,K

D,E

Funcin Objetivo
El objetivo es minimizar el tiempo de ciclo de la lnea de ensamble, denotado por la
variable CYCTIME.
MIN = CYCTIME

83

Restricciones
Para cada tarea debe haber al menos una estacin asignada.
@FOR( TASK( I): @SUM( STATION( K): X( I, K)) = 1);

Restriccin de precedencia, para cada para tareas predecesoras, la tarea predecesora i no


puede ser asignada a una estacin posterior que su tarea sucesora j.
@FOR( PRED( I, J):@SUM( STATION( K):K * X( J, K) - K * X(
I, K)) >= 0);

Para cada estacin de trabajo, el tiempo total de las tareas asignadas a ella debe ser
menor o igual que el tiempo mximo de ciclo.
@FOR( STATION( K):@SUM( TXS( I, K): T( I) * X( I, K)) <=
CYCTIME);

Se declara la variable X, que asigna las tareas a las estaciones, como una variable entera
binaria. En donde, si X(i,j)= 1 entonces la tarea i ser asignada a la estacin j, en caso
contrario no ser asignada.
@FOR( TXS: @BIN( X));

Seccin de datos
En esta seccin se inicializan los tiempos de cada una de las tareas existentes, los datos
son extrados desde el archivo Excel balancing line.xls.
DATA:
T =@OLE('C:\Documents and Settings\CESAR\Escritorio
\Prctica\bd excel para lingo\balancing line.xls',
'tiempo');
ENDDATA

84

Luego la programacin lineal, de asignacin de tareas, queda de la siguiente forma:

Figura 19: Programacin de Balancing Line.

85

Al resolver la programacin lineal anterior, Lingo entrega el siguiente reporte:


Global optimal solution found at iteration:
Objective value:

Variable
CYCTIME
X( A, 1)
X( A, 2)
X( A, 3)
X( A, 4)
X( B, 1)
X( B, 2)
X( B, 3)
X( B, 4)
X( C, 1)
X( C, 2)
X( C, 3)
X( C, 4)
X( D, 1)
X( D, 2)
X( D, 3)
X( D, 4)
X( E, 1)
X( E, 2)
X( E, 3)
X( E, 4)
X( F, 1)
X( F, 2)
X( F, 3)
X( F, 4)
X( G, 1)
X( G, 2)
X( G, 3)
X( G, 4)
X( H, 1)
X( H, 2)
X( H, 3)
X( H, 4)
X( I, 1)
X( I, 2)
X( I, 3)
X( I, 4)
X( J, 1)
X( J, 2)
X( J, 3)
X( J, 4)
X( K, 1)
X( K, 2)
X( K, 3)
X( K, 4)

Value
50.00000
1.000000
0.000000
0.000000
0.000000
0.000000
0.000000
1.000000
0.000000
0.000000
0.000000
0.000000
1.000000
0.000000
1.000000
0.000000
0.000000
0.000000
0.000000
1.000000
0.000000
0.000000
0.000000
0.000000
1.000000
0.000000
0.000000
0.000000
1.000000
0.000000
0.000000
1.000000
0.000000
0.000000
0.000000
1.000000
0.000000
0.000000
0.000000
0.000000
1.000000
0.000000
0.000000
0.000000
1.000000

1255
50.00000

Reduced Cost
0.000000
0.000000
45.00000
0.000000
0.000000
0.000000
11.00000
0.000000
0.000000
0.000000
9.000000
0.000000
0.000000
0.000000
50.00000
0.000000
0.000000
0.000000
15.00000
0.000000
0.000000
0.000000
12.00000
0.000000
0.000000
0.000000
12.00000
0.000000
0.000000
0.000000
12.00000
0.000000
0.000000
0.000000
12.00000
0.000000
0.000000
0.000000
8.000000
0.000000
0.000000
0.000000
9.000000
0.000000
0.000000

A partir de lo anterior se tiene:


Estacin
1
2
3
4

Tareas Asignadas Tiempo de Ciclo


A
45
D
50
B, E, H, I
50
C, F, G, J, K
50

Tabla 25: Asignacin de tareas Balancing Line

El tiempo de ciclo para la lnea de ensamble es de 50 minutos, el mximo tiempo de


ciclo entre todas las estaciones. Slo existe una holgura en el tiempo de ciclo de la
estacin 1, que es de cinco minutos.

86

8.7.2 Balance de lnea de ensamble Auto de Friccin 17


Considerar el ensamble de un auto a friccin. Para el cual se tienen disponibles dos
turnos de cuatro horas de trabajo diario y cuatro das de trabajo a la semana. Adems,
cada turno posee 10 minutos de descanso. Por ltimo, se estima que la tasa de
produccin debe ser de 1500 unidades por semana.

Solucin
Tiempo de ciclo
C=

1 semana

1500 unidades

C = 1.17

Task
A
B
C
D
E
F
G
H
I
J
K
L

Das
Turnos
Minutos
Minutos
2
220
= 1.17
Semana
Das
Turnos
Unidad

Minutos
Segundos
60
70 Segundos
Unidad
Minutos

Assembly
Immediate
Time
predecessors
(Seconds)
20
6
A
5
B
21
8
35
15
C,D
10
G
15
E,H
5
C,D
46
F,I,J
16
K

Tabla 26: Duracin de tareas y precedencia Auto de Friccin

Costos
Para calcular los costos asociados al asignar una tarea a una estacin se procede de la
siguiente forma:
Ncik cik+1

17

k=1, 2, ...., k-1

Ejemplo extrado del texto Modeling and Analysis Manufacturing Systems, Ronald G. Askin, Cp 2

87

En donde

Cik = Costo de asignar la tarea i a la estacin k.


N = Numero de tareas.
Si se asume que C1k = 1, k= 1, 2, 3 y 4.
Entonces, los costos se distribuirn de la siguiente manera:
Costos
Tareas
A
B
C
D
E
F
G
H
I
J
K
L

Mquinas
2
3
12
144
12
144
12
144
12
144
12
144
12
144
12
144
12
144
12
144
12
144
12
144
12
144

1
1
1
1
1
1
1
1
1
1
1
1
1

4
1728
1728
1728
1728
1728
1728
1728
1728
1728
1728
1728
1728

Tabla 27: Costos de asignacin Auto de Friccin

Estructura de precedencia del modelo del auto a friccin.

88

Solucin del problema Auto de Friccin en Lingo


Listas
Al igual que el ejemplo anterior existen cuatro listas llamadas TASK, PRED, STATION
y TXS. En donde, la lista TASK permite identificar las doce tareas presentes en el
problema y con su atributo T que se utiliza para guardar la duracin de stas, la lista
STATION registra las estaciones existentes en el problema y posee el atributo CT que
registra sus tiempos de ciclo, la lista PRED permite declarar las precedencias de las
distintas tareas y la lista TXS que posee como atributos X y C que cumplen con el
objetivo de la asignacin de las tareas a las distintas estaciones y guardan el costo de
estas asignaciones, respectivamente.
SETS:
TASK/ A B C D E F G H I J K L/: T;
PRED( TASK, TASK)/ A,B B,C C,J C,G
H,I I,K K,L J,K /;
STATION/1..4/:CT;
TXS( TASK, STATION): X,C;
ENDSETS

D,G

E,I F,K

G,H

Seccin de datos
Esta seccin permite inicializar las variables T (duracin de las tareas) y C (Costos de
asignacin) del problema de asignacin de tareas, respectivamente.
DATA:
T, C=@OLE('C:\Documents and Settings\memorista\Mis
documentos\ Prctica\bd excel para lingo\balancing
line1.xls','tiempo','costos');
ENDDATA

Funcin Objetivo
El objetivo es distribuir las tareas en las estaciones de la manera ms eficiente, es decir,
que la asignacin logre un menor tiempo ocioso en las estaciones de trabajo. Esto se
hace minimizando el costo en el que se incurre al asignar las tareas a las estaciones.
MIN = @SUM(TXS:X*C);

89

Restricciones
Por cada tarea debe haber asignada al menos una estacin a ella.
@FOR( TASK( I): @SUM( STATION( K): X( I, K)) = 1);

Por cada par de tareas predecesoras; en donde i precede a j, si la tarea j es asignada a


una estacin, entonces la tarea j debe estar ya asignada a esa estacin o a una anterior.
@FOR( PRED( I, J):@SUM( STATION( K):K * X( J, K) - K * X(
I, K)) >= 0);

Por cada estacin de trabajo, la suma de los tiempos de las tareas procesadas en ella no
debe superar el tiempo mximo de ciclo ct, que en este caso es 70.
@FOR( STATION( K): @SUM( TXS( I, K): T( I) * X( I, K)) <=
ct);

Se restringe la variable X a que tome solo valores enteros binarios, es decir, 0 1.


@FOR( TXS: @BIN( X));

Entonces, la programacin del problema del auto de friccin queda como sigue:

Figura 19: Programacin de Auto de Friccin.

90

Al resolver el problema, Lingo entrega el siguiente reporte de solucin.


Global optimal solution found at iteration:
Objective value:

Variable
X( A, 1)
X( A, 2)
X( A, 3)
X( A, 4)
X( B, 1)
X( B, 2)
X( B, 3)
X( B, 4)
X( C, 1)
X( C, 2)
X( C, 3)
X( C, 4)
X( D, 1)
X( D, 2)
X( D, 3)
X( D, 4)
X( E, 1)
X( E, 2)
X( E, 3)
X( E, 4)
X( F, 1)
X( F, 2)
X( F, 3)
X( F, 4)
X( G, 1)
X( G, 2)
X( G, 3)
X( G, 4)
X( H, 1)
X( H, 2)
X( H, 3)
X( H, 4)
X( I, 1)
X( I, 2)
X( I, 3)
X( I, 4)
X( J, 1)
X( J, 2)
X( J, 3)
X( J, 4)
X( K, 1)
X( K, 2)
X( K, 3)
X( K, 4)
X( L, 1)
X( L, 2)
X( L, 3)
X( L, 4)

45
485.0000

Value
1.000000
0.000000
0.000000
0.000000
1.000000
0.000000
0.000000
0.000000
1.000000
0.000000
0.000000
0.000000
1.000000
0.000000
0.000000
0.000000
0.000000
1.000000
0.000000
0.000000
0.000000
1.000000
0.000000
0.000000
1.000000
0.000000
0.000000
0.000000
0.000000
1.000000
0.000000
0.000000
0.000000
1.000000
0.000000
0.000000
0.000000
0.000000
1.000000
0.000000
0.000000
0.000000
1.000000
0.000000
0.000000
0.000000
1.000000
0.000000

Reduced Cost
1.000000
12.00000
144.0000
1728.000
1.000000
12.00000
144.0000
1728.000
1.000000
12.00000
144.0000
1728.000
1.000000
12.00000
144.0000
1728.000
1.000000
12.00000
144.0000
1728.000
1.000000
12.00000
144.0000
1728.000
1.000000
12.00000
144.0000
1728.000
1.000000
12.00000
144.0000
1728.000
1.000000
12.00000
144.0000
1728.000
1.000000
12.00000
144.0000
1728.000
1.000000
12.00000
144.0000
1728.000
1.000000
12.00000
144.0000
1728.000

A partir de lo anterior, se puede concluir el siguiente balance de la lnea de ensamble, en


donde el nmero entre parntesis representa el tiempo ocioso de las maquinas.

20, 6, 5, 21, 15 = 67 (3)


A

Mquina 1

8, 35, 10, 15 = 68 (2)


E

Mquina 2

5, 46, 16 = 67 (3)
J

Mquina 3

91