MPL le permite concisamente expresar multitudes de vectores, datos, y restricciones, con un formato de expresión intuitivo y flexible. En la sección 2, usted fué introducido a variables planas, función objetivo y restricciones planas. En esta sesión introduciremos varios nuevos elementos del modelo que son necesarios para la construcción de modelos para problemas muy grandes.
El modelo que usó en la sección 2 fué pequeño, involucraba solo 2 variables. Los modelos del mundo real tienen cientos o miles de variables y restricciones, y algunas veces pasan del millón de variables. MPL permite al usuario fijar un modelo usando Indices, Vectores de Datos, Variables Vector, y Restricciones Vector para definir el problema en una forma concisa y fácil de leer.
Los Indices definen los dominios del modelo, encapsula las dimensiones del problema, y hace fácil el ajuste rápido del tamaño del problema. Una vez que ha definido los índices para un modelo, usted puede usarlos para definir datos, variables, y vectores restricción.
El dominio de las variables y restricciones mencionadas es donde un lenguaje de modelo como MPL, pueden permitir una productividad dramática, puesto que ello permite al modelador formular el modelo en una forma concisa y fácil de leer, usando índices y vectores. Ejemplos de esos índices incluye:;
Los Vectores son básicamente agregar elementos en el modelo que comparten características y propósitos 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 más abreviada, así no tiene que tipear cada elemento cada vez que los necesite.
Los Vectores de Datos son usados cuando los coeficientes o estadísticas del problema vienen en listas o tablas de datos numéricos. Cuando un índice es definido hay un solo valor por cada valor del índice y los vectores de datos le permiten juntar colección de grupos de datos en el modelo. Estos datos pueden ser especificados como una lista de números en el archivo del modelo, o ser recuperados de un archivo externo, lo cual será cubierto en la próxima sesión. Ejemplos de vectores de datos, en un modelo de producción con un índice 'producto' son; incluídos:
Los Vectores Variable pueden ser definidas de manera similar como los vectores de datos, para formar una colección de variables definidas sobre cierto índice. Ejemplos de vectores variables son incluídos:
Los Vectores Restricción; son definidos sobre los índices, los cuales MPL extiende a una colección simple de restricciones cuando genera el modelo. Un vector restricción puede ser definida de varias maneras, sobre un número de índices como períodos y productos. Ejemplos de vectores restricción se incluyen:
Los Datos Constantes son usados en el modelo para ayudar a que sea legible, y hacer más fácil el mantenimeinto del modelo. Ellos son asignados a un valor específico pero no definidos sobre un índice específico.
Una de las operaciones usualmente hechas sobre vectores es para sumar o agregar todos los valores por cada elemento del vector. Este es hecho con MPL usando la palabra clave SUM circundante a la expresión vector a ser agregada juntos. La expresión es prefijada por una lista de índices sobre la cual la suma depende. La expresión suma contiene un vector de variables simples por termino, a veces multiplicado por uno o más vectores de datos.
SUM(product: Price * Sales); SUM(product, month: ProdCost * Produce);
Usted está yendo ahora a crear una formulación del modelo para ver cómo son usados los índices y vectores en MPL. Formulamos un pequeño modelo de mezcla de productos para una panadería que contiene dos productos y tres restricciones. En este ejemplo, estará haciendo algo similar, pero este incluye tres productos los cuales son llamados A1, A2 y A3. Para esos tres productos usted creará un índice, y luego creará un vector variable que representa cuánto de cada uno de esos productos necesitan ser producidos.
Dadas las definiciones de esos nuevos términos, índices y vectores, los aplicaremos al modelo prueba. El modelo de Mezcla de Productos es una pregunta de cómo distribuir la capacidad de producción entre los productos, y determinar el nivel de producción, dada la demanda.
El precio de venta para cada producto es fijado como sigue: $120.00 para A1, $100.00, para A2, y $115.00 para A3. También hay un límite para la demanda máxima de cada producto:; 4300 para A1, 4500 para A2, y 5400 para A3.
La tasa de producción es medida por cuántos ítems de cada producto son producidos pr cada día. En este problema, usted tiene un total de 22 días disponibles de producción. Esa tasa de producción y los costos de producción para cada producto están dados en la tabla que sigue:
Production | A1 | A2 | A3 |
---|---|---|---|
Production Cost | $73.30 | $52.90 | $65.40 |
Production Rate | 500 | 450 | 550 |
El próximo paso es tomar el problema descrito en la sección previa, y formularlo en un modelo MPL. Para dar un vistazo al modelo Planning3 a ser creado, una lista completa de la formulación del modelo se muestra a continuación.
TITLE Production_Planning3; INDEX product := (A1, A2, A3); DATA Price[product] := (120.00, 100.00, 115.00); Demand[product] := (4300, 4500, 5400); ProdCost[product] := (73.30, 52.90, 65.40); ProdRate[product] := (500, 450, 550); ProdDaysAvail := 22; VARIABLES Produce[product] -> Prod; MACROS TotalRevenue := SUM(product: Price * Produce); TotalCost := SUM(product: ProdCost * Produce); MODEL MAX Profit = TotalRevenue - TotalCost; SUBJECT TO ProdCapacity -> PCap: SUM(product: Produce / ProdRate) < ProdDaysAvail; BOUNDS Produce < Demand; END
Usted ingresará ahora un modelo simple paso a paso, para permitirle entender la formulación del modelo como usted lo determinó.
Inicie la aplicación MPL.
Elija New(Nuevo) del menú File (Archivo) para crear un nuevo archivo vacio del modelo.
Elija Save As ( Guardar como ) del menú File(Archivo) y guarde el archivo del modelo como;; Planning3.mpl.
El título es opcional, pero es conveniente colocar un nombre al modelo. El título será usado en la solución para identificar el modelo. Usted debe ahora tener una ventana editor vacía donde puede ingresar su fomulación con MPL. Para ingresar el título para el modelo Planning3, tipee en el editor del modelo el siguiente texto:
TITLE Production_Planning3;
La primera sección en un modelo MPL usualmente es la sección INDEX(Indice) 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 título, agregue una sección INDEX(Indice) con una definición para el índice producto como sigue:
INDEX product := (A1, A2, A3);
La próxima sección en MPL usualmente es la sección 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 descripcion del problema.
En el editor del modelo, directamente debajo de la definición del índice, agregue una sección de DATOS con una definición para el vector de datos Precio seguido por el índice [Product] entre corchetes.
DATA Price[product] := (120.00, 100.00, 115.00);
Siguiendo la declaración, ingrese un símbolo de asignación ':=' y luego una lista de números conteniendo los precios de cada producto.; Encierre la lista con paréntesis y separe cada número por cualquiera de los dos, un espacio, coma o ambos. Debe haber un punto y coma despues de cada definición de vector para separarlo de las otras definiciones en el modelo.
El problema descrito también listó los datos de la demanda, costo de producción y tasa de producción. Hay cierta demanda para cada producto, una cantidad de costo para producirlo, y un límite superior de cuánto de cada producto usted puede producir por día. Para ingresar estos datos en MPL, agregue y siga las definiciones para la sección 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 descripción del problema también listó cuántos días de producción estaban disponibles. Agregue la siguiente definición de datos constantes para los días disponibles de producción directamente debajo del vector de datos; ProdRate(Tasa de Producción):
ProdDaysAvail := 22;
Usualmente, la próxima sección será la sección VARIABLES donde usted define las variables del modelo. En la descripción del problema, al usar el modelo se le pidió que determine cuánto 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 sección VARIABLES con una definición para el vector variable Producir como sigue:
VARIABLES Produce[product] -> Prod;
El nombre que aparece después del signo; '->' (lease hacerse) es una abreviación opcional del nombre de vector usado para compenzar las limitaciones del tamaño del nombre de muchos solvers de Pl. Esto le permitirá a usted usar nombres de descripción y largos para las variables de su modelo.
En la descripción del problema, se le pidió maximizar las ganancias de la compañía, 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 producción de cada producto por la cantidad producida de cada producto. Esas sumatorias serán utilizadas para definir la función objetivo del modelo.
Cuando ingresa sumatorias para la función objetivo, usualmente es para definirlos separadamente como macros, para hacer que el modelo sea más fácil 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 definición ingrese las siguiente definición de macro en la sección de MACROS.
MACROS TotalRevenue := SUM(product: Price * Produce); TotalCost := SUM(product: ProdCost * Produce);
La parte del modelo en MPL es donde usted define la función objetivo; actual; y las restricciones del modelo. Estará usando las macros definidas arriba, para crear la función objetivo refiriéndo el nombre de la macro cuando usted necesite usar las sumatorias. Puesto que usted maximizando las ganancias en este modelo, el nombre de esta función objetivo será; Profit( Ganancia). En editor del modelo, ingrese la palabra clave MODEL para notar que empieza la parte del modelo, seguido por la definición de la función objetivo.
MODEL MAX Profit = TotalRevenue - TotalCost;
La fórmula para la función objetivo es muy simple, como estamos usando macros que contengan las sumatorias actuales. Esto resulta en la función objetivo determinando cuánto maximizar la ganancia calculando la diferencia entre lo ingresos y los costos totales.;
Siguiendo la función objetivo usted necesita definir las restricciones para el modelo en la sección SUBJECT TO ( Sujeto A) En la descripción del problema, se le dió la tasa de producción definida como cuántos items de cada producto puede producir cada día. Como también cuántos días de producción están disponibles. Puesto que esto limita a cuántos items puede producir, usted necesitará crear una restricción de la capacidad de producción llamada ProdCapacity; para cada producto.
En el editor del modelo, agregue la cabecera SUBJECT TO( SUJETO A), seguido por la definición de; restricción:
SUBJECT TO ProdCapacity -> PCap: SUM(product: Produce / ProdRate) <= ProdDaysAvail;
En el resúmen usted divide el número de items producido por la tasa de producción para recibir el número total de días usados para producir cada producto. El total de días de producción usados debe ser menor que esos días disponibles para la producción.
La sección 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 descripción del problema, especificamos que el número total de items producidos debe ser menor que la demanda. Además, ingrese la siguiente cota superior sobre la variable Produce(Producto) en la sección BOUNDS (COTAS).;
BOUNDS Produce < Demand; END
Por favor note que en la mayoría de modelos de programación lineal todas las variables tienen implícito una cota inferior igual a cero. Esas cotas inferiores son manejadas automáticamente por MPL y; no tiene que ser especificadas a menos que sean diferentes de cero.
Al final del modelo ingrese la palabra clave END para notar que es el final del modelo. Después que ha terminado de ingresar el modelo, debe guardarlo eligiéndo Save(guardar) del menú File(Archivo).
El próximo paso es resolver el modelo Planning3l. Resolver el modelo implica varias tareas que son hechas automáticamente por MPL incluyendo la verificación de la sintáxis, análisis del modelo en la memoria, transferir el modelo al solver, resolver el modelo y entonces recuperar la solución desde el solver y crear el archivo solución. Todas esas tareas son hechas transparentemente para el usuario cuando él elige el comando solve de los menús. Para resolver el modelo haga los siguientes pasos:
Elija Solve CPLEX del menú Run o presione el botón Run Solve en la barra de herramientas.
En tanto está resolviendo el modelo, la ventana de estado Status Window aparece proporcionádole información acerca del progreso de la solución.
Ventana de estado: Status Window para el modelo Planning3
Sí todo va bien, MPL visualizará el mensaje "Optimal Solution Found"( Solución Optima fué encontrada) . Si hubiera una ventana de mensaje de error por favor verifique la formulación del modelo detallado que; ingresó anteriormente en esta sección.
Después que resolvió el modelo,; MPL automáticamente crea un archivo estándar de la solución conteniendo varios elementos de la solución del modelo. Este incluye entre otras cosas, el valor óptimo de la función objetivo, la actividad y los costos reducidos para las variables, y las holguras y los precios sombra de las restricciones. Este archivo de la solución es creado con el mismo nombre del archivo del modelo, pero con la extensión '.sol' en su lugar. En nuestro caso el nombre del archivo de la solución es llamado 'Planning3.sol'.
Después que ha resuelto el modelo, puede visualizar el archivo de la solución en una ventana View(Ver) presionando el botón View en la parte inferior de la ventana de estado Status Window. Esta visualizará la ventana ver como se muestra abajo.
Ventana View(Ver) con el archivo de la solución Planning3.sol
La ventana View(Ver) almacena el archivo de la solución en la memoria, permitiendo ver rápidamente la solución con las barra de desplazamiento. Un lista completa del archivo de la solución para el modelo; Planning3 se muestra abajo:
MPL Modeling System - Copyright (c) 1988-1999, Maximal Software, Inc. -------------------------------------------------------------------------------- MODEL STATISTICS Problem name: Producton_Planning3 Filename: Planning3.mpl1 Date: April 18, 1998 Time: 09:59 Parsing time: 0.57 sec Solver: CPLEX Objective value: 544566.636364 Iterations: 3 Solution time: 0.12 sec Constraints: 1 Variables: 3 Nonzeros: 3 Density: 100 % SOLUTION RESULT Optimal solution found MAX Profit = 544566.6364 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
La primera parte del archivo de la solución contiene varias estadísticas del modelo como el nombre de archivo, fecha y hora que el modelo fué resuelto, que solver fué usado, el valor de la función objetivo, y el tamaño del modelo.
La próxima parte del archivo de la solución contiene los resultados de la solución. Aquí usted puede ver sí la solución que fué encontrada, era la óptima o sí estaba acotada o era infactible. También muestra el nombre y el valor óptimo de la función objetivo.
En la sección MACROS del archivo de la solución obtuvo un lista de todas las macros definidas a lo largo del modelo con los valores de la solución 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 ganacias de $545,000, el cual es el valor de la función objetivo.
En la sección 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á también que para los productos A1 y A3 la solución 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 y A3 para satisfacer la demanda.
Por la forma, usted debe haber notado que el valor para; A2 en la solución es actualment 1611.8182 unidades en lugar de 1612. Esto resulta del hecho que todas las variables en modelos de programación lineal son por definición 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 más detalles de como formular modelos en MPL con variables enteras.;
En la sección RESTRICCIONES el archivo de la solución lista todas las restricciones del modelo, otra vez ambas restricciones, vector y plana. En nuestro modelo, hemos tenido una restricción simple plana llamada ProdCapacity. Puesto que la holgura para la restricción 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 límite de la restricción a una unidad. Puesto que la restricción de la capacidad de producción tiene días de producción como unidad, reducir los días disponibles por un día, la ganancia decrecerá en; $21,195.