English version German version Italian version

Sesión 4: Un Modelo de Planificación de la Producción con Períodos de Tiempo Multiples

Ahora usted ampliará el modelo de la sesión previa para incluir períodos de tiempo multiple. Un nuevo índice de períodos es introducido en el modelo para cubrir esos períodos de tiempo y luego actualizar los varios vectores que han sido afectado para responder por el nuevo dominio.


Nuevos Conceptos en esta Sesión

Indices de Períodos

Para actualizar su modelo que incluya un período múltiple, necesitará crear un índice que represente el período de tiempo. Este tipo de índice es llamado Indice Período. Después que ha definido su índice período, puede usarlo para actualizar los vectores de datos, de variables y de restricciones para incluir un período de tiempo específico. Ejemplos de índices períodos podrían incluir: meses, trimestres, y años.

Variables de Ventas e Inventarios

Cuando usted hace crecer un modelo de un simple período a múltiples períodos, las ventas para un período específico puede ser diferente de la cantidad producida en el mismo período. Como resultado, una nueva variable es requerida para representar cuánto necesita vender, y una nueva variable para representar el nivel de inventario para cada período.

En muchos casos, hay un costo fijo por período involucrado con el almacenamiento de inventario. En otros casos, sin embargo, el costo podría no estar asociado al almacenamiento actual del inventario, sino más bien con el abastecimiento y retiro de los productos del inventario, a través de los costos de mano de obra involucrados. Esto significa que necesitará más 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 más de los productos que usted tiene, la variable inventario es usada para asociar las variables de producción a las variables de ventas. Esto es hecho a través de una restricción, comunmente llamada Restricción de Equilibrio . Las restricciones de equilibrio son usadas para asegurar que las cantidades que ingresan sean iguales a las cantidades que salen.

Una restricción de equilibrio común, estipula que la producción total, más el nivel de inventario del período anterior, es igual a la cantidad vendida, más lo que salió del inventario. Ejemplo de una restricción 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 notación usada en MPL para representar el período 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 restricción estamos equilibrando lo que entra con lo que sale de la planta. De la misma forma, la segunda restricción 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 período planificado. Por defecto, MPL excluye las entradas de Inventory[month-1] para el mes igual a cero. Hay varias formas que usted peude especificar un inventario inicial, por ejemplo puede ingresar la restricción 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 restricción 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 restricción, por ejemplo con subíndices, pero esta es la forma más sencilla de de formular esa clase de restricciones.


Descripción del Problema: Un Modelo de Planificación de la Producción Multi-Periodo

En esta sesión, creará la formulación de un nuevo modelo de planificación de la producción muli-período. Usará el modelo que usted creó en la sesión 3, y hará las adiciones necesarias y luego lo actualizará.

En este nuevo problema, tendrá un período de planificación de cuatro meses, de Enero a Abril. Necesita crear un índice que contenga los cuatro meses mencionados y luego actualice el resto del modelo, agregando el índice a los vectores definidos.

Como en el problema de la sesión 3, los precios de venta para cada producto son todavía $120.00, $100.00, $115.00, respectivamente. Ahora, en lugar de tener una demanda simple para cada producto, usted tiene una demanda separada para cada producto y para cada mes, como se puede ver en la tabla de abajo.

Production Demand Jan Feb Mar Apr
A1 4300 4200 6400 5300
A2 4500 5400 6500 7200
A3 5400 6700 7800 8200

La tasa de producción y el costo de producción permanecen iguales, como fueron dados en la tabla de la sesión 3. Note que los días de producción disponibles son diferentes para cada uno de los meses con 23 días para Enero, 20 para Febrero, 23 para Marzo y 22 para Abril.

Introducirá el inventario al modelo, además, 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.


Formulación del Modelo con MPL

La formulación completa del modelo Planning4 es como se lista abajo. Como puede ver el modelo ha crecido respecto al de la sesión 3. Las adiciones al modelo están resaltadas en negrita para hacer más fácil que usted vea los cambios.

     TITLE
        Production_Planning4;

     INDEX
        product   := (A1, A2, A3);
        month     := (Jan, Feb, Mar, Apr);

     DATA
        Price[product]                 := (120.00, 100.00, 115.00);
        Demand[product, month]         := (4300, 4200, 6400, 5300,
                                           4500, 5400, 6500, 7200,

                                           5400, 6700, 7800, 8200);
        ProdCost[product]              := (73.30, 52.90, 65.40);
        ProdRate[product]              := (500, 450, 550);
        ProdDaysAvail[month]           := (23, 20, 23, 22);
        InvtCost[product]              := (3.50, 4.00, 3.00);
        InvtCapacity                   := 800;

     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;

     BOUNDS
        Sales   <=  Demand;

     END
    

Ingrese Nuevos Elementos al Modelo Paso a Paso

Paso 1: Inicie MPL y Cree un Nuevo Modelo

  1. Inicie la aplicación MPL.

  2. Elija File | Open (Archivo| Abrir ) y abra el modelo de la sesión anterior Planning3.mpl.

  3. Elija File | Save As (Archivo | Guardar como) para guardarlo como un nuevo archivo del modelo de Planning4.mpl.

Paso 2: Cambie el Título del Modelo

Cambie el título del modelo para reflejar que usted está trabajando con el modelo Planning4:

     TITLE
      Production_Planning4;
    

Paso 3: Agregue el Indice 'month' al Modelo

En este ejemplo, hay una planificación de cuatro períodos. Cree un nuevo índice llamado month(mes). Este índice tendrá cuatro elementos Jan, Feb, Mar, y Apr, para representar los cuatro meses de períodos planificados. Agregue la siguiente definición al índice mes, que están resaltadas en negrita en la sección INDEX (índice):

     INDEX
        product := (A1, A2, A3);
        month   := (Jan, Feb, Mar, Apr);
    

Paso 4: Actualice el Vector de Datos 'Demand' para incluir el Indice 'month'

En la sección DATA(DATOS), muchas de las definiciones de datos son las mismas como en la sesión 3. Uno de los vectores de datos; Demand, necesita ser ampliada para incluir el índice month, como ahora que tiene diferentes valores para cada mes. Los valores para este vector están dados en la tabla de la sesión anterior en la descripción del problema. Agregue el índice month a la declaración para el vector de datos Demand, seguido con de una lista de valores de datos como se muestra abajo:

     DATA
        Price[product]        := (120.00, 100.00, 115.00);
        Demand[product,month] := (4300, 4200, 6400, 5300,
                                  4500, 5400, 6500, 7200,
                                  5400, 6700, 7800, 8200);
    

Paso 5: Actualice la constante 'ProdDaysAvail' al Vector de Datos sobre el Indice 'month'

La constante ProdDaysAvail(días de producción disponible) ahora tiene un valor diferente para cada mes, como en el vector de datos demand. Esto significa que necesita ser ampliado con un dato constante a un vector de datos dimensional, con month (mes) como índice. Usando la lista de días de producción disponible que encontró anteriormente en la descripción del problema de esta sesión, actualice ProdDaysAvail como sigue:

        ProdCost[product]      := (73.30, 52.90, 65.40);
        ProdRate[product]      := (500, 450, 550);
        ProdDaysAvail[month]   := (23, 20, 23, 22);
    

Paso 6: Agregue los Vectores de Datos de Costos de Inventario y Capacidad de Inventario

En la descripción del problema se definió un costo para cada producto almacenado en el inventario y un límite de cuánto puede ser almacenado en el inventario. Además, para representar esto, agregue un vector de datos más al modelo; InvtCost, y también un nuevo dato constante InvtCapacity. Al final de la sección DATA agregue las siguientes definiciones:

        InvtCost[product] := (3.50, 4.00, 3.00);
        InvtCapacity      := 800;
    

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 cuánto de cada producto es vendido en cada mes. la Variable Inventory(Inventario) es usada para representar cuánto de cada producto es almacenado, en cada mes. La variable Produce(Producción) necesita ser aumentada para incluír 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 sección VARIABLES:

     VARIABLES
         Produce[product, month]     -> Prod;
         Inventory[product,month]    -> Invt;
         Sales[product, month]       -> Sale; 
    

Como en el modelo anterior, el nombre que aparece después del signo '->' ( se lee: se hace) es una abreviación opcional del nombre del vector. Este es usado para compensar las limitaciones del tamaño del nombre de la variable de muchos solvers de PL.

Paso 8: Agregue el Costo de Inventario a la Función Objetivo

En el modelo de la sesión anterior, las ganancias totales y el costo total de producción son incluídos en la función objetivo. Ahora necesita actualizar esta función objetivo con el índice, month(mes), y agregue una entrada para el costo total de inventario. Como en la sesión anterior, usted continuará para usar macros que representen cada sumatoria.

Cuando calcula la ganancia total, necesitará referirse a la variables Sales(Ventas) en lugar de la variable Produce(Producción) y agregue el índice month(mes) a la suma. Para el costo total de producción, necesitará también agregar la suma para incluirlo al índice month(mes). El costo total de inventario será definido como el costo de inventario por la cantidad de veces, el nivel de inventario.

Para hacer cambios en la sección MACROS, reemplaze la variable Produce (Producción) con la variable Sales(Ventas), actualice la ganancia total y sumelo al costo de producción para incluirlo en el índice month, y agregue una nueva definición de macro al costo del inventario total, como sigue:

     MACROS
         TotalRevenue     := SUM(product, month: Price * Sales);
         TotalProdCost    := SUM(product, month: ProdCost * Produce);
         TotalInvtCost    := SUM(product, month: InvtCost * Inventory);
         TotalCost        := TotalProdCost + TotalInvtCost;
    

Por favor note que la macro para el costo total de producción ha sido renombrado a TotalProdCost. Otra nueva macro; TotalCost, ha sido agregada donde usted puede sumar junto a esas dos nuevas macros para obtener el costo total. Esto permite que la función objetivo permanezca sin cambios:

      MODEL

          MAX Profit = TotalRevenue - TotalCost;
    

Paso 9: Actualice la restricción de la Capacidad de Producción para múltiples meses

En la restricción production capacity(Capacidad de la producción), agregue el índice month a la definición de la restricción y el resto de la restricción permanece igual.

     SUBJECT TO
         ProdCapacity[month] -> PCap:
             SUM(product: Produce / ProdRate)  <=  ProdDaysAvail;
    

Por favor note que en MPL usted no tiene que ingresar subíndices para cada índice cuando se refiera a los vectores de datos y vectores de variables. Esto significa que usted puede fácilmente agregar más índices a las restricciones sin tener que cambiar de acuerdo a como usted se refería de cada vector.

Paso 10: Agregue al Modelo una Restricción de Equilibrio de Inventario

Para agregar la variable Inventory(Inventario) al modelo necesita incluir una restricción de equilibrio de inventario estándar. Esta restricción fluctúa para cada producto y cada mes, especificando que la producción, más el inventario del mes anterior, es igual a la cantidad vendida, más el inventario del mes actual. Agregue la siguiente restricción InvtBal debajo de la restricción anterior ProdCapacity:

        InvtBal[product, month] -> IBal:
            Produce + Inventory[month-1]  =  Sales + Inventory; 
    

Cuando se ingresa períodos 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 Restricción de Capacidad de Inventario

Hay un límite sobre cuánto espacio disponible hay para el inventario. Además, usted necesita agregar al modelo una restricción de capacidad de inventario. En la descripción del problema, se le dijo que 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 definición de la restricción:

        MaxInventory[month] -> MaxI:
            SUM(product: Inventory)   <=  InvtCapacity;
    

Paso 12: Actualice la Cota Superior de la Demanda Máxima para usar la Variable 'Ventas'

En la cota superior de la demanda máxima usted necesita actualizarla incluyendo la variable Sales(Ventas) en lugar de Produce(Producción) como se muestra abajo:

     BOUNDS
        Sales   <=  Demand;
    

Después que usted ha terminado de ingresar el modelo, debe guardarlo, eligiendo Save(Guardar) del menú File(Archivo).


Resolver el Modelo y Analizar la Solución

El próximo paso es resolver el modelo Planning4, eligiendo Solve CPLEX del menú Run(Ejecutar). Sí usted ha ingresado los datos correctamente, MPL visualizará el mensaje Optimal Solution Found( Solución óptima fué encontrada) . Si hay algún mensaje de error de sintáxis, por favor verifique la formulación del modelo detallado que ingreso anteriormente en esta sesión.

Después de resolver el modelo, MPL automaticamente creará un archivo estándar de la solución llamado 'Planning4.sol'. 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. Un listado completo de la solución es mostrado a continuación.

     MPL Modeling System   -   Copyright (c) 1988-2001, Maximal Software, Inc.
  --------------------------------------------------------------------------------

  MODEL STATISTICS

  Problem name:       Production_Planning4

  Filename:           Planning4.mpl
  Date:               April 17, 1998
  Time:               22:52
  Parsing time:       0.15 sec

  Solver:             CPLEX
  Objective value:    2246007.27273
  Iterations:         26
  Solution time:      0.04 sec

  Constraints:        20
  Variables:          36
  Nonzeros:           69
  Density:            10 %



  SOLUTION RESULT


    Optimal solution found


      MAX Profit   =    2246007.2727



  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 solución, la ganancia es ahora $2.2M es 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 producción, ya que nosotros mantenemos un Inventario bajo justo para Enero.

Sí usted mira la variable Produce(Producción) en la solución, notará que estamos produciendo los productos A1 y A3 para el período completo que fué planificado, aunque no siempre satisfaga la demanda. El Producto A2, por el otro lado, es producido solamente 1800 unidades en January(Enero),ya que no tiene suficiente capacidad para producir los tres productos.

En Enero, el Modelo decidió producir 320 unidaes extras de A3, como fueron requeridas por la demanda, para poner suficiente en el inventario tal de satisfacer la demanda de Febrero.


Back To Top | Maximal Home Page | Overview | Previous Page | Next Page