Manual de lingo con problemas resueltos
Página 17
Manual de lingo con problemas resueltosPágina 81
Contenido
1. LENGUAJE DE MODELADO LINGO 4
1.1 SINTAXIS DE LINGO 6
1.2 SECCION DE CONJUNTOS 6
2. OPERADORES LOGICOS 11
2.1 COMANDOS DE LOS MENÚS Y FUNCIONES DE LINGO 11
2.1.1 MENÚ FILE: 11
2.1.2 MENÚ EDIT: 12
2.1.3 MENU LINGO: 13
2.2 FUNCIONES: 14
2.2.1 OPERADORES ESTANDAR 14
2.2.2 FUNCIONES DE IMPORTACIÓN DE ARCHIVOS: 14
2.2.3 FUNCIONES DE FINANZAS: 14
2.2.4 FUNCIONES MATEMÁTICAS: 14
2.2.5 FUNCIONES DE ITERACIONES EN CONJUNTOS: 15
2.2.6 FUNCIONES DEL DOMINIO DE LA VARIABLE: 15
2.2.7 FUNCIONES DE PROBABILIDAD: 15
3 PROBLEMAS RESUELTOS CON LINGO 16
3.1 Usando 1 sub. Índice 16
3.1.1 EJEMPLO DE MEZCLA 16
3.1.2 EJEMPLO DE DIETAS 17
3.2 USANDO 2 SUB. INDICE 20
3.2.1 PROBLEMA 1 usando 2 sub índices 20
3.3 USANDO 3 SUB. INDICE 22
3.3.1 PROBLEMA 1 de tres sub índices 22
3.4 USANDO 4 SUB. INDICE 23
3.4.1 PROBLEMA DE TRANSPORTE usando 4 sub índices 23
3.5 PROBLEMAS DE TRANSPORTE 28
3.6 PROBLEMA DE INVERSIÓN 29
3.7 PLANEACIÓN DE PRODUCCIÓN 30
3.8 PLANEAMIENTO FINANCIERO 31
3.8.1 problema de planeamiento financiero 1 31
3.8.2 PROBLEMA DE PLANEAMIENTO FINANCIERO 2 32
3.8.3 PROBLEMA DE PLANEAMIENTO FINANCIERO 3 33
3.8.4 PROBLEMA DE PLANEAMIENTO FINANCIERO 4 35
4 PROBLEMAS DE PROGRAMACIÓN ENTERA CON LINGO 36
4.1 Problema 1 de programación entera 37
4.2 Problema 2 de programación entera 39
4.3 Problema 3 de programación entera 41
4.4 Problema 4 de programación entera 41
4.5 Problema 5 de programación entera 44
4.6 Problema 6 de programación entera 46
4.7 Problema 7 de programación entera 48
4.8 Problema 8 de programación entera 49
5. PROBLEMA APLICADO A LA ASIGNACIÓN IMPORTANDO DE EXCEL 52
5.1 PROBLEMA 1 52
5.1.1 INTERPRETACIÓN E IMPLENTACIÓN EN LINGO: 54
5.1.2 REPORTE DE LA SOLUCIÓN EXPORTANDO DATOS A EXCEL: 59
5.2 MODELO DE ASIGNACIÓN DE PRESUPUESTO 60
5.3 PROGRAMA EN LINGO 64
5.3.1 REPORTE DE LA SOLUCIÓN EXPORTANDO DATOS A EXCEL : 64
5.4 Modelo de Asignación de Proyecto 65
6. FORMULACIÓN DEL MODELO 65
6.1 DEFINICIÓN DE VARIABLES: 65
6.2 FUNCIÓN OBJETIVO: 66
6.3 RESTRICCIONES: 66
6.3.1 RESTRICCIÓN DE USO MÍNIMO DE PRESUPUESTO POR SUSCURSAL 66
6.3.2 RESTRICCIÓN DE USO MÁXIMO DE PRESUPÚESTO POR SUCURSAL 66
6.3.3 RESTRICCIÓN DE INVERSIÓN MÁXIMA POR PROYECTO EN CADA SUCURSAL 66
6.3.4 RESTRICCION DE PRESUPUESTO DISPONOBLE 66
6.4 Programación Lineal con 4 variables (Excel) 69
7 PROBLEMA 1 EN LINGO EXPORTANDO DATOS EN ACCESS 76
INTRODUCCIÓN
En la actualidad nuestra vida, el entorno está lleno de problemas que nos aquejan; problemas además que son un obstáculo para el desarrollo de las empresas específicamente, al momento de realizar cálculos que nos garanticen que el ritmo de producción que viene llevando dichas empresas se está desarrollando de la mejor manera. Es necesario para cumplir nuestro propósito de desarrollar de la mejor manera la compañía o negocio al fin, realizar cálculos que con sus respectivas restricciones nos lleven a obtener las cantidades ideales o aptas para el buen rendimiento de dichas entidades.
Cuando se busca que las empresas alcancen el máximo de ganancias o beneficios, se hace uso del concepto de recursos, el cual interviene de gran manera en la producción. Es así entonces que el fin de todo es buscar el máximo beneficio posible, y para esto hacemos uso de software's que nos permitan obtener dichas cantidades que se utilizará para la producción.
En el trabajo mostrado a continuación, se muestra una práctica de laboratorio correspondiente a contenidos de programación matemática. Se desarrollan ejemplos, tanto de forma lineal, no lineal, de transportes, enteras, etc., así como la solución de los mismos como el análisis de sensibilidad, el cual se realizó son el software LINGO.
LINGO es una herramienta matemática que resuelve una amplia gama de problemas de optimización, lineales, no lineales y enteros, utilizando un lenguaje sencillo, lo que lo convierte en un asistente ideal en la docencia. Junto con LINDO forma parte del paquete SOLVER SUITE (manual de usuario, 1996).
Podemos decir que el objetivo de este trabajo es mostrar las posibilidades del software en la docencia de la optimización matemática y no de servir de manual de introducción al manejo de LINGO, se incluyen los conocimientos elementales necesarios para empezar a trabajar con este paquete.
LENGUAJE DE MODELADO LINGO
¿Qué es LINGO?
LINGO es una herramienta simple para utilizar la potencialidad de la optimización lineal y no lineal para formular problemas muy grandes de una manera concisa, resolverlos y analizar su solución. La optimización le ayuda a encontrar la respuesta que representa la mejor solución; obtiene la mayor utilidad, respuesta o felicidad; o logra el menor costo, desperdicio o disconformidad. A menudo estos problemas significan hacer el uso más eficiente de sus recursos- incluyendo dinero, tiempo, maquinaria, personal, inventario y mucho más. Los problemas de optimización se clasifican a menudo como lineales y no lineales, dependiendo si las relaciones entre las variables son o no lineales.
LINGO es un lenguaje de modelado matemático diseñado para formular y resolver problemas de programación lineal, programación entera y programación no lineal.
¿Cómo Instalar LINGO?
Esta sección discute cómo instalar LINGO en la plataforma Windows. Para instalar LINGO en plataformas aparte de Windows, se refieren a las instrucciones de instalación incluidas con su software.
Instalar el software de LINGO es directo. A LINGO de disposición para Windows, ponga su CD en la guía apropiada y corrida la instalación programa SETUP contenido en la carpeta de LINGO. El programa de instalación de LINGO le abrirá y guiará por los pasos requeridos para instalar LINGO en su disco duro.
Nota: Si existe una versión previa de LINGO instalada en su máquina, entonces usted puede necesitar. Desinstala lo antes que puede instalar la nueva copia de LINGO. Para desinstalar la copia existente de lingos, haga clic en el botón Start de Windows, escoja Panel de Control, entonces haga clic dos veces sobre en el Add o quite programe icono. Deba entonces ser capaz de escoger LINGO y tener la versión vieja quitada de su sistema.
La mayor parte de las copias de LINGO vienen con sus preinstaladas licencias. Sin embargo, ciertas versiones de LINGO requieren usted para entrar una llave de licencia. Si su versión de LINGO requiere una licencia teclee, estará presente con la caja de diálogos siguiente cuando usted empieza LINGO:
Su llave de licencia puede haber sido incluido en un correo electrónico envié a usted cuando usted ordenó su software. La llave de licencia es una cuerda de letras, símbolos y números, separado en grupos de cuatro por los guiones (por ejempo,¿r82m-XCW2-dZu?-%72¿S-fD?S-Wp@ ). Cuidadosamente entre la llave de licencia en el campo de edición, incluyendo guiones. Las llaves de licencia son el caso sensitivo, así que debe estar seguro de preservar el caso de las letras individuales al entrar su llave. Haga clic sobre el botón OK y, asumiendo la llave es sido entrada correctamente, LINGO empezará entonces. En lo sucesivo, será capaz de correr LINGO directamente sin entrar la llave.
Nota: Si recibió su licencia teclee por correo electrónico, entonces
tiene la opción de cortante-y-pegándolo en la caja de diálogos
clave de licencia. Corte la llave del correo electrónico que contiene
lo con el Ctrl+C llave, entonces escoja el campo clave en caja
de diálogos de LINGO y pegue la llave con la llave de Ctrl+V.
SINTAXIS DE LINGO
La sintaxis que se utiliza en este programa es muy sencilla. Para el nombre de las Variables y otros identificadores se establece que pueden tener 32 caracteres como Máximo, Deben comenzar con una letra seguido de letras, dígitos o _. LINGO no distingue entre mayúsculas y minúsculas.
Con respecto a las sentencias:
Todas las sentencias deben terminar en un punto y coma.
Para darle un nombre a la función objetivo o a las restricciones, estos se deben colocar entre corchetes.
Para declarar la función objetivo debemos colocar las palabras reservadas MAX o MIN, (aparecerán resaltadas en azul) seguidas del signo = .
Los comentarios deben comenzar con un signo"!" , los cuales aparecen resaltados en verde. Al igual que las sentencias los comentarios finalizan con un punto y coma.
Una formulación en LINGO, tiene tres secciones:
Sección de conjuntos, SETS, que especifica los conjuntos y sus atributos
Sección de datos, DATA, que proporciona los datos a usar o indica donde obtenerlos
Sección del modelo, MODEL, lugar donde se describe el modelo matemático.
SECCION DE CONJUNTOS
Cada conjunto tiene la sintaxis siguiente:
NOMBRE/ LOS MIEMBROS/: LOS ATRIBUTOS;
SETS:
FABRICAS /F1, F2/: CAPACIDAD;
CENTROS /C1, C2, C3/: DEMANDA;
RUTAS (FÁBRICAS, CENTROS): C, X;
ENDSETS
Los conjuntos, FABRICAS y CENTROS se denominan conjuntos primitivos y el último se denomina conjunto derivado, donde C y X representan, respectivamente, los costos unitarios de transporte y cantidad transportada de las fabricas a los centros.
SECCION DE DATOS
Los valores de los atributos de los elementos de los conjuntos, tienen la sintaxis siguiente:
DATA:
CAPACIDAD = 30, 20;
DEMANDA = 10, 25, 15;
C = 2, 4, 6,
7, 10, 1;
ENDDATA
SECCION DEL MODELO
Para presentar el modelo se utiliza dos funciones @SUM y @FOR.
@SUM calcula la suma de una expresión sobre todos los miembros del conjunto.
La forma general es:
@SUM (set: expresión)
Suma la expresión que sigue a los dos puntos.
Por ejemplo:
@SUM (RUTAS: C*X)
Suma la expresión que sigue a los dos puntos que corresponde al producto del costo unitario de transporte por la cantidad transportada de cada origen a cada destino considerado.
La segunda función es @FOR, esta función sirve para generar restricciones sobre los miembros de un conjunto. La forma general es:
@FOR (set: restricción)
Por ejemplo:
@FOR (CENTROS (J): @SUM (FABRICAS(I):X(I,J))<=CAPACIDAD(I));
Indica que se genere la restricción que sigue a los dos puntos para cada miembro del conjunto que les precede. Cada elemento del conjunto CENTROS (J) para J = 1, 2,3 se genera las restricciones siguientes:
J = 1: X11 + X21 >= 10
J = 2: X12 + X22 >= 25
J = 3 X13 + X23 >= 15
La formulación completa es como sigue:
MODEL:
! 2 FABRICAS, 3 CENTROS, problema de transporte;
SETS:
FABRICAS /1..2/: CAPACIDAD;
CENTROS /1..3/ : DEMANDA;
RUTAS (FÁBRICAS, CENTROS): C, X;
ENDSETS
DATA:
CAPACIDAD = 30,20;
DEMANDA = 10, 25,15;
C = 2, 4, 6,
7,10, 1;
ENDDATA
! LA FUNCION OBJETIVO;
MIN = @SUM (RUTAS: C*X);
! RESTRICCIONES DE LA DEMANDA;
@FOR (CENTROS (J): @SUM (FABRICAS (I): X (I, J)) >= DEMANDA (J));
! RESTRICCIONES DE LA OFERTA;
@FOR (FABRICAS (I): @SUM (CENTROS (J): X (I, J)) <= CAPACIDAD (I));
END
Para presentar el modelo algebraico se hace clic en la ficha LINGO, Generate, Algebraic, Generate y se tiene como resultado lo siguiente:
MODEL:
[_1] MIN= 2 * X_1_1 + 4 * X_1_2 + 6 * X_1_3 + 7 * X_2_1 + 10 * X_2_2 + X_2_3;
[_2] X_1_1 + X_2_1 >= 10;
[_3] X_1_2 + X_2_2 >= 25;
[_4] X_1_3 + X_2_3 >= 15;
[_5] X_1_1 + X_1_2 + X_1_3 <= 30;
[_6] X_2_1 + X_2_2 + X_2_3 <= 20;
END
Se puede omitir el paso anterior pasando a la solución del modelo haciendo clic en LINGO, Solve obteniendo el siguiente resultado:
Objective value: 160.0000
Variable Value Reduced Cost
CAPACIDAD( F1) 30.00000 0.0000000
CAPACIDAD ( F2) 20.00000 0.0000000
DEMANDA( C1) 10.00000 0.0000000
DEMANDA( C2) 25.00000 0.0000000
DEMANDA( C3) 15.00000 0.0000000
C( F1, C1) 2.000000 0.0000000
C( F1, C2) 4.000000 0.0000000
C( F1, C3) 6.000000 0.0000000
C( F2, C1) 7.000000 0.0000000
C( F2, C2) 10.00000 0.0000000
C( F2, C3) 1.000000 0.0000000
X( F1, C1) 5.000000 0.0000000
X( F1, C2) 25.00000 0.0000000
X( F1, C3) 0.000000 10.000000
X( F2, C1) 5.000000 0.0000000
X( F2, C2) 0.000000 1.0000000
X( F2, C3) 15.00000 0.0000000
USO DE FUNCIONES DE DOMINIO DE VARIABLES
A menos que se especifique lo contrario, las variables en un modelo de LINGO son continuas y no negativas. Más específicamente las variables pueden asumir cualquier valor real desde cero hasta más infinito. En muchos casos este dominio para una variable puede ser inapropiado. Por ejemplo puede necesitarse que una variable asuma valores negativos, o solamente valores enteros. LINGO está provisto de cuatro funciones de dominio de variables que permiten sobrepasar el dominio por omisión de una variable:
@GIN
Limita la variable sólo a valores enteros
@BIN
Hace una variable binaria (0 ó 1)
@FREE
Permite que la variable tome cualquier valor real (positivo o negativo)
@BND
Limita la variable para que se ajuste a un rango finito
Ejemplos de uso de variables enteras:
@GIN(X); Transforma la variable escalar X en entera
@GIN (PRODUCE (5)); Transforma la variable PRODUCE (5) en entera
@FOR (DAYS(I): @GIN(START(I))); Transforma todas las variables del atributo START
Ejemplos de uso de variables binarias:
@BIN(X); Transforma la variable escalar X en binaria
@BIN (INCLUDE (4)); Transforma la variable INCLUDE (4) en binaria
@FOR (ITEMS:@BIN(INCLUDE));Transforma todas las variables del atributo INCLUDE en binarias
Ejemplos de uso de variables libres:
@FREE(X); Transforma la variable escalar X en libre
@FREEE (QUANTITY (4)); Transforma la variable QUANTITY (4) en libre
@FOR (ITEMS:@FREE(QUANTITY));Transforma todas las variables del atributo QUANTITY en libres
Ejemplos de uso de variables con límites:
@BND (-1, X, 1): Restringe la variable X al intervalo [-1, 1]
@BND (100, QUANTITY (4), 200): Limita QUANTITY (4) entre 100 y 200
@FOR (ITEMS: @BND (10, Q, 20)): Fija los límites de todas las variables del atributo Q en 10 y 20
@FOR (ITEMS: @BND (QL, Q, QU)): Fija los límites de todas las variables del atributo Q en QL y QU (A QL y QU deben habérsele asignado valores en la sección de datos)
OPERADORES LOGICOS
LINGO tiene nueve operadores lógicos:
NOT (no), EQ (igual), NE (no igual), GT (mayor que), GE (mayor igual), LT (menor igual), LE (menor igual), AND (y) y OR (o) que se utilizan para comparar valores, la forma de usar es: #operador#.
Los elementos del LINGO requieren un objetivo, una o más variables y una o más restricciones. Las instrucciones del LINGO terminan con: (punto y coma).
COMANDOS DE LOS MENÚS Y FUNCIONES DE LINGO
El menú principal comprende 5 submenús acomodados en la parte superior de la pantalla en los que se listan diversos comandos.
2.1.1 MENÚ FILE:
Los comandos del menú File (archivo) le permiten manejar sus archivos de datos en LINGO de distintas maneras. Usted puede usar este menú para abrir, cerrar, guardar e imprimir archivos, así como para ejecutar varias tareas únicas con LINGO.
COMANDOS FILE:
NEW F2: Crea una nueva ventana para ingresar datos.
OPEN F3: Abre un archivo existente. Mediante los cuadros de dialogo usted puede seleccionar entre varios tipos de archivos y ubicaciones.
SAVE F4: Guarda la ventana activa. Usted puede guardar los datos de entrada (un modelo), una ventana de informes (ventana de informes) o una ventana de comandos.
SAVE AS F5 : Guarda la ventana activa con un nombre de archivo especifico. Es útil para volver a asignar un nombre a un archivo revisado y conservar intacto el archivo original.
CLOSE F6: Cierra la ventana activa. Si la ventana contiene nuevos datos, entonces se le preguntará si desea guardar los cambios.
PRINT F7: Envía la ventana activa a su impresora.
PRINTER SETUP F8: Selecciona la impresora y varias opciones para el formato de impresión.
Log output F9: Envía toda la actividad posterior de la pantalla que normalmente se enviaría a la ventana Reports, a un archivo de texto. Si usted especifica una ubicación log file, aparece una marca en el menú file en la línea de Log Output. Para inactivar Log Output seleccione simplemente el comando de nuevo.
Take Commands: Toma un batch file de LINGO con comandos y texto del modelo para operación automatizada. Se puede poner un modelo en la memoria, resolverlo y la solución es colocada en la ventana Reports y guardada en un archivo. Si usted usa el comando BATCH antes del inicio del texto del modelo, el modelo y los comandos contenidos en el archivo, así como la solución, se verán en la ventana Reports
Import LINDO file F12: Abre un archivo que contiene un modelo de Lindo en el formato TAKE de Lindo y traduce el modelo en un formato que Lingo acepta.
Exit F10: Cierra LINGO.
2.1.2 MENÚ EDIT:
Los comandos del menú edit permiten a usted ejecutar tareas básicas de edición comunes a la mayoría de aplicaciones para Windows, así como efectuar varias tareas que son exclusivas para LINGO.
COMANDOS EDIT:
Undo ctrl. + Z: Deshace la última acción.
Cut ctrl. + X: Corta el texto seleccionado en el portapapeles para pegarlo.
Copy ctrl. + C: Copia el texto seleccionado en el portapapeles para pegarlo.
Paste ctrl. + V: Inserta o pega el contenido del portapapeles en el punto de inserción.
Clear delete : Borra el texto seleccionado pero no lo coloca en el portapapeles.
Find/ Replace ctrl. + F: Busca la ventana activa para encontrar el texto seleccionado y reemplazarlo con el texto introducido en el cuadro "Replace with" (Sustituya por).
G oto line ctrl. + T: Usted puede mover el cursor a cualquier linea especificada de la ventana activa.
Match Paréntesis ctrl. + P: Encuentra el paréntesis cerrado que corresponde al paréntesis abierto seleccionado.
Paste Function: Pega las funciones incorporadas EN LINGO en el punto de inserción actual. Después de seleccionar este comando aparece otro submenu con las distintas categorías de las funciones.
Select All ctrl. +A: Selecciona toda la ventana activa para cortarla o copiarla.
Cose New Font: Selecciona una nueva fuente para el texto en la ventana activa.
2.1.3 MENU LINGO:
Los comandos del menú LINGO se usan después de que usted ya introdujo datos y están listos para obtener una solución.
COMANDOS LINGO:
Solve ctrl. + S: Envía el modelo que se encuentra en la ventana activa al Solver de LINGO.
Solution ctrl. + O: Abre el cuadro de dialogo Solution Report Options (opciones para mostrar la solución), el cual permite a usted especificar como quiere que aparezca su solución.
Range ctrl. + R: Despliega un informe de intervalos, el cual le muestra dentro de que valores usted puede cambiar valores coeficientes sin modificar los valores óptimos.
Look ctrl.+ L: Despliega todo el modelo o las líneas seleccionadas.
Generate ctrl. + S: Crea otra versión del modelo actual en formato algebraico de LINDO o MPS. Se puede usar para enumerar renglones y desplegar el modelo en un formato más fácil de leer. El comando GEN proporciona una capacidad similar desde la ventana de comandos.
Export to Spreadsheet ctrl. + E: Exporta valores de variables seleccionadas a intervalos nombrados en una hoja de calculo.
Primero se tiene que crear una hoja de cálculo con intervalos dimensionados para que se puedan acomodar en ellos los valores exportados.
Los intervalos tienen que contener números. Al seleccionar este comando se abrirá un cuadro de dialogo que pide la plantilla y las hojas de trabajo (nombres de archivo de la hoja de calculo), variables por exportar y el intervalo para el cual se exportaran los valores. Las variables y el intervalo se introducen por pares y se añaden a la lista de pares de variable e intervalo dando un clic en el botón de agregar.
FUNCIONES:
LINGO tiene siete funciones principales: operador estándar, importación de archivos, finanzas, matemáticas, iteraciones en conjuntos, dominio de variable y probabilidad y una variedad de otras funciones. La mayoría de estas funciones esta disponible por medio de los comandos del menú.
2.2.1 OPERADORES ESTANDAR
Entre estos operadores se encuentran los aritméticos (^,*,/,+ y - ) , operadores lógicos (#EQ# , #NE# , #GT# , #GE# , #LT# y #L3#) para determinar la calidad del conjunto y operadores de igualdad-desigualdad ( <;=;>; <= ; y >=) para especificar si el primer miembro de una expresión debe ser menor que, igual a , o mayor que el segundo miembro.
2.2.2 FUNCIONES DE IMPORTACIÓN DE ARCHIVOS:
Estas funciones le permiten importar el texto y datos de fuentes externas. La función @FILE le permite importar el texto o datos desde un archivo en ASCIL, y la función @IMPORT le permite importar datos solo de una hoja de calculo.
2.2.3 FUNCIONES DE FINANZAS:
Entre estas funciones están @FPA (I, N), la cual da el valor presente de una anualidad y la función @FPL (I, N), la cual regresa el valor presente de un valor global de N periodos de $1 a partir de ahora si la tasa de interés es I por periodo. I no es un porcentaje, sino un número no negativo que representa la tasa de interés.
2.2.4 FUNCIONES MATEMÁTICAS:
Comprenden las funciones generales y trigonométricas siguientes: @ABS(X), @COS(X), @EXP(X), @LGM (X), @LOG(X), @SIGN(X), @SIN(X), @SMAX (list), @SMIN (list), @TAN(X). Se pueden utilizar combinaciones de las tres funciones trigonométricas básicas (seno, coseno y tangente) para obtener otras funciones trigonométricas.
2.2.5 FUNCIONES DE ITERACIONES EN CONJUNTOS:
Comprenden @FOR (set_name: constraint_expression), @MAX (set name: expression), @MIN (set_name:expression) y @SUM (set_name:expression). Estas funciones operan sobre un conjunto completo y producen un solo resultado en todos los casos, excepto con la función @FOR, la cual genera restricciones independientemente de cada elemento del conjunto.
2.2.6 FUNCIONES DEL DOMINIO DE LA VARIABLE:
Estas funciones fijan restricciones adicionales sobre variables y atributos. Comprenden las siguientes: @BND (L, X, U), @BIN(X), @FREE(X) y @GIN(X).
2.2.7 FUNCIONES DE PROBABILIDAD:
LINGO posee capacidades estadísticas comunes con sus funciones de probabilidad: @PSN(X),@PSL (X), @PPS (A,X), @PPL( A,X), @PBN(P,N,X), @PHG(POP,G,N,X), @PEL(A,X), @PEB(A,X), PFS(A,X,C),
@PFD(N, D, X), @PCX(N, X), @PTD (N, X) y @RAND (X).
PROBLEMAS RESUELTOS CON LINGO
Usando 1 sub. Índice
3.1.1 EJEMPLO DE MEZCLA
Una compañía Fabrica tres productos de caucho: AIRTEX (material esponjoso), EXTENDEX (material elástico) y RESISTEX (material rígido). Los tres productos requieren los mismos tres polímeros químicos y una base. La cantidad de cada ingrediente usado por libra del producto final se muestra en la siguiente tabla.
Producto
Ingrediente (OZ/LB de producto)
Polímero A
Polímero B
Polímero C
Base
AIRTEX
4
2
4
6
EXTENDEX
3
2
2
9
RESITEX
6
3
5
2
Inventario
500
425
650
1100
La compañía tiene el compromiso de producir ala menos 1000 libras de airtex,500 libras de extendex y 400 libras de resistex para la próxima semana pero la gerencia de la compañía sabe que puede vender mas de cada uno de los tres productos .los inventarios actuales de los ingredientes son 500 libras del polímero A , 425 libras del polímero B,650 libras el polímero C Y 1100 libras de la base . Cada libra de airtex produce a la compañía una ganancia de $ 7, cada libra de extendex una ganancia de $7 y cada libra de resistex una ganancia de $6.como gerente del departamento de producción, usted necesita determinar el plan de producción optimo para esta semana.
Solución:
Ingredientes (oz/lb. de producto)
Producto
Polimero A
Polimero B
Polimero C
base
compromiso
ganancia
AIRTEX
4
2
4
6
1000
7
EXTENDX
3
2
2
9
500
7
RESISTX
6
3
5
2
400
6
inventario
500
425
650
1100
Sea:
Xi: la cantidad de ingredientes del PRODUCTO i (i=airtex,extendex,resistex) que se puede usar.
FUNCION OBJETIVO: ;donde ganancia es la utilidad ya sea del Producto airtex, extendex, resistex.
Entonces: MAX Z = 7*X1 + 7*X2 + 6*X3
SUJETO A:
Para i=1-----X1 >=1000
Para i=2-----X2 >=500
Para i=3-----X3 >=400
, donde requerimiento (i , j) es la cantidad de producto de cada tipo de ingrediente.
Para J= 1------ 4X1 + 3X2 + 6X3 <= 500*16;
Para J= 2------ 2X1 + 2X2 + 3X3 <= 425*16;
Para J= 3------ 4X1 + 2X2 + 5X3 <= 650*16;
Para J= 4------ 6X1 + 9X2 + 2X3 <= 1100*16;
SETS:
PRODUCTO/1..3/:NIVEL,COMPROMISO,GANANCIA;
INGREDIENTE/A..D/:INVENTARIO;
PROIN(PRODUCTO, INGREDIENTE):X;
ENDSETS
DATA:
COMPROMISO=1000,500,400;
GANANCIA=7,7,6;
INVENTARIO =500,425,650,1100;
X=4,2,4,6,
3,2,2,9,
6,3,5,2;
ENDDATA
!FUNCION OBJETIVO MAXIMIZAR LA UTILIDAD;
MAX=@SUM(PRODUCTO:GANANCIA*NIVEL);
!RESTRICCION DEL INVENTARIO;
@FOR(INGREDIENTE(I):@SUM(PRODUCTO(P):X(P,I)*NIVEL(P))<=INVENTARIO(I)*16);
!RESTRICCION DEL COMPROMISO;
@FOR(PRODUCTO:NIVEL>=COMPROMISO);
END
3.1.2 EJEMPLO DE DIETAS
El departamento de nutrición de u hospital prepara 30 menues de cena, uno para cada día del mes. Una comida consiste en espagueti, pavo, papas en escalope y pastel de manzanas. Como director del departamento de nutrición, usted ha determinado que esta comida debe proporcionar 63000 miligramos de proteínas, 10 miligramos de hierro, 15 miligramos de niacina, 1 miligramo de tiamina y 50 miligramos de vitamina C .cada 100 gramos de esta comida proporciona la cantidad de cada nutriente y grasas indicadas en la siguiente tabla:
NUTRIENTE(mg / 100g)
PROTEINA
HIERRO
TIACINA
TIAMINA
VITNA C
GRASA
ESPAGUETI
5000
1.1
1.4
0.18
0.0
5000
PAVO
29300
1.8
5.4
0.06
0.0
5000
PAPAS
5300
0.5
0.9
0.06
10
7900
ESPINACAS
3000
2.2
0.5
0.07
28
300
PASTEL
4000
1.2
0.60
0.15
3.0
14300
SOLUCION: hacemos nuestra tabla
POTAJE
NUTRIENTE(mg/100g)
PROTEINA
HIERRO
TIACINA
TIAMINA
VITNA C
GRASA
MAXIMO
ESPAGUETI
5000
1.1
1.4
0.18
0
5000
300
PAVO
29300
1.8
5.4
0.06
0
5000
300
PAPAS
5300
0.5
0.9
0.06
10
7900
200
ESPINACAS
3000
2.2
0.5
0.07
28
300
100
PASTEL
4000
1.2
0.6
0.15
3
14300
100
MINIMO
63000
10
15
1
50
0
Sea Xi: cantidad de nutriente de tipo (i=1, 2, 3, 4, 5,6) i=1---espagueti
i=2---pavo
i=3---papas
i=4---espinacas
i=5---pastel
i=6---grasa
Función objetivo:
Min Z=X6;
SUJETO A:
Restricción de la cantidad de grasa total que debe haber :
CGi es la cantidad de grasa ya sea en Pavo , papas ,espinacas ,pastel, espagueti.
Por lo tanto: X6 – X1*5000 – 5000*X2 – 7900*X3 – 3000*X4 – 14300*X5=0
Restricción de la cantidad de nutriente por cada 100 mg que proporciona:
MAXIMO i es la cantidad máxima de cada potaje ya sea de Espagueti, pavo, papas, espinacas y pastel
Por lo tanto: Para i=1 -- X1<=300/100
Para i=2 -- X2<=300/100
Para i=3 -- X3<=200/100
Para i=4 -- X4<=100/100
Para i=5 -- X5<=100/100
Restricción de la cantidad de nutriente por pataje que debe haber como mínimo:
, donde NUTRIENTEj,i . j ,es la cantidad de nutriente ya Sea de proteína, hierro, tiacina, tiamina, vitna C ,grasa por Cada potaje i ya sea :Espagueti, pavo, papas, espinacas, pastel.
Y MINIMO j es la cantidad de potaje como máximo que debe existir.
Por lo tanto:
Para i=1,2,3,4,5 Y j=1
X1*5000 + X2*29300 + X3*5300 + X4*3000 + X5*4000 >=63000
Para i=1,2,3,4,5 Y j=2
X1*1.1 + X2*1.8 + X3*0.5 + X4*2.2 + X5*1.2 >=10
Para i=1,2,3,4,5 Y j=3
X1*1.4 + X2*5.4 + X3*0.9 + X4*0.5 + X5*0.6 >=15
Para i=1,2,3,4,5 Y j=4
X1*0.18 + X2*0.06+ X3*0.06 + X4*0.07 + X5* 0.15 >=1
Para i=1,2,3,4,5 Y j=5
X1*5000 + X 2*5000 + X3*7900 + X4*300 + X5*14300 >=0
SETS:
POTAJE/1..5/:NIVEL,MAXIMO;
NUTRIENTE/1..6/:MINIMO;
PONU(POTAJE,NUTRIENTE):REQ;
ENDSETS
DATA:
MAXIMO=300,300,200,100,100;
MINIMO=63000,10,15,1,50,0;
REQ=5000,1.1,1.4,0.18,0,5000,
29300,1.8,5.4,0.06,0,5000,
5300,0.5,0.9,0.06,10,7900,
3000,2.2,0.5,0.07,28,300,
4000,1.2,0.6,0.15,3,14300;
ENDDATA
MIN=GRASA;
GRASA=@SUM(POTAJE(I):REQ(I,6)*NIVEL(I));
@FOR(POTAJE(I):NIVEL(I)<=MAXIMO(I)/100);
@FOR(NUTRIENTE(J):@SUM(POTAJE(I):REQ(I,J)*NIVEL(I))>=MINIMO(J));
END
HACIENDO CORRER EL PROGRAMA CON LINGO 10
Objective value: 54800.00
Total solver iterations: 3
Variable Value Reduced Cost
NIVEL( ESPAGUETI) 3.000000 0.000000
NIVEL( PAVO) 2.833333 0.000000
NIVEL( PAPAS) 2.000000 0.000000
NIVEL( ESPINACAS) 1.000000 0.000000
NIVEL( PASTEL) 0.6666667 0.000000
A ASI SUCESIVAMENTE……….
USANDO 2 SUB. INDICE
3.2.1 PROBLEMA 1 usando 2 sub índices
Una empresa que fabrica un producto único, tiene 3 fabricas y 4 clientes. Las 3 fabricas producen 3 000, 5 000 y 5 000 unidades respectivamente, durante el siguiente periodo. La empresa se comprometió a vender 4 000 unidades al cliente 1; 3 000 unidades al cliente 2; y, por lo menos, 3 000 unidades al cliente 3. Los clientes 3 y 4 quieren comprar la mayor cantidad posible de las unidades restantes. En la siguiente tabla se da la ganancia asociada con el envío de una unidad desde la fabrica i hacia el cliente j.
DESDE
AL CLIENTE
1 2 3 4
(dólares) (dólares) (dólares) (dólares)
Fabrica 1
Fabrica 2
Fabrica 3
65 63 62 64
68 67 65 62
63 60 59 60
Plantear un problema de transporte balanceado que se pueda utilizar para maximizar la ganancia de la compañía.
Solución:
UNID ij = la cantidad enviada de la fabrica i al cliente j (i=1,2,3 j=1,2,3,4)
La función objetivo seria:
MAX 65 UNID( FAB1, CEN1) + 63 UNID( FAB1, CEN2) + 62 UNID( FAB1, CEN3) + 64 UNID( FAB1, CEN4)+ 68 UNID( FAB2, CEN1) + 67 UNID( FAB2, CEN2) + 65 UNID( FAB2, CEN3) + 62 UNID( FAB2, CEN4)+ 63 UNID( FAB3, CEN1) + 60 UNID( FAB3, CEN2) + 59 UNID( FAB3, CEN3) + 60 UNID( FAB3, CEN4)
SUBJECT TO
2] UNID( FAB1, CEN1) + UNID( FAB2, CEN1) + UNID( FAB3, CEN1) >= 4000
3] UNID( FAB1, CEN2) + UNID( FAB2, CEN2) + UNID( FAB3, CEN2) >= 3000
4] UNID( FAB1, CEN3) + UNID( FAB2, CEN3) + UNID( FAB3, CEN3) >= 3000
5] UNID( FAB1, CEN4) + UNID( FAB2, CEN4) + UNID( FAB3, CEN4) >= 6000
6] UNID( FAB1, CEN1) + UNID( FAB1, CEN2) + UNID( FAB1, CEN3) + UNID( FAB1, CEN4)
<= 3000
7] UNID( FAB2, CEN1) + UNID( FAB2, CEN2) + UNID( FAB2, CEN3) + UNID( FAB2, CEN4)
<= 5000
8] UNID( FAB3, CEN1) + UNID( FAB3, CEN2) + UNID( FAB3, CEN3) + UNID( FAB3, CEN4)
<= 5000
END
Mostrando la solución en LINGO:
SETS:
FABR/FAB1,FAB2,FAB3/: CAPAC;
CLIEN/CEN1,CEN2,CEN3,CEN4/:DEMAN;
VIAS(FABR,CLIEN):GANAN,UNID;
ENDSETS
DATA:
CAPAC=3000 5000 5000;
DEMAN=4000 3000 3000 6000;
GANAN=65,63,62,64,
68,67,65,62,
63,60,59,60;
ENDDATA
MAX UNID=@SUM(VIAS:GANAN*UNID);
@FOR(CLIEN(J):@SUM(FABR(I):UNID(I,J))>=DEMAN(J));
@FOR(FABR(I):@SUM(CLIEN(J):UNID(I,J))<=CAPAC(I));
END
Variable Value Reduced Cost
UNID( FAB1, CEN1) 0.0000000 3.0000000
UNID( FAB1, CEN2) 0.0000000 1.0000000
UNID( FAB1, CEN3) 0.0000000 2.0000000
UNID( FAB1, CEN4) 3000.000 0.0000000
UNID( FAB2, CEN1) 2000.000 0.0000000
UNID( FAB2, CEN2) 3000.000 0.0000000
UNID( FAB2, CEN3) 0.0000000 0.0000000
UNID( FAB2, CEN4) 0.0000000 2.0000000
UNID( FAB3, CEN1) 2000.000 0.0000000
UNID( FAB3, CEN2) 0.0000000 0.0000000
UNID( FAB3, CEN3) 0.0000000 1.0000000
UNID( FAB3, CEN4) 3000.000 0.0000000
USANDO 3 SUB. INDICE
3.3.1 PROBLEMA 1 de tres sub índices
La ciudad de Busville tiene tres distritos escolares. En la tabla A se da el número de estudiantes que pertenecen a grupos minoritarios y no minoritarios. El 25% de todos los estudiantes (200/800) pertenecen a grupos minoritarios.
TABLA A
DISTRITO
ESTUDIANTES
MINORITARIOS
ESTUDIANTES
NO MINORITARIOS
1
50
200
2
50
250
3
100
150
La corte local a decidido que cada una de las dos escuelas de segunda enseñanza de la ciudad (Cooley y walt whitman) debe tener aproximadamente (más o menos 5%) el mismo porcentaje de estudiantes de minorías, que la ciudad entera. En la tabla B se da las distancias entre los distritos escolares y las escuelas. Cada escuela debe tener entre 300 y 500 estudiantes. Utilice la programación lineal para determinar la asignación de los estudiantes a cada escuela para minimizar la distancia total que tienen que viajar los estudiantes para llegar a ella.
TABLA B
WALT
DISTRITO
COOLEY
WHITMAN
1
1
2
2
2
1
3
1
1
SOLUCION:
Primero vamos a encontrar la función objetivo, la escuela busca minimizar la distancia total recorrida por sus estudiantes desde su distrito a la escuela y cuantos estudiantes son mayorías y minoritarios, entonces vamos a llamar a la variable estudiantes i,j,k, donde i: estudiantes del distrito i (i=1,2,3) que pertenecen al grupo j (1:minoria,2:mayoria) y que estudian en la escuela k ( 1:Cooley,2:Walt Whitman).Si lo queremos expresar escalarmente con los datos de la tabla Nro 2
MIN=1*( estudiantes 111+ estudiantes 121)+2*( estudiantes 211+2* estudiantes 221)+1*( estudiantes 311+ estudiantes 321)+2*( estudiantes 112+ estudiantes 222)+1*( estudiantes 221+ estudiantes 222)+1*( estudiantes 312+1* estudiantes 322)
SETS:
DIST/1 . . 3/ : ;
TIPO / 1 . .2/ : ;
COLE / 1 . .2 / : ;
DT ( DIST , TIPO ) : CANT ;
DC ( DIST , TIPO ) : CANT ;
DC ( DIST , TIPO , COLE ) : X ;
ENDSETS ;
DATA:
CANT = 50 , 200 , 50 , 250 , 100 , 150 ;
DIS = 1 , 2 , 2 , 1 , 1 , 1 ;
N = 300 , 500 ;
ENDDATA
¡ MINIMIZAR LA DISTANCIA TOTAL RRECORRIDA POR LOS ESTUDIANTES ;
MIN = @ SUM ( DTC : DIS * X ) ;
¡TOTAL DE ESTUDIANTES POR DISTRITO
@ FOR ( DIST ( I ) : @ FOR ( TIPO (J) : @SUM(COLE (K) : X (I,J,K) ) = CANT (I,J)));
!ESTUDIANTES POR COLEGIO ;
@FOR (COLE (K) : @SUM( DT ( I,J ) /J# EQ#1 : X ( I,J,K) ) >=0.2 * ( @SUM(DT(I,J):X(I,J,K))));
@FOR ( COLE(K) : @SUM( DT ( I, J ) /J#EQ#1 : X( I,J,K) ) < 0.3 * ( @ SUM ( DT(I,J):X(I,J,K))));
END
USANDO 4 SUB. INDICE
3.4.1 PROBLEMA DE TRANSPORTE usando 4 sub índices
La Quality Paper, fabricante y distribuidor de papel .produce 3 tipos diferentes de papel que se pueden fabricar tanto en la fabrica A,B, o C ubicados en lima.la empresa busca satisfacer la demanda establecida para las ciudades(Tacna y Cuzco) en donde se venden los productos, además en cada ciudad existen 2 tipos de centros de distribución(supermercados y librerías) los cuales pertenecen a la corporación.los precios de ventas de los productos según donde fueron fabricados, la ciudad y el centro de distribución donde se va a vender son los siguientes:
TACNA
CUZCO
SUPERMEMRCADO
LIBRERIA
SUPERMERCADO
LIBRERIA
Prod1
Prod2
Prod3
Prod1
Prod2
Prod3
Prod1
Prod2
Prod3
Prod1
Prod2
Prod3
Fab A
13
15
17
11
12
15
14
12
13
15
13
12
Fab B
10
13
14
12
14
16
13
14
15
11
12
13
Fab C
12
11
13
10
11
13
11
13
14
12
13
14
La corporación busca maximizar sus ventas y saber como va a distribuir sus productos tomando en cuenta la capacidad de producción de las fábricas, la demanda de las ciudades y la capacidad de los centros de distribución.
FAB
FAB
FAB C
PROD1
75
65
70
PROD2
60
70
80
PROD3
65
75
75
Capacidad de producción
Demanda
TACNA
CUZCO
PROD1
73
67
PROD2
58
72
PROD3
67
74
Capacidad de los centros de distribución
TACNA
CUZCO
SUPER MERCADO
150
140
LIBRERÍA
130
150
Solución:
Xi,j,k,l=cantidad de productos fabricados en la fabrica i(i=A,B,C),en la ciudad si en TACNA, si y CUZCO(j=TC,CZ) distribuidos en SUPER MERCADO y LIBRERÍA (K=SM,L) el producto L(L=P1,P2,P3).
FUNCION OBJETIVO:
MAX, donde PRECIO es el precio de venta de cada producto.
MAXZ=12 * XA,P1,SM,TC + 15* XA,P1,SM,CZ + 17 * XA,P1,L,TC+11 * XA,P1,L,CZ + 12 * XA,P2,SM,TC + 15 * XA,P2,SM,CZ +14*XA,P2,L,TC + 12 * XA,P2_L,CZ + 13 * XA,P3,SM,TC + 15 * XA,P3,SM,CZ + 13 * XA,P3,L,TC + 12 * XA,P3,L,CZ + 10 * XB,P1,SM,TC + 13 *XB,P1,SM,CZ + 14 * XB,P1,L,TC + 12 * XB, P1, L, CZ + 14 * XB, P2,SM,TC + 16 * XB,P2,SM,CZ + 13 * XB,P2,L,TC + 14 * XB,P2,L,CZ + 15 * XB,P3,SM,TC + 11 * XB,P3,SM,CZ + 12 * XB,P3,L,TC + 13 *XB,P3,LCZ +12 * XC,P1,SM,TC + 11 * XC,P1,SM,CZ + 13 * XC,P1,L,TC + 10 *XC,P1,L,CZ + 11 * XC,P2,SM,TC + 13 * XC,P2,SM,CZ + 11 * XC,P2,LTC +13 * XC,P2,L,CZ + 14 * X,C,P3,SM,TC + 12 * XC,P3,SM,CZ + 13 *XC,P3,L,TC + 14 * XC,P3,LCZ ;
SUJETO A:
Capacidad de producción:
Para I=A,J=P1:
XA,P1_SM,TC + XA,P1,SM,CZ + XA,P1,L,TC + XA,P1,L,CZ <= 75 ;
Para I=A,J=P2:
XA,P2,SM,TC + XA,P2,SM,CZ + XA,P2,L,TC + XA,P2,L,CZ <= 60 ;
Para I=A,J=P3:
XA,P3,SM,TC + XA,P3,SM,CZ + XA,P3,L,TC + XA,P3,L,CZ <= 65 ;
Para I=B,J=P1:
XB,P1,SM,TC + XB,P1,SM,CZ + XB,P1,L,TC + XB,P1,L,CZ <= 65 ;
Para I=B,J=P2:
XB,P2,SM,TC + XB,P2,SM,CZ + XB,P2,L,TC + XB,P2,L,CZ <= 70 ;
Para I=B,J=P3:
XB,P3,SM,TC + XB,P3,SM,CZ + XB,P3,L,TC + XB,P3,L,CZ <= 75 ;
Para I=C,J=P1:
XC,P1,SM,TC + XC,P1,SM,CZ + XC,P1,L,TC + XC,P1,L,CZ <= 70 ;
Para I=C,J=P2:
XC,P2,SM,TC + XC,P2,SM,CZ + XC,P2,L,TC + XC,P2,LCZ <= 80 ;
Para I=C,J=P3:
XC,P3,SM,TC + XC,P3,SM,CZ + XC,P3,L,TC + XC,P3,L,CZ <= 75
Demanda:
Para J=TC, L=P1:
XA,P1,SM,TC + XA,P1,L,TC + XB,P1,SM,TC + XB,P1,L,TC +XC,P1,SM,TC +
XC, P1, L, TC >= 73;
Para J=CZ, L=P1:
XA,P1,SM,CZ + XA,P1,L,CZ + XB,P1,SM,CZ + XB,P1,L,CZ +
XC,P1,SM,CZ + XC,P1,L,CZ >= 67 ;
Para J=TC, L=P2:
XA,P2,SM,TC + XA,P2,L,TC + XB,P2,SM,TC + XB,P2,L,TC +
XC,P2,SM,TC + XC,P2,L,TC >= 58 ;
Para J=CZ, L=P2:
XA,P2,SM,CZ + XA,P2,L,CZ + X,B,P2,SM,CZ + XB,P2,L,CZ +
XC,P2,SM,CZ + XC,P2,L,CZ >= 72 ;
Para J=TC, L=P3:
XA,P3,SM,TC + XA,P3,L,TC + XB,P3,SM,TC + XB,P3,L,TC +
XC,P3,SM,TC + XC,P3,L,TC >= 67 ;
Para J=CZ, L=P3:
XA,P3_SM,CZ + XA,P3,L,CZ + XB,P3,SM,CZ + XB,P3,L,CZ +
XC,P3,SM,CZ + XC,P3,L,CZ >= 74 ;
Capacidad de los centros de distribución:
Para J=TC, K=SM:
XA,P1,SM,TC + XA,P2,SM,TC + XA,P3,SM,TC + XB,P1,SM,TC +
XB,P2,SM,TC + XB,P3,SM,TC + XC,P1,SM,TC + XC,P2,SM,TC + XC,P3,SM,TC<=150
Para J=CZ, K=SM:
XA,P1,SM,CZ + X,A,P2,SM,CZ + X,A,P3,SM,CZ + X,B,P1,SM,CZ + X_B_P2_SM_CZ + XB,P3_SM,CZ + XC,P1,SM,CZ + XC,P2,SM,CZ + XC,P3,SM,CZ <= 140 ;
Para J=TC, K=L:
XA,P1,L,TC + XA,P2,L,TC + X,A,P3,L,TC + XB,P1,L,TC +XB,P2,L,TC + XB,P3,L,TC + XC,P1,L,TC + XC,P2,L,TC + XC,P3,L,TC <=130 ;
Para J=CZ, K=L:
XA,P1,L,CZ + XA,P2,L,CZ + XA,P3,L,CZ + XB,P1,L,CZ +XB,P2,L,CZ + XB,P3,L,CZ + XC,P1,L,CZ + XC,P2,L,CZ + XC,P3,L,CZ <=150 ;
EL EQUIVALENTE EN LINGO ES:
SETS:
! FABRICAS DONDE SE VA A PRODUCIR EL PAPEL;
FABRICAS/A B C/: ;
! PRODUCTOS A SER PRODUCIDO POR LAS FÁBRICAS;
PRODUCTOS/P1 P2 P3/: ;
! CENTRO DE DISTRIBUCION DE LOS PRODUCTOS;
CDIST/SM L/:;
! CIUDADES DONDE VAN A SER DISTRIBUIDOS LOS PRODUCTOS;
CIUDAD/TC CZ/:;
! REQUERIMIENTO DE PRODUCTOS PARA UNA FABRICA ,EN UNA CIUDAD,EN UN DETERMINADO SUPERMERCADO;
FPCC (FÁBRICAS, PRODUCTOS, CDIST, CIUDAD): PRECIO, X;
! CAPACIDAD DE PRODUCCION DE UN TERMENINADOM PRODUCTO POR FÁBRICA;
FABPRO (FÁBRICAS, PRODUCTOS): CAPACIDAD;
! DEMANDA DE PRODUCCION;
PROCIU(PRODUCTOS,CIUDAD):DEMANDA;
! CAPACIDAD DE LOS CENTROS DE DISTRIBUCION;
CDCIUDAD (CDIST, CIUDAD): CAPACCD;
ENDSETS
DATA:
CAPACIDAD=75,60,65,
65,70,75,
70,80,75;
DEMANDA= 73,67,
58,72,
67,74;
CAPACCD= 150,140,
130,150;
PRECIO= 12,15,17,11,12,15,14,12,13,15,13,12,
10,13,14,12,14,16,13,14,15,11,12,13,
12,11,13,10,11,13,11,13,14,12,13,14;
ENDDATA
!FUNCION OBJETIVO ,MAXIMIZANDO LA UTILIDAD;
[OBJETIVO]MAX =@SUM(FPCC:PRECIO*X);
!RESTRICCION DE LA CAPACIDAD DE DISTRIBUCION ;
@FOR(FABPRO(I,J):@SUM(FPCC(I,J,K,L):X(I,J,K,L))<=CAPACIDAD(I,J));
!RESTRICCION DE LA DEMANDA;
@FOR(PROCIU(J,L):@SUM(FPCC(I,J,K,L):X(I,J,K,L))>=DEMANDA(J,L));
! RESTRICCION DE LA CAPACIDAD DE LOS CENTROS DE DISTRIBUCION;
@FOR(CDCIUDAD(K,L):@SUM(FPCC(I,J,K,L):X(I,J,K,L))<=CAPACCD(K,L));
END
HACIENDO CORRER EL PROGRAMA CON LINGO 10.0
Global optimal solution found.
Objective value: 8260.000
Total solver iterations: 20
Variable Value Reduced Cost
PRECIO( A, P1, SM, TC) 12.00000 0.000000
PRECIO( A, P1, SM, CZ) 15.00000 0.000000
PRECIO( A, P1, L, TC) 17.00000 0.000000
PRECIO( A, P1, L, CZ) 11.00000 0.000000
PRECIO( A, P2, SM, TC) 12.00000 0.000000
PRECIO( A, P2, SM, CZ) 15.00000 0.000000
PRECIO( A, P2, L, TC) 14.00000 0.000000
PRECIO( A, P2, L, CZ) 12.00000 0.000000
PRECIO( A, P3, SM, TC) 13.00000 0.000000
A ASI SUCESIVAMENTE……….
PROBLEMAS DE TRANSPORTE
La cadena de restaurantes "CUATRO MARÍAS" se especializa en la preparación y venta de pescados y mariscos. La demanda de pescado de las cuatro sucursales de la cadena de restaurantes "CUATRO MARÍAS" es presentada en la siguiente tabla.
Sucursal
Jesús María
Callao
San Luis
Los Olivos
Demanda (Ton)
15
17
22
12
La cadena de restaurantes "CUATRO MARÍAS" compra el pescado de tres proveedores que proporcionan las siguientes cantidades (ton) de pescado:
Proveedor
Ventanilla
Villa El Salvador
Chorrillos
Cantidad
30
25
21
Los costos de transporte (soles/tonelada) de los proveedores a las sucursales son:
Sucursal
Proveedor
Jesús María
Callao
San Luis
Los Olivos
Ventanilla
6
2
6
7
Villa El Salvador
4
9
5
3
Chorrillos
8
8
1
5
Formule el modelo de PL que permita determinar la distribución óptima del pescado de los proveedores a las sucursales.
El modelo en LINGO es:
MODEL:
! Problema de transporte de 3 proveedores a 4 sucursales;
SETS:
PROVEEDOR / 1..3/: CAPACIDAD;
SUCURSAL / 1..4/: DEMANDA;
RUTAS( PROVEEDOR, SUCURSAL): COSTO, VOLUMEN;
ENDSETS
! La función objetivo;
[OBJ] MIN = @SUM( RUTAS: COSTO * VOLUMEN);
! Las restricciones de demanda son;
@FOR( SUCURSAL( J): [DEMANDA](@SUM( PROVEEDOR( I): VOLUMEN( I, J)) >= DEMANDA( J))));
! Las restricciones de los proveedores son;
@FOR( PROVEEDOR( I): [SUPPLY](@SUM( SUCURSAL( J): VOLUMEN( I, J)) <= CAPACIDAD( I))));
! Los parámetros del modelo son;
DATA:
CAPACIDAD = 30, 25, 21;
DEMANDA = 15, 17, 22, 12;
COSTO = 6, 2, 6, 7,
4, 9, 5, 3,
8, 8, 1, 5;
ENDDATA
END
PROBLEMA DE INVERSIÓN
Suponga que Ud. es trabajador de la empresa DISQUET S.A. Uno de los beneficios que le otorga la empresa es el plan de retiro en que Ud. aporta 5% de su ingreso mensual y 5% lo pone DISQUET S.A. El dinero de este plan de retiro es invertido en cualquiera de dos fondos: fondos mutuos o fondos de acciones. Suponga que la empresa le pregunta a Ud. qué fracción de dinero debe ser invertido en cada fondo. Antes de tomar una decisión, Ud. investiga y se entera que el fondo de acciones ha crecido a una tasa anual promedio de 10% mientras que los fondos mutuos a una tasa anual promedio de 8%. Para diversificar su cartera de inversiones y controlar el riesgo, Ud. no desea poner todos los huevos en una sola canasta por lo que ha logrado identificar dos pautas:
Ninguno de los fondos debe tener más de 70% de la inversión total.
La cantidad de dinero en el fondo de acciones no debe exceder del doble invertido en los fondos mutuos.
¿Qué decisión Ud. tomaría para optimizar su dinero?
El modelo en LINGO es:
Model:
Sets:
Tipos_de_inversion/acciones, fondos_mutuos/:tope_maximo;
cantidad(tipos_de_inversion): interes, monto;
Endsets
Data:
interes= 0.1, 0.08;
tope_maximo = 0.7, 0.7;
Enddata
MAX = @sum(cantidad: monto*interes);
@for(tipos_de_inversion(i) :monto(i)<=tope_maximo(i));
monto(acciones)<=2*monto(fondos_mutuos);
@sum(cantidad:monto)=1;
End
PLANEACIÓN DE PRODUCCIÓN
QUÍMICA S.A. produce dos solventes, S1 y S2. Las empresas compran S1 y S2 para disolver ciertas pinturas y sustancias tóxicas. La empresa trabaja 40 horas semanales y en el departamento de mezcla tiene a 4 trabajadores a tiempo completo y a tres a tiempo parcial, que trabajan 10 horas a la semana cada uno. Los trabajadores operan seis máquinas que mezclan las sustancias químicas para producir cada solvente. Los productos salen del departamento de mezclado para pasar al departamento de purificación que posee seis purificadores y emplea a siete trabajadores de tiempo completo y a uno de tiempo parcial que trabaja 12 horas a la semana. QUÍMICA S.A. tiene una provisión ilimitada de materia prima para producir los dos solventes. El volumen de venta de S1 es ilimitado pero de S2 es de 100,000 galones semanales. El departamento de contabilidad estima una utilidad de $0.35 por galón de S1 y $0.45 por galón de S2. El gerente de procesos estima que el número de horas necesarias para producir mil galones de cada solvente en los departamentos de mezcla y purificación es dada en la siguiente tabla:
Departamento
S1
S2
Mezcla
2
1
Purificación
1
2
¿Cuál es el plan de producción óptimo para QUÍMICA S.A.?
El modelo en LINGO es:
Model:
Sets:
Solvente/1..2/:;
Departamento/ mezcla, purificacion/: disponibilidad_horas;
Produccion(Solvente):cantidad, utilidad;
Horas_de_consumo(Solvente,Departamento):Horas;
Endsets
Data:
utilidad = 350, 450;
horas = 2,1,
1,2;
disponibilidad_horas=190, 292;
Enddata
Max=@sum (Produccion:cantidad*utilidad);
@for(Departamento(j):@sum(Produccion(i):cantidad(i)*horas(i,j))<=disponibilidad_horas(j));
@for (Produccion:cantidad(2)<=100);
PLANEAMIENTO FINANCIERO
3.8.1 problema de planeamiento financiero 1
Un banco otorga cuatro tipos de préstamos a sus clientes los cuales producen las siguientes tasas de interés anual:
Tipo de préstamo
Tasa de interés anual
Compra de casa (o departamento)
14%
Compra de un terreno
20%
Ampliar o remodelar el hogar
20%
Compra de un carro
10%
El banco ha dispuesto 250 millones de nuevos soles para otorgar los préstamos. Las directivas que se deben tener presentes para efectuar los préstamos son:
Los préstamos para compras de casa deben ser al menos 55% de todos los préstamos otorgados para compras de casa o terreno y al menos 25% de todos los préstamos otorgados.
Los préstamos para compra de terrenos no pueden exceder el 25% de todos los préstamos otorgados.
Para evitar el descontento público y la introducción de un impuesto no previsto el dinero total anual recaudado por los préstamos no debe exceder el 15% del total de dinero destinado a los préstamos.
Formule el problema de préstamos del banco como un PL.
El modelo en LINGO es:
! PLANEAMIENTO FINANCIERO;
Model:
Sets:
Tipo_de_prestamo/casa, terreno, hogar,carro/:interes;
Dinero(Tipo_de_prestamo):cantidad;
Endsets
Data:
interes= 0.14, 0.20, 0.20, 0.10;
Enddata
Max= @sum(Dinero(i):cantidad(i)*interes(i));
@sum(Dinero(i):cantidad(i))<=250;
@for(Dinero:cantidad(1)>=0.55*@sum(Dinero(i)"i#le#2:cantidad(i)));
@for(Dinero:cantidad(1)>=0.25*@sum(Dinero(i):cantidad(i)));
@for(Dinero:cantidad(2)<=0.25*@sum(Dinero(i):cantidad(i)));
@sum(Dinero(i):cantidad(i)*interes(i)) <= 0.15*@sum(Dinero(i):cantidad(i));
3.8.2 PROBLEMA DE PLANEAMIENTO FINANCIERO 2
Cuatro productos se procesan en secuencia de dos maquinas. La siguiente tabla proporciona los datos pertinentes al problema.
Tiempo de fabricación por unidad (hora)
Máquina
Costo
($) / hora
Producto
Capacidad
(hora)
1
2
3
4
1
10
2
3
4
2
500
2
5
3
2
1
2
380
Precio de venta
65
70
55
45
Solución:
Xij: unidades producidas por tipo de producto j (1, 2, 3, 4), utilizando cada maquina i (1, 2)
MAX Z = 65(X11 + X12) + 70(X12 + X22) + 55(X13 + X23) + 45(X14 + X24)
- 10 (2X11 + 3X12 + 4X15 + 2X14) - 5(3X21 + 2X22 + 1X23 + 2X24)
MAX Z = 45X11 + 50X21 + 40X12 + 60X22 + 15X13 + 50X23 + 25X14 +35X24
Sujeto a:
Capacidad de la maquina 1: 2X11+ 3X12 + 4X13 + 2X14 <= 500
Capacidad de la maquina 2: 3X21 + 2X22 + 1X23 + 2X24 <=380
!MAQ=MAQUINA(1,2) CAP=CAPACIDAD DE CADA MAQUINA(HORAS);
!PROD=PRODUCTO(1,2,3,4) PV=PRECIO DE VENTA;
!TM= TIEMPO X=UNIDADES PRODUCIDAS UTI= UTILIDAD;
SETS:
MAQ/1..2/:CAP;
PROD/1..4/:PV;
MATRIZ1(MAQ,PROD):TM,X,uti;
ENDSETS
DATA:
CAP=500,380;
PV=65,70,55,45;
TM= 2,3,4,2,
3,2,1,2;
UTI=45,40,15,25
50,60,50,35;
ENDDATA
MAX=@SUM(MATRIZ1:UTI*X);
@FOR(MAQ(I):@SUM(PROD(J):TM(I,J)*X(I,J))<=CAP(I));
END
Solución óptima:
MAX 45 X( 1, 1) + 40 X( 1, 2) + 15 X( 1, 3) + 25 X( 1, 4)+ 50 X( 2, 1) + 60 X( 2, 2) + 50 X( 2, 3) + 35 X( 2, 4)
SUBJECT TO
2] 2 X( 1, 1) + 3 X( 1, 2) + 4 X( 1, 3) + 2 X( 1, 4) <= 500
3] 3 X( 2, 1) + 2 X( 2, 2) + X( 2, 3) + 2 X( 2, 4) <= 380
END
Objective value: 30250.00
Variable Value Reduced Cost
X( 1, 1) 250.0000 0.0000000
X( 1, 2) 0.0000000 27.50000
X( 1, 3) 0.0000000 75.00000
X( 1, 4) 0.0000000 20.00000
X( 2, 1) 0.0000000 100.0000
X( 2, 2) 0.0000000 40.00000
X( 2, 3) 380.0000 0.0000000
X( 2, 4) 0.0000000 65.00000
3.8.3 PROBLEMA DE PLANEAMIENTO FINANCIERO 3
Para una jornada de 24 horas un hospital esta requiriendo el siguiente personal para el área de enfermería, se define 6 turnos de 4 horas cada uno.
Turno
Número mínimo
de personal
2:00 - 6:00
4
6:00 - 10:00
8
10:00 - 14:00
10
14:00 - 18:00
7
18:00 - 20:00
12
20:00 - 24:00
4
Los contratos laborales son de 8 horas consecutivas por día. El objetivo es encontrar el número menor de personas que cumplan con los requerimientos. Formule el problema como un modelo de programación lineal.
Solución:
Xi = Cantidad de personal por cada turno i = 1, 2, 3, 4, 5, 6.
Necesidades de personal por horario
Horas
2:00 - 6:00
6:00 - 10:00
10:00 - 14:00
14:00 - 18:00
18:00 - 20:00
20:00 - 24:00
X1
X1
X2
X2
X3
X3
X4
X4
X5
X5
X6
X6
Personal
4
8
10
7
12
4
MIN Z = X1 + X2 + X3 + X4 + X4 + X5 + X6
Sujeto a:
Turno 1: X1 + X6 >= 4
Turno 2: X1 + X2 >=8
Turno 3: X2 + X3 >=10
Turno 4: X3 + X4 >=7
Turno 5: X4 + X5 >=12
Turno 6: X5 + X6 >=4
!HORAS=TUENO X=CANTIDAD DE PERSONAL POR TURNO;
!PERS=PERSONAL MIN=PERSONAL MINIMO;
!CANT=PERSONAL POR TURNO (1=EXISTE PERSONAL EN EL TURNO, 0= NO EXISTE PERSONAL EN EL TURNO);
SETS:
HORAS/1..6/:X;
PERS/1..6/:MIN;
MATRIZ1(HORAS,PERS):CANT;
ENDSETS
DATA:
MIN=4,8,10,7,12,4;
CANT=1,1,0,0,0,0,
0,1,1,0,0,0,
0,0,1,1,0,0,
0,0,0,1,1,0,
0,0,0,0,1,1,
1,0,0,0,0,1;
ENDDATA
MIN=@SUM(HORAS:X);
@FOR(PERS(J):@SUM(HORAS(I):CANT(I,J)*X(I))>=MIN(J));
END
MIN X( 1) + X( 2) + X( 3) + X( 4) + X( 5) + X( 6)
SUBJECT TO
2] X( 1) + X( 6) >= 4
3] X( 1) + X( 2) >= 8
4] X( 2) + X( 3) >= 10
5] X( 3) + X( 4) >= 7
6] X( 4) + X( 5) >= 12
7] X( 5) + X( 6) >= 4
END
Objective value: 26.00000
Variable Value Reduced Cost
X(1) 0.0000000 0.0000000
X(2) 8.000000 0.0000000
X(3) 2.000000 0.0000000
X(4) 5.000000 0.0000000
X(5) 7.000000 0.0000000
X(6) 4.000000 0.0000000
3.8.4 PROBLEMA DE PLANEAMIENTO FINANCIERO 4
Se desean invertir 2 mil dólares en 6 tipos de inversión cuyas características son las siguientes:
Tipo de Inversion
Interes Anual (%)
Factor de Riesgo
Plazo promedio de inversion
1
8.5
0.02
8
2
9
0.01
2
3
8.5
0.38
5
4
14.3
0.45
6
5
6.7
0.07
2
6
13
0.35
4
El factor de riesgo significa la probabilidad de que el rendimiento real sea inferior al esperado. Se considera ventajoso un período promedio ponderado de inversión de ciando menos 5 años; pero el factor promedio ponderado de riesgo no debe ser superior a 0.20. La ley prohíbe que la suma de las inversiones de los tipos 4 y 6 sea mayor al 25% del total de la inversión. Con P.L formule un modelo de P.L para decidir cómo invertir para maximizar el rendimiento de los 2 millones de dólares.
Solución:
Xj = cantidad de dólares a invertir en el tipo de inversión j (1, 2, 3, 4, 5,6) para maximizar el rendimiento.
MAX Z = 0.085X1 + 0.09X2 + 0.85X3 + 0.143X4 + 0.067X5 +0.13X6
Sujeto a:
X1 + X2 + X3 +X4 + X5 + X6 = 2 000
0.02X1 + 0.01X2 + 0.38X3 + 0.45X4 + 0.07X5 + 0.35X6 0.2 (2 000) = 400
8X1 + 2X2 + 5X3 + 6X4 +2X5 + 4X6 5 (2 000) = 10 000
X4 + X6 0.25 (2 000) = 500
!TIPO=TIPO DE INVERSION INV= INVERSION SUJETA A FACTORES;
!INT=INTERES ANUAL X=CANTIDAD DE DOLARES A INVERTIR EN LA INVERSION;
!DAT= CARACTERISTICAS;
SETS:
TIPO/1..4/:INV;
CAR/1..6/:INT,X;
MATRIZ1(TIPO,CAR):DAT;
ENDSETS
DATA:
INT=8.5,9,8.5,14.3,6.7,13;
INV= 2000,400,10000,500;
DAT= 1,1,1,1,1,1,
0.02,0.01,0.38,0.45,0.07,0.35,
8,2,5,6,2,4,
0,0,0,1,0,1;
ENDDATA
MIN=@SUM(CAR:0.01*INT*X);
@FOR(TIPO(I):@SUM(CAR(J):DAT(I,J)*X(J))>=INV(I));
END
Global optimal solution found at step: 5
Objective value: 184.8433
Variable Value Reduced Cost
X( 1) 592.0398 0.0000000
X( 2) 0.0000000 0.2461194E-01
X( 3) 482.5871 0.0000000
X( 4) 0.0000000 0.3865672E-02
X( 5) 425.3731 0.0000000
X( 6) 500.0000 0.0000000
PROBLEMAS DE PROGRAMACIÓN ENTERA CON LINGO
Problema 1 de programación entera
La decisión de una corte estableció que la matrícula de cada escuela de bachillerato en Metrópolis debe tener por lo menos 20% de negros. El número de estudiantes de bachillerato, blancos y negros, en cada uno de los 5 distritos escolares de la ciudad se muestra en la tabla 2 .La distancia (en millas)que un estudiante debe viajar a cada escuela de bachillerato en cada distrito, se proporciona en la tabla 3.La política escolar establece que todos los estudiantes en un distrito dado asistan a la misma escuela .Si se supone que cada escuela debe tener una matricula de por lo menos 150 estudiantes ,formule un PE con el que se pueda minimizar la distancia total que los estudiantes de Metrópolis tienen que recorrer hasta la escuela.
TABLA 2 TABLA 3
Distrito
Blancos
Negros
1
80
30
2
70
5
3
90
10
4
50
40
5
60
30
Distrito
Escuela de bachillerato 1
Escuela de bachillerato 2
1
1
2
2
0.5
1.7
3
0.8
0.8
4
1.3
0.4
5
1.5
0.6
Solución:
Xij = Xij = Si los estudiantes del distrito i (i = 1, 2, 3, 4, 5,6) son enviados a la escuela j ( =1,2)
Xij =
Xij =
0, si no es así.
Entonces, el PE apropiado es:
Para hallar la función objetivo tengo que sumar la cantidad de blancos y negros que hay en cada distrito y después multiplicarlo por la distancia que hay de ese distrito a cada escuela.
Función objetivo es:
Min z = 110 X11+220 X12+37.5 X21+127.5 X22+80 X31+80 X32 +117 X41 +36 X42 +135 X51 +54 X52
s.a :
110 X11+75 X21+100 X31+90 X41 +90 X51 >=150(escuela 1 debe tener una matricula de por lo menos 150 estudiantes)
110 X12+75 X22+100 X32+90 X42 +90 X52 >=150(escuela 2 debe tener una matricula de por lo menos 150 estudiantes)
0.20<=(escuela1 debe tener por lo menos 20% de negros)
0.20<=(escuela2 debe tener por lo menos 20% de negros)
Los estudiantes de cada distrito bien van a la escuela 1 ó 2, pero no a las dos a la vez por lo que solo una de ellas tiene el valor de uno y la otra de cero.
X11+ X12 =1(todos los estudiantes del distrito1 asisten a la misma escuela)
X21+ X22 =1(todos los estudiantes del distrito2 asisten a la misma escuela)
X31+ X32 =1(todos los estudiantes del distrito3 asisten a la misma escuela)
X41 + X42 =1(todos los estudiantes del distrito4 asisten a la misma escuela)
X51 + X52 =1(todos los estudiantes del distrito5 asisten a la misma escuela)
Xij =1ó 0; (i = 1, 2, 3, 4, 5,6), (j = 1,2)
El programa en Lingo es:
! MODELO DE WINSTON CAP 9 # 4;
!total es alumnos blancos mas alumnos negros en cada escuela;
SETS:
distrito/1..5/:total;
escuela/1..2/:;
MATRIZ(distrito,escuela):X,alumnos,millas;
ENDSETS
DATA:
millas = 1, 2
0.5, 1.7
0.8, 0.8
1.3, 0.4
1.5, 0.6;
alumnos= 80, 30
70, 5
90, 10
50, 40
60, 30;
minmatri=150;
minnegros=0.2;
ENDDATA
MIN=@SUM(matriz(i,j):total(i)*x(i,j)*millas(i,j));
@for(distrito(i):total(i)=@sum(escuela(j):alumnos));
! RESTRICCION DE matri por escuela;
@FOR(escuela(J):@sum(distrito(i):total(i)*x(i,j))>=minmatri);
! RESTRICCION DE negros por escuela;
@FOR(escuela(J):@sum(distrito(i):alumnos(i,2)*x(i,j))/@sum(distrito(i):total(i)*x(i,j))>=minnegros);
@FOR(distrito(i):@SUM(escuela(J):x(I,J))=1);
! RESTRICCION DE VARIABLES BINARIAS;
@FOR(MATRIZ(I,J)):
@BIN(x(I,J));
La distancia mínima total que todos los estudiantes de Metrópolis tienen que recorrer hasta la escuela es 398.5 millas.
Problema 2 de programación entera
Eastinghouse embarca 1 2000 capacitores por mes para sus clientes. Se podrían producir los capacitores en tres plantas distintas. La capacidad de producción, costos fijos mensuales de operación y costos variables por la producción de un capacitor en cada planta se proporcionan en la tabla 96. El costo fijo de una planta se contrae sólo si la planta se usa para hacer capacitores. Desarrolle un modelo de programación con enteros cuya solución le indique a Eastinghouse cómo minimizar sus costos mensuales por cumplir con la demanda de sus clientes.
TABLA
Planta
Costos fijos (miles de dólares)
Costos variables(dólares)
Capacidad de producción
1
80
20
6000
2
40
25
7000
3
30
30
6000
SOLUCIÓN:
Xi = Cantidad de capacitores producidos en la fábrica i.
Yi = 1 si se utiliza la planta i.
0 en caso contrario.
i =1, 2, 3.
FUNCION OBJETIVO:
Min z = (80 000Y1 + 40 000Y2 + 30 000Y3) + (20X1Y1 + 25X2Y2 + 30X3Y3)
RESTRICCIONES:
X1 + X2 + X3 >= 12 000
X1 <= 6 000Y1
X2 <= 7 000Y2
X3 <= 6 000Y3
X1,X2,X3>0
Y1,Y2,Y3= 1 ó 0
El programa en Lingo es:
Sets:
planta/1..3/:x,y,cf,cv,cap;
Endsets
Data:
cf = 80,40,30;
cv = 20,25,30;
cap = 6000,7000,6000;
Enddata
Min =@sum(planta(i):cf(i)*y(i))+@sum(planta(i):cv(i)*x(i));
!restriccion de la demanda;
@sum(planta(i):x(i))>=12000;
!restriccion de la capacidad;
@for(planta(i):x(i)<=cap(i)*y(i));
!restriccion binaria;
@for(planta(i):@bin(y));
End
MODEL:
[_1] MIN= 20 * X_1 + 80 * Y_1 + 25 * X_2 + 40 * Y_2 + 30 * X_3 + 30 *Y_3 ;
[_2] X_1 + X_2 + X_3 >= 12000 ;
[_3] X_1 - 6000 * Y_1 <= 0 ;
[_4] X_2 - 7000 * Y_2 <= 0 ;
[_5] X_3 - 6000 * Y_3 <= 0 ;
@BIN( Y_1); @BIN( Y_2); @BIN( Y_3);
END
Solución Lingo:
Objective Value: 270120.0
Variable Value Reduced Cost
X( 1) 6000.000 0.000000
X( 2) 6000.000 0.000000
X( 3) 0.000000 5.000000
Y( 1) 1.000000 -29920.00
Y( 2) 1.000000 40.00000
Y( 3) 0.000000 30.00000
CF( 1) 80.00000 0.000000
CF( 2) 40.00000 0.000000
CF( 3) 30.00000 0.000000
CV( 1) 20.00000 0.000000
CV( 2) 25.00000 0.000000
CV( 3) 30.00000 0.000000
CAP( 1) 6000.000 0.000000
CAP( 2) 7000.000 0.000000
CAP( 3) 6000.000 0.000000
Problema 3 de programación entera
Una empresa se dedica a la construcción de puertas y ventanas de fierro. Una puerta requiere 2 horas de pintado y 5 horas de soldadura, mientras que una ventana requiere 4 de pintado y 6 de soldadura. El total de horas disponibles de la máquina para pintura es 150 y de la máquina para soldar es 200. La utilidad de una puerta es 30 dólares y de una ventana es 40 dólares. Formule un modelo que permita determinar la combinación óptima de producción de puertas y ventanas.
La formulación del modelo en LINGO es:
Model:Sets:Productos/1..2/: utilidad, cant;materia_prima/1..2/:horas disponibles;Horas(productos, materia_prima):hora;EndsetsData:hora= 2, 5, 4, 6;utilidad= 30, 40;horas_disponibles= 150, 200;EnddataMax=@sum(productos(i):cant(i)*utilidad(i));@for(materia_prima(j):@sum(productos(i):cant(i)*hora(i,j))<=horas_disponibles(j));@for(productos(i):@gin(cant(i)));EndModel:Sets:Productos/1..2/: utilidad, cant;materia_prima/1..2/:horas disponibles;Horas(productos, materia_prima):hora;EndsetsData:hora= 2, 5, 4, 6;utilidad= 30, 40;horas_disponibles= 150, 200;EnddataMax=@sum(productos(i):cant(i)*utilidad(i));@for(materia_prima(j):@sum(productos(i):cant(i)*hora(i,j))<=horas_disponibles(j));@for(productos(i):@gin(cant(i)));End
Model:
Sets:
Productos/1..2/: utilidad, cant;
materia_prima/1..2/:horas disponibles;
Horas(productos, materia_prima):hora;
Endsets
Data:
hora= 2, 5, 4, 6;
utilidad= 30, 40;
horas_disponibles= 150, 200;
Enddata
Max=@sum(productos(i):cant(i)*utilidad(i));
@for(materia_prima(j):@sum(productos(i):cant(i)*hora(i,j))<=horas_disponibles(j));
@for(productos(i):@gin(cant(i)));
End
Model:
Sets:
Productos/1..2/: utilidad, cant;
materia_prima/1..2/:horas disponibles;
Horas(productos, materia_prima):hora;
Endsets
Data:
hora= 2, 5, 4, 6;
utilidad= 30, 40;
horas_disponibles= 150, 200;
Enddata
Max=@sum(productos(i):cant(i)*utilidad(i));
@for(materia_prima(j):@sum(productos(i):cant(i)*hora(i,j))<=horas_disponibles(j));
@for(productos(i):@gin(cant(i)));
End
Problema 4 de programación entera
Una empresa que se dedica a la comercialización de agua mineral embotellada estudia adquirir un conjunto de fuentes y construir plantas embotelladoras. Para cada localización potencial ha estimado unos costos variables de embotellamiento parecidos, pero los costes fijos anuales más la amortización de la adquisición de la fuente y de la construcción de la planta embotelladora varían de una localización a otra, las fuentes sobre las que se han iniciado negociaciones son las reflejadas en la tabla siguiente:
Fuente
Capacidad de embotellamiento
(m3 anuales)
Costes fijos de localización en
millones de u. monetarias/año
1.Biesacas
60.000
100
2.Bellanuga
70.000
140
3.Canfranc
55.000
88
4.La Seu d'Urgel
45.000
65
5.Bielsa
90.000
145
6.Benasc
85.000
155
7.Llavorsí
65.000
160
8.Masella
75.000
175
9.Bellver de Cerdanya
62.000
150
Desde estas plantas embotelladoras se han de abastecer los mercados de Lérida, Gerona, Tarragona y Barcelona.
Las demandas de los diferentes mercados y los costes de transporte se resumen en las tablas siguientes:
Mercado
1.Lérida
2.Girona
3.Tarragona
4.Barcelona
Demanda(m3/año)
30.350
60.700
45.500
160.000
Costes unitarios de transporte(u. monetarias/m3)
Fuente
1.Lérida
2.Girona
3.Tarragona
4.Barcelona
1.Biesacas
200
450
290
370
2.Bellanuga
210
460
310
380
3.Canfranc
220
470
310
390
4.La Seu d'Urgel
140
170
250
180
5.Bielsa
150
400
250
320
6.Benasc
140
390
230
310
7.Llavorsí
144
240
200
250
8.Masella
200
135
230
160
9.Bellver de Cerdanya
190
140
220
150
MODEL:
TITLE MODELO DE BALINSKI;
!Definicion de Conjuntos;
SETS:
fuente /BIESCAS BELLANUGA CANFRANC SEU BIELSA BENASC LLAVORSI MASELLA BELLVER/:capacidad, coste_localizacion, y;
La variable coste_localizacion representa el coste fijo de Construir una planta industrial en la localización de la fuente i;
La variable y indica donde se tiene que construir una planta Industrial. Sus valores serán binarios: 0=no se construye, 1=si se Construye;
mercado /LLEIDA GIRONA TARRAGONA BARCELONA/:demanda;
links(fuente,mercado):costo_transporte,volumen;
La variable volumen indica el porcentaje de demanda de aquel Mercado que se tiene que abastecer desde la planta i, de esta forma. La cantidad de producto que se tiene que enviar desde la planta i al Mercado j viene dado por demanda (j)*volumen (i,j);
ENDSETS
DATA:
capacidad = 60000, 70000, 55000, 45000, 90000, 85000, 65000, 75000, 62000;
coste_localizacion = 100000000, 140000000, 88000000, 65000000, 145000000, 155000000, 160000000, 175000000, 150000000;
demanda = 30350, 60700, 45500, 160000;
costo_transporte = 200, 450, 290, 370,
210, 460, 310, 380,
220, 470, 310, 390,
140, 170, 250, 180,
150, 400, 250, 320,
140, 390, 230, 310,
144, 240, 200, 250,
200, 135, 230, 160,
190, 140, 220, 150;
ENDDATA
!Funcion Objetivo;
MIN=@SUm(links(i,j):costo_transporte(i,j)*demanda(j)*volumen(i,j)) + @SUm(fuente(i):coste_localizacion(i)*y(i)) ;
!Restricciones para la oferta;
@FOR(fuente(i):
@SUM (mercado(j):demanda(j)*volumen(i,j))<=capacidad(i));
!Restricciones para la demanda;
@FOR(mercado(j):@SUM(fuente(i):volumen(i,j)) = 1);
!Restriciones para la variable y;
@FOR(fuente:@BIN(y));
@FOR(fuente(i):y(i)<1);
@FOR(mercado(j): @FOR(fuente(i):y(i) - volumen(i,j) > 0));
!Restricciones de no negatividad;
@FOR(links(i,j):volumen(i,j)>=0);
END
Problema 5 de programación entera
NEWCOMP S.A. ha obtenido fondos para producir un nuevo tipo de computadora. La empresa debe decidir la ubicación y el tamaño de las fábricas que producirán la computadora. Existen dos lugares disponibles, en cada lugar sólo puede construirse a lo más una fábrica pequeña, grande o enorme. En uno de los lugares se puede construir una fábrica enorme. La tabla N°1 presenta los costos de construcción de las fábricas, sus capacidades de producción y los costos unitarios de manufactura de la computadora para cada una de las alternativas.
Tabla N° 1
Lugar
Tamaño
Costo de construcción (miles de dólares)
Capacidad (miles de unidades)
Costo de Manufactura (dólares por unidad)
Ate
Pequeña
1000
600
5.00
Grande
1500
1200
4.00
Bellavista
Pequeña
1200
600
5.00
Grande
1600
1200
4.00
Enorme
2000
2000
3.50
NEWCOMP S.A. debe distribuir su producto en cuatro regiones. El costo de transporte por unidad de las fábricas a las regiones y los requerimientos de las regiones se presenta en la tabla N°2.
Tabla N°2
De la fábrica
Hasta la región
1
2
3
4
ATE
1
2
3
4
BELLAVISTA
2
3
2
3
Requerimiento (Miles de unidades)
500
200
700
800
NEWCOMP S.A. debe decidir en qué lugares se deben construir las fábricas, de qué tamaños deben ser éstas y cómo se deben satisfacer los requerimientos de las regiones.
El modelo en LINGO es:
Model:
Sets:
fabrica/fpa,fga,fpb,fgb,feb/:capacidad,costo_construccion, costo_manufactura, construccion;
region/r1,r2,r3,r4/:requerimiento;
rutas(fabrica, region): costo, cantidad;
Endsets
Data:
capacidad = 600, 1200, 600, 1200, 2000;
costo_construccion = 1000, 1500, 1200, 1600, 2000;
costo_manufactura = 5, 4, 5, 4, 3.5;
requerimiento = 500, 200, 700, 800;
costo = 1, 2, 3, 4,
1, 2, 3, 4,
2, 3, 2, 3,
2, 3, 2, 3,
2, 3, 2, 3;
Enddata
Min=@sum(rutas:costo*cantidad)+@sum(fabrica: costo_construccion*construccion)
+@sum(fabrica(i):@sum(rutas(i,j):costo_manufactura(i)*cantidad(i,j)));
@for(region(j):@sum(rutas(i,j) : cantidad(i,j)) >= requerimiento(j));
@for(fabrica(i):@sum(rutas (i,j) : cantidad(i,j))<=capacidad(i)*construccion(i));
@for(fabrica(i):@sum(rutas(i,j) : cantidad(i,j))<=capacidad(i));
@for(fabrica:@bin(construccion));
End
La solución de lingo es:
Objective value: 16200.00
Problema 6 de programación entera
La empresa financiera de Boris Milken es el dueño de 6 bienes. En las tablas se dan los precios esperados de venta (en millones de dólares) para cada bien. En la tabla se puede observar que la venta del bien 1 en el año 2 dará a la empresa un ingreso de 20 millones de dólares. Para conservar el flujo de efectivo regular, Milken debe vender por lo menos 20 millones de dólares en el año 1, por lo menos 30 millones de dólares en el año 2, y por lo menos 35 millones de dólares en el año 3. Se necesita maximizar el ingreso total de los bienes vendidos en los próximos 3 años.
VENDIDO EN EL
AÑO 1
AÑO 2
AÑO 3
BIEN 1
15
20
24
BIEN 2
16
18
21
BIEN 3
22
30
36
BIEN 4
10
20
30
BIEN 5
17
19
22
BIEN 6
19
25
29
SOLUCION:
VARIABLES: i = 1,2,3,4,5,6 j = 1,2,3
X(i,j) = 1 si el bien i se vende en el año j
0 en caso contrario
FUNCION OBJETIVO:
MAX Z = B( 1) + B( 2) + B( 3)
Donde:
15X(1,1) + 16X(2,1) + 22X(3,1) + 10X(4,1) + 17X(5,1) + 19X(6,1) = B(1)
20X(1,2) + 18X(2,2) + 30X(3,2) + 20X(4,2) + 19X(5,2) + 25X(6,2) = B(2)
24X(1,3) + 21X(2,3) + 36X(3,3) + 30X(4,3) + 22X(5,3) + 29X(6,3) = B(3)
RESTRICCIONES:
RESTRICCION 1: Cada bien solo se puede vender una vez:
X( 1, 1) + X( 1, 2) + X( 1, 3) <= 1
X( 2, 1) + X( 2, 2) + X( 2, 3) <= 1
X( 3, 1) + X( 3, 2) + X( 3, 3) <= 1
X( 4, 1) + X( 4, 2) + X( 4, 3) <= 1
X( 5, 1) + X( 5, 2) + X( 5, 3) <= 1
X( 6, 1) + X( 6, 2) + X( 6, 3) <= 1
RESTRICCION 2: Conservación del flujo de efectivo regular:
15X(1,1) + 16X(2,1) + 22X(3,1) + 10X(4,1) + 17X(5,1) + 19X(6,1) >= 20
20X(1,2) + 18X(2,2) + 30X(3,2) + 20X(4,2) + 19X(5,2) + 25X(6,2) >= 30
24X(1,3) + 21X(2,3) + 36X(3,3) + 30X(4,3) + 22X(5,3) + 29X(6,3) >= 35
FORMULACION EN LINGO:
Sets:
bien/1..6/;
year/1..3/:a,b;
matriz(bien,year):precio,x;
Endsets
Data:
a=20,30,35;
precio=15,20,24,
16,18,21,
22,30,36,
10,20,30,
17,19,22,
19,25,29;
Enddata
Max=@sum(year:b);
¡FUNCION OBJETIVO;
@for(year(j):@sum(bien(i):precio(i,j)*x(i,j))=b(j));
¡RESTRICCION 1;
@for(bien(i):@sum(year(j):x(i,j))<=1);
¡RESTRICCION 2
@for(year(j):@sum(bien(i):precio(i,j)*x(i,j))>=a(j));
@for(matriz:@bin(x));
SOLUCIÓN EN LINGO:
El máximo ingreso por la venta de bienes es 146 millones. El bien 1 se vende en el año 3, el bien 2 en el año 1, el bien 3 en el año 2, el bien 4 en el año 3, el bien 5 en el año 1 y en bien 6 en el año 3.
Problema 7 de programación entera
La universidad estatal tiene que comprar 1100 computadoras de tres vendedores. El vendedor 1 carga 500 dólares por computadora mas un encargo por la entrega de 5000 dólares, el vendedor 2 carga 350 dólares por computadora mas un cargo por la entrega de 4000 dólares. El vendedor 3 carga 250 dólares por computadora mas un cargo por la entrega por de 6000 dólares. El vendedor 1 venderá a lo mas 500 computadoras, el vendedor a los mucho 900 y el vendedor cuando mas 400. Se necesita minimizar el costo de la compra de computadoras necesarias.
SOLUCION:
VARIABLES:
X(i,j) = Cantidad de computadoras que vende el vendedor
Y(i,j) = 1 Si el vendedor i vende computadoras a la universidad estatal
0 en caso contrario.
FUNCION OBJETIVO:
MIN Z = 5000Y (1) + 4000Y (2) + 6000Y (3) + 500X (1) + 350X (2) + 250X (3)
RESTRICCIONES:
RESTRICCION 1: La universidad estatal tiene que comprar 1100 computadoras de tres vendedores.
X( 1) + X( 2) + X( 3) >= 1100
RESTRICCION 2: Lo máximo que puede vender cada vendedor:
X( 1) <= 500
X( 2) <= 900
X( 3) <= 400
RESTRICCION 3: Si la universidad compra computadoras al vendedor i entonces también tendrá que pagar el cargo respectivo por la entrega de computadoras.
1000000 Y( 1) + X( 1) <= 0
1000000 Y( 2) + X( 2) <= 0
1000000 Y( 3) + X( 3) <= 0
FORMULACION EN LINGO:
! MODELO DE WINSTON CAP 9 # PROB 6
COSTOS EN DOLARES;
!M=VALOR MUY GRANDE;
!COSTOE ES EL COSTO DE ENTREGA;
!X CANTIDAD DE COMPUTADORAS QUE VENDE EN VENDEDOR I;
!Y 1 SI EL VENDEDOR I VENDCOMPUTADORAS
! 0 EN CASO CONTRARIO;
SETS:
VENDEDOR/1..3/:COSTOE,COSTO,X,Y,MAXVEND;
ENDSETS
DATA:
COSTOE = 5000 4000 6000;
COSTO = 500 350 250;
MAXVEND= 500 900 400;
M=1000000;
REQUERIMIENTO=1100;
ENDDATA
MIN=@SUM(VENDEDOR(I):COSTO(I)*X(I))+@SUM(VENDEDOR(I):COSTOE(I)*Y(I));
! RESTRICCION 1;
@SUM(VENDEDOR(I):X(I))>=REQUERIMIENTO;
! RESTRICCION DE 2;
@FOR(VENDEDOR(I):X(I)<=MAXVEND(I));
! RESTRICCION DE 3;
@FOR(VENDEDOR(I):X(I)<=M*Y(I));
! RESTRICCION DE VARIABLES BINARIAS;
@FOR(VENDEDOR(I):@BIN(Y));
SOLUCION EN LINGO:
El mínimo costo para comprar computadoras es de 355 000 dolares, y la universidad tendrá que comprar 700 y 400 computadoras a los vendedores 1 y 2 respectivamente.
Problema 8 de programación entera
La acerera de Newcor recibió un pedido de 25 toneladas de acero. El acero debe tener 5% de carbono y 5% de molibdeno por peso. El acero es el resultado de combinar tres tipos de metales: lingotes de acero, acero de desperdicios y aleaciones. Están disponibles para la compra cuatro lingotes de acero. El peso (en toneladas), costo por tonelada, contenido de carbono y molibdeno de cada lingote se proporcionan en la tabla 1.
Se pueden comprar tres tipos de aleaciones. El costo por tonelada y composición química de cada aleación se dan en la tabla 2.
El desperdicio de acero se compra a un costo de 100 dólares por tonelada, y contiene 3% de carbono y 9% de molibdeno. Plantee un PE, mezclada con cuya solución indique a Newcor cómo debe minimizar el costo de cumplir con el pedido.
TABLA 1
Lingote
Peso
Costo por tonelada
% de carbono
% de molibdeno
1
5
350
5
3
2
3
330
4
3
3
4
310
5
4
4
6
280
3
4
TABLA 2
Aleación
Costo por tonelada
Carbono %
Molibdeno %
1
500
8
6
2
450
7
7
3
400
6
SOLUCIÓN:
Xi: 1, cuando se ha comprado el lingote i
0, en caso contrario
Yi: Numero de toneladas de aleación tipoi compradas
W: Numero de toneladas de desperdicios compradas
FUNCIÓN OBJETIVO:
MINZ=350*(5*X1)+330*(3*X2)+310*(4*X4)+500*Y1+450Y2+400Y3+100W
S.A.:
5*X1+4*X2+4*X3+6*X4+Y1+Y2+Y3+W=25 (PEDIDO)
5*(5*X1)+4*(3*X2)+5*(4*X3)+3*(6*X4)+8*Y1+7*Y2+6*Y3+3*W=5*25 (% CARBONO)
3*(5*X1)+3*(3*X2)+4*(4*X3)+4*(6*X4)+6*Y1+7*Y2+9*W=5*25 (% MOLIBDENO)
X1+X2+X3+X4=1 (LINGOTE)
Y1+Y2+Y3>0
W>0
XI=0 Ó 1
YI>0
W>0
El programa en Lingo es:
Sets:
lingote/1..4/:peso,costo1,carbono1,molibdeno1,x;
aleacion/1..3/:costo2,carbono2,molibdeno2,y;
desperdicio/1..1/:costo3,carbono3,molibdeno3,w;
Endsets
Data:
peso = 5,3,4,6;
costo1 = 350 ,330 ,310 ,280;
carbono1 = 0.05, 0.04 ,0.05 ,0.03;
molibdeno1 = 0.03, 0.03, 0.04, 0.04;
costo2 = 500, 450, 400;
carbono2 = 0.08, 0.07, 0.06;
molibdeno2 = 0.06, 0.07, 0.00;
costo3 = 100;
carbono3 = 0.03;
molibdeno3 = 0.09;
Enddata
!funcion objetivo;
min = @sum(lingote(i):costo1(i)*peso(i)*x(i))+ @sum(aleacion(j):costo2(j)*y(j) )+ @sum(desperdicio(k):costo3(k)*w(k));
!restriccion del pedido;
@sum(lingote(i):x(i)*peso(i))+ @sum(aleacion(j):y(j)) + @sum(desperdicio(k):w(k)) =25;
!restriccion del % de carbono;
@sum(lingote(i):x(i)*peso(i)*carbono1(i))+@sum(aleacion(j):y(j)*carbono2(j))+
@sum(desperdicio(k):w(k)*carbono3(k)) =1.25;
!restriccion del % de molibdeno;
@sum(lingote(i):x(i)*peso(i)*molibdeno1(i))+@sum(aleacion(j):y(j)*molibdeno2(j))+
@sum(desperdicio(k):w(k)*molibdeno3(k)) =1.25;
!restriccion del lingote;
@sum(lingote(i):x(i))=1;
!restriccion de las aleaciones;
@sum(aleacion(j):y(j))>0;
!restriccion de los desperdicios;
@sum(desperdicio(k):w(k))>0;
!restriccion del binario;
@for(lingote(i):@bin (x));
End
PROBLEMA APLICADO A LA ASIGNACIÓN IMPORTANDO DE EXCEL
PROBLEMA 1
La Fábrica de Calzado Flores produce y vende calzados de verano exclusivos. Uno de los factores más importantes para poder realizar una venta es el servicio rápido de Flores. Flores vende en 6 ciudades: Piura, Sullana, Sechura, Paita, Morropón y Ayabaca. Se proyectan las ventas anuales de pares de zapatos de acuerdo a la presencia de un representante de ventas dentro de 55 Km de una ciudad (tabla 1).
La ganancia por cada par de zapato es de S/. 70. El costo anual por representante de venta es de S/. 8 400. Flores debe determinar cuántos representantes colocar en cada uno de sus mercados. Solo se consideran Piura, Ayabaca, Paita y Sechura como bases para representantes de ventas, ya que en estas se encuentran las fábricas. Se dispone de 10, 8, 6, y 9 representantes en las bases: Piura, Ayabaca, Paita y Sechura respectivamente y se requieren 4, 5, 3 ,2 ,1 ,4 representantes de venta por mercado Piura, Ayabaca, Paita, Sechura, Morropón y Sullana respectivamente. La tabla 2 muestra las distancias en Km.
Se necesita maximizar las ganancias anuales.
TABLA 1
REPRESENTANTE
DENTRO DE
55Km
MERCADOS – VENTA
Piura
Ayabaca
Paita
Sechura
Morropón
Sullana
SI
130
120
130
110
110
122
NO
70
40
80
70
90
50
TABLA 2
Base-Fábrica Mercado
Piura
Ayabaca
Paita
Sechura
Piura
0
229
60
50
Ayabaca
229
0
117
260
Paita
60
117
0
55
Sechura
50
260
55
0
Morropón
60
58
115
52
Sullana
39
40
47
239
SOLUCIÓN:
FORMULACIÓN ALGEBRAICA DEL MODELO
Definición de variables:
X i, j = Cantidad de representantes de la Fabrica j en el mercado de la ciudad i.
H i, j = Es 1 si la distancia de la fabrica i a la ciudad j es menor o igual a 55, sino 0.
T i, j = Es 1 si la distancia de la fabrica i a la ciudad j es mayor que 55.
Z i, j = matriz de variables que se filtraran con la matriz Hij.
W i, = Cantidad de ventas en el mercado i, sin representante.
Y i = Cantidad de ventas en el mercado i, con representante
Definición de parámetros:
SI i, j = Cantidad de ventas anuales en el mercado de la ciudad i, por cada representante.
NO i, j = Cantidad de ventas anuales en el mercado de la ciudad i, en caso no hubiesen representantes.
REPRE i = Cantidad disponible de representantes en la fabrica i.
REPREMIN i = Cantidad mínima requerida de representantes en el mercado i.
DIST i, j = Distancia de la fabrica i, a la ciudad j
RESTRICCION DE MAXIMA CANTIDAD DE REPRESENTANTES POR FÁBRICA Y MERCADO
j=14i=16Xi,j REPREj
RESTRICCION DE MÍNIMA CANTIDAD DE REPRESENTANTES POR FÁBRICA Y MERCADO
i=16j=14Xi,j REPREMINi
VENTAS SIN REPRESENTANTE POR MERCADO
i=16j=14NOi×Ti,j =Wi
VENTAS CON REPRESENTANTE POR MERCADO
Zi,j × Hi,j =Xi,j
i=16j=14SIi×Xi,j=Yi
SALARIO DE REPRESENTANTES
8400×i=16j=14Xi,j=COSTO
FUNCION OBJETIVO
MAX=70×i=16Wi+ i=16Yi- COSTO
5.1.1 INTERPRETACIÓN E IMPLENTACIÓN EN LINGO:
INTERPRETACIÓN
FUNCION OBJETIVO:
Lo que pide el problema es maximizar las utilidades por cada año de operación por lo cual se analizaran los ingresos y egresos.
Ingresos:
Los ingresos son proporcionales a la cantidad de pares de zapatos vendidos.
Por ejemplo la distancia de la fábrica en Paita al mercado en Piura es de 60 Km (encerrado de rojo) por lo cual no es posible la presencia de un representante y de acuerdo a la tabla 1 solo se venderá 70 pares de zapatos.
Ahora la distancia de la fábrica en Piura al mercado en Sechura es de 50 Km (encerrado de verde) por lo cual hay probabilidad de asignar uno o más representantes y de acuerdo a la tabla 1 se venderá 110 pares de zapatos por cada representante asignado (Si fuera un representante se vendería como 110 y si fueran dos entonces 220).
Entonces se realiza el siguiente cuadro de acuerdo a las ventas y a las distancias.
Total de pares de zapatos vendidos por cada mercado
CUADRO 1
Piura
Ayabaca
Paita
Sechura
Piura
130X11
70
70
130X14
Ayabaca
40
120X22
40
40
Paita
80
80
130X33
130X34
Sechura
110X41
70
110X43
110X44
Morropón
90
90
90
110X54
Sullana
122X61
122X62
122X63
50
X i, j = Cantidad de representantes de la Fabrica j en el mercado de la ciudad i.
INGRESO=70*(130X11+70+70+130X14+40+120X22+40+40+80+80+130X33+130X34+110X41+70+110X43+110X44+90+90+90+110X54+122X61+122X62+122X63+50)
Egresos:
Los egresos serian lo que se paga a cada uno de los representantes esto sería:
Costo=8400*X11+X14+X22+X33+X34+X41+X43+X44+X54+X61+X62+X63
Ahora nuestra función objetivo quedaría:
MAX=INGRESO-COSTO
MAX=70*130X11+70+70+130X14+40+120X22+40+40+80+80+130X33+130X34+110X41+70+110X43+110X44+90+90+90+110X54+122X61+122X62+122X63+50-8400*X11+X14+X22+X33+X34+X41+X43+X44+X54+X61+X62+X63
MAX=700 X11 + 700X14+ 700X33 + 700X34- 700X41-700X43 - 700X4444 - 700X54 + 140X61 + 140X62 + 140X63 +56700
RESTRICCIONES:
Cantidad mínima de los representantes de cada fábrica
X11 +X41+X61<=10
X22+X62<=8
X33 +X43+X63<=6
X14+X34+X44+X54<=9
Cantidad mínima de representante por mercado
X11+X14>=4
X22>=5
X33+X34>=3
X41+X43+X44>=2
X54>=1
X61+X62+X63>=4
IMPLEMENTACIÓN EN LINGO:
En LINGO se realizan implementaciones muy largas y tediosas, pero estas siempre siguen un formato de suma o repetición por filas y columnas.
DEFINICIÓN DE SETS:
Según lo planteado y a los datos del problema tenemos:
SETS:
MERCADOS/1..6/:SI,NO,W,Y,REPREMIN;
FABRICAS/1..4/:REPRE;
MERCAFABRI(MERCADOS,FABRICAS):DIST,X,H,T,Z;
ENDSETS
Creando Hij y Tij;
@FOR(MERCAFABRI(I,J)"DIST(I,J)#LE#55:H(I,J)=1);!REPRESENTANTES;
@FOR(MERCAFABRI(I,J)"DIST(I,J)#GT#55:H(I,J)=0);
@FOR(MERCAFABRI(I,J)"DIST(I,J)#GT#55:T(I,J)=1);!SIN REPRESENTANTES;
@FOR(MERCAFABRI(I,J)"DIST(I,J)#LE#55:T(I,J)=0);
@FOR(MERCAFABRI(I,J):) señala que realizará una operación tantas veces como la cantidad de elementos de MERCAFABRI, como es una matriz de 6 filas y 4 columnas hará la operación 24 veces.
DIST(I,J)#LE#55; hará la operación si DIST(I,J)<=55.
@FOR(MERCAFABRI(I,J)"DIST(I,J)#LE#55:H(I,J)=1); toda esta sentencia indica que si DIST(I,J)<=55 el valor H(I,J)=1.
Las demás sentencias son análogas, solo que DIST(I,J)#GT#55; indica que solo se realizará la operación si DIST(I,J)>55.
Restricción De Máxima Cantidad De Representantes Por Fábrica
j=14i=16Xi,j REPREj
!RESTRICCION DE MAXIMA CANTIDAD DE REPRESENTANTES POR FABRICA Y MERCADO;
@FOR(FABRICAS(J):@SUM(MERCADOS(I):X(I,J))<=REPRE(J));
Restricción De Mínima Cantidad De Representantes Por Mercado
i=16j=14Xi,j REPREMINi
!RESTRICCION DE MINIMA CANTIDAD DE REPRESENTANTES POR FABRICA Y MERCADO;
@FOR(MERCADOS(J):@SUM(FABRICAS(I):X(J,I))>=REPREMIN(J));
Ventas Sin Representante Por Mercado
i=16j=14NOi×Ti,j =Wi
!VENTAS SIN REPRESENTANTE POR MERCADO;
@FOR(MERCADOS(J):@SUM(FABRICAS(I):NO(J)*T(J,I))=W(J));
Ventas Con Representante Por Mercado
Zi,j × Hi,j =Xi,j
i=16j=14SIi×Xi,j=Yi
!VENTAS CON REPRESENTANTE POR MERCADO;
@FOR(MERCAFABRI(I,J):Z(I,J)*H(I,J)=X(I,J));
@FOR(MERCADOS(J):@SUM(FABRICAS(I):SI(J)*X(J,I))=Y(J));
Salario De Representantes
8400×i=16j=14Xi,j=COSTO
!SALARIO DE REPRESENTANTES;
@SUM(MERCAFABRI(I,J):X(I,J))*8400=COSTO;
Función Objetivo
MAX=70×i=16Wi+ i=16Yi-COSTO
MAX=70*(@SUM(MERCADOS(I):W(I))+@SUM(MERCADOS(I):Y(I)))-COSTO;
Definición de data.
Data directa en lingo:
DATA:
DIST= 0 229 60 50
229 0 117 260
60 117 0 55
50 260 55 0
60 58 115 52
39 40 47 239;
REPRE=10 8 6 9;
REPREMIN=4 5 3 2 1 4;
SI=130 120 130 110 110 122;
NO=70 40 80 70 90 50;
ENDDATA
Data exportada de Excel:
DATA:
DIST,REPRE,REPREMIN,SI,NO= @OLE('F:\VII CICLO\OPE\LABO\PROBLEMA2.xlsx');
@OLE('F:\VII CICLO\OPE\LABO \DATA1.xlsx')=X;
ENDDATA
LINGO tiene una función sencilla, @OLE(),para recuperar y colocar datos de y a una hoja de cálculo (Excel).
Un paso sencillo pero oculto que debe de realizarse antes en las hojas de cálculo es definir los nombres de los rangos de las distintas colecciones de celdas que contienen datos. Los nombres de los rangos se pueden definir en Excel con el ratón y el elemento del menú Insertar, nombre, definir. Se elige los datos de la hoja y luego click derecho luego a asignar rangos y poner el nombre con que se llamara en LINGO.
Las primeras 5 aplicaciones mostradas en el data ilustran que esta función se puede usar de a la derecha de una instrucción de asignación para recuperar datos de una hoja de cálculo. La última muestra que se puede colocar a la izquierda de una asignación para colocar los resultados en la hoja de cálculo.
PROGRAMA EN LINGO:
MODEL ASIGNACION :
!MODELO DE ASIGNACION DE REPRESENTANTES;
SETS:
MERCADOS/1..6/:SI,NO,W,Y,REPREMIN;
FABRICAS/1..4/:REPRE;
MERCAFABRI(MERCADOS,FABRICAS):DIST,X,H,T,Z;
ENDSETS
DATA:
DIST,REPRE,REPREMIN,SI,NO= @OLE('G:\VII CICLO\OPE\LABO\DATA1.xlsx');
@OLE('F:\VII CICLO\OPE\LABO \DATA1.xlsx','C_X')=X;
ENDDATA
MAX=70*(@SUM(MERCADOS(I):W(I))+@SUM(MERCADOS(I):Y(I)))-COSTO;
@FOR(MERCAFABRI(I,J)"DIST(I,J)#LE#55:H(I,J)=1);!REPRESENTANTES;
@FOR(MERCAFABRI(I,J)"DIST(I,J)#GT#55:H(I,J)=0);
@FOR(MERCAFABRI(I,J)"DIST(I,J)#GT#55:T(I,J)=1);!SIN REPRESENTANTES;
@FOR(MERCAFABRI(I,J)"DIST(I,J)#LE#55:T(I,J)=0);
!RESTRICCION DE MAXIMA CANTIDAD DE REPRESENTANTES POR FABRICA Y MERCADO;
@FOR(FABRICAS(J):@SUM(MERCADOS(I):X(I,J))<=REPRE(J));
!RESTRICCION DE MINIMA CANTIDAD DE REPRESENTANTES POR FABRICA Y MERCADO;
@FOR(MERCADOS(J):@SUM(FABRICAS(I):X(J,I))>=REPREMIN(J));
!VENTAS SIN REPRESENTANTE POR MERCADO;
@FOR(MERCADOS(J):@SUM(FABRICAS(I):NO(J)*T(J,I))=W(J));
!VENTAS CON REPRESENTANTE POR MERCADO;
@FOR(MERCAFABRI(I,J):Z(I,J)*H(I,J)=X(I,J));
@FOR(MERCADOS(J):@SUM(FABRICAS(I):SI(J)*X(J,I))=Y(J));
!SALARIO DE REPRESENTANTES;
@SUM(MERCAFABRI(I,J):X(I,J))*8400=COSTO;
END
5.1.2 REPORTE DE LA SOLUCIÓN EXPORTANDO DATOS A EXCEL:
CANT. DE REPRESENTANTES
PIURA
AYABACA
PAITA
SECHURA
PIURA
7
0
0
0
AYABACA
0
5
0
0
PAITA
0
0
6
8
SECHURA
2
0
0
0
MORROPÓN
0
0
0
1
SULLANA
1
3
0
0
En este cuadro podemos ver las cantidades de representantes asignados para cada mercado pertenecientes a una determinada fábrica o base. Estas cantidades cumplen con todas las condiciones establecidas.
MODELO DE ASIGNACIÓN DE PRESUPUESTO
La compañía constructora Molina dispone de 180 millones como presupuesto para 3 años, que se usaran en sus 3 sucursales. Se ha establecido un nivel máximo de asignación de fondos de 20 millones para cada sucursal por año. En caso que una sucursal no exceda el límite anual, puede usar esa diferencia para el siguiente año. Cada sucursal tiene la oportunidad de dirigir distintos proyectos con los fondos que recibe. Para cada proyecto se ha establecido una tasa de ganancia (como un porcentaje de la inversión) y una inversión máxima (Tabla1). Por otra parte, algunos de los proyectos obligan una inversión mínima como se indica en la tabla 2. Determine la política de asignación de recursos que genere el mejor beneficio.
TABLA 1
SUCURSAL
Año 1
Año 2
Año 3
Proyecto
Tasa de utilidad
(%)
Inversión máxima
(m)
Proyecto
Tasa de utilidad
(%)
Inversión máxima
(m)
Proyecto
Tasa de utilidad
(%)
Inversión máxima
(m)
Trujillo
1
8
10
1
9
9
1
8
8
2
6
7
2
6
5
2
7
7
3
7
9
3
7
9
3
7
7
Lima
1
5
7
1
6
4
1
5
9
2
8
10
2
18
10
2
8
8
3
9
5
3
5
6
3
5
5
Tacna
1
10
6
1
11
6
1
7
6
2
6
7
2
6
10
2
6
11
3
15
5
3
15
5
3
15
6
TABLA 2
Inversión Mínima (millones)
Sucursal
Proyecto
Periodo
Cantidad mínima
Trujillo
2
1
4
Lima
1
1
5
Tacna
2
2
9
Adicionalmente por una directiva de la alta gerencia se requiere que los proyectos que tienen una utilidad mayores del 7% en cualquier año, por lo menos tengan una inversión de 5 millones.
SOLUCIÓN:
FORMULACIÓN ALGEBRAICA DEL MODELO
Definición de variables:
X i, j, k = Cantidad asignada a la sucursal i para el proyecto j en el periodo k.
Sobrante i, k = Cantidad sobrante de dinero no asignado a la sucursal i en periodo k.
Definición de parámetros:
Máximo i, k = Nivel máximo de asignación de fondos para la sucursal i en el periodo k.
Mínimo i, j, k = Nivel mínimo de asignación de fondos en la sucursal i, para el proyecto j, en el periodo k.
InvMáxima i, j, k = Inversión máxima en la sucursal i para el proyecto j en el periodo k.
InvMínima=Inversión mínima que establece la gerencia para ciertos proyectos con tasa de utilidad mayor a 7%.
Presupuesto Total = Presupuesto total disponible.
Tasa i, j, k = Tasa de rentabilidad de la sucursal i, para el proyecto j durante el periodo k.
RESTRICCIÓN DE USO MÁXIMO DE PRESUPUESTO POR PERIODO POR SUCURSAL.
3
X i, j, k + Sobrante i, k = Máximo i, k
j =1
k=1 (Solo el primer año)
i = 1, 2, 3 (Sucursal).
3
X i , j ,k -Sobrante i,k-1 + Sobrante i, k = Máximo i, k
j 1
k 2, 3 (Periodo)
i 1, 2, 3 (Sucursal)
RESTRICCIÓN DE INVERSIÓN MÍNIMA PARA ALGUNOS PROYECTOS ESPECÍFICOS.
X i , j ,k Mínimo i , j ,k ; Solo para (i=1, j=2, k=1) Λ (i=2, j=1, k=1) Λ
(i=3, j=2, k=2)
RESTRICCIÓN DE INVERSIÓN MÁXIMA POR PROYECTO EN CADA SUCURSAL.
X i , j ,k InvMáxima i , j ,k i =1, 2, 3 j =1, 2, 3 k=1, 2, 3
RESTRICCIÓN DE PRESUPUESTO DISPONIBLE.
3 3 3
X i , j ,k Presupuesto Total
I=1 j=1 k =1
RESTRICCIÓN DE INVERSIÓN MÍNIMA POR DIRECTIVA DE ALTA GERENCIA.
X i , j ,k InvMínima
Tasai,j,k 0.07
MODEL PRESUPUESTOS:
! MODELO DE ASIGNACION DE PRESUPUESTO;
SETS:
SUCURSAL /TRUJILLO,LIMA,TACNA/:;
PROYECTO /1..3/: ;
PERIODO /1..3/: ;
SUCURSAL_PERIODO (SUCURSAL,PERIODO) : SOBRANTE, MAXIMO;
SUCURSAL_PROYECTO_PERIODO (SUCURSAL,PROYECTO,PERIODO):TASA, INVMAXIMA, ASIGNACION;
INVERSION_MINIMA (SUCURSAL,PROYECTO,PERIODO)/TRUJILLO 2 1, LIMA 1 1, TACNA 2 2 /: MINIMO;
ENDSETS
DATA:
TASA,INVMAXIMA,MINIMO,PRESUPUESTO,INVMINIMA= @OLE('G:\VII CICLO\OPE\LABO\DATA2.xlsx','tasa','INV_MAX','mínima','presupuesto','inv_mínima' );
MAXIMO = 20, 20, 20,
20, 20, 20,
20, 20, 20;
ENDDATA
! Funcion Objetivo;
MAX = FO;
FO=@SUM(SUCURSAL_PROYECTO_PERIODO: TASA * ASIGNACION );
! Restriccion de uso maximo de presupuesto por periodo por sucursal ;
@FOR(PERIODO(K) " K #EQ# 1:@FOR( SUCURSAL(I):@SUM( PROYECTO(J) :ASIGNACION(I,J,K) ) + SOBRANTE(I,K) = MAXIMO(I,K) ));
@FOR(PERIODO(K) " K #NE# 1:@FOR( SUCURSAL(I):@SUM( PROYECTO(J) :ASIGNACION(I,J,K) ) - SOBRANTE(I,K-1)+ SOBRANTE(I,K) = MAXIMO(I,K) ));
! Restriccion de inversion minima para algunos proyectos especificos ;
@FOR(INVERSION_MINIMA(I,J,K): ASIGNACION(I,J,K) >= MINIMO(I,J,K));
! Restriccion de inversion maxima por proyecto en cada sucursal ;
@FOR(SUCURSAL_PROYECTO_PERIODO(I,J,K): ASIGNACION(I,J,K) <= INVMAXIMA(I,J,K) );
@FOR(SUCURSAL_PROYECTO_PERIODO(I,J,K)"TASA(I,J,K)#GT#0.07: ASIGNACION(I,J,K)>= INVMINIMA);
! Restriccion de prespuesto disponible;
@SUM( SUCURSAL_PROYECTO_PERIODO(I,J,K): ASIGNACION(I,J,K)) <= PRESUPUESTO ;
DATA:
@OLE('J:\OPE\LABO\DATA2.xlsx','FO','SOBRANTE','ASIGNACION' )=FO,SOBRANTE,ASIGNACION;
ENDDATA
END
FUNCIÓN OBJETIVO
MAX=i=13j=13k=13Tasai,j,k x Xi,j,k
PROGRAMA EN LINGO
5.3.1 REPORTE DE LA SOLUCIÓN EXPORTANDO DATOS A EXCEL :
Utilidad en 3 años en millones de dólares
UTILIDAD EN 3 AÑOS
15.24
millones
Excedente de sucursales por años
EXCEDENTE DE SUCURSALES POR AÑOS
SUCURSAL
1
2
3
TRUJILLO
0
2
0
LIMA
0
2
0
TACNA
4
3
0
Este cuadro nos muestra los excedentes que se dieron en cada uno e los años en las diferentes sucursales debido a que no se utilizó el máximo asignado que era de 20 millones. Así tenemos que en la sucursal de Trujillo hubo un sobrante de 2 millones en el segundo año, luego de haber invertido en los 3 proyectos; en lima igualmente en el segundo año hubo un sobrante de 2 millones y en
Tacna en el primer y segundo año sobrantes de 4 y 3 millones respectivamente.
Asignaciones de presupuesto por sucursal, proyecto y año
PROYECTO 1
1
2
3
TRUJILLO
10
9
8
LIMA
5
4
9
TACNA
6
6
6
PROYECTO 2
1
2
3
TRUJILLO
4
0
7
LIMA
10
10
8
TACNA
5
10
11
PROYECTO 3
1
2
3
TRUJILLO
6
9
7
LIMA
5
4
5
TACNA
5
5
6
En estos 3 últimos cuadros podemos ver las cantidades en millones asignadas para cada proyecto en una determinada sucursal y año. Estas cantidades cumplen con todas las condiciones establecidas.
Modelo de Asignación de Proyecto
Una compañía dispone de 35 millones para distribuirlos el próximo año entre sus sucursales (Arequipa, Cuzco, Trujillo). Debido a compromisos de la estabilidad, el nivel de empleados y por otras razones la compañía ha establecido un nivel mínimo de asignación de fondos para cada sucursal. Estos fondos mínimos son de 8, 10 y 15 millones de dólares respectivamente. Debido a la naturaleza de su operación, la sucursal Cuzco no puede utilizar más de 20 millones de dólares. Cada sucursal tiene la oportunidad de dirigir distintos proyectos con los fondos que recibe. Para cada proyecto se ha establecido una tasa de ganancia (como un porcentaje de la inversión). Por otra parte, algunos de los proyectos permiten solo una inversión limitada. A continuación se dan los datos para cada proyecto.
Sucursal
Proyecto
Tasa de Utilidad(%)
Inversión Máxima
1
8
10
Arequipa
2
6
5
3
7
9
1
5
7
Cuzco
2
8
10
3
9
4
1
10
6
Trujillo
2
6
12
3
15
6
Solución:
Dada la información del problema, lo que se debe hacer es maximizar las utilidades de la compañía en mención, asignando de la mejor manera los fondos a sus respectivas sucursales.
FORMULACIÓN DEL MODELO
DEFINICIÓN DE VARIABLES:
Xij: Cantidad asignada a la sucursal i para el proyecto j
(Siendo: i=1, 2, 3; 1: Arequipa, 2: Cuzco, 3: Trujillo) (j=1, 2, 3)
Definición de parámetros:
Mínimo: Nivel mínimo de asignación de fondos para la sucursal i (i=1,2,3)
Máximo: Nivel máximo de asignación de fondos para la sucursal i (i=1,2,3)
Inv.Maximaij: Inversión máxima en la sucursal i para el proyecto j.
(Siendo: i=1, 2, 3 y j=1, 2, 3)
PresupuestoTotal: Presupuesto total disponible.
Tasaij: Tasa de rentabilidad del proyecto j en sucursal i.
(Siendo: i=1, 2, 3 y j=1, 2, 3)
FUNCIÓN OBJETIVO:
Max Z = Tasa11*X11 +Tasa12*X12+ Tasa 13*X13 + Tasa 21 *X21 + Tasa 22 *X22 + Tasa 23 *X23 + Tasa 31 *X31 + Tasa 32 *X32 + Tasa 33*X 33
RESTRICCIONES:
6.3.1 RESTRICCIÓN DE USO MÍNIMO DE PRESUPUESTO POR SUSCURSAL
Arequipa: X11 +X12 +X13 Minimo1
Cuzco: X21 +X22 +X23 Minimo2
Trujillo: X31 +X32 +X33 Minimo3
6.3.2 RESTRICCIÓN DE USO MÁXIMO DE PRESUPÚESTO POR SUCURSAL
Cuzco: X21 +X22 +X23 Máximo2
6.3.3 RESTRICCIÓN DE INVERSIÓN MÁXIMA POR PROYECTO EN CADA SUCURSAL
Arequipa:
X11 InvMaxima11
X12 InvMaxima12
X13 InvMaxima13
Cuzco:
X21 InvMaxima21
X22 InvMaxima22
X23 InvMaxima23
Trujillo:
X31 InvMaxima31
X32 InvMaxima32
X33 InvMaxima33
6.3.4 RESTRICCION DE PRESUPUESTO DISPONOBLE
X11 +X12 +X13 +X21 +X22 +X23+ X31 +X32 +X33 PresupuestoTotal
PROGRAMACIÓN EN LINGO
Ahora resolvamos el modelo, pulsando el ícono, con lo que obtendremos los siguientes resultados:
De los resultados del reporte, en la parte superior se nota que la función objetivo se optimiza cuando la rentabilidad es máxima, es decir, cuando toma el valor de 3.32 millones de dólares.
El resultado también nos da la asignación total de los recursos financieros, en el atributo ASIGNACIÓN. El valor de ASIGNACION (Arequipa, 1), por ejemplo es 8. Esto significa que la cantidad de dinero asignado a la sucursal Arequipa para el proyecto 1 deberá ser 8 millones de dólares. Para ver la solución de sólo este atributo, escoge la opción "solution" y en el cuadro de diálogo se ingresa el nombre "ASIGNACION". También puede seleccionar el siguiente Ícono:
Y aparecerá la siguiente ventana:
Se activa la opción que permite mostrar sólo los valores distintos de cero para que LINGO sólo muestre los valores de la variable ASIGNACION distintos de cero, así:
Y en este último cuadro se puede ver la forma cómo tienen que ser repartidos los fondos a las diversas sucursales de la compañía para alcanzar una máxima utilidad. A la sucursal de Arequipa se le asigna 8 millones para invertir en el proyecto 1, a la sucursal del Cuzco 8 millones para el proyecto 2 y 4 millones para el proyecto 3 y finalmente para la sucursal de Trujillo 1 millón para el proyecto 1, 3 millones para el proyecto 2 y 6 millones para el proyecto 3.
Programación Lineal con 4 variables (Excel)
Graficolor, fabricante y distribuidor de papel y demás útiles escolares produce 3 tipos diferentes de papel que se pueden fabricar tanto en la fábrica A, B o C, las cuales se encuentran ubicadas en la ciudad de Lima. La empresa busca satisfacer la demanda establecida para las ciudades de Tacna y Cuzco en donde se venden dichos productos. Para ello se tiene en cuenta que en estas ciudades existen 2 tipos de centros de distribución (supermercados y librerías) los cuales pertenecen a la corporación. Los precios de venta de los productos según donde fueron fabricados, la ciudad y el centro de distribución donde se va a vender se muestran en las siguientes tablas:
Tacna
Cuzco
Supermercado
Librería
Supermercado
Librería
Producto 1
Producto 2
Producto 3
Producto 1
Producto 2
Producto 3
Producto 1
Producto 2
Producto 3
Producto 1
Producto 2
Producto 3
Fábrica A
12
15
17
11
12
15
14
12
13
15
13
12
Fábrica B
10
13
14
12
14
16
13
14
15
11
12
13
Fábrica C
12
11
13
10
11
13
11
13
14
12
13
14
La corporación busca maximizar sus ventas y saber cómo va a distribuir sus productos tomando en cuenta la capacidad de producción de las fábricas, la demanda de las ciudades y la capacidad de los centros de distribución.
Capacidad de Producción:
Fábrica A
Fábrica B
Fábrica C
Producto 1
75
65
70
Producto 2
60
70
80
Producto 3
65
75
75
Demanda:
Tacna
Cuzco
Producto 1
73
67
Producto 2
58
72
Producto 3
67
74
Capacidad de los centros de distribución:
Tacna
Cuzco
Supermercado
150
140
Librería
130
150
Solución:
Xijkl: cantidad de productos elaborados en la fábrica "i", que corresponde al tipo "j", distribuido en "k", en la ciudad "l"
Donde:
Tipo de fábrica: i= A, B, C
Tipo de producto: j= P1, P2, P3
Tipo de centro de distribución: k=supermercado (S), librería (L)
Ciudades: l=Tacna (T), Cuzco (Cz)
Función objetivo:
i=ACj=P1P3k=SLl=TCzXijkl*PRECIOijkl
Sujeto a:
Capacidad de producción:
k=SMLl=P1P3Xijkl
Demanda:
i=ACk=SLXijkl
Capacidad de los centros de distribución:
i=ACj=P1P3Xijkl
El ejercicio en el programa Lingo
!PROBLEMA LINGO;
MODEL:
SETS:
FABRICAS / A B C/:; !Tipo de fábrica: i= A, B, C ;
PRODUCTOS /P1 P2 P3/:; !Tipo de producto: j= P1, P2, P3 ;
CENTRO /S L/:; !Tipo de centro de distribución: k=supermercado (S), librería (L);
CIUDAD /T C/:; !Ciudades: l=Tacna (T), Cuzco (Cz);
!REQUERIMIENTO DE PRODUCTOS PARA UNA FABRICA, EN UN CENTRO DE DISTRIBUCION, EN UNA CIUDAD,;
FPCC(FABRICAS,PRODUCTOS,CENTRO,CIUDAD):PRECIO,X;
FABPRO(FABRICAS,PRODUCTOS):CAPACIDAD;
PROCIU(PRODUCTOS,CIUDAD):DEMANDA;
CENCIUDAD(CENTRO,CIUDAD):CAPACIDAD2;
ENDSETS
DATA:
CAPACIDAD= 75 60 65,
65 70 75,
70 80 75;
DEMANDA= 73 67,
58 72,
67 74;
CAPACIDAD2= 150 140,
130 150;
PRECIO= 12 15 17 11 12 15 14 12 13 15 13 12,
10 13 14 12 14 16 13 14 15 11 12 13,
12 11 13 10 11 13 11 13 14 12 13 14;
ENDDATA
MAX=@SUM(FPCC:PRECIO*X);!FUNCION OBEJTIVO RESULTADO;
@FOR(FABPRO(I,J):@SUM(FPCC(I,J,K,L):X(I,J,K,L))<=CAPACIDAD(I,J));
!RESTRICCIONES DE LA CAPACIDAD DE CADA RECURSO;
@FOR(PROCIU(J,L):@SUM(FPCC(I,J,K,L):X(I,J,K,L))>=DEMANDA(J,L));
!RESTRICCIONES DE LA DEMANDA DE CADA RECURSO;
@FOR(CENCIUDAD(K,L):@SUM(FPCC(I,J,K,L):X(I,J,K,L))<=CAPACIDAD2(K,L));
!RESTRICCIONES DE KA CAPACIDAD DE CADA RECURSO;
END
RESULTADOS
Podemos ver que la maximización de ventas es de: 8260
Para maximizar los costos:
Fabrica A:
La empresa debe de distribuir las 75 unidades del producto 1 a la librería de la ciudad de Tacna.
También debe distribuir 5 unidades del producto 2 al supermercado de la ciudad del Cuzco y el resto (55 unidades) será enviada a la librería de la ciudad de Tacna.
Además debe distribuir 65 unidades del producto 3 al supermercado de la ciudad del Cuzco.
Fabrica B:
La empresa debe distribuir 1 unidad del producto 1 al supermercado de la ciudad del Cuzco. Además tiene que distribuir 64 unidades a la librería de la ciudad del Cuzco.
Además debe distribuir 3 unidades del producto 2 al supermercado de la ciudad de Tacna. También 67 unidades al supermercado de la ciudad del Cuzco.
También podemos ver que se debe distribuir 75 unidades del producto 3 al supermercado de la ciudad de Tacna.
Fabrica C:
Se deben distribuir 6 unidades del producto 1 al supermercado de Tacna. Además de 2 unidades al supermercado de Cuzco.
También se debe distribuir 77 unidades del producto 2 a la librería del Cuzco.
También se debe distribuir 66 unidades del producto 3 al supermercado de Tacna. Además de 9 unidades a la librería de la ciudad de Cuzco.
Análisis de los Costos Reducidos
Por ejemplo en X(A,P1,S,T) tiene un costo reducido de 4 esto quiere decir que si nosotros aumentamos en 4 unidades el coeficiente de la FO se convertirá en una alternativa conveniente ya que se hará 0 el costo reducido.
Variable Value Reduced Cost
X( A, P1, S, T) 0.000000 4.000000
X( A, P1, S, C) 0.000000 0.000000
X( A, P1, L, T) 75.00000 0.000000
X( A, P1, L, C) 0.000000 3.000000
Ahora el primer recurso si le aumentamos 4 unidades será 12+4=16 el nuevo resultado sería :
Variable Value Reduced Cost
X( A, P1, S, T) 3.000000 0.000000
X( A, P1, S, C) 0.000000 0.000000
X( A, P1, L, T) 72.00000 0.000000
X( A, P1, L, C) 0.000000 3.000000
Holgura o Excedente
Vemos que si la restricción es exacta satisfecha como una igualdad, la holgura o excedente valdrá cero y como no hay ningún número negativo en nuestro reporte diremos que ninguna restricción es violada.
Precio Dual
El precio dual se puede interpretar como el monto en que la función objetivo mejorará si el segundo miembro de la restricción se incrementase en una unidad en nuestro cuadro de resultados podemos ver que Row 2 =4 esto quiere decir que si al recurso de la segunda restricción le aumentamos en 4 unidades, es decir 60+4=64 el nuevo valor de nuestra FO= 2864, aumentará en 4 unidades.
CONCLUSIONES
Primero podemos decir que una variable en la solución óptima automáticamente tiene un costo reducido de 0.
En la interpretación del costo reducido podemos ver que si la variable tiene un costo reducido de "a" el coeficiente objetivo de esta variable deberá incrementarse en "a" unidades en un problema de maximización o disminuirse en "a" unidades en un problema de minimización para convertirse en una alternativa atractiva.
En nuestro ejerció podemos ver que ninguna restricción es violada ya que en el análisis de Holgura y Excedente no hay ninguna variable negativa.
EL PROBLEMA EN LINGO EXPORTANDO DATOS EN EXCEL
Los pasos que se sigue para crear una base de datos en EXCEL son:
Crear una carpeta en C, por ejemplo: TRABAJO DE OPE I
Crear un hoja de cálculo denominado PROBLEMA 1
Luego en la hoja de cálculo poner los datos del problema:
Asignar nombre a la matriz:
Hacer click en la barra del menú: "Formulas"
Hacer click en: "Administrador de nombres"
Luego aparecerá una nueva ventana donde colocaremos el nombre de la matriz luego la hoja, el rango de la matriz y por último hacer click en aceptar.
PROGRAMACION EN LINGO EXPORTANDO DATOS EN EXCEL
!PROBLEMA LINGO;
MODEL:
SETS:
FABRICAS / A B C/:; !Tipo de fábrica: i= A, B, C ;
PRODUCTOS /P1 P2 P3/:; !Tipo de producto: j= P1, P2, P3 ;
CENTRO /S L/:; !Tipo de centro de distribución: k=supermercado (S), librería (L);
CIUDAD /T C/:; !Ciudades: l=Tacna (T), Cuzco (Cz);
!REQUERIMIENTO DE PRODUCTOS PARA UNA FABRICA, EN UN CENTRO DE DISTRIBUCION, EN UNA CIUDAD,;
FPCC(FABRICAS,PRODUCTOS,CENTRO,CIUDAD):PRECIO,X;
FABPRO(FABRICAS,PRODUCTOS):CAPACIDAD;
PROCIU(PRODUCTOS,CIUDAD):DEMANDA;
CENCIUDAD(CENTRO,CIUDAD):CAPACIDAD2;
ENDSETS
DATA:
PRECIO,CAPACIDAD,DEMANDA,CAPACIDAD2=@OLE('C:\LINGO11\Samples\PROBLEMA 1.XLS','precio','capacidad','demanda','capacidad1');
ENDDATA
MAX=FO;
FO=@SUM(FPCC:PRECIO*X);
@FOR(FABPRO(J,I):@SUM(FPCC(I,J,K,L):X(I,J,K,L))<=CAPACIDAD(J,I));
!RESTRICCIONES DE LA CAPACIDAD DE CADA RECURSO;
@FOR(PROCIU(J,L):@SUM(FPCC(I,J,K,L):X(I,J,K,L))>=DEMANDA(J,L));
!RESTRICCIONES DE LA DEMANDA DE CADA RECURSO;
@FOR(CENCIUDAD(K,L):@SUM(FPCC(I,J,K,L):X(I,J,K,L))<=CAPACIDAD2(K,L));
!RESTRICCIONES DE KA CAPACIDAD DE CADA RECURSO;
RESULTADOS EN LA TABLA DE EXCEL:
TACNA
CUZCO
SUPERMERCADO
LIBRERÍA
SUPERMERCADO
LIBRERÍA
P1
P2
P3
P1
P2
P3
P1
P2
P3
P1
P2
P3
FABRICA A
0
0
75
0
0
5
55
0
0
65
0
0
FABRICA B
0
1
0
64
3
67
0
0
75
0
0
0
FABRICA C
6
2
0
0
0
0
0
77
66
0
0
9
FO
8260
PROBLEMA 1 EN LINGO EXPORTANDO DATOS EN ACCESS
En la carpeta donde se instalo LINGO, se incluyó una base de datos Microsoft Access para el modelo de Programación Lineal con cuatro variables.
Este archivo se encuentra en el directorio con el nombre de PROBLE.MDB.
Para registrar esta base de datos como una fuente de datos ODBC para nuestro modelo, debe iniciar el Administrador de ODBC de la siguiente manera:
Haga doble clic en el icono Mi PC en su escritorio.
Encontrar el icono del Panel de control y haga doble clic en él.
Haga doble clic en el icono Rendimiento y mantenimiento luego en Herramientas administrativas.
Buscar el icono de Orígenes de Datos (ODBC) haga doble clic en él.
Ahora debe ver el cuadro de diálogo Administrador de orígenes de datos ODBC se muestra a continuación:
Para instalar la base de datos PROBLE.MDB como una fuente de datos, haga lo siguiente:
Haga clic en el botón Agregar en el cuadro de diálogo Administrador de datos ODBC para mostrar el cuadro de diálogo a continuación:
Estamos instalando una fuente de datos de acceso, así que seleccione la opción Microsoft Access Driver y pulse el botón Finalizar.
En el siguiente cuadro de diálogo:
Asignar la fuente de datos el nombre de Programación Lineal en el campo Nombre de origen de datos. En el campo Descripción, escriba "Fuente de datos para un modelo de Programación Lineal LINGO". Pulse el botón Seleccionar e introduzca el nombre de la base de datos "LINGO \ SAMPLES \ PROBLE.MDB" (esto asume LINGO se ha instalado en la LINGO-directorio de su instalación puede ser diferente). El cuadro de diálogo que ahora se parecen a las que se muestra a continuación:
Pulse el botón Aceptar y podrá ver la fuente de datos de Transporte se ha añadido a la lista de orígenes de datos ODBC:
Haga clic en el botón Aceptar para cerrar el Administrador de ODBC. Ahora debe ser capaz de iniciar y resolver el modelo LINGO PROBLE.LG4.
!PROBLEMA LINGO;
MODEL:
SETS:
FABRICAS / A B C/:; !Tipo de fábrica: i= A, B, C ;
PRODUCTOS /P1 P2 P3/:; !Tipo de producto: j= P1, P2, P3 ;
CENTRO /S L/:; !Tipo de centro de distribución: k=supermercado (S), librería (L);
CIUDAD /T C/:; !Ciudades: l=Tacna (T), Cuzco (Cz);
!REQUERIMIENTO DE PRODUCTOS PARA UNA FABRICA, EN UN CENTRO DE DISTRIBUCION, EN UNA CIUDAD,;
PRODUCTO: FABRICA_1: FABRICA_2: FABRICA_3;
PRODUCTO: TACNA : CUZCO;
CENTROS: TACNA: CUZCO;
FABRICA: PRODUCTO1: PRODUCTO2: PRODUCTO3;
PROCIU(PRODUCTOS,CIUDAD):DEMANDA;
CENCIUDAD(CENTRO,CIUDAD):CAPACIDAD2;
ENDSETS
DATA:
PRECIO,CAPACIDAD,DEMANDA,CAPACIDAD2=@OLE('C:\Archivos de programa\LINGO11\Samples\PROBLE.MDB','precio','capacidad','demanda','capacidad1');
ENDDATA
MAX=FO;
FO=@SUM(FPCC:PRECIO*X);
CONCLUSIONES
Se ha presentado una práctica de optimización empleando LINGO. La experiencia docente derivada de su utilización ha puesto de manifiesto la idoneidad del empleo de dicha herramienta. En particular, su aplicación en la resolución de problemas relacionados con el campo empresarial ha permitido facilitar su asimilación por el alumnado, alcanzando un mejor nivel de comprensión y un buen grado de satisfacción por su parte.
Las herramientas matemáticas como LINGO permiten que alumnos con unos conocimientos elementales en optimización puedan resolver una amplia gama de problemas. En aquellas titulaciones en las cuales las matemáticas no son el fin en sí mismas y se reducen a una herramienta de trabajo, resulta de mayor interés la formulación de los problemas, la interpretación y el análisis de las soluciones, en detrimento del método empleado en la obtención de dicha solución.
En los problemas estudiados se ha hecho una simplificación importante que debe puntualizarse. En el problema sin restricciones de capacidad se conoce el coste de transporte por unidad entre las plantas y los almacenes. En general, este coste puede venir dado en función de la distancia recorrida a lo largo de cierta red que represente las comunicaciones entre ciudades. En tal caso, habría que resolver en primer lugar el problema de las distancias mínimas en la red de transporte y agregar los costes a lo largo del camino mínimo. En el problema con capacidad, se conoce c y r para cada par origen-destino, aunque en general sobre una red de transporte habría que tener en cuenta estos parámetros a lo largo de todas las aristas que pertenecen al camino mínimo.
REFERENCIAS
Bazaraa, M.S., Sherali, H.D. y Shetty, C.M. (1993): Nonlinear programming. Theory and algorithms (2ª edición). Ed. John Wiley.
Chiang, A.C. (1.987): Métodos Fundamentales de Economía Matemática (3ª edición).
Ed. McGraw-Hill.
Haeussler, E.I. y Paul, R.S. (1997): Matemáticas para la Administración, Economía, Ciencias Sociales y de la Vida (8ª edición). Ed. Prentice-Hall.
Manual de usuario (1996). Solver Suite: LINDO, LINGO and WHAT'S BEST, Lindo Systems Inc.
Suárez Vega, R., Dorta González, P., González Martel, C. , Andrada Félix, J. y Hernández Guerra, J. (2001): Problemas de Algebra Lineal para la Economía y la Empresa. Ejercicios resueltos, cuestiones y tratamiento con DERIVE y LINGO. Ed. El Libro Técnico.
Sydsaeter, K. y Hammond, P.J. (1996). Matemáticas para el Análisis Económico. Ed. Prentice-Hall.
Helmut Kopka and Patrick W. Dale. A Guide to LATEX. Addison-Wesley, Harlow, England, 3rd edition, 1999.
Gerson Lachtermacher. Pesquisa Operacional na Tomada de Decisões. Editora Campus, Rio de Janeiro, 2002.
Lindo Systems Inc., Chicago. LINGO: the modeling language and optmizer, 2001.
http://books.google.com.pe/books?id=8IMSA6DEaRoC&pg=PA506&lpg=PA506&dq=La+Father+Domino+Company+vende+copiadoras&source=bl&ots=MGl20VhBRl&sig=DJKAJvZY7UKCBmkxuORYqTF3YqY&hl=es&ei=-ad6S_r2LqiTtgeaz5HrCw&sa=X&oi=book_result&ct=result&resnum=1&ved=0CAcQ6AEwAA#v=onepage&q=La%20Father%20Domino%20Company%20vende%20copiadoras&f=false