manual de usuario software lingo 8.0
DESCRIPTION
LingoTRANSCRIPT
-
Manual de Usuario Software Lingo
Versin 8.0
Diciembre de 2005
Universidad Catlica del Norte Facultad de Ingeniera y Ciencias Geolgicas Departamento de Ingeniera de Sistemas y Computacin Ingeniera Civil Industrial
Preparado por Csar Galleguillos Moro
-
2
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
6.1 Importacin de datos desde hojas de clculo.................................................. 26 7. 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
-
3
1. INTRODUCCIN AL PROGRAMA LINGO 8.0
Lingo1 (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.
1 Autor de Lingo es LINDO Systems 1415 N. Dayton St., Chicago IL 60622 USA.
-
4
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.
-
5
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).
-
6
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.
-
7
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).
-
8
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.
-
9
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.
-
10
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.
-
11
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.
-
12
3.1 Ejemplo The Dakota Company2
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 Mesas SillasMadera (Pie) 8 6 1Trminado (Horas) 4 2 1,5Carpintera (Horas) 2 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.
2 Problema extrado del texto gua Winston 4 ed. captulo 4, ejemplo 2.
-
13
Es fcil ver que Dakota debera resolver la siguiente programacin lineal
max z = 60x1 + 30x2 + 20x3 (FO: Maximizar ingresos)
s.a.
8x1 + 6x2 + x3 48 (Capacidad de madera) 4x1 + 2x2 + 1.5x3 20 (Capacidad de trabajo de terminado) 2x1 + 1.5x2 + 0.5x3 8 (Capacidad de trabajo de carpintera) x2 5 (Limitacin de demanda de mesas) x1, x2, x3 0 (Variables no negativas)
-
14
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
-
15
Finalmente, para resolver el problema lineal se debe seleccionar desde la barra de tareas
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.
Solve
-
16
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
-
17
De la figura anterior se desprende: Global optimal solution found. 0
Objective value: 280.0000
La salida de Lingo muestra que el ptimo es z = 280
Variable Value Reduced Cost X1 2.000000 0.000000 X2 0.000000 5.000000 X3 8.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 Slack or Surplus Dual Price 1 280.0000 1.000000 2 24.00000 0.000000 3 0.000000 10.00000 4 0.000000 10.00000 5 50.00000 0.000000 6 2.000000 0.000000 7 0.000000 0.000000 8 8.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.
-
18
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 Inventory5
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.
-
19
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 $400
Produccin en sobretiempo $450
Inventario final $20 Tabla 2: Costos de Produccin e Inventario Solucin Trimestre Q1 Q2 Q3 Q4Demanda 40 60 75 25Produccin en tiempo regular RP1 RP2 RP3 RP4
Produccin en sobretiempo OP1 OP2 OP3 OP4
Inventario final INV1 INV2 INV3 INV4 Tabla 3: Variables involucradas
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 4 4
1 1 1min 400 450 20t t t
t t tz RP OP INV
= = == + +
Sujeto a:
Variables de decisin
1 , 1, 2,3, 4t t t t tINV INV RP OP D t t= + + =40,tRP t
-
20
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 QUARTERSTIMEDEMRPOPINV Objetos (miembros) tipo QUARTERS
Q1TIMEDEMRPOPINV
Q2TIMEDEMRPOPINV
Q3TIMEDEMRPOPINV
Q4TIMEDEMRPOPINV
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:
SETS: QUARTERS/Q1,Q2,Q3,Q4/:TIME,DEM,RP,OP,INV; ENDSETS
Atributos
Nombre de la lista
Lista
Atributos Objetos
-
21
5. OPERADORES Y FUNCIONES EN LINGO
5.1 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 Uso de la funcin@FOR Es usada para aplicar una restriccin a todos los miembros de una lista.@SUM Calcula la suma de una expresin sobre todos los miembros de una lista.@MIN Calcula el mnimo de una expresin sobre todos los miembros de una lista.@MAX 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.
-
22
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 Valor de Retorno
#NOT#VERDADERO si el operando inmediatamente al lado derecho esFALSO, en caso contrario es VERDADERO
#EQ#VERDADERO si ambos operandos son iguales, en caso contrario esFALSO
#NE#VERDADERO si ambos operandos no son iguales, en caso contrarioes FALSO
#GT#VERDADERO si el operando izquierdo es estrictamente mayor que eloperando derecho, en caso contrario es FALSO
#GE#VERDADERO si el operando izquierdo es mayor o igual que eloperando derecho, en caso contrario es FALSO
#LT#VERDADERO si el operando izquierdo es estrictamente menor que eloperando derecho, en caso contrario es FALSO
#LE#VERDADERO si el operando izquierdo es menor o igual que eloperando derecho, en caso contrario es FALSO
#AND#VERDADERO slo si ambos argumentos son VERDADEROS, en casocontrario es FALSO
#OR#FALSO slo si ambos argumentos son FALSOS, en caso contrario esVERDADERO
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).
MIN=@SUM(QUARTERS:400*RP+450*OP+20*INV); 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
Sumatoria de los costos de n objetos, en este caso de los costos de los 4 Quarters
Costos totales de cada objeto
-
23
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
Entonces, la ecuacin de balance de inventario es:
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.
t=1 I0
Xt
Dt
It
1t t t tI I X D= +
-
24
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)
-
25
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);
-
26
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.
-
27
@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.
-
28
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
Figura 6: Ventana Excel, Sailco Invenory.
Nombre del rango seleccionado (C7:F7)
-
29
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: 5 Objective value: 78450.00 Variable Value Reduced Cost TIME( Q1) 1.000000 0.000000 TIME( Q2) 2.000000 0.000000 TIME( Q3) 3.000000 0.000000 TIME( Q4) 4.000000 0.000000 DEM( Q1) 40.00000 0.000000 DEM( Q2) 60.00000 0.000000 DEM( Q3) 75.00000 0.000000 DEM( Q4) 25.00000 0.000000 RP( Q1) 40.00000 0.000000 RP( Q2) 40.00000 0.000000 RP( Q3) 40.00000 0.000000 RP( Q4) 25.00000 0.000000 OP( Q1) 0.000000 20.00000 OP( Q2) 10.00000 0.000000 OP( Q3) 35.00000 0.000000 OP( Q4) 0.000000 50.00000 INV( Q1) 10.00000 0.000000 INV( Q2) 0.000000 20.00000 INV( Q3) 0.000000 70.00000 INV( Q4) 0.000000 420.0000 Row Slack or Surplus Dual Price 1 78450.00 -1.000000 2 0.000000 30.00000 3 0.000000 50.00000 4 0.000000 50.00000 5 15.00000 0.000000 6 0.000000 450.0000 7 0.000000 450.0000 8 0.000000 400.0000 9 0.000000 430.0000
-
30
La planificacin de la produccin, que minimiza los costos, para los prximos cuatro trimestres queda como sigue: Trimestre Q1 Q2 Q3 Q4Demanda 40 60 75 25Produccin en tiempo regular 40 40 40 25
Produccin en sobretiempo 0 10 35 0
Inventario final 10 0 0 0 Tabla 6: planificacin de la produccin de Sailco Inventory
Con un costo total de $78.450.
-
31
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 Uso de la Funcin@GIN Restringe una variable a ser un valor entero.@BIN Hace que una variable sea binaria (es decir, 0 1).
@FREE Permite que una variable asuma cualquier valor, positivo o negativo.@BND 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
-
32
8. EJEMPLOS DE PROGRAMACIN EN LINGO
8.1 Problemas de transporte
8.1.1 Ejemplo Powerco Formulation6
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.
Desde Ciudad 1 Ciudad 2 Ciudad 3 Ciudad 4Planta 1 8 6 10 9 35Planta 2 9 12 13 7 50Planta 3 14 9 16 5 40Demanda (millones de kwh)
45 20 30 30
A Suministro (millones de kwh)
Tabla 8: Tabla de datos ejemplo Powerco Formulation.
6 Problema extrado del texto gua Winston 4 ed. captulo 7, ejemplo 1.
-
33
Solucin
3 4
1 1min ij ij
i jc x
= =
Sujeto a:
4
1ij i
jx s
= ( i = 1, 2, 3)
3
1ij j
ix d
= (j = 1, 2, 3, 4)
0ijx (i = 1, 2, 3; j = 1, 2, 3, 4)
Planta 2
Planta 3
Planta 1
Ciudad 2
Ciudad 3
Ciudad 4
Ciudad 1
s 1 = 35
d1 =45
Puntos de Suministro Puntos de demanda
X11
d2 =20
d3 =30
d4 =30
s 2 = 50
s 3 = 40
X12
x14 x13
x33 X32
X21
X24 x23
X22
x31
x34
-
34
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))DEM(J));
-
35
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, 14,9,16,5;7 ENDDATA
Desde Ciudad 1 Ciudad 2 Ciudad 3 Ciudad 4Planta 1 8 6 10 9Planta 2 9 12 13 7Planta 3 14 9 16 5
A
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
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.
Matriz de costos (3*4)
Nombre del rango (B10:E10) = demanda
Nombre del rango (F7:F9) = cap
-
36
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: 7 Objective value: 1020.000 Variable Value Reduced Cost CAP( P1) 35.00000 0.000000 CAP( P2) 50.00000 0.000000 CAP( P3) 40.00000 0.000000 DEM( C1) 45.00000 0.000000 DEM( C2) 20.00000 0.000000 DEM( C3) 30.00000 0.000000 DEM( C4) 30.00000 0.000000 COST( P1, C1) 8.000000 0.000000 COST( P1, C2) 6.000000 0.000000 COST( P1, C3) 10.00000 0.000000 COST( P1, C4) 9.000000 0.000000 COST( P2, C1) 9.000000 0.000000 COST( P2, C2) 12.00000 0.000000 COST( P2, C3) 13.00000 0.000000 COST( P2, C4) 7.000000 0.000000 COST( P3, C1) 14.00000 0.000000 COST( P3, C2) 9.000000 0.000000 COST( P3, C3) 16.00000 0.000000 COST( P3, C4) 5.000000 0.000000 SHIP( P1, C1) 0.000000 2.000000 SHIP( P1, C2) 10.00000 0.000000 SHIP( P1, C3) 25.00000 0.000000 SHIP( P1, C4) 0.000000 7.000000 SHIP( P2, C1) 45.00000 0.000000 SHIP( P2, C2) 0.000000 3.000000 SHIP( P2, C3) 5.000000 0.000000 SHIP( P2, C4) 0.000000 2.000000 SHIP( P3, C1) 0.000000 5.000000 SHIP( P3, C2) 10.00000 0.000000 SHIP( P3, C3) 0.000000 3.000000 SHIP( P3, C4) 30.00000 0.000000
-
37
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
-
38
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 Q1 Q2 Q3 Q4Demanda 40 60 75 25
Tabla 10: Demanda trimestral de veleros en Sailco Inventory
Produccin en tiempo regular C
1 $400
Produccin en sobretiempo C2 $450
Inventario final C3 $20
Costos
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.
8 Problema extrado de texto gua Winston 4 ed. captulo 3, ejemplo 14.
-
39
As, el costo de producir en tiempo regular en el perodo 1 para satisfacer la demanda
del perodo 2 ser:
12 11 12 400 20 $420CR CR CH= + = + =
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.
RP1
OP1
RP2
OP2
I0
2
3
4
5
1
Inventario Inicial
Produccin RT
Produccin RT
Produccin OT
Produccin OT
1 Trimestre
2 Trimestre
1 Trimestre
2 Trimestre
3 Trimestre
4 Trimestre
Ficticia
4 Trimestre
Puntos de Suministro Puntos de demanda
CR11CR12
CH02CH03
CO11
M
CO11
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.
-
40
Trimestre Q1 Q2 Q3 Q4 TotalCapacidad de Produccin en tiempo regular
40 40 40 40160
Capacidad de Produccin en sobretiempo
150 150 150 150600
Inventario final 10 0 0 0 10Total 770
Tabla 12: Capacidad de suministro en Sailco Inventory Trimestre Q1 Q2 Q3 Q4 TotalDemanda 40 60 75 25 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 4
1 1min ij ij
i jc x
= =
Sujeto a:
1
n
ij ij
x s=
( i = 1, 2, 3,..m) 1
m
ij ji
x d=
(j = 1, 2, 3.. n) 0ijx (i = 1, 2,.m; j = 1, 2,.. n)
-
41
Finalmente al resolver el tableu del problema de transporte se llega a la siguiente
solucin
Dda. FicticiaPeriodo Metodo 1 2 3 4 5 Capacidad
0 200 400 600 0 1010 0 0 0 0 10
400 440 460 480 0 4030 10 0 0 0 40
450 490 510 530 0 1500 0 0 0 150 150
10000400 400 420 440 0 400 40 0 0 0 40
10000450 450 510 530 0 1500 10 0 0 140 150
20000400 10000400 400 420 0 400 0 40 0 0 40
20000450 10000450 450 530 0 1500 0 35 0 115 150
30000400 20000400 10000400 400 0 400 0 0 25 15 40
30000450 20000450 10000450 450 0 1500 0 0 0 150 150
40 60 75 25 570
OT
OT
RT
OT
RT
Inv. inicial
RT
OT
RT
1
2
3
4
Produccion
Demanda
Demanda por periodo
Tabla 13: Tableu de transporte en Sailco Inventory
-
42
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).
-
43
@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))
-
44
Q1 Q2 Q3 Q4 FicticiaINV1 0 200 400 600 0RT1 400 420 440 460 0OT1 450 470 490 510 0RT2 10.000.400 400 420 440 0OT2 10.000.450 450 470 490 0RT3 20.000.400 10.000.400 400 420 0OT3 20.000.450 10.000.450 450 470 0RT4 30.000.400 20.000.400 10.000.400 400 0OT4 30.000.450 20.000.450 10.000.450 450 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.
-
45
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
-
46
Objective value: 78450.00
Variable Value Reduced Cost SHIP( 1, D1) 10.00000 0.000000 SHIP( 1, D2) 0.000000 180.0000
SHIP( 1, D3) 0.000000 380.0000 SHIP( 1, D4) 0.000000 630.0000 SHIP( 1, D5) 0.000000 430.0000 SHIP( 2, D1) 30.00000 0.000000 SHIP( 2, D2) 10.00000 0.000000 SHIP( 2, D3) 0.000000 20.00000 SHIP( 2, D4) 0.000000 90.00000 SHIP( 2, D5) 0.000000 30.00000 SHIP( 3, D1) 0.000000 20.00000 SHIP( 3, D2) 0.000000 20.00000 SHIP( 3, D3) 0.000000 40.00000 SHIP( 3, D4) 0.000000 110.0000 SHIP( 3, D5) 150.0000 0.000000 SHIP( 4, D1) 0.000000 0.1000002E+08 SHIP( 4, D2) 40.00000 0.000000 SHIP( 4, D3) 0.000000 20.00000 SHIP( 4, D4) 0.000000 90.00000 SHIP( 4, D5) 0.000000 50.00000 SHIP( 5, D1) 0.000000 0.1000002E+08 SHIP( 5, D2) 10.00000 0.000000 SHIP( 5, D3) 0.000000 20.00000 SHIP( 5, D4) 0.000000 90.00000 SHIP( 5, D5) 140.0000 0.000000 SHIP( 6, D1) 0.000000 0.2000002E+08 SHIP( 6, D2) 0.000000 0.1000000E+08 SHIP( 6, D3) 40.00000 0.000000 SHIP( 6, D4) 0.000000 70.00000 SHIP( 6, D5) 0.000000 50.00000 SHIP( 7, D1) 0.000000 0.2000002E+08 SHIP( 7, D2) 0.000000 0.1000000E+08 SHIP( 7, D3) 35.00000 0.000000 SHIP( 7, D4) 0.000000 70.00000 SHIP( 7, D5) 115.0000 0.000000 SHIP( 8, D1) 0.000000 0.2999997E+08 SHIP( 8, D2) 0.000000 0.1999995E+08 SHIP( 8, D3) 0.000000 9999950. SHIP( 8, D4) 25.00000 0.000000 SHIP( 8, D5) 15.00000 0.000000 SHIP( 9, D1) 0.000000 0.3000002E+08 SHIP( 9, D2) 0.000000 0.2000000E+08 SHIP( 9, D3) 0.000000 0.1000000E+08 SHIP( 9, D4) 0.000000 50.00000 SHIP( 9, D5) 150.0000 0.000000 Por lo tanto, la planificacin de la produccin queda como sigue:
Q1 Q2 Q3 Q4 FicticiaINV1 10 0 0 0 0RT1 30 10 0 0 0OT1 0 0 0 0 150RT2 0 40 0 0 0OT2 0 10 0 0 140RT3 0 0 40 0 0OT3 0 0 35 0 115RT4 0 0 0 25 15OT4 0 0 0 0 150
Tabla 14: Planificacin de la produccin Sailco Inventory Con un costo mnimo de $78.450.
-
47
8.2 Problemas de programacin entera
8.2.1 Ejemplo The Lockbox Problem9
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.
DesdeCiudad 1 Los Angeles
Ciudad 2 Chicago
Ciudad 3 Nueva York
Ciudad 4 Atlanta
Regin 1 Oeste 2 6 8 8Regin 2 Centro 6 2 5 5Regin 3 Este 8 5 2 5Regin 4 Sur 8 5 3 2
Hacia
Tabla 15: Nmero promedio de das desde el envo del pago hasta que se liquida.
9 Problema extrado del texto gua Winston 4 ed. captulo 9, ejemplo 4.
-
48
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.
jy = 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
ijx = 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.
4
11
1jj
x=
= 4 21
1jj
x=
= 4 31
1jj
x=
= 4 41
1jj
x=
= 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)
-
49
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
-
50
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.
MIN=@SUM(CITIES:50000*Y)+@SUM(LINKS:COST*ASSIGN);
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)
-
51
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));
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
Costo por prdida de intereses anuales: inters*valor del pago enviado*das de demora
-
52
Finalmente, la programacin en Lingo de The Lockbox Problem queda de la siguiente manera:
Figura 11: Programacin de The Lockbox Problem.
-
53
En el reporte de solucin de la programacin entera se obtiene lo siguiente: Global optimal solution found. Objective value: 242000.0 Extended solver steps: 0 Total solver iterations: 0
Variable Value Reduced Cost Y( LA) 1.000000 50000.00
Y( CHIC) 0.000000 50000.00 Y( NY) 1.000000 50000.00 Y( ATL) 0.000000 50000.00 ASSIGN( W, LA) 1.000000 28000.00 ASSIGN( W, CHIC) 0.000000 84000.00 ASSIGN( W, NY) 0.000000 112000.0 ASSIGN( W, ATL) 0.000000 112000.0 ASSIGN( MW, LA) 0.000000 60000.00 ASSIGN( MW, CHIC) 0.000000 20000.00 ASSIGN( MW, NY) 1.000000 50000.00 ASSIGN( MW, ATL) 0.000000 50000.00 ASSIGN( E, LA) 0.000000 96000.00 ASSIGN( E, CHIC) 0.000000 60000.00 ASSIGN( E, NY) 1.000000 24000.00 ASSIGN( E, ATL) 0.000000 60000.00 ASSIGN( S, LA) 0.000000 64000.00 ASSIGN( S, CHIC) 0.000000 40000.00 ASSIGN( S, NY) 1.000000 40000.00 ASSIGN( S, ATL) 0.000000 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.
-
54
8.3 Problemas de programacin no lineal
8.3.1 Ejemplo Warehouse Location10
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.
x y1 5 10 2002 10 5 1503 0 12 2004 12 0 300
Coordenada N de EntregasConsumidor
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.
10 Problema extrado del texto gua Winston 4 ed. captulo 11, ejemplo 10.
D1 Bodega(x,y)
4
31
2
2 21 ( 5) ( 10)D x y= +
x
y
-
55
Min Z =4
1i i
iN D
=
Sujeto a:
2 21 ( 5) ( 10)D x y= +
2 22 ( 10) ( 5)D x y= +
2 23 ( 12)D x y= +
2 24 ( 12)D x y= +
-
56
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
-
57
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: 184 Objective value: 5456.540 Variable Value Reduced Cost WX 9.314164 0.1537645E-06 WY 5.028704 0.8831086E-07 X( C1) 5.000000 0.000000 X( C2) 10.00000 0.000000 X( C3) 0.000000 0.000000 X( C4) 12.00000 0.000000 Y( C1) 10.00000 0.000000 Y( C2) 5.000000 0.000000 Y( C3) 12.00000 0.000000 Y( C4) 0.000000 0.000000 SHIP( C1) 200.0000 0.000000 SHIP( C2) 150.0000 0.000000 SHIP( C3) 200.0000 0.000000 SHIP( C4) 300.0000 0.000000 D( C1) 6.582233 0.000000 D( C2) 0.6864367 0.000000 D( C3) 11.63411 0.000000 D( C4) 5.701016 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.
-
58
8.3.2 Ejemplo ThePortfolio Problem11
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 0IBM 0,005 0,1 0,085 0USX 0,03 0,085 0,333 0
TBILL 0 0 0 0 Tabla 17: Covarianzas acciones The Portfolio Problem Acciones jATT 0,2IBM 0,42USX 1TBILL 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.
-
59
Solucin
El retorno esperado del portafolio de acciones y su varianza (riesgo asociado al
portafolio) se definen como:
1( )
n
j jj
R x x=
= (1)
1 1( )
n n
ij i ji j
V x x x= =
= (2) En donde,
j = La media del retorno de la accin j. ix = 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:
Min 1 1
( )n n
ij i ji j
V x x x= =
= Sujeto a
1
n
j jj
x L=
1
1n
jj
x=
= En donde, L es el retorno esperado mnimo aceptable.
-
60
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
-
61
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: 31 Objective value: 0.2994732E-01 Variable Value Reduced Cost L 0.3500000 0.000000 X( ATT) 0.2583006 0.3529442E-08 X( IBM) 0.1752634 0.1055016E-07 X( USX) 0.2104915 0.000000 X( TBILL) 0.3559445 0.000000 RET( ATT) 0.2000000 0.000000 RET( IBM) 0.4200000 0.000000 RET( USX) 1.000000 0.000000 RET( TBILL) 0.4000000E-01 0.000000 COVR( ATT, ATT) 0.3200000E-01 0.000000 COVR( ATT, IBM) 0.5000000E-02 0.000000 COVR( ATT, USX) 0.3000000E-01 0.000000 COVR( ATT, TBILL) 0.000000 0.000000 COVR( IBM, ATT) 0.5000000E-02 0.000000 COVR( IBM, IBM) 0.1000000 0.000000 COVR( IBM, USX) 0.8500000E-01 0.000000 COVR( IBM, TBILL) 0.000000 0.000000 COVR( USX, ATT) 0.3000000E-01 0.000000 COVR( USX, IBM) 0.8500000E-01 0.000000 COVR( USX, USX) 0.3330000 0.000000 COVR( USX, TBILL) 0.000000 0.000000 COVR( TBILL, ATT) 0.000000 0.000000 COVR( TBILL, IBM) 0.000000 0.000000 COVR( TBILL, USX) 0.000000 0.000000 COVR( TBILL, TBILL) 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.
-
62
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.
Figura 14: Modelo de Redes para Sunco Oil
Arco Capacidad(so ,1) 2(so,2 ) 3(1,2) 3(1,3) 4(3,si ) 1(2,si ) 2
Tabla 19: Capacidades de los arcos Maximum Flow
12 Problema extrado del texto gua Winston 4 ed. captulo 8, ejemplo 3.
so 1
3
si2
-
63
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 decada 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
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
so 1
3
si2
X0
-
64
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
{
-
65
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.
Nodo 1 2 3 4 512345
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 5,1/:CAP,FLOW; ENDSETS
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)
-
66
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.
-
67
Al resolver la programacin lineal se desplegar por pantalla el siguiente reporte: Global optimal solution found at iteration: 4 Objective value: 3.000000 Variable Value Reduced Cost CAP( 1, 2) 2.000000 0.000000 CAP( 1, 3) 3.000000 0.000000 CAP( 2, 3) 3.000000 0.000000 CAP( 2, 4) 4.000000 0.000000 CAP( 3, 5) 2.000000 0.000000 CAP( 4, 5) 1.000000 0.000000 CAP( 5, 1) 1000.000 0.000000 FLOW( 1, 2) 1.000000 0.000000 FLOW( 1, 3) 2.000000 0.000000 FLOW( 2, 3) 0.000000 0.000000 FLOW( 2, 4) 1.000000 0.000000 FLOW( 3, 5) 2.000000 0.000000 FLOW( 4, 5) 1.000000 0.000000 FLOW( 5, 1) 3.000000 0.000000 La solucin ptima13 es Z = 3, XSO,1 = 1, XSO,2 = 2, X1,2 = 0, X1,3 = 1, X2,SI = 2,
X3,SI = 1, XO = 3.
13 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.
so 1
3
si 2
1
1
1
2 3
0 2
-
68
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.
O
D
EC
B
A
T
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.
Capacidad
O A 5O B 7O C 4A B 1A D 3B C 2B D 4B E 5C E 4D T 9E D 1E T 6
Arco
Tabla 21: Capacidades de los arcos Seervada Park Problem
14 Problema extrado de texto gua Hiller 8 ed. captulo 9.
-
69
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.
O
D
EC
B
A
T
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
X0
-
70
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)
-
71
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.
-
72
Y al resolver este modelo de redes en Lingo se entrega el siguiente reporte de solucin. Global optimal solution found at iteration: 8 Objective value: