Beruflich Dokumente
Kultur Dokumente
Manual de Usuario
Software Lingo
Versin 8.0
Diciembre de 2005
INDICE
INDICE............................................................................................................................ 2
1.
2.
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.
1.
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
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.
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 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
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.
Links
Se usa el comando LINKS desde el men Edit para controlar el acceso a objetos
externos desde Lingo.
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.)
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.
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
11
3.1
Recursos
Escritorios
Madera (Pie)
8
Trminado (Horas)
4
Carpintera (Horas)
2
Mesas
6
2
1,5
Sillas
1
1,5
0,5
Solucin
Definiendo las variables decisin como:
12
s.a.
x3 48
8x1 +
6x2 +
4x1 +
2x2 + 1.5x3 20
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
<= 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:
3
4
14
Finalmente, para resolver el problema lineal se debe seleccionar desde la barra de tareas
solve
Solve
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:
15
16
0
280.0000
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.
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
17
4.
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
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
trimestres.
Costos
Produccin en
tiempo regular
Produccin en
sobretiempo
Inventario final
$400
$450
$20
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:
t =1
t =1
t =1
4.2
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
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.
SETS
Nombre de la lista/miembro 1,miembro 2,,miembro n/atributo 1,.,atributo n;
ENDSETS
Atributos
Objetos
20
5.
5.1
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.
5.2
Operadores lgicos
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
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
22
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
Dt
I0
t=1
It
Xt
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
Balance de Inventario
D1
I0
T=1
T=2
D4
T=3
I1
X1
D3
D2
I2
X2
T=4
I3
X3
I4
X4
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
25
6.
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
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 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:
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:
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:
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.
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)
28
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
30
7.
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.
31
8.
8.1
Problemas de transporte
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
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
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
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
ENDDATA
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
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
Planta 2:
Planta 3:
37
Q1
40
Q2
60
Q3
75
Q4
25
Costos
Produccin en
tiempo regular
Produccin en
sobretiempo
Inventario final
C1
$400
C2
$450
C3
$20
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.
38
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
Q1
40
Trimestre
Demanda
Q2
60
Q3
75
Q4
25
Total
200
Solucin
9
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
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
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
41
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));
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,
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
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
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
46
8.2
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.
47
Solucin
Existen dos variables de decisin. Primero, se debe decidir en que ciudades deben
operar las cajas fuertes:
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:
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
x1 j = 1
j =1
x2 j = 1
j =1
x3 j = 1
j =1
x
j =1
4j
=1
Restriccin 2
xij yj
(i = 1, 2, 3, 4; j = 1, 2, 3, 4)
48
CITIES: Lista que incorpora las ciudades a donde pueden enviar los pagos los clientes,
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.
Restricciones
Si se hace envo de algn pago desde la regin i a la ciudad j, entonces debe
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
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
51
52
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.
53
8.3
N de
Entregas
200
150
200
300
Coordenada
x
y
5
10
10
5
0
12
12
0
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
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
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
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
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
Acciones
ATT
IBM
USX
TBILL
j
0,2
0,42
1
0,04
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,
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.
Min V ( x) = ij xi x j
i =1 j =1
Sujeto a
n
x
j =1
=1
x
j =1
59
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;
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
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
so
si
Arco
(so ,1)
(so,2 )
(1,2)
(1,3)
(3,si )
(2,si )
Capacidad
2
3
3
4
1
2
12
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)
2)
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
XO = XSO,1 + XSO,2
Balance de flujo en el nodo 1
X1,3 = X,3,SI
Balance de flujo en el nodo SI
X,3,SI + X2,SI = XO
64
SO
Nodo
1
2
3
4
5
SI
3
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
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
66
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
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
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
68
Solucin
Al igual que el ejemplo anterior se establece un arco
Funcin objetivo
Max z = x0
69
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
71
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
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
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
73
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:
=9
ET(2) + 0 = 9 (Instante en que la actividad B termina)
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
= 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
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
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
77
8.6
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
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
16
78
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)););
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');
80
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
81
8.7
Administracin de la produccin 2
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
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
TASK: La lista de tareas a ser asignadas en donde sus miembros son las tareas A, B, C,
STATIONS: Esta lista registra las cuatro estaciones de trabajo en donde van a ser
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);
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
85
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
86
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
Costos
Para calcular los costos asociados al asignar una tarea a una estacin se procede de la
siguiente forma:
Ncik cik+1
17
Ejemplo extrado del texto Modeling and Analysis Manufacturing Systems, Ronald G. Askin, Cp 2
87
En donde
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
88
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 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);
Entonces, la programacin del problema del auto de friccin queda como sigue:
90
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
Mquina 1
Mquina 2
5, 46, 16 = 67 (3)
J
Mquina 3
91