Professional Documents
Culture Documents
En este Tutor presentaremos a usted el Sistema de Modelado de MPL. Este Tutor contiene mltiples sesiones, con una serie de modelos, que gradualmente se incrementar en dificultad para explicar cmo formular modelos de programacin lineal. Est diseado especficamente para ensear la manera que el Modelado de optimizacin est siendo aplicado en el mundo. Al final, usted debe tener un conocimiento de cmo formular modelos y cmo trabaja MPL. El tutor contiene las siguientes sesiones: Sesin 1: Ejecucin de un Modelo Prueba con MPL La Sesin 1 presenta el Sistema de Modelado de MPL, y cmo usted puede usar el Ambiente Integrado de Desarrollo de Modelos para resolver problemas de optimizacin. Mostramos cmo iniciar una aplicacin con MPL, y llamar un modelo de prueba, resolver el modelo usando los optimizadores disponibles y despus ver la solucin. La informacin de cmo accesar al sistema de ayuda en lnea tambin ser presentado. El propsito de esta sesin es brindar a ustedes una visin de cmo resolver modelos con MPL y se familiaricen con el programa. S usted ya est familiarizado con MPL y las interfaces grficas de usuario, como el Windows, entonces puede pasar a la prxima sesin sin perder continuidad. Sesin 2: Formulacin de un Modelo Simple de Mezcla de Productos En la Sesin 2, se presentar el proceso de formular modelos de programacin lineal, identificando las variables de decisin, la funcin objetivo y las restricciones del modelo. La sesin contiene una descripcin de un modelo simple Producto-Mixto, con 2 variables y 3 restricciones. El propsito de esta sesin es que usted use MPL, a travs de un pequeo ejemplo, cree un modelo simple para entender los pasos bsicos para formular un modelo. Luego resolver el modelo y analizar la solucin que se gener. Sesin 3: Introduccin a Vectores e ndices en Modelos En la Sesin 3, aprender la base de cmo usar ndices y vectores para formular modelos. Ver como los ndices son usados para definir el dominio del modelo, haciendo ms fcil que el tamao del problema se ajuste rpidamente. Usted aprender cmo usar vectores para definir los elementos del modelo, tales como datos, variables y restricciones de una manera ms eficiente usando ndices. Finalmente, ver cmo usar sumatorias y macros sobre los vectores en la formulacin de su modelo. Sesin 4: Un Modelo de Planificacin de la Produccin con Perodos de Tiempo Mltiples En la Sesin 4, ampliar el modelo, desde la sesin previa, para incluir perodos de tiempo mltiples. Un nuevo ndice es introducido en el modelo para definir esos perodos de tiempo, y entonces usted actualizar varios vectores en el modelo que son afectados para explicar el nuevo ndice. Se familiarizar con una nueva clase de restricciones llamadas restricciones de equilibrio, esta es usada para asociar al mismo tiempo las variables de produccin, ventas e inventarios. Sesin 5: Un Modelo de Planificacin de la Produccin con Mltiples Plantas En la Sesin 5, encontrar un modelo que tiene mltiples plantas disponibles para producir los productos. Usted tomar el modelo desde la sesin previa, y le har un agregado incluyendo otro ndice planta, el cual representar a todas las plantas. Despus ir a travs del modelo paso a paso, y actualizar todos los vectores variables y restricciones para explicar el nuevo ndice. Finalmente, aprender cmo usar los archivos de datos externos para almacenar datos muy grandes que deben ser incluidos en el archivo actual del modelo. Sesin 6: Ampliando el Modelo para permitir Embarques entre Plantas En la Sesin 6, usted tomar el modelo de la sesin previa de mltiples plantas y le har un agregado para permitir los embarques entre las plantas. Esto significar que cada planta puede vender los productos y mantener inventario independientemente, en lugar de hacerlo desde un solo almacn para toda la compaa. Para satisfacer la demanda total en la forma ms eficiente es necesario que sea capaz de hacer embarques entre plantas. Finalmente, aprender cmo usar condiciones Where (donde) para sacar los elementos vectores que no son vlidos, tal como retorno de envos a la misma localizacin. Sesin 7: Usando Data Dispersos con Modelos MPL En la Sesin 7, usted tomar el modelo de la sesin previa y agregar mquinas mltiples para cada planta. Esto introducir dispersin en el modelo, puesto que no todas las mquinas estn disponibles en todas las plantas. Usar una nueva caracterstica vector de datos dispersos, para representar qu mquinas estn disponibles y en cul planta. Aprender diferentes maneras para definir vectores de datos dispersos con MPL, incluyendo el uso del operador IN y el vector de archivos dispersos.
Paso 1: Iniciar la Aplicacin MPL Iniciar MPL es sencillo en Windows. Cuando instal MPL, el programa de instalacin cre una entrada en el men Inicio/Programas/ MPL for Windows. S MPL no ha sido instalado, por favor refirase al Captulo 2 para ver cmo instalar el software. Para iniciar MPL, haga clic en el botn inicio (Start) de la barra de tareas que aparece en la parte inferior de la ventana y seleccione Programas/MPL for Windows.
MPL for Windows en el Men Inicio Paso 2: Cargar el Modelo a MPL Despus que inici MPL, el prximo paso es cargar el archivo del modelo en el editor del modelo. La aplicacin MPL viene con varios modelos de prueba que son instalados en el directorio Mplwin4. Los modelos MPL son almacenados como archivos texto estndar y tpicamente tienen la extensin '.mpl'. El modelo que estamos usando en esta sesin es llamado Model1.mpl y es almacenado en una carpeta separada llamada Tutorial.
1. 2.
Elija Open (Abrir) del men File (Archivo) para visualizar el cuadro de dilogo Open (Abrir). Haga doble clic en la Carpeta Tutorial y baje hasta el archivo llamado 'Model1.mpl' que est almacenado como se muestra abajo.
3.
Cuadro de Dilogo Abrir (Open) El cuadro de dilogo Abrir (Open) muestra la lista de todos los archivos de modelos prueba de MPL en la carpeta Tutorial. Haga clic sobre el archivo 'Model1.mpl' para seleccionar el archivo y luego presione Abrir (Open) para abrir el archivo. Alternativamente, usted puede abrir el archivo haciendo clic directamente en el nombre de archivo de la lista de archivos.
Este abrir una ventana editor del nuevo modelo conteniendo la formulacin para ese modelo.
Ventana: Editor del Modelo con el Model1.mpl Paso 3: Resolver el Modelo En este Tutor estar usando el solver CPLEX, pero s usted tiene otro solver ya instalado que es soportado por MPL, puede usarlo. Cuando usted ejecuta MPL por primera vez despus de la instalacin, MPL automticamente tratar de localizar algn solver que usted tenga disponible. Usted puede ver qu solver ha sido instalado por MPL yendo a Run que est en la barra Men. Cada solver encontrado ser listado en el men con la palabra Solve.
S no tiene algn solver disponible, ver el item No Solvers en el men Run. En este caso refirase al Captulo 2.3: Instalando Solvers de MPL para informarse cmo agregar solvers a MPL. El resto de este Tutor asumir que usted ha instalado satisfactoriamente CPLEX o algn otro solver y que ste ha sido instalado correctamente. El prximo paso es resolver el modelo que usted ha cargado en el editor del modelo. Para resolver el modelo siga los siguientes pasos: 1. Elija el Solver CPLEX del men Run para resolver el modelo 'Model1'. 2. Mientras resuelve el modelo, la ventana Status Window (ventana de estado) es visualizada y le proporciona informacin acerca del avance de la solucin.
Ventana: Status Window (Ventana de estado) del Model1 La ventana Status Window (ventana de estado) le proporciona informacin tal como el nmero de lneas ledas, el nmero de variables y restricciones encontradas, y cunta memoria ha sido usada. Mientras el optimizador est resolviendo el modelo, el nmero de iteraciones y el valor actual de la funcin objetivo tambin son mostrados. La figura arriba muestra la ventana Status Window (ventana de estado) despus que el problema ha sido resuelto. Paso 4: Ver la Solucin MPL enva la solucin a un archivo con el mismo nombre del modelo, pero con la extensin '. sol'. Use los siguientes pasos para ver el archivo de la solucin Model1.sol que fu generado por el modelo que usted resolvi: 1. Presione el botn View (Ver) en la parte inferior de la ventana Status Window (Ventana de Estado), el cual aparece sobre la pantalla durante el proceso de solucin. Esta abrir una ventana View Window (Ventana Ver) conteniendo el archivo de la solucin como se muestra abajo.
2. Usted puede mirar rpidamente la solucin usando la barra desplazadora de la derecha. Note que los detalles de la solucin son proporcionadas incluyendo el valor de la solucin ptima para la funcin objetivo, valores para las variables de decisin y para las restricciones. 3. Cuando ha terminado de mirar a travs de la solucin presione el botn ( X) que aparece en la esquina superior derecho, para cerrar la ventana View Window (ventana Ver). Paso 5: Usando el rbol de Definiciones del Modelo MPL tambin le permite ver en una ventana todo acerca de los tems definidos, desde la formulacin del modelo en un rbol jerrquico llamado Definiciones del Modelo. Cada rama corresponde a una seccin en el modelo. S la ventana del rbol no est abierta, usted puede abrirla eligiendo Definiciones del Modelo del men View (Ver). Mientras est trabajando con MPL normalmente es buena idea dejar abiertas las ventanas todo el tiempo. Luego MPL actualizar automticamente su contenido cada vez que usted resuelve su modelo. La ventana del rbol provee fcil acceso a diferentes reas del modelo y le permite ver rpidamente partes seleccionadas de la solucin del modelo. Para usar la ventana del rbol haga lo siguiente: 1. Asegrese que la ventana del rbol est abierta eligiendo Definiciones del Modelo del men Ver.
Ventana: rbol de Definiciones del Modelo 2. Bajo el ttulo VARIABLES en el rbol, usted ver tres nombres de variables: Producto, Inventario, Ventas, los cuales son las variables para el modelo. En frente de cada ttulo de seccin, hay un pequeo recuadro conteniendo el signo ms o el signo menos. Este recuadro le permite rpidamente expandir y plegar cada rama del rbol. 3. Ahora, seleccione la variable Producto y presione el botn View (Ver) en la parte inferior de la ventana. Este abrir una nueva ventana View (Ver) con los valores de la solucin para la variable Producto.
Ventana: Ayuda de los Contenidos de MPL El cuadro de Dilogo Help Topics (Ayuda de Temas) contiene tres tabuladores; el tabulador Contents (Contenidos), el tabulador Index (ndices), y el tabulador Find (Encontrar), ofrecindole diferentes maneras de accesar a la ayuda (help). El tabulador Contents (Contenido), muestra todos los temas disponibles en el sistema de ayuda (help) en una estructura de rbol jerrquico. El tabulador Index (ndice), permite al usuario accesar a la lista de todas las palabras clave en el archivo (help) ayuda o para realizar la bsqueda de una palabra clave especfica. El tabulador Find (Encontrar), permite al usuario encontrar un tema de ayuda buscando palabras especficas o frases en el texto. La base de datos Find (Encontrar) es construida por primera vez cuando se selecciona el tabulador Find a travs de Find Setup Wizard. Buscando Ayuda Sensible de Contexto en los Cuadros de Dilogos Una de las caractersticas beneficiosas en Windows es la adicin de la ayuda sensible de contexto en los cuadros de dilogos. Esta caracterstica le permite obtener rpidamente informacin de ayuda acerca de un tem en los cuadros de dilogos en el que usted est interesado. Para aprender a cmo usar la ayuda sensible de contexto en los cuadros de dilogos en MPL, siga los siguientes pasos: 1. Para abrir un cuadro de dilogos elija MPL Language (Lenguaje MPL) del men Options (Opciones). Este mostrar el cuadro de dilogos MPL Language Options. 2. Haga clic sobre el smbolo ? que est en la esquina superior derecha y suelte el botn del mouse. El cursor cambiar a ? el cual puede usar para sealar el tem que usted est interesado. 3. Mueva el mouse a travs del dilogo y haga clic sobre el tem Max subscript length (longitud mxima de subndices). Una ventana pequea aparecer con una pequea explicacin del item seleccionado como se muestra abajo.
Ayuda Sensible de Contexto en Cuadros de Dilogos Usted tambin puede visualizar la ayuda sensitiva de contexto, presionando el botn derecho del mouse sobre el tem en el cuadro de dilogo y seleccionar What's This? (Qu es esto?) del men que aparece.
Formulando Modelos de Programacin Lineal Descripcin del Problema: Un Modelo de Mezcla de Productos Formulando el Modelo Resolviendo el Modelo con MPL
Usted necesita identificar esos conceptos cuando formula modelos de programacin lineal. El primer paso cuando formula un modelo es identificar y dar nombres a las variables de decisin. Las Variables de Decisin son los elementos del modelo que el decisor controla y cuyos valores determina la solucin del modelo. El prximo paso es determinar la funcin objetivo en trminos de las variables de decisin. La funcin objetivo es donde usted especifica el objetivo o meta que est tratando de alcanzar. El objetivo puede ser o maximizar o minimizar el valor de la funcin objetivo. Algunas veces usamos la frase queremos optimizar el modelo. Esto significa que queremos encontrar los valores para las variables de decisin que den el mximo o mnimo valor de la funcin objetivo. En muchos casos, la funcin objetivo tiene un valor monetario, por ejemplo maximizar beneficios o minimizar costos, aunque esto no siempre es el caso.
Las restricciones son las limitaciones del mundo real sobre las variables de decisin. Una restriccin restringe los posibles valores que las variables pueden tomar. Un ejemplo de una restriccin puede ser, por ejemplo, que ciertos recursos, tales como capacidad de mquinas o mano de obra sean limitadas.
Formulando el Modelo
Identificar las Variables de Decisin; Para nuestra panadera, las variables de decisin corresponden al nmero de barras de pan de cada tipo que se hacen diariamente. Para hacer la formulacin ms fcil de leer, es una buena idea asignar nombres a las variables de decisin, las cuales le permiten identificar qu representan en el mundo real. Use dos variables de decisin, llamadas Sun y Moon y est de acuerdo que ellas tienen el siguiente significado: Sun = Es el nmero de Barras de pan tipo Sunshine producidas por da Moon = Es el nmero de Barras de pan tipo Moonlight producidas por da Ahora usted quiere determinar los valores para esas dos variables de decisin para maximizar las ganancias de la panadera. Identificar la Funcin Objetivo En nuestro ejemplo, el objetivo es maximizar la ganancia diaria. Hacemos una ganancia de $0.05 por cada barra Sunshine, as que el total de la produccin diaria de pan Sunshine da un beneficio de $0.05 multiplicado por el valor de la variable Sun. Para la produccin de Moonlight, el beneficio correspondiente es $0.08 multiplicado por el valor de la variable Moon. Llamamos a los valores $0.05 y $0.08 los coeficientes para las correspondientes variables de decisin en la funcin objetivo. Para obtener la contribucin total de la ganancia diaria. Agregamos las contribuciones de los dos tipos de pan. De eso, restamos el costo fijo de $4000 y lo dividimos entre 30 das de un mes, para obtener la ganancia neta diaria. Esto conduce a las siguientes cantidades que queremos maximizar: Ganancia = 0.05 Sun + 0.08 Moon - 4000/30 Hemos definido la funcin objetivo para este problema particular. El solver usa la funcin objetivo como un criterio para determinar cul solucin es la ptima.
Identificar las Restricciones La primera restriccin en el departamento de Horneado es complicado puesto que hay una interaccin entre los tipos de pan. Es posible poner 10 del tipo Sunshine y cinco de Moonlight en cada recipiente. Tambin es posible usar alguna combinacin de los dos. La expresin 1/10 Sun + 1/5 Moon nos da el total usado en los recipientes. S usted mide la capacidad de cada horno como el nmero de recipientes que puede manejar por da (10 x 140), puede expresar la restriccin como: 1/10 Sun + 1/5 Moon <= 10 x 140 Expresamos las restricciones como fueron dadas por el departamento de mezclas. Sun <= 8000 Moon <= 5000 Resumiendo la Formulacin Tenemos definido hasta ahora la funcin objetivo y todas las restricciones. La formulacin de un problema de programacin lineal es como se muestra abajo: Max Ganancia = 0.05 Sun + 0.08 Moon - 4000/30 Sujeto a: 1/10 Sun + 1/5 Moon <= 10 x 140 Sun <= 8000 Moon <= 5000 Una vez que tiene su formulacin, casi todo el trabajo est hecho. Como ha visto, MPL acepta entradas justo en una forma similar a lo que ha escrito.
El espacio usado entre las entradas y las lneas en MPL no es rgido. Es recomendable que cuando ingrese el modelo, use espacios y lneas extras para hacer la formulacin del modelo ms fcil de leer y entender. A MPL solo le preocupa el texto actual en el archivo del modelo. Cuando ha terminado de ingresar el modelo, elija Save (Guardar) del men File (Archivo) para guardar el modelo. Paso 3: Verificar la Sintxis del Modelo Despus que ha ingresado la formulacin en el editor del modelo, puede verificar los errores de Sintxis del modelo. Si MPL encuentra un error en la formulacin lo reportar en la ventana Error Message (Mensajes de Error) mostrando en el modelo la lnea donde ocurri el error, con una explicacin breve del problema. El cursor automticamente se posiciona en el error resaltando la palabra que lo ocasion. Para verificar la sintaxis elija Check Syntax (Verificacin de Sintxis) del men Run (Ejecutar). Si no se encontraron errores, MPL responder con un mensaje indicando que la sintxis del modelo es correcta. Si hubiera un error en el modelo, MPL visualizar la ventana Error Message (Mensajes de Error). S no tiene errores en su formulacin (Felicitaciones) an querr ver cmo trabaja los mensajes de error. Vamos a introducir un error en el modelo y note cmo el mensaje de errores en MPL puede ayudarle a corregirlo. 1. En el editor del modelo elimine el punto y coma al final de la primera restriccin, como sigue:
SUBJECT TO 1/10 Sun + 1/5 Moon <= 10 * 140 semicolon Sun <= 8000; Moon <= 5000;
2. Elija Check Syntax (Verificacin de Sintxis); del men Run (Ejecutar). MPL ir a travs del modelo y encontrar el punto y coma faltante cuando este analice la segunda restriccin, visualizando el siguiente mensaje de error:
Ventana Error Message (Mensaje de Error) La razn por la que MPL no avis la falta del punto y coma hasta que lleg a la segunda restriccin, es porque l piensa que 10*140 es un coeficiente para la variable Sun en la lnea de abajo. 3. Cuando presiona el botn OK usted retorna al editor del modelo. El cursor automticamente se posicionar en la ubicacin donde MPL encontr el error, el cual para nuestro caso es `<=' en la segunda restriccin. 4. Ahora puede reingresar el punto y coma en la primera restriccin y s usted verifica la sintxis otra vez, MPL reportar esta vez que la sintxis est correcta. Paso 4: Resolver el Modelo El prximo paso es resolver el modelo 'Bakery2.mpl'. Resolver el modelo implica varias tareas para MPL, incluyendo la verificacin de la sintxis, anlisis del modelo en la memoria, transferencia del modelo al solver, solucin del modelo y luego recuperacin de la solucin desde el solver y la creacin del
archivo de la solucin. Todas esas tareas son hechas transparentemente para el usuario cuando elige el comando solve del men. Para resolver el modelo siga los siguientes pasos: 1. Elija Solve CPLEX del men Run (Ejecutar) o presione el botn Run Solve en la barra de herramientas. 2. Mientras se est resolviendo el modelo aparece la ventana de estado Status Window (Ventana de Estado); proporcionando informacin acerca del avance de la solucin.
Ventana de Estado: Status Window para el modelo Bakery2 S todo va bien MPL visualizar el mensaje "Optimal Solution Found" (la solucin ptima fu encontrada). S hay una ventana de mensaje de error con un error de sintxis, por favor verifique la formulacin con el modelo detallado que se ingres anteriormente en esta sesin. Paso 5: Ver y Analizar la Solucin Despus de resolver el modelo, MPL automticamente crea un archivo estndar de la solucin conteniendo varios elementos de la solucin del modelo. Este incluye, entre otras cosas, el valor ptimo de la funcin objetivo, los costos de las actividades y los costos reducidos de las variables, los precios sombra y las restricciones de holgura. Este archivo solucin es creado con el mismo nombre del archivo modelo pero con la extensin '.sol'. En nuestro caso el archivo solucin ser llamado; 'Bakery2.sol'. Despus que ha resuelto el modelo puede visualizar el archivo solucin en una pantalla View (Ver) presionando el botn View (Ver) que est en la parte inferior de la ventana de estado Status Window. Esta visualizar la ventana View (ver) como se muestra abajo. MPL Modeling System - Copyright (c) 1988-2009, Maximal Software, Inc. -----------------------------------------------------------------------------------------------MODEL STATISTICS Problem name: Filename: Date: Time: Parsing time: Solver name: Objective value: Iterations: Solution time: Result code: Constraints: Variables: Non zeros: Density: BetterBreadBakery Bakery2.mpl January 16, 2013 18:09 0.01 sec CPLEX (11.2.1) 506.666666667 0 0.01 sec 1 3 2 4 67 %
SOLUTION RESULT Optimal solution found MAX Profit = DECISION VARIABLES PLAIN VARIABLES Variable Name Activity Reduced Cost -------------------------------------------------------------Sun 8000.0 ---Moon 3000.0 ---------------------------------------------------------------CONSTRAINTS PLAIN CONSTRAINTS Constraint Name Slack Shadow Price --------------------------------------------------------------c3 2000.0 -----------------------------------------------------------------RANGES OBJECTIVE PLAIN VARIABLES Variable Name Coefficient Lower Range Upper Range ---------------------------------------------------------------------------------------------Sun 0.1 0.0 1E+020 Moon 0.1 0.1 0.1 ----------------------------------------------------------------------------------------------RANGES RHS PLAIN CONSTRAINTS Constraint Name RHS Value Lower Bound Upper Bound ----------------------------------------------------------------------------------------------c1 1400.0 800.0 1800.0 c2 8000.0 4000.0 14000.0 c3 5000.0 3000.0 1E+020 ---------------------------------------------------------------------------------------------END Ventana: View (Ver) con el archivo solucin Bakery2.sol La ventana View Window almacena el archivo solucin en la memoria, permitindole mirar rpidamente a travs de la solucin usando la barra desplazadora. Una lista completa del archivo solucin es mostrado como abajo: La primera parte del archivo solucin contiene varias estadsticas del modelo, como el nombre de archivo, fecha y hora que fu resuelto, qu solver fu usado, el valor de la funcin objetivo y el tamao del modelo. La siguiente parte del archivo solucin contiene los resultados de la solucin. Aqu usted puede ver s la solucin que fu encontrada era la ptima o s estaba acotada o era infactible. Tambin muestra el nombre y el valor ptimo de la funcin objetivo, en nuestro caso la ganancia para la panadera es igual a $506.7 por da. 506.7
En la seccin VARIABLES DE DECISION usted obtuvo una lista de las variables en el modelo, Sun and Moon. Usted ver que para el pan Sun la solucin sugiere que usted produce 8000 barras por da, lo cual es al mismo tiempo la capacidad del departamento de mezclas para el pan Sun. Para el pan Moon la solucin sugiere que nosotros producimos 3000 barras por da, lo cual es menos que la capacidad mxima de 5000 barras del pan Moon por da en el departamento de mezclas. En la seccin RESTRICCIONES el archivo solucin, lista todas las restricciones del modelo. En nuestro modelo tenamos tres restricciones, una para los hornos en el departamento de horneado, y dos restricciones en el departamento de mezclas para cada tipo de pan. Puesto que la holgura para la primera restriccin es cero, esto significa que los hornos en el departamento de horneado estn trabajando a su capacidad total. De manera similar, los mezcladores para el pan Sunshine estn trabajando a total capacidad, pero los mezcladores para el pan Moonlight tienen una holgura de 2000. Adems, puesto que los hornos en el departamento de horneado son compartidos entre los dos tipos de pan, el solver ha elegido producir tanto como el pan Sunshine sea posible, entonces usa el resto de la capacidad para producir pan Moonlight.
Nuevos Conceptos en esta Sesin Descripcin del Problema: Un modelo de Mezcla de Productos con tres Variables Formulacin del Modelo con MPL Ingrese el Modelo en MPL paso a paso Resuelva el Modelo y Analice la Solucin
Datos, Variables, y Vectores Restriccin Los Vectores son bsicamente agregar elementos en el modelo que comparten caractersticas y propsitos comunes. Una vez que usted ha definido los ndices en un modelo, puede usarlos para definir vectores que contienen los datos, variables y restricciones del modelo. Esto le permite trabajar de una manera ms abreviada, as no tiene que tipear cada elemento cada vez que los necesite.
Los Vectores de Datos son usados cuando los coeficientes o estadsticas del problema vienen en listas o tablas de datos numricos. Cuando un ndice es definido hay un solo valor por cada valor del ndice y los vectores de datos le permiten juntar coleccin de grupos de datos en el modelo. Estos datos pueden ser especificados como una lista de nmeros en el archivo del modelo, o ser recuperados de un archivo externo, lo cual ser cubierto en la prxima sesin. Ejemplos de vectores de datos, en un modelo de produccin con un ndice 'producto' son; incluidos:
Precio por cada producto Costo de Produccin por cada producto Demanda para cada producto
Los Vectores Variable pueden ser definidos de manera similar como los vectores de datos, para formar una coleccin de variables definidas sobre cierto ndice. Ejemplos de vectores variables son incluidos:
Cunto producir de cada producto Nivel de Inventario del producto en cada mes Cunto embarcar entre localizaciones o plantas
Los Vectores Restriccin; son definidos sobre los ndices, los cuales MPL extiende a una coleccin simple de restricciones cuando genera el modelo. Un vector restriccin puede ser definido de varias maneras, sobre un nmero de ndices como perodos y productos. Ejemplos de vectores restriccin se incluyen:
Datos Constantes Los Datos Constantes son usados en el modelo para ayudar a que sea legible, y hacer ms fcil el mantenimiento del modelo. Ellos son asignados a un valor especfico pero no definidos sobre un ndice especfico. Usando Sumas sobre Vectores Una de las operaciones usualmente hechas sobre vectores es para sumar o agregar todos los valores por cada elemento del vector. Esto es hecho en MPL usando la palabra clave SUM circundante a la expresin vector a ser agregada. La expresin es prefijada por una lista de ndices sobre la cual depende la suma. La expresin suma contiene un vector de variables simples por termino, a veces multiplicado por uno o ms vectores de datos. SUM (product: Price * Sales); SUM (product, month: ProdCost * Produce);
A1 $73.30 500
A2 $52.90 450
A3 $65.40 550
TITLE Producton_Planning3; INDEX product := (A1, A2, A3); DATA Price[product] Demand[product] ProdCost[product] ProdRate[product] ProdDaysAvail := := := := := (120.00, 100.00, 115.00); (4300, 4500, 5400); (73.30, 52.90, 65.40); (500, 450, 550); 22;
VARIABLES Produce[product] -> Prod; MACROS TotalRevenue TotalCost MODEL MAX Profit = TotalRevenue - TotalCost; SUBJECT TO ProdCapacity -> PCap: SUM(product: Produce / ProdRate) BOUNDS Produce <= Demand; END := SUM(product: := SUM(product: Price * Produce); ProdCost * Produce);
<=
ProdDaysAvail;
Paso 2: Especifique un Ttulo para el Modelo El ttulo es opcional, pero es conveniente colocar un nombre al modelo. El ttulo ser usado en la solucin para identificar el modelo. Usted debe ahora tener una ventana editor vaca donde puede ingresar su formulacin con MPL. Para ingresar el ttulo para el modelo Planning3, escriba en el editor del modelo el siguiente texto: TITLE Production_Planning3; Paso 3: Defina un ndice para todos los Productos en el Modelo La primera seccin en un modelo MPL usualmente es la seccin INDEX (ndice) donde usted define los ndices para el modelo. En este ejemplo, tiene tres productos, A1, A2, y A3 para los cuales est creando un ndice llamado producto. En el editor del modelo, directamente debajo del ttulo, agregue una seccin INDEX (ndice) con una definicin para el ndice producto como sigue: INDEX product:= (A1, A2, A3); Paso 4: Definir los Datos para el Modelo La prxima seccin en MPL usualmente es la seccin de los DATOS donde usted define los Vectores de Datos y los Datos Constantes del modelo. El primer Vector de datos que ingresar, contiene los precios de cada producto, los cuales fueron dados en la descripcin del problema. En el editor del modelo, directamente debajo de la definicin del ndice, agregue una seccin de DATOS con una definicin para el vector de datos Precio seguido por el ndice [Product] entre corchetes. DATA Price[product]:= (120.00, 100.00, 115.00); Siguiendo la declaracin, ingrese un smbolo de asignacin ':=' y luego una lista de nmeros conteniendo los precios de cada producto.; Encierre la lista con parntesis y separe cada nmero por cualquiera de los dos, un espacio, coma o ambos. Debe haber un punto y coma despus de cada definicin de vector para separarlo de las otras definiciones en el modelo. El problema descrito tambin list los datos de la demanda, costo de produccin y tasa de produccin. Hay cierta demanda para cada producto, una cantidad de costo para producirlo, y un lmite superior de cunto de cada producto usted puede producir por da. Para ingresar estos datos en MPL, agregue y siga las definiciones para la seccin de DATOS directamente debajo del vector de datos Precio. Demand[product] := (4300, 4500, 5400); ProdCost[product] := (73.30, 52.90, 65.40); ProdRate[product] := (500, 450, 550); La descripcin del problema tambin list cuntos das de produccin estaban disponibles. Agregue la siguiente definicin de datos constantes para los das disponibles de produccin directamente debajo del vector de datos; ProdRate (Tasa de Produccin): ProdDaysAvail := 22;
Paso 5: Defina un Vector Variable para Cunto Producir de cada Producto Usualmente, la prxima seccin ser la seccin VARIABLES donde usted define las variables del modelo. En la descripcin del problema, al usar el modelo se le pidi que determine cunto producir de cada producto. Para hacer esto, necesit definir la variable llamada Produce (Producir) sobre el ndice Producto. En el editor del modelo, directamente debajo de las definiciones de datos agregue la seccin VARIABLES con una definicin para el vector variable Producir como sigue: VARIABLES Produce[product] -> Prod; El nombre que aparece despus del signo; '->' (lase hacerse) es una abreviacin opcional del nombre de vector usado para compensar las limitaciones del tamao del nombre de muchos solvers de Pl. Esto le permitir a usted usar nombres de descripcin largos para las variables de su modelo.
Paso 6: Defina la Funcin Objetivo como el Total de Ingresos menos el Costo Total de Produccin En la descripcin del problema, se le pidi maximizar las ganancias de la compaa, la cual es representada como Total revenue - Total cost (Total Ingresos - Total Costos). El total de ingresos es calculado multiplicando el precio de cada producto por la cantidad producida de cada producto. Del mismo modo, el costo total es calculado multiplicando el costo de produccin de cada producto por la cantidad producida de cada producto. Esas sumatorias sern utilizadas para definir la funcin objetivo del modelo. Cuando ingresa sumatorias para la funcin objetivo, usualmente es para definirlos separadamente como macros, para hacer que el modelo sea ms fcil de leer. Usando Macros usted puede entonces, en el modelo referirse a esas sumatorias usando el nombre de la macro. En el editor del modelo, directamente debajo de la variable de definicin ingrese la siguiente definicin de macro en la seccin de MACROS. MACROS TotalRevenue TotalCost := SUM (product: Price * Produce); := SUM (product: ProdCost * Produce);
La parte del modelo en MPL es donde usted define la funcin objetiva y las restricciones del modelo. Estar usando las macros definidas arriba, para crear la funcin objetivo refirindose al nombre de la macro cuando usted necesite usar las sumatorias. Puesto que usted est maximizando las ganancias en este modelo, el nombre de esta funcin objetivo ser Profit (Ganancia). En editor del modelo, ingrese la palabra clave MODEL para notar que empieza la parte del modelo, seguido por la definicin de la funcin objetivo. MODEL MAX Profit = TotalRevenue - TotalCost; La frmula para la funcin objetivo es muy simple, como estamos usando macros que contengan las sumatorias actuales. Esto resulta en la funcin objetivo determinando cunto maximizar la ganancia calculando la diferencia entre lo ingresos y los costos totales.; Paso 7: Ingrese una Restriccin para la Capacidad de Produccin; Siguiendo la funcin objetivo usted necesita definir las restricciones para el modelo en la seccin SUBJECT TO (Sujeto A) En la descripcin del problema, se le dio la tasa de produccin definida como cuntos tems de cada producto puede producir cada da. Como tambin cuntos das de produccin estn disponibles. Puesto que esto limita a cuntos tems puede producir, usted necesitar crear una restriccin de la capacidad de produccin llamada ProdCapacity; para cada producto. En el editor del modelo, agregue la cabecera SUBJECT TO (SUJETO A), seguido por la definicin de; restriccin: SUBJECT TO ProdCapacity -> PCap: SUM (product: Produce / ProdRate) <= ProdDaysAvail; En el resumen usted divide el nmero de tems producido por la tasa de produccin para recibir el nmero total de das usados para producir cada producto. El total de das de produccin usados debe ser menor que los das disponibles para la produccin. Paso 8: Ingrese una Cota Superior para la Variable 'Producto'; La seccin BOUNDS (COTAS) es usada para definir las cotas superior e inferior sobre las variables del modelo. Las Cotas son similares a las restricciones pero limitadas a solo una variable por cota. En la descripcin del problema, especificamos que el nmero total de tems producidos debe ser menor que la demanda. Adems, ingrese la siguiente cota superior sobre la variable Produce (Producto) en la seccin BOUNDS (COTAS). BOUNDS Produce END Por favor note que en la mayora de modelos de programacin lineal todas las variables tienen implcito una cota inferior igual a cero (Xj >= 0); Esas cotas inferiores son manejadas automticamente por MPL y; no tiene que ser especificadas a menos que sean diferentes de cero. < Demand;
Al final del modelo ingrese la palabra clave END para notar que es el final del modelo. Despus que ha terminado de ingresar el modelo, debe guardarlo eligiendo Save (guardar) del men File (Archivo).
Ventana de estado: Status Window para el modelo Planning3 S todo va bien, MPL visualizar el mensaje "Optimal Solution Found" (Solucin ptima fu encontrada). Si hubiera una ventana de mensaje de error por favor verifique la formulacin del modelo detallado que; ingres anteriormente en esta seccin. Ver y Analizar la Solucin Despus que resolvi el modelo, MPL automticamente crea un archivo estndar de la solucin conteniendo varios elementos de la solucin del modelo. Este incluye entre otras cosas, el valor ptimo de la funcin objetivo, la actividad y los costos reducidos para las variables, y las holguras y los precios sombra de las restricciones. Este archivo de la solucin es creado con el mismo nombre del archivo del modelo, pero con la extensin '.sol' en su lugar. En nuestro caso el nombre del archivo de la solucin es llamado 'Planning3.sol'. Despus que ha resuelto el modelo, puede visualizar el archivo de la solucin en una ventana View (Ver) presionando el botn View en la parte inferior de la ventana de estado Status Window. Esta visualizar la ventana ver como se muestra abajo.
La ventana View (Ver) almacena el archivo de la solucin en la memoria, permitiendo ver rpidamente la solucin con las barra de desplazamiento. Un lista completa del archivo de la solucin para el modelo; Planning3 se muestra abajo: MPL Modeling System Copyright (c) 1988-1999, Maximal Software, Inc. ------------------------------------------------------------------------------MODEL STATISTICS Problem name: Filename: Date: Time: Parsing time: Solver: Objective value: Iterations: Solution time: Constraints: Variables: Nonzeros: Density: SOLUTION RESULT Optimal solution found MAX Profit MACROS Macro Name Values ----------------------------------------------TotalRevenue 1298181.8182 TotalCost 753615.1818 ----------------------------------------------DECISION VARIABLES VARIABLE Produce [product] : product Activity Reduced Cost --------------------------------------------A1 4300.0000 4.3100 A2 1611.8182 0.0000 A3 5400.0000 11.0636 --------------------------------------------CONSTRAINTS PLAIN CONSTRAINTS Constraint Name Slack Shadow Price -----------------------------------------------------ProdCapacity 0.0000 -21195.0000 -----------------------------------------------------END = 544566.6364 Producton_Planning3 Planning3.mpl1 April 18, 1998 09:59 0.57 sec CPLEX 544566.636364 3 0.12 sec 1 3 3 100 %
La primera parte del archivo de la solucin contiene varias estadsticas del modelo como el nombre del archivo, fecha y hora que el modelo fu resuelto, que solver fu usado, el valor de la funcin objetivo, y el tamao del modelo. La prxima parte del archivo de la solucin contiene los resultados de la solucin. Aqu usted puede ver s la solucin que fu encontrada, era la ptima o s estaba acotada o era infactible. Tambin muestra el nombre y el valor ptimo de la funcin objetivo. En la seccin MACROS del archivo de la solucin obtuvo una lista de todas las macros definidas a lo largo del modelo con los valores de la solucin de ellos. Por ejemplo, en nuestro modelo Planning3, los ingresos totales son $1.298 millones y el costo total es $754,000. Esto tiene correspondencia con las ganancias de $545,000, el cual es el valor de la funcin objetivo. En la seccin VARIABLES DE DECISION obtuvo una lista de todas las variables en el modelo, ambos variables vector y variables planas. En nuestro caso, tenemos una variable vector simple Producir, definida sobre el ndice producto. Ver tambin que para los productos A1 y A3 la solucin sugiere que usted produce 4300 y 5400 unidades respectivamente. Esta es la misma cantidad que la demanda para aquellos productos. Por otro lado, el producto A2 sugiere que se ha producido 1612 unidades lo cual es menor que la demanda. Claramente no tenemos la capacidad para producir lo suficiente para satisfacer la demanda para todos esos productos y; el modelo elige los productos A1 yA3 para satisfacer la demanda. Por la forma, usted debe haber notado que el valor para; A2 en la solucin es actualmente 1611.8182 unidades en lugar de 1612. Esto resulta del hecho que todas las variables en modelos de programacin lineal son por definicin continuos. En este modelo no importa mucho y solo redondeamos a 1612, pero sino, puede restringir a que la variable solo tome valores enteros, especificando en el modelo que es una variable entera. Por favor vea; el Manual de Usuario de MPL ; para ms detalles de cmo formular modelos en MPL con variables enteras.; En la seccin RESTRICCIONES el archivo de la solucin lista todas las restricciones del modelo, otra vez ambas restricciones, vector y plana. En nuestro modelo, hemos tenido una restriccin simple plana llamada ProdCapacity. Puesto que la holgura para la restriccin es 0.0 esto significa que estamos trabajando a capacidad total. Los precios sombra nos dice que el costo marginal debe estar s usted necesita reducir el lmite de la restriccin a una unidad. Puesto que la restriccin de la capacidad de produccin tiene das de produccin como unidad, reducir los das disponibles por un da, la ganancia decrecer en $21,195.
Nuevos Conceptos en esta Sesin Descripcin del Problema: Un Modelo de Planificacin con Perodos Mltiples Formulacin del Modelo con MPL Ingrese Nuevos Elementos al Modelo, paso a paso. Resuelva el Modelo y Analice la Solucin
En muchos casos, hay un costo fijo por perodo involucrado con el almacenamiento de inventario. En otros casos, sin embargo, el costo podra no estar asociado al almacenamiento actual del inventario, sino ms bien con el abastecimiento y retiro de los productos del inventario, a travs de los costos de mano de obra involucrados. Esto significa que necesitar ms variables en el modelo, uno por el abastecimiento de los productos y otro por retirarlos del inventario. Restricciones de Equilibrio del Inventario Como no es posible vender ms de los productos que usted tiene, la variable inventario es usada para asociar las variables de produccin a las variables de ventas. Esto es hecho a travs de una restriccin, comnmente llamada Restriccin de Equilibrio. Las restricciones de equilibrio son usadas para asegurar que las cantidades que ingresan sean iguales a las cantidades que salen. Una restriccin de equilibrio comn, estipula que la produccin total, ms el nivel de inventario del perodo anterior, es igual a la cantidad vendida, ms lo que sali del inventario. Ejemplo de una restriccin de equilibrio es: Produce + Inventory[month-1] = Sales + Inventory En este caso, la entidad que est siendo equilibrada es el inventario. Invt[month-1] es una notacin usada en MPL para representar el perodo anterior. Cuando trabajamos con un inventario donde los costos necesitan ser aplicados al abastecimiento y retiro de los inventarios, usted necesitar definir dos restricciones de equilibrio. Por ejemplo: Produce + OutInvt = Sales + PutInvt PutInvt + Inventory[month-1] = OutInvt + Inventory S piensa que la planta es una entidad, en la primera restriccin estamos equilibrando lo que entra con lo que sale de la planta. De la misma forma, la segunda restriccin de equilibrio indica que estamos equilibrando lo que entra con lo que sale del inventario. Inventario Inicial e Inventario Final En muchos casos el modelador necesita especificar un inventario inicial o un inventario final para el perodo planificado. Por defecto, MPL excluye las entradas de Inventory[month-1] para el mes igual a cero. Hay varias formas que usted puede especificar un inventario inicial, por ejemplo puede ingresar la restriccin en dos partes como sigue: INDEX month := (Jan, Feb, Mar, Apr) DATA StartInvt := 450 SUBJECT TO InitInvt[month=Jan]: produce + StartInvt = sales + Inventory InvtBal [month>Jan]: produce + Inventory[month-1] = sales + Inventory Esto crear una restriccin de equilibrio para el mes de Enero empezando con 450 unidades. Hay otras formas de incluir el inventario inicial en MPL que no requieren duplicar la restriccin, por ejemplo con subndices, pero esta es la forma ms sencilla de formular esa clase de restricciones.
Produccin Demandada A1 A2 A3
La tasa de produccin y el costo de produccin permanecen iguales, como fueron dados en la tabla de la sesin 3. Note que los das de produccin disponibles son diferentes para cada uno de los meses con 23 das para Enero, 20 para Febrero, 23 para Marzo y 22 para Abril. Introducir el inventario al modelo, adems, tiene los costos de inventario para cada producto con A1 $3.50/month, A2 - $4.00/month and A3 - $3.00/month, respectivamente. Cada uno de los productos toma la misma cantidad de espacio, pero la capacidad total de inventario es ahora 800 unidades por mes.
VARIABLES Produce[product, month] -> Prod; Inventory[product,month] -> Invt; Sales[product, month] -> Sale; MACROS TotalRevenue := SUM(product, month: Price * Sales); TotalProdCost := SUM(product, month: ProdCost * Produce); TotalInvtCost := SUM(product, month: InvtCost * Inventory); TotalCost := TotalProdCost + TotalInvtCost; MODEL MAX Profit = TotalRevenue - TotalCost; SUBJECT TO ProdCapacity[month] -> PCap: SUM(product: Produce / ProdRate) <= ProdDaysAvail; InvtBal[product, month] -> IBal: Produce + Inventory[month-1] = Sales + Inventory; MaxInventory[month] -> MaxI: SUM(product: Inventory) <= InvtCapacity;
<=
Demand;
Paso 7: Agregue al Modelo Variables de Ventas e Inventarios En este modelo hay dos nuevas variables, Sales and Inventory (Ventas e Inventarios), que necesitan ser introducidas al modelo. La variable Sales (Ventas) es usada para representar cunto de cada producto es vendido en cada mes. La Variable Inventory (Inventario) es usada para representar cunto de cada producto es almacenado, en cada mes. La variable Produce (Produccin) necesita ser aumentada para incluir el ndice month (mes) que son las diferentes cantidades de cada producto que son producidas, en cada mes. En el modelo agregue las siguientes definiciones a la seccin VARIABLES: VARIABLES Produce[product, month] Inventory[product,month] Sales[product, month] -> Prod; -> Invt; -> Sale;
Como en el modelo anterior, el nombre que aparece despus del signo '->' (se lee: se hace) es una abreviacin opcional del nombre del vector. Este es usado para compensar las limitaciones del tamao del nombre de la variable de muchos solvers de PL. Paso 8: Agregue el Costo de Inventario a la Funcin Objetivo En el modelo de la sesin anterior, las ganancias totales y el costo total de produccin son incluidos en la funcin objetivo. Ahora necesita actualizar esta funcin objetivo con el ndice, month (mes), y agregue una entrada para el costo total de inventario. Como en la sesin anterior, usted usara macros que representen cada sumatoria. Cuando calcula la ganancia total, necesitar referirse a la variables Sales (Ventas) en lugar de la variable Produce (Produccin) y agregue el ndice month (mes) a la suma. Para el costo total de produccin, necesitar tambin agregar la suma para incluirlo al ndice month (mes). El costo total de inventario ser definido como el costo de inventario por unidad por el nivel del inventario. Para hacer cambios en la seccin MACROS, reemplace la variable Produce (Produccin) con la variable Sales (Ventas), actualice la ganancia total y smelo al costo de produccin para incluirlo en el ndice month, y agregue una nueva definicin de macro al costo del inventario total, como sigue: MACROS TotalRevenue TotalProdCost TotalInvtCost TotalCost := := := := SUM(product , month: Price * Sales); SUM(product, month: ProdCost * Produce); SUM(product, month: InvtCost * Inventory); TotalProdCost + TotalInvtCost;
Por favor note que la macro para el costo total de produccin ha sido renombrada a TotalProdCost. Otra nueva macro; TotalCost, ha sido agregada donde usted puede sumar estas dos nuevas macros para obtener el costo total. Esto permite que la funcin objetivo permanezca sin cambios: MODEL MAX Profit = TotalRevenue - TotalCost; Paso 9: Actualice la restriccin de la Capacidad de Produccin para mltiples meses En la restriccin production capacity(Capacidad de la produccin), agregue el ndice month a la definicin de la restriccin y el resto de la restriccin permanece igual. SUBJECT TO ProdCapacity[month] -> PCap: SUM(product: Produce / ProdRate)
<=
ProdDaysAvail;
Por favor note que en MPL usted no tiene que ingresar subndices para cada ndice cuando se refiera a los vectores de datos y vectores de variables. Esto significa que usted puede fcilmente agregar ms ndices a las restricciones sin tener que cambiar de acuerdo a como usted se refera de cada vector. Paso 10: Agregue al Modelo una Restriccin de Equilibrio de Inventario Para agregar la variable Inventory (Inventario) al modelo necesita incluir una restriccin de equilibrio de inventario estndar. Esta restriccin flucta para cada producto y cada mes, especificando que la produccin, ms el inventario del mes anterior, es igual a la cantidad vendida, ms el inventario del mes actual. Agregue la siguiente restriccin InvtBal debajo de la restriccin anterior ProdCapacity:
Sales + Inventory;
Cuando se ingresa perodos de tiempo anteriores, como en este caso el mes anterior, MPL, le permite usar expresiones tales como [month-1]. Paso 11: Agregue al Modelo una Restriccin de Capacidad de Inventario Hay un lmite sobre cunto espacio disponible hay para el inventario. Adems, usted necesita agregar al modelo una restriccin de capacidad de inventario. En la descripcin del problema, se le dijo que cada producto toma una cantidad igual de espacio para el inventario y que puede agregar o sumar sobre l, todos los productos para obtener el espacio de inventario total usado. Agregue al modelo la siguiente definicin de la restriccin: MaxInventory[month] -> MaxI: SUM(product: Inventory) <= InvtCapacity;
Paso 12: Actualice la Cota Superior de la Demanda Mxima para usar la Variable 'Ventas' En la cota superior de la demanda mxima usted necesita actualizarla incluyendo la variable Sales (Ventas) en lugar de Produce (Produccin) como se muestra abajo: BOUNDS Sales <= Demand;
Despus que usted ha terminado de ingresar el modelo, debe guardarlo, eligiendo Save(Guardar) del men File(Archivo).
MACROS Macro Name Values ----------------------------------------------TotalRevenue 5386045.4545 TotalProdCost 3139078.1818 TotalInvtCost 960.0000 TotalCost 3140038.1818 ----------------------------------------------DECISION VARIABLES VARIABLE Produce [product,month] : product month Activity Reduced Cost ---------------------------------------------------A1 Jan 4300.0000 0.0000 A1 Feb 4200.0000 0.0000 A1 Mar 4409.0909 0.0000 A1 Apr 3545.4545 0.0000 A2 Jan 1800.0000 0.0000 A2 Feb 0.0000 -3.6667 A2 Mar 0.0000 -4.7889 A2 Apr 0.0000 -0.7889 A3 Jan 5720.0000 0.0000 A3 Feb 6380.0000 0.0000 A3 Mar 7800.0000 0.0000 A3 Apr 8200.0000 0.0000 ---------------------------------------------------VARIABLE Inventory[product,month] : product month Activity Reduced Cost ---------------------------------------------------A1 Jan 0.0000 -0.2000 A1 Feb 0.0000 -2.4900 A1 Mar 0.0000 -3.5000 A1 Apr 0.0000 -123.5000 A2 Jan 0.0000 -4.0000 A2 Feb 0.0000 -4.0000 A2 Mar 0.0000 0.0000 A2 Apr 0.0000 -108.0000 A3 Jan 320.0000 0.0000 A3 Feb 0.0000 -2.0818 A3 Mar 0.0000 -3.0000 A3 Apr 0.0000 -110.8545 ---------------------------------------------------VARIABLE Sales[product,month] : product month Activity Reduced Cost ---------------------------------------------------A1 Jan 4300.0000 4.3100 A1 Feb 4200.0000 1.0100 A1 Mar 4409.0909 0.0000 A1 Apr 3545.4545 0.0000 A2 Jan 1800.0000 0.0000 A2 Feb 0.0000 0.0000 A2 Mar 0.0000 0.0000 A2 Apr 0.0000 -4.0000 A3 Jan 5400.0000 11.0636 A3 Feb 6700.0000 8.0636 A3 Mar 7800.0000 7.1455 A3 Apr 8200.0000 7.1455 ----------------------------------------------------
CONSTRAINTS CONSTRAINT ProdCapacity[month] : month Slack Shadow Price ------------------------------------------Jan 0.0000 -21195.0000 Feb 0.0000 -22845.0000 Mar 0.0000 -23350.0000 Apr 0.0000 -23350.0000 ------------------------------------------CONSTRAINT InvtBal[product,month] : product month Slack Shadow Price ---------------------------------------------------A1 Jan 0.0000 115.6900 A1 Feb 0.0000 118.9900 A1 Mar 0.0000 120.0000 A1 Apr 0.0000 120.0000 A2 Jan 0.0000 100.0000 A2 Feb 0.0000 100.0000 A2 Mar 0.0000 100.0000 A2 Apr 0.0000 104.0000 A3 Jan 0.0000 103.9364 A3 Feb 0.0000 106.9364 A3 Mar 0.0000 107.8545 A3 Apr 0.0000 107.8545 ---------------------------------------------------CONSTRAINT MaxInventory[month] : month Slack Shadow Price ------------------------------------------Jan 480.0000 0.0000 Feb 800.0000 0.0000 Mar 800.0000 0.0000 Apr 800.0000 0.0000 ------------------------------------------END De acuerdo a la solucin, la ganancia es ahora $2.2M lo cual es considerablemente mayor que en el modelo Planning3, debido a que ahora estamos trabajando con cuatro meses. Esto viene de un total de Ingresos de $5.4M y un costo total de $3.1M, mucho de lo cual viene del costo de produccin, ya que nosotros mantenemos un Inventario bajo justo para Enero. S usted mira la variable Produce (Produccin) en la solucin, notar que estamos produciendo los productos A1 y A3 para el perodo completo que fu planificado, aunque no siempre satisfaga la demanda. El Producto A2, por el otro lado, es producido solamente con 1800 unidades en January (Enero),ya que no tiene suficiente capacidad para producir los tres productos. En Enero, el Modelo decidi producir 320 unidades extras de A3, como fueron requeridas por la demanda, para poner suficiente en el inventario tal de satisfaga la demanda de Febrero.
Nuevos Conceptos en esta Sesin Descripcin del Problema: Un Modelo de Planificacin de la Produccin con Mltiples Plantas Formulacin del Modelo con MPL
Ingrese Nuevos Elementos al Modelo, paso a paso Resuelva el Modelo y Analice la Solucin
$73.30 $52.90 $65.40 $79.00 $52.00 $66.80 $75.80 $52.10 $50.90 $82.70 $63.30 $53.80
La rata de produccin para cada producto es diferente en cada planta y se muestra en la tabla siguiente: Rata de produccin planta 1 planta 2 planta 3 planta 4 A1 A2 A3
500 450 450 550 450 300 450 350 300 550 400 350
Paso 2: Cambie el Ttulo del Modelo Cambie el Ttulo del modelo para que se refleje que usted trabajando con el modelo Planning5: TITLE Production_Planning5; Paso 3: Agregue al Modelo el ndice de localizacin 'plant' (planta) En este ejemplo, tiene cuatro localizaciones de planta diferentes. Cree un nuevo ndice al que llamar plant (planta). Este ndice tendr cuatro elementos p1, p2, p3, y p4 para representar cada perodo de los cuatro meses planificados como perodos. Agregue la siguiente definicin para el ndice plant (planta) a la seccin INDEX (INDICE): INDEX product := month := plant := (A1, A2, A3); (Jan, Feb, Mar, Apr); (p1, p2, p3, p4);
Paso 4: Cambie la definicin del Vector de Datos 'Demand'(Demanda) Para leer Datos desde un Archivo Externo de Datos En esta sesin, mover los valores de los datos del vector de datos bidimensional al archivo externo de datos. Cuando se trabaja con vectores de datos que tienen dos dimensiones o ms, a menudo es buena idea mover los valores de los datos a un archivo externo de datos en lugar de listar todos los nmeros directamente en el archivo del modelo. Esto mantiene los datos separados del modelo, mejorando la legibilidad del modelo, y hace ms fcil el mantenimiento de los datos. El primer vector de datos que usted quiere mover a un archivo externo de datos es el vector Demand. En la seccin DATA (DATOS), use el comando Cut (Cortar) del men Edit para remover la lista de los nmeros para el vector demanda y luego ingrese la palabra clave DATAFILE (Archivo de Datos) y el archivo Demand.dat se colocar como sigue: DATA Price [product] Demand [product, month] :=(120.00, 100.00, 115.00); :=DATAFILE("Demand.dat");
Paso 5: Cree el Archivo de Datos 'Demand.dat' El prximo paso es crear el archivo de datos Demand.dat. Primero, abra una nueva ventana del editor del modelo eligiendo New (Nuevo) en el men File (Archivo). S usted us el comando Edit (Editar) | Cut (Cortar) en el Paso 4 anterior para retirar los valores de datos, ahora puede usar el comando Edit(Editar) | Paste(Pegar) para colocar nuevamente los datos dentro del archivo de datos. De otra manera, usted puede usar la tabla de datos de la demanda de la descripcin del problema en la sesin 3 para ingresar los valores de los datos dentro del archivo de datos como sigue: ! ! ! ! ! ! Demand.dat - Demand per month for each product Demand [product,month]: Jan Feb Mar Apr ---------------------------4300, 4200, 6400, 5300, 4500, 5400, 6500, 7200, 5400, 6700, 7800, 8200
Las lneas que empiezan con marcas de exclamacin "!" son comentarios usados para mejorar su lectura. Los nmeros en el archivo de datos pueden ser separados por una coma o espacio o ambos. Despus que ha ingresado todos los datos guarde el archivo como Demand.dat en el folder del tutor. Paso 6: Aumente los vectores de Datos 'ProdCost' y 'ProdRate' para incluir el ndice 'plant' Dos de los Vectores de Datos, ProdCost y ProdRate, necesitan aumentarse para incluir el ndice plant. El vector de datos ProdCost es definido ahora por dos ndices dominio, plant (planta) y product (producto) y los valores de los datos sern obtenidos desde un archivo de datos externo. Los valores del vector de datos ProdRate tambin se obtendrn desde un archivo de datos. En el editor del modelo, agregue el ndice,
plant, para ambas declaraciones de los vectores de datos ProdCost y ProdRate, y siga con los nombres de archivos de datos ProdCost.dat yProdRate.dat respectivamente como sigue: ProdCost[plant, product] ProdRate[plant, product] ProdDaysAvail[month] InvtCost[product] InvtCapacity := := := := := DATAFILE("ProdCost.dat"); DATAFILE("ProdRate.dat"); (23, 20, 23, 22); (3.50, 4.00 3.00); 800;
Paso 7: Cree los archivos de Datos para los Vectores de Datos 'ProdCost' y 'ProdRate' Ahora abra una nueva ventana del editor seleccionando en el men File (Archivo) | New (Nuevo) para ingresar el archivo de datos. Escriba los datos desde la tabla Production Cost en la descripcin del problema como sigue: ! ! ! ! ! ! ! ProdRate.dat Items produced per day
ProdRate[plant, product]: A1 A2 A3 -----------------500, 450, 450, 550, 450, 300, 450, 350, 300, 550, 400, 350
Otra vez, las lneas que empiezan con las marcas de exclamacin "!", son comentarios usados para facilitar su lectura. Despus que ha ingresado todos los datos, guarde el archivo usando el nombre ProdCost.dat. Para la tasa de produccin cree un nuevo archivo de datos llamado ProdRate.dat, usando los valores de la tabla en la descripcin del problema. ! ! ! ! ! ! ! ProdRate.dat Items produced per day
ProdRate[plant, product]: A1 A2 A3 -----------------500, 450, 450, 550, 450, 300, 450, 350, 300, 550, 400, 350
Paso 8: Actualice la Variable 'Produce'(Produccin) para incluir el ndice 'plant'(Planta) Para determinar cunto quiere producir de cada producto, en cada planta, usted necesita agregar el ndice plant (planta) a la definicin del vector de la variable Produce (produccin) como sigue: VARIABLES Produce[plant, product, month] -> Prod; Inventory[product, month] -> Invt; Sales[product, month] -> Sale; Paso 9: Agregue el ndice 'plant'(planta) a la sumatoria 'TotalProdCost' Puesto que la variable vector Produce (produccin) ahora incluye el nuevo ndice plant, el clculo del costo total de produccin en la seccin MACROS necesita tambin ser actualizada para incluir el ndice plant: MACROS TotalRevenue TotalProdCost TotalInvtCost TotalCost := := := := SUM(product, month: Price * Sales); SUM(plant, product, month: ProdCost * Produce) ; SUM(product, month: InvtCost * Inventory); TotalProdCost + TotalInvtCost;
La funcin objetivo no cambia por si misma cuando usted est usando la misma macro de la sesin anterior. Paso 10: Agregue el ndice 'plant' a la Restriccin 'ProdCapacity' El cambio para la restriccin capacidad de produccin es muy sencillo. Agregue el ndice plant a la declaracin de la capacidad de produccin y el resto de la restriccin permanece igual. SUBJECT TO ProdCapacity[plant, month] -> PCap: SUM(product: Produce / ProdRate)
<=
ProdDaysAvail;
Paso 11: Agregue la Sumatoria de la Variable 'Produce'(Produccin) sobre el Indice 'plant'(Planta) a la Restriccin de Equilibrio de Inventario Ahora usted puede producir los productos en cualquiera de las cuatro plantas, adems, usted necesita actualizar la restriccin de equilibrio del inventario para incluir una sumatoria, sobre todas las plantas, de la variable vector Produce. InvtBal[product, month] -> IBal: SUM(plant: Produce) + Inventory[month-1] = Sales + Inventory;
Despus que ha terminado de ingresar el modelo, usted debe guardarlo eligiendo Save(Guardar) del men File(Archivo).
Cuadro de Dilogo Opciones del Archivo de soluciones 2. Marque la opcin Nonzero Values Only (Solo valores diferentes de cero) haciendo Clic sobre l. 3. Cierre el Cuadro de Dilogo, presionando el botn OK. Despus que ha cambiado la opcin Nonzero Values Only (Solo Valores diferentes de cero), el prximo paso es resolver el modelo eligiendo Solve CPLEX del men Run (Ejecutar). Si todo est bien MPL visualizar el mensaje "Optimal Solution Found" (Solucin ptima Encontrada). Si hubiera algn mensaje de error de sintxis, por favor verifique la formulacin del modelo ingresado anteriormente en esta sesin.
Como los modelos que est trabajando sern muy grandes, usted tender a ver ciertas partes de la solucin en lugar del archivo completo de la solucin. Esta vez, en lugar de listar el archivo completo de la solucin, estaremos usando la ventana del rbol de definiciones del modelo para ver solo las partes de la solucin que nos interesa. La ventana de definiciones del modelo le permite ver todos los tems definidos en la formulacin del modelo en un rbol jerrquico donde cada rama corresponde a la seccin en el modelo. En MPL normalmente es una buena idea dejar la ventana de rbol abierta todo el tiempo. MPL actualizar automticamente su contenido cada vez que usted guarda su modelo. Para ver las definiciones del modelo Planning5, elija Model Definitions (Definiciones del Modelo) del men View (Ver).
Ventana Definiciones del Modelo Planning5 Desde la ventana de rbol usted puede seleccionar alguno de los items definidos en el modelo para ver sus valores actuales de ese item. Por ejemplo, para ver los valores de la variable Produce, haga doble click sobre el item Produce en el rbol, o seleccionelo y presione el botnView(Ver). Esto visualizar una ventana conteniendo solo los valores de la variable Produce(Produccin). VARIABLE Produce[plant,product,month] : plant product month Activity Reduced Cost ----------------------------------------------------------p1 A1 Jan 4300.0000 0.0000 p1 A1 Feb 4200.0000 0.0000 p1 A1 Mar 6400.0000 0.0000 p1 A1 Apr 5300.0000 0.0000 p2 A2 Jan 4500.0000 0.0000 p2 A2 Feb 5400.0000 0.0000 p2 A2 Mar 6500.0000 0.0000 p2 A2 Apr 7200.0000 0.0000 p3 A3 Jan 5400.0000 0.0000 p3 A3 Feb 6000.0000 0.0000 p3 A3 Mar 6900.0000 0.0000 p3 A3 Apr 6600.0000 0.0000 p4 A3 Feb 700.0000 0.0000 p4 A3 Mar 900.0000 0.0000 p4 A3 Apr 1600.0000 0.0000 ----------------------------------------------------------S usted est mirando los valores de las actividades para la variable Produce (Produccin), ver que esta vez estamos satisfaciendo la demanda para todos los productos, puesto que ahora tenemos suficiente capacidad. El modelo decide qu plantas y para qu productos son usadas. Por ejemplo, la planta p1 es usada para producir el producto A1, la planta p2 es usada para el producto A2, y la planta p3 y p4 son usadas para el producto A3.
S usted va a la ventana de rbol otra vez y abre una ventana para la restriccin ProdCapacity usted obtendr los siguientes valores como solucin. CONSTRAINT ProdCapacity[plant,month] : plant month Slack Shadow Price -------------------------------------------------p1 Jan 14.4000 0.0000 p1 Feb 11.6000 0.0000 p1 Mar 10.2000 0.0000 p1 Apr 11.4000 0.0000 p2 Feb 8.0000 0.0000 p2 Mar 8.5556 0.0000 p2 Apr 6.0000 0.0000 p3 Jan 5.0000 0.0000 p4 Jan 23.0000 0.0000 p4 Feb 18.0000 0.0000 p4 Mar 20.4286 0.0000 p4 Apr 17.4286 0.0000 -------------------------------------------------Aqu hay mucha holgura para cada planta y cada mes en la restriccin de la capacidad de produccin. Esto puede ser interpretado como que nosotros podemos producir una cantidad ms de los productos, pero ello no es necesario cuando ya estamos satisfaciendo la demanda. Puesto que la restriccin de la capacidad de la produccin usa los das de produccin como una unidad de medida, los valores de holgura representan cuntos das por mes cada una de las plantas est inactiva u ociosa.
Nuevos Conceptos en esta Sesin Descripcin del Problema: Permite Embarques entre las Plantas Formulacin del Modelo con MPL Ingrese nuevos Elementos al Modelo Paso a Paso Resuelva el Modelo y Analice la Solucin
Puesto que no hay orgenes ni destinos especficos, usted puede embarcar desde una localizacin a cualquier otra localizacin. ndices Ficticios Los ndices Ficticios son muy usados cuando usted necesita definir un vector, el cual usa el mismo ndice ms de una vez, como un subndice. Cuando se embarcan los productos entre plantas usted necesita crear una variable vector, que representa cunto embarcar entre las plantas. Puesto que las plantas origen y plantas destino vienen del mismo conjunto de plantas, usted necesita dos ndices ficticios para las plantas. El primer ndice ficticio es requerido para representar las plantas origen, y el segundo ndice ficticio es requerido para representar las plantas destino. Usando Condiciones Where (Dnde) sobre las Variables Vector Algunas veces, cuando se trabaja con variables vector multidimensionales encontrar casos donde no todos los elementos del vector son vlidos, o tienen algn significado. Por ejemplo, en los modelos de transbordo tendra poco sentido embarcar un producto de cierta parte de la planta a esa misma planta. En esos casos, se usa la condicin WHERE (Dnde) sobre la variable para eliminar elementos innecesarios. Por ejemplo, en un modelo de transbordo puede eliminar la posibilidad de embarcar a la misma localizacin, definiendo la variable como sigue: VARIABLES Ship[fromplant,toplant] WHERE (fromplant <> toplant); En este caso, la condicin (fromplant <> toplant) elimina todos los elementos del vector, donde la planta origen es la misma que la planta destino. En algunos casos, hay elementos que necesitan ser excluidos cuando no estn basados sobre los valores de los ndices. Ellos deben estar basados en algn vector de datos en el modelo. Normalmente, se tiene un vector costo conteniendo cunto es el costo de embarcar entre las plantas. Para esas plantas, s el embarque entre ellas no es factible, puede ingresar un valor especial para el costo, tal como cero, para usarlo como un identificador. Luego, en la definicin de la variable, puede usar este vector de datos para excluir las rutas de embarque que no son factibles, como sigue: VARIABLES Ship[fromplant,toplant] WHERE (ShipCost[fromplant,toplant] > 0); Restricciones de Equilibrio de Plantas Cuando se trabaja con modelo de transbordo, necesita asegurarse que la cantidad de productos embarcados a una planta, ms cunto es producido y cunto es retirado del inventario, debe ser igual a cunto es embarcado desde la planta, ms cunto es vendido y cunto ha quedado en inventario. En pocas palabras, cada cosa que llega a la planta debe ser igual a lo que sale de la planta. Esta clase de restricciones es normalmente llamada Restricciones de Equilibrio de plantas. A continuacin vemos un ejemplo simple de una restriccin de equilibrio de planta: PlantBal[plant, product, month]: Produce + Inventory[month-1] + SUM(fromplant: Ship[fromplant, toplant:=plant]) = Sales + Inventory + SUM(toplant: Ship[fromplant:=plant, toplant]); Notar que esta restriccin es similar a la restriccin de equilibrio de inventario que usted encontr en sesiones anteriores. La nica diferencia es que ahora tiene que tomar en cuenta que estamos embarcando a y desde cada una de las plantas ingresando una suma sobre cada una de las plantas para la variable Ship (Embarque). La asignacin del ndice 'toplant:=plant', en la primera suma, nos permite especificar que el subndice toplant debe tomar el valor del subndice plant para la restriccin PlantBal. Esta suma adiciona todos los embarques de cada una de las plantas a una planta en particular en esa restriccin. De manera similar, la asignacin del ndice 'fromplant:=plant', en la segunda suma, especifica que el subndice fromplant debe tomar el valor del subndice plant.
4300 4200 6400 5300 4500 5400 6500 7200 5400 6700 7800 8200 5100 6200 5400 7600 6300 7100 5200 6300 4800 6500 5000 7200 4100 6100 4700 5800 5300 5200 5700 4100 4200 4100 5200 6300 4300 4100 5300 4500 5300 6400 4200 6200 5600 5200 3800 4100
Estos datos tienen tres dimensiones, plantas, productos y meses. En modelos de programacin Lineal es muy tpico tener datos con dimensiones mltiples, posiblemente hasta ocho o ms. En la prxima sesin, actualizaremos los datos de la demanda para incluir una dimensin ms; mquinas, creando as un vector de cuatro dimensiones. La capacidad del inventario es ahora diferente para cada planta. Tenemos cuatro valores para la capacidad del inventario, uno para cada planta, 800, 400, 500, y 400 respectivamente. Puesto que ahora tenemos mltiples plantas, cada una de las cuales puede mantener su inventario, ahora tenemos diferentes costos de inventario para cada planta y cada producto. Los nuevos valores de costos para el inventario se muestran a continuacin:
Inventory Cost p1 p2 p3 p4
A1
A2
A3
$8.50 $7.00 $6.50 $9.80 $9.80 $9.80 $7.50 $7.50 $7.50 $9.30 $8.00 $6.50
Finalmente, puesto que estamos permitiendo embarques entre las plantas, hay ciertos costos involucrados para embarcar un producto, como se muestra en la tabla que sigue:
Shipping Cost
p1
p2
p3
p4
p1 p2 p3 p4
$16.00
$14.00 $17.00
Como usted puede ver, no hay valores en la tabla donde la planta origen es la misma que la planta destino. Esto es porque no hay ningn beneficio embarcar a la misma planta.
DATA Price[product] Demand[plant, product, month] ProdCost[plant, product] ProdRate[plant, product] ProdDaysAvail[month] InvtCost[plant, product] InvtCapacity[plant] ShipCost[fromplant, toplant]
:= := := := := :=
(120.00, 100.00, 115.00); DATAFILE("Demand6.dat"); DATAFILE("ProdCost.dat"); DATAFILE("ProdRate.dat"); (23, 20, 23, 22); DATAFILE("InvtCost.dat");
VARIABLES Produce[plant, product,month] -> Prod; Inventory[plant, product, month] -> Invt; Sales[plant,product, month] -> Sale; Ship[product, month, fromplant, toplant] WHERE (fromplant <> toplant); MACROS TotalRevenue TotalProdCost TotalInvtCost TotalShipCost Ship); TotalCost MODEL MAX Profit= TotalRevenue - TotalCost; SUBJECT TO ProdCapacity[plant, month] -> PCap: SUM(product: Produce / ProdRate) := := := := SUM(plant, product,month: Price * Sales); SUM(plant, product, month: ProdCost* Produce); SUM(plant, product, month: InvtCost * Inventory); SUM(product, month, fromplant,toplant: ShipCost *
<=
ProdDaysAvail;
Produce + Inventory[month-1] + SUM(fromplant:Ship[fromplant, toplant:=plant]) = Sales + Inventory + SUM(toplant: Ship[fromplant:=plant,toplant]); MaxInventory[plant, month] -> MaxI: SUM(product: Inventory) <= InvtCapacity; BOUNDS Sales < Demand ; END
Paso 4: Actualice el Vector de Datos 'Demand' para incluir el ndice 'plant' Ahora tenemos una demanda diferente para cada planta. La definicin para el vector de datos Demand necesita ser aumentado para incluir el ndice plant. En el editor del modelo, agregue el ndice plant al vector de datos Demand y cambie el nombre del archivo a Demand6.dat. DATA Price[product] := (120.00, 100.00, 115.00); Demand[plant, product, month] := DATAFILE("Demand6.dat"); Puesto que el vector Demand tiene tres ndices, el archivo de datos necesita ser actualizado. Adems, usted est creando un nuevo archivo de datos llamado 'Demand6.dat' usando los valores de datos de la tabla en la descripcin del problema dado anteriormente en esta sesin. Ingrese los valores de los datos al archivo de datos, como sigue:
! ! Demand6.dat - Demand for each product and each plant ! ! Demand[plant,product,month]: ! ! Jan Feb Mar Apr ! --------------------------!plant 1: 4300, 4200, 6400, 5300, 4500, 5400, 6500, 7200, 5400, 6700, 7800, 8200, !plant 2: 5100, 6200, 5400, 7600, 6300, 7100, 5200, 6300, 4800, 6500, 5000, 7200, !plant 3: 4100, 6100, 4700, 5800, 5300, 5200, 5700, 4100, 4200, 4100, 5200, 6300, !plant 4: 4300, 4100, 5300, 4500, 5300, 6400, 4200, 6200, 5600, 5200, 3800, 4100 Cuando se tiene tres dimensiones de datos en los archivos de datos, liste los valores de los datos en el mismo orden que los ndices fueron definidos en el vector de datos del modelo. Por ejemplo, en el archivo de datos de arriba Demand6, el ndice que est ms a la izquierda es el ndice plant, seguido por el ndice product y el ndice month. Paso 5: Aumente el Vector de Datos 'InvtCost' y el Dato Constante 'InvtCapacity' Para Incluir el Indice 'plant' Puesto que ahora se puede almacenar inventarios en cada planta, se necesita actualizar el costo del inventario y los datos de la capacidad del inventario para incluir el ndice plant. En el editor del modelo, agregue el ndice plant en la declaracin del vector de datos InvtCost y el dato constante InvtCapacity. Luego, para el vector de datos InvtCost elimine la lista de nmeros y reemplcelo con la palabra clave DATAFILE y el nombre de archivo 'InvtCost.dat.' Para el InvtCapacity elimine el valor 800 y reemplcelo con la lista de cuatro valores, uno por cada planta, tomndolo de la descripcin del problema anterior de esta sesin. InvtCost[plant, product] := DATAFILE("InvtCost.dat"); InvtCapacity[plant] := (800, 400, 500, 400); Despus, necesita crear un nuevo archivo de datos llamado 'InvtCost.dat' usando los valores de costos de la tabla de costos del inventario de la descripcin del problema. Ingrese los valores de los datos al archivo de datos, como sigue: ! ! InvtCost.dat - Inventory cost per item a month ! ! InvtCost [plant,product]: ! ! A1 A2 A3 ! ----------------------8.50, 7.00, 6.50 9.80, 9.80, 9.80 7.50, 7.50, 7.50 9.30, 8.00, 6.50 Paso 6: Agregue un Vector de Datos para los Costos de Embarque Hay ciertos costos involucrados en embarcar productos entre plantas. En el editor del modelo, agregue un nuevo vector de datos llamadoShipCost definido sobre los ndices ficticios fromplant y toplant seguido por la palabra clave DATAFILE y el nombre de archivo ShipCost.dat. ShipCost[fromplant, toplant] := DATAFILE("ShipCost.dat");
Despus, necesita crear un nuevo archivo de datos llamado ShipCost.dat conteniendo los costos figurados de embarque entre las plantas proporcionados en la descripcin del problema. Ingrese los valores de los datos para el archivo de datos, como sigue: ! ! ShipCost.dat - Shipping costs from plant to plant ! ! ShipCost [fromplant, toplant] ! 0, 15.00, 21.00, 13.00, 16.00, 0, 12.00, 12.00, 14.00, 17.00, 0, 15.00, 21.00, 13.00, 10.00, 0, Paso 7: Agregue una Variable Vector para Embarques entre Plantas Estamos permitiendo embarques entre plantas, adems, se necesita crear una nueva variable que decida cunto debe ser embarcado de cada producto por cada mes. Esta variable vector ser definida sobre los ndices ficticios fromplant y toplant como tambin los ndices product y month. Agregue la siguiente definicin a la variable vector Ship de la seccin VARIABLES: Ship[product, month, fromplant, toplant] WHERE (fromplant <> toplant); Puesto que no queremos embarcar un producto de una planta a la misma planta, estamos usando la condicin WHERE para eliminar todos los elementos del vector donde la planta origen es la misma que la planta destino. Paso 8: Agregue el costo Total de Embarque a la Funcin Objetivo En la seccin MACROS agregue una nueva definicin para el costo total de llamada TotalShipCost y actualice la macro TotalCost para incluir la nueva macro como sigue: embarque
TotalShipCost := SUM(product, month, fromplant, toplant: ShipCost * Ship); TotalCost := TotalProdCost + TotalInvtCost + TotalShipCost; Note que la actual funcin objetivo no necesita ser cambiada a la macro TotalCost que contiene todos los cambios. Paso 9: Aumente la Restriccin de Equilibrio de Inventario a la Restriccin de Equilibrio de Planta, Agregando la Variable 'Ship' Puesto que ahora se permiten embarques entre las plantas, se necesita aumentar la restriccin de equilibrio de inventario del modelo anterior a la restriccin de equilibrio de planta. Primero, cambie el nombre de la restriccin de InvtBal a PlantBal y agregue el ndice Plant a la declaracin. Luego, puesto que la restriccin est ahora declarada sobre el ndice Plant no tenemos que sumar sobre el ndice Plant para la variable Produce una vez ms. PlantBal[plant, product, month] -> PBal: Produce + Inventory[month-1] + SUM (fromplant:Ship[fromplant, toplant:=plant]) = Sales + Inventory + SUM(toplant: Ship[fromplant:=plant, toplant]); Sobre el lado izquierdo, donde estamos poniendo junto todo lo que est llegando a la planta, agregue una suma para agregar todos los embarques desde cada una de las plantas a la planta actual de la restriccin. Dentro de la suma, ingrese la variable Ship con la planta destino tomando el valor del actual ndice plant. Por el lado derecho, donde estamos poniendo junto todo lo que est saliendo de la planta, agregue otra suma para agregar todos los embarques de la planta actual a cada una de las otras plantas. Dentro de la suma ingrese la variable Ship esta vez con la planta origen tomando el valor del ndice actual plant de la restriccin.
Ventana rbol de Definicin del Modelo Planning6 Model Para mirar los valores de la variable Produce, haga doble clic sobre el item Produce en el rbol, o seleccione el item y presione el botn View. Esto visualizar una ventana conteniendo solo los valores de la variable Produce como se muestra a continuacin. VARIABLE Produce[plant,product,month] : plant product month Activity Reduced Cost ----------------------------------------------------------p1 A1 Jan 4300.0 0.0 p1 A1 Feb 4200.0 0.0 p1 A1 Mar 6400.0 0.0 p1 A1 Apr 5300.0 0.0 p1 A2 Jan 1080.0 0.0 p1 A3 Jan 5400.0 0.0 p1 A3 Feb 5220.0 0.0 p1 A3 Mar 4590.0 0.0 p1 A3 Apr 5130.0 0.0 p2 A1 Jan 5100.0 0.0 p2 A1 Feb 6200.0 0.0 p2 A1 Mar 5400.0 0.0 p2 A1 Apr 7600.0 0.0 p2 A2 Jan 6177.3 0.0 p2 A2 Feb 3927.3 0.0 p2 A2 Mar 5931.8 0.0 p2 A2 Apr 3681.8 0.0 p3 A1 Jan 4100.0 0.0 p3 A1 Feb 6100.0 0.0 p3 A1 Mar 4700.0 0.0 p3 A1 Apr 5800.0 0.0 p3 A3 Jan 4166.7 0.0 p3 A3 Feb 1933.3 0.0
p3 A3 Mar 3766.7 0.0 p3 A3 Apr 2733.3 0.0 p4 A1 Jan 3850.0 0.0 p4 A1 Feb 2828.6 0.0 p4 A1 Mar 5300.0 0.0 p4 A1 Apr 4500.0 0.0 p4 A3 Jan 5600.0 0.0 p4 A3 Feb 5200.0 0.0 p4 A3 Mar 4677.3 0.0 p4 A3 Apr 4836.4 0.0 ----------------------------------------------------------Como puede ver, la produccin est ahora distribuida entre las plantas de una manera ms efectiva. Ciertos productos son claramente mejores de producir en una planta en particular debido a que se toma en cuenta el costo de produccin y el costo de embarque. Por ejemplo, el producto A2 es producido en las plantas p1 y p2, pero no en p3 y p4, mientras que el producto A3 es producido en las plantas p1, p3 y p4. El producto A1 es ms econmicamente producido en todas plantas. Si va a la ventana del rbol otra vez y abre una ventana para la variable Ship obtendr los siguientes valores en la solucin: VARIABLE Ship[product,month,fromplant,toplant] : product month fromplant toplant Activity Reduced Cost -----------------------------------------------------------------------A2 Mar p2 p4 331.8 0.0 A3 Mar p4 p3 877.3 0.0 A3 Apr p4 p3 736.4 0.0 -----------------------------------------------------------------------Como se puede ver, el modelo propone que debemos embarcar el producto A2 desde la planta p2 a la planta p4. De manera similar, A3 es embarcado desde la planta p4 a la planta p3. Claramente, las plantas p2 y p4 tienen capacidad extra a un costo bajo que puede ser usado para producir bienes que las plantas p4 y p3 necesitan.
Nuevos Conceptos en esta Sesin Descripcin del Problema: Un Modelo de Planificacin con Mltiples Mquinas en cada Planta Formulacin del Model con MPL Ingrese Nuevos Elementos al Modelo Paso a Paso Resuelva el Modelo y Analice la solucin
ser logrado, usando un comando estndar WHERE (Dnde) sobre el vector de datos, o usando el operador IN para asociar los ndices relevantes. Usando el Operador IN El operador IN en MPL le permite seleccionar uno de los ndices dominio de un ndice multidimensional. Por ejemplo, si tiene un ndice multidimensional que especifique cules mquinas estn disponibles y en qu plantas, usted puede usar el operador IN para sumar sobre todas las mquinas para esa planta en particular. INDEX plant machine := (p1, p2, p3, p4); := (m11, m12, m13, m21, m22, m31, m32, m41); :=
PlantMach[plant,machine]
(p1.m11, p1.m12, p1.m13, p2.m21, p2.m22, p3.m31, p3.m32, p4.m41); En el ejemplo de arriba, hemos definido un ndice multidimensional llamado PlantMach que asocia a las plantas con las correspondientes mquinas. El ndice PlantMach puede ser usado selectivamente, para elegir slo las mquinas que estn disponibles en una planta en particular. Por ejemplo: SUBJECT TO PlantCapacity[plant] : SUM(machine IN PlantMach: Produce[machine])
<=
MaxCapacity[plant];
En el ejemplo de arriba, sumamos todo cunto es producido en cada mquina para una planta en particular. Luego nos aseguramos que la produccin total est limitada a la capacidad mxima. Archivos ndices As como puede almacenar datos en un archivo externo de datos, tambin puede almacenar ndices en archivos de ndices externos. Los archivos de ndices le permiten almacenar los elementos de un ndice en un archivo, en lugar de especificarlos directamente en el modelo. Cuando est definiendo un ndice con un archivo ndice use la palabra clave INDEXFILE con un nombre de archivo en lugar del listado usual de los elementos. Por ejemplo: INDEX product month plant := INDEXFILE("Product.idx"); := INDEXFILE("Month.idx"); := INDEXFILE("Plant.idx");
El archivo ndice es justamente un archivo de texto estndar que contiene un listado de los elementos ndices para un ndice particular. Usted puede separar los elementos en el archivo con una coma, un espacio o ambos. Por ejemplo aqu hay un archivo de ndice de muestra para el ndice product (producto). ! Product.idx - Index element for the product index A1, A2, A3
Archivo de Datos Dispersos Generalmente, cuando se trabaja con modelos dispersos, los datos involucrados son muy grandes y vienen de otras aplicaciones, tal como base de datos corporativos o de escritorio. En las sesiones anteriores, los datos fueron tecleados en el archivo del modelo o almacenados en un archivo de datos compactos. Cuando trabajamos con conjuntos de datos grandes, se necesita un mtodo ms eficiente para importar los datos a MPL desde otras aplicaciones. Para este propsito, MPL tiene la habilidad de leer los datos desde un archivo de datos dispersos. Este archivo le permite ingresar los datos en un formato de tabla estndar, el cual es ms cercano a las actuales caractersticas de los datos, por ejemplo, desde una base de datos relacional. Un ejemplo de un archivo de datos disperso puede ser como sigue: ProdCost[plant, machine, product] := SPARSEFILE("ProdCost.dat");
El archivo ProdCost.dat contiene los datos en el formato de columnas orientadas con los ndices en las tres primeras columnas y los correspondientes valores de datos al final de cada fila, como sigue: p1, p1, p1, p4, p4, m11, m11, m12, . m41, m41, A1, A2, A3, A2, A3, 73.30, 52.90, 65.40, 63.30, 53.80
Por favor note, que MPL le permite tambin almacenar mltiples columnas de datos en un simple archivo de datos dispersos. Puede especificar cul columna, agregando una coma y el nmero de columna de los datos despus del nombre de archivo que est dentro del parntesis. ProdCost [plant, machine, product] := SPARSEFILE("ProdCost.dat", 2);
El uso de archivos de datos dispersos es comn en el modelado del mundo real. Esos archivos pueden terminar siendo muy grandes, con mltiples ndices y contener cantidades de datos. Frecuentemente, se tendr mltiples archivos ndices y archivos de datos dispersos almacenando todos los datos y dejando que el archivo del modelo slo tenga las sentencias actuales del modelo, tal como las variables, funcin objetivo y las restricciones.
Descripcin del Problema: Un Modelo de Planificacin con Mltiples Mquinas para cada Planta
En esta sesin, actualizar el modelo para tener mltiples mquinas distribuidas entre las plantas. Usar el modelo creado en la sesin 6, y haga las adiciones y actualizaciones necesarias. Puesto que ahora tenemos diferentes mquinas dentro de cada planta, el costo de produccin y la tasa de produccin tienen ahora diferentes valores para cada mquina. La siguiente es una tabla con una sola fila para cada planta, combinacin de productos y mquinas que son aplicables. Tabla de Demanda
Plant Product Product ProdCost ProdRate m11 p1 m11 m12 m13 m21 p2 m21 m22 m31 p3 m31 m32 m32 m41 p4 m41 m41 A1 A2 A3 A3 A1 A3 A2 A1 A3 A1 A2 A1 A2 A3 $73.30 $52.90 $65.40 $47.60 $79.00 $66.80 $52.00 $75.80 $50.90 $79.90 $52.10 $82.70 $63.30 $53.80 500 450 550 350 550 450 300 450 300 400 350 550 400 350
La decisin de Produccin, cunto producir de cada producto, necesita tomarse en cuenta que ahora tenemos mltiples mquinas. Adems, se actualizar la variable Produce(Produccin) para incluir el ndice machine (Mquina) y luego usar la condicin WHERE para excluir los elementos que no son aplicables, tal como la planta p1, mquina m11, y producto A3.
TITLE Production_Planning7; INDEX product := (A1, A2, A3); month := (Jan, Feb, Mar, Apr); plant := (p1, p2, p3, p4); toplant := plant; fromplant := plant; machine := (m11, m12, m13, m21, m22, m31, m32, m41); DATA Price[product] := (120.00, 100.00, 115.00); Demand[plant, product, month] := DATAFILE("Demand6.dat"); ProdCost[plant, machine, product] := SPARSEFILE("Produce.dat", 1); ProdRate[plant, machine, product] := SPARSEFILE("Produce.dat", 2); ProdDaysAvail[month] := (23, 20, 23, 22); InvtCost[plant, product] := DATAFILE("InvtCost.dat"); InvtCapacity[plant] := (800, 400, 500, 400); ShipCost[fromplant, toplant] := DATAFILE ("ShipCost.dat"); VARIABLES Produce[plant, machine, product, month] -> Prod WHERE (ProdCost > 0); Inventory[plant, product, month] -> Invt; Sales[plant, product, month] -> Sale; Ship[product, month, fromplant, toplant] WHERE (fromplant <> toplant); MACROS TotalRevenue := SUM(plant, product, month: Price * Sales); TotalProdCost := SUM(plant, machine, product,month: ProdCost * Produce); TotalInvtCost := SUM(plant, product, month: InvtCost * Inventory); TotalShipCost := SUM(product, month, fromplant, toplant: ShipCost * Ship); TotalCost := TotalProdCost + TotalInvtCost + TotalShipCost; MODEL MAX Profit = TotalRevenue - TotalCost; SUBJECT TO ProdCapacity[plant, machine, month] -> PCap: SUM(product: Produce / ProdRate) <= ProdDaysAvail; PlantBal[plant, product, month] -> PBal: SUM(machine: Produce) + Inventory[month-1] + SUM(fromplant: Ship[fromplant, toplant:=plant]) = Sales + Inventory + SUM(toplant: Ship[fromplant:=plant, toplant]); MaxInventory[plant, month] -> MaxI: SUM(product: Inventory) <= InvtCapacity; BOUNDS Sales < Demand; END
TITLE Production_Planning7; Paso 3: Agregue al Modelo el ndice 'machine' En este modelo, cada planta tiene ahora mltiples mquinas. Para crear un ndice para las mquinas agregue la siguiente definicin para el ndice machine (mquina) en la seccin INDEX. INDEX product month plant toplant fromplant machine := := := := := := (A1, A2, A3); (Jan, Feb, Mar, Apr); (p1, p2, p3, p4); plant; plant; (m11, m12, m13, m21, m22, m31, m32, m41);
Paso 4: Actualice los Vectores de Datos 'ProdCost' y 'ProdRate' para ser Incluidos en el ndice 'machine' El costo de produccin y la tasa de produccin necesitan ahora ser incluidos al ndice de mquinas puesto que tienen diferentes valores para cada mquina. Tambin, puesto que ahora los datos estn dispersos, esto es, cada planta no tiene asociado sus mquinas, estaremos almacenando los datos en un archivo de datos dispersos. MPL le permite almacenar mltiples columnas de datos en un archivo sencillo de datos dispersos. Especifique cul columna va a leer agregando una coma y el nmero de columna despus del nombre del archivo. Actualice las definiciones para los vectores de datos ProdCost y ProdRate para ser incluidos en el ndice machine y cambiar el nombre de archivo a un nuevo archivo de datos dispersos llamado Produce.dat. Para el costo de produccin especifique el nmero de columna 1despus del nombre de archivo y para la tasa de produccin especifique el nmero de columna 2. DATA Price[product] Demand[plant, product, month] ProdCost[plant, machine, product] ProdRate[plant, machine, product] ProdDaysAvail[month] InvtCost[product] InvtCapacity[plant] ShipCost[fromplant, toplant] := := := := := := := := (120.00, 100.00, 115.00); DATAFILE("Demand6.dat"); SPARSEFILE("Produce.dat", 1); SPARSEFILE("Produce.dat", 2); (23, 20, 23, 22); DATAFILE("InvtCost.dat"); (800, 400, 500, 400); DATAFILE("ShipCost.dat");
Paso 5: Creando Archivos de Datos Dispersos para el Costo de Produccin y la Tasa de Produccin Ahora necesita crear el archivo de datos dispersos Produce.dat de los datos en la descripcin del problema anterior dados en esta sesin. Para crear el archivo de datos para el costo de produccin abra una nueva ventana del editor para el archivo de datos llamado Produce.dat y escriba lo siguiente: ! ! ! ! ! Produce.dat Production Cost and Rate
ProdCost[plant, machine, product]: ProdRate[plant, machine, product]: p1, p1, p1, p1, p2, p2, p2, p3, p3, p3, m11, m11, m12, m13, m21, m21, m22, m31, m31, m32, A1, A2, A3, A3, A1, A3, A2, A1, A3, A1, 73.30, 52.90, 65.40, 47.60, 79.00, 66.80, 52.00, 75.80, 50.90, 79.90, 500, 450, 550, 350, 550, 450, 300, 450, 300, 400,
Paso 6: Actualice el Vector de la Variable Produce para incluirla en el ndice 'machine' La variable Produce necesita ahora tener el ndice machine en las declaraciones como necesitamos saber en qu mquina es producido cada producto. Adems, puesto que no todas la mquinas estn en cada planta necesitamos excluir las combinaciones que no son vlidas. Esto es hecho usando la condicin where sobre el vector de datos ProdCost. Las combinaciones de ndices son usados slo cuando ProdCost es mayor que cero o cuando la variable Produce es ampliada. Ingrese los cambios a la variable produce como sigue: VARIABLES Produce[plant, machine, product, month] -> Prod WHERE (ProdCost > 0); Paso 7: Agregue el ndice 'machine' a la Macro del Costo Total de Produccin En la macro del costo total de produccin, agregue el ndice machine para que refleje que la variable produce contiene ahora el ndice machine. MACROS TotalRevenue TotalProdCost TotalInvtCost TotalShipCost TotalCost := := := := := SUM(plant, product, month: Price * Sales); SUM(plant, machine, product,month: ProdCost * Produce); SUM(plant, product, month: InvtCost * Inventory); SUM(product, month, fromplant, toplant: ShipCost * Ship); TotalProdCost + TotalInvtCost + TotalShipCost;
Paso 8: Actualice la Restriccin 'ProdCapacity' para ser Incluida en el ndice 'machine' En la declaracin de la restriccin de la capacidad de la produccin, el ndice machine debe ser incluido puesto que ahora tiene un lmite de capacidad separada para cada mquina en la planta. Ingrese los cambios a la restriccin ProdCapacity como sigue: SUBJECT TO ProdCapacity[plant, machine, month] -> PCap: SUM(product: Produce / ProdRate) <= ProdDaysAvail; Paso 9: Actualice la Restriccin de Equilibrio de Planta para Sumar la Variable Produce a Todas las Mquinas En la restriccin de equilibrio de planta hay una variable produce separada para cada mquina. Como necesitamos agregar junto al total de produccin para una planta en particular, necesitamos ahora sumar sobre el ndice mquina cuando se refiera a la variables Produce. Para hacer esto agregue la siguiente sumatoria a la restriccin PlantBal: PlantBal[plant, product, month] -> PBal: SUM(machine: Produce) + Inventory[month-1] + SUM(fromplant: Ship[fromplant, toplant:=plant]) = Sales + Inventory + SUM(toplant: Ship[fromplant:=plant, toplant]);
Ventana rbol de Definicin del Modelo Planning7 Para ver los valores de la variable Produce haga doble clic sobre el icono produce del rbol o seleccinelo y presione el botn View (ver). Este visualizar la ventana View (Ver) conteniendo los valores de la solucin solo para la variable produce tal como se muestra ms abajo. VARIABLE Produce[plant,machine,product,month] : plant machine product month Activity Reduced Cost -------------------------------------------------------------------p1 m11 A1 Jan 4300.0000 0.0000 p1 m11 A1 Feb 4200.0000 0.0000 p1 m11 A1 Mar 5487.5000 0.0000 p1 m11 A1 Apr 5300.0000 0.0000 p1 m11 A2 Jan 6480.0000 0.0000 p1 m11 A2 Feb 5220.0000 0.0000 p1 m11 A2 Mar 5411.2500 0.0000 p1 m11 A2 Apr 5130.0000 0.0000 p1 m12 A3 Feb 9049.3506 0.0000 p1 m12 A3 Mar 916.1616 0.0000 p1 m12 A3 Apr 10803.1169 0.0000 p1 m13 A3 Jan 8050.0000 0.0000 p1 m13 A3 Feb 7000.0000 0.0000 p1 m13 A3 Mar 8050.0000 0.0000 p1 m13 A3 Apr 7700.0000 0.0000 p2 m21 A1 Jan 5100.0000 0.0000 p2 m21 A1 Feb 6200.0000 0.0000 p2 m21 A1 Mar 6538.8889 0.0000 p2 m21 A1 Apr 7600.0000 0.0000 p2 m21 A3 Jan 4422.6136 0.0000 p2 m21 A3 Feb 3927.2727 0.0000 p2 m21 A3 Mar 5000.0000 0.0000 p2 m21 A3 Apr 3681.8182 0.0000 p2 m22 A2 Jan 6900.0000 0.0000 p2 m22 A2 Feb 6000.0000 0.0000 p2 m22 A2 Mar 6900.0000 0.0000 p2 m22 A2 Apr 6600.0000 0.0000 p3 m31 A1 Jan 3300.0000 0.0000 p3 m31 A1 Feb 5964.9351 0.0000 p3 m31 A1 Mar 2550.0000 0.0000 p3 m31 A1 Apr 4477.4026 0.0000 p3 m31 A3 Jan 4700.0000 0.0000 p3 m31 A3 Feb 2023.3766 0.0000 p3 m31 A3 Mar 5200.0000 0.0000 p3 m31 A3 Apr 3615.0649 0.0000 p3 m32 A1 Jan 800.0000 0.0000 p3 m32 A1 Feb 135.0649 0.0000
p3 m32 A1 Mar 2150.0000 0.0000 p3 m32 A1 Apr 1322.5974 0.0000 p3 m32 A2 Jan 7350.0000 0.0000 p3 m32 A2 Feb 6881.8182 0.0000 p3 m32 A2 Mar 6168.7500 0.0000 p3 m32 A2 Apr 6542.7273 0.0000 p4 m41 A1 Jan 4300.0000 0.0000 p4 m41 A1 Feb 4100.0000 0.0000 p4 m41 A1 Mar 5073.6111 0.0000 p4 m41 A1 Apr 4500.0000 0.0000 p4 m41 A2 Jan 2270.0000 0.0000 p4 m41 A2 Feb 5018.1818 0.0000 p4 m41 A2 Mar 2500.0000 0.0000 p4 m41 A2 Apr 5527.2727 0.0000 p4 m41 A3 Jan 3327.3864 0.0000 p4 m41 A3 Mar 2633.8384 0.0000 -------------------------------------------------------------------La variable Produce est ahora definida sobre cuatro ndices: plant planta), machine (mquina), product (producto) y month (mes). Para cada planta el modelo decide qu mquina es la ms eficiente para producir los productos en una planta en particular. Esta tabla puede ser usada como base para un programa de produccin para la compaa completa. La otra variable que es interesante en este modelo es la variable Inventory. S va a la ventana del rbol otra vez y abre la ventana View (Ver) para la variable Inventory obtendr los siguientes valores de la solucin: VARIABLE Inventory[plant, product, month] : plant product month Activity Reduced Cost ----------------------------------------------------------p1 A2 Jan 800.0000 0.0000 p2 A2 Jan 400.0000 0.0000 p3 A3 Jan 500.0000 0.0000 p4 A3 Jan 400.0000 0.0000 ----------------------------------------------------------Como usted ve, el modelo ha decidido producir los productos A2 y A3 durante el mes de Enero para asegurar tener lo suficiente en el mes de Febrero. Muchas de las plantas ahora estn trabajando a su capacidad total. S usted va a la ventana del rbol y abre otra vez la ventana View (Ver) para la restriccin ProdCapacity obtendr los siguientes valores de la solucin: CONSTRAINT ProdCapacity[plant, machine, month] : plant machine month Slack Shadow Price ----------------------------------------------------------p1 m12 Jan 23.0000 0.0000 p1 m12 Feb 3.9595 0.0000 p1 m12 Mar 20.2682 0.0000 p1 m12 Apr 1.2033 0.0000 p2 m21 Jan 3.6947 0.0000 ----------------------------------------------------------Como usted puede ver la planta p1 tiene alguna capacidad extra en la mquina m12 y la planta p2 tiene alguna capacidad extra para la mquina m21. Otra cosa tambin es que todas las mquinas en cada planta estn trabajando a su capacidad total para satisfacer la demanda.