manual de usuario software lingo 8.0

91

Click here to load reader

Upload: diego-salinas-flores

Post on 09-Nov-2015

139 views

Category:

Documents


33 download

DESCRIPTION

Lingo

TRANSCRIPT

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