Programación Lineal Mixta


Programación Lineal Mixta - Planeación Agregada

 

Ejemplo en Excel:

 

 

La Términus Chemistry Inc, manufactura Acido Sulfúrico y desearía determinar un plan agregado para los siguientes seis meses. Actualmente la empresa tiene 70 trabajadores y 9.000 litros de ácido en inventario. Cada trabajador puede producir 100 litros al mes y le pagan 5 dólares por hora (160 horas de tiempo normal al mes). El tiempo extra se paga al 150% del costo normal. Se puede utilizar hasta un máximo del 20% adicional al tiempo normal en cualquier mes dado. Cuesta 80 centavos almacenar una litro de ácido al año, 200 dólares contratar a un trabajador y 500 dólares despedirlo. El pronóstico de ventas de los siguientes 6 meses es de 8000, 10000,12000,8000,6000 y 5000 litros de ácido.

 

Cuál es el nivel de mano de obra y de inventario que se debe manejar para obtener unos costos mínimos?

 

Nota: como no tenia tiempo de pensar en un problema propio, saqué éste de un problema propuesto en un libro (Administración de Operaciones de Roger Schroeder, tercera edición, pág 359), ahí es con dulces pero me parece más sofisticado con ácido sulfúrico, no es cierto?)

 

Resumen de Datos:

 

  •  Condiciones iniciales: 70 trabajadores y 9000 litros de ácido.

  •  Producción Estándar: 100 lt/mes.  => 0.625 Lt / hora

  •  Tiempo Normal: 160 Horas/mes

  •  Costo tiempo extra: 150% del costo normal

  •  Tiempo extra máximo: 20% de tiempo normal en cualquier mes

  •  Costos:
  • 80 centavos/litro al año
    •   200 dólares contratar
    •   500 dólares despedir
    •   Sueldo Normal: 5 dólares/hora
  • Pronóstico de Ventas:

     

     

    Enero Febrero Marzo Abril Mayo Junio
    8000 10000 12000 8000 6000 5000

     

    Formulación Matemática:

     

     

    Variables:

     

    Ti = No de trabajadores para el mes i; i = 1,2,3... (enero, febrero, marzo...) Entero No negativo

    Ci = No de trabajadores contratados en el mes i; i=1,2,3... Entero No Negativo

    Di = No de trabajadores despedidos en el mes i; i=1,2,3... Entero No Negativo

    Ii = Inventario final del mes i; i = 1,2,3 ... Continua No negativa (Si se deja tomar valores negativos, se asumiría que se pueden presentar retrasos en las ordenes, que podemos vender algo que aun no se tiene en la bodega, para suplirlo más adelante con más producción.)

     

    Costo de llevar inventarios mensual: 80 centavos/12 = 6.6667 centavos = 0.066667 dólares/mes

    Hi = Horas de tiempo extra en el mes i. (la suma de las horas utilizadas por todos los trabajadores)

     Así que se tienen 30 variables, seis para cada ítem.

     Costo de un trabajador al mes: 5 U$ /hora * 160 horas/ mes = 800 U$ / mes...Obvio microbio, jajaja. A propósito, esos textos gringos si son picados!!! 800 dólares/mes!!! Aquí (Colombia) se ganarían esos trabajadores unos 130 dólares, y eso... y el ministro de hacienda que tenía ganas de bajar el sueldo mínimo para generar más esclavitud...ehh digo, empleo.

    Costo de hora en tiempo extra: 5U$ * 1.5 = 7.5 U$.

    A los trabajadores que laboran en tiempo normal se les paga 800U$ /mes. En total en un mes se les paga: 800T. Claro. El número de trabajadores en ese mes, por el sueldo mensual; y así es para todas las variables, el costo unitario de la variable multiplicado por la variable.

     

    Función Objetivo:

     

    Min Z = 800T1 +800T2 + 800T3+800T4+800T5+800T6 (el total de salarios en tiempo normal)

  • +200C1 +200C2+200C3+200C4+200C5+200C6 (el costo de contratar C empleados por mes)

    +500D1 +500D2+500D3 +500D4 +500D5 +500D6 (el costo de despedir D empleados por mes)

    +0.066i1 +0.066i2 +0.066i3 + 0.066i4 + 0.066i5+0.066i6 (costo de llevar inventario cada mes)

    +7.5H1 +7.5H2 +7.5H3+7.5H4+7.5H5 +7.5H6 (costo de utilizar H horas extras en el mes)

  • En forma resumida:

     

    Min Z = 800 Ti + 200 Ci +500 Di +0.06 ii + 7.5 Hi (i=1,2,3,4,5,6)

     

    Y las restricciones...

     

     

    No de trabajadores por cada período:

     

    El número de trabajadores por cada período, será los trabajadores con que comenzó el período mas los que contrató menos los que despidió. Claro que las matemáticas no son tontas, y no van a contratar y a despedir gente al mismo tiempo. En algún período contratarán y en otro despedirán.

    Ti= Ti-1 (No trabajadores del período anterior) + Ci (los contratados en el período) - Di (los despedidos)

    .

    Para enero:

     

    T1 = 70 + C1 - D1. Que también se puede escribir así:
    T1-C1+D1= 70

    Para febrero:

    T2 = T1 (aún no se sabe cuanto) +C2 - D2 También:
    T2 -T1 -C2+D2= 0 e igual los demás:

     

    En resumen:

     

     Restricción de No de trabajadores:

       T1          - C1 +D1 = 70
        T2 - T1  -C2  +D2 = 0
        T3 - T2  -C3  +D3 = 0
        T4 - T3  -C4  +D4 = 0
        T5 - T4  -C5  +D5 = 0
        T6 - T5  -C6  +D6 = 0

    Restricción: Cumplir con la demanda. En palabras...

    Inventario Inicial + Producción - Ventas (demanda pronosticada) = Inventario Final.   También...

    Inventario Inicial + Producción en tiempo normal + Producción en tiempo extra - pronostico = IF

    Para Enero:

    9.000 + (100 T1 + 0.625 H1) -  8.000 = I1  También:
    I1 - 100T1 - 0.625 H1 = 1.000 

    Para febrero: (El inventario inicial de un período es el inventario final del pasado)

    I1 + 100T2  +0.625 H2 - 10.000   = I2
    I1 + 100T2  +0.625 H2 - I2            = 10.000  Lo mismo para los demás. En resumen

      Restricción de Demanda:

    I1 -  100T1  -  0.625 H1           =  1.000
    I1 + 100T2  + 0.625 H2 - I2   = 10.000
    I2 + 100T3  + 0.625 H3 - I3   = 12.000
    I3 + 100T4  + 0.625 H4 - I4   =    8.000
    I4 + 100T5  + 0.625 H5 - I5   =    6.000
    I5 + 100T6  + 0.625 H6 - I6   =    5.000

    Restricción de Horas extras: en cada período el no de horas extras debe ser menor al 20% de las horas normales.

    El total de horas normales en un mes es de : 160T.  El 20% será de  0.2*160T= 32T    O sea:

        Hi <= 32 Ti     Hi - 32 Ti   <= 0

    H1 - 32T1 <= 0
    H2 - 32T2 <= 0
    H3 - 32T3 <= 0
    H4 - 32T4 <= 0
    H5 - 32T5 <= 0
    H6 - 32T6 <= 0

     

    Modelo Completo

    Min Z = 800T1 +800T2 + 800T3+800T4+800T5+800T6 (el total de salarios en tiempo normal)
    # +200C1 +200C2+200C3+200C4+200C5+200C6 (el costo de contratar C empleados por mes)

    +500D1 +500D2+500D3 +500D4 +500D5 +500D6 (el costo de despedir D empleados por mes)

    +0.06i1 +0.06i2 +0.06i3 + 0.06i4 + 0.06i5+0.06i6 (costo de llevar inventario cada mes)

    +7.5H1 +7.5H2 +7.5H3+7.5H4+7.5H5 +7.5H6 (costo de utilizar H horas extras en el mes)

    Sujeto a:

       T1          - C1 +D1 = 70
        T2 - T1  -C2  +D2 = 0
        T3 - T2  -C3  +D3 = 0
        T4 - T3  -C4  +D4 = 0
        T5 - T4  -C5  +D5 = 0
        T6 - T5  -C6  +D6 = 0

    I1 -  100T1  -  0.625 H1           =  1.000
    I1 + 100T2  + 0.625 H2 - I2   = 10.000
    I2 + 100T3  + 0.625 H3 - I3   = 12.000
    I3 + 100T4  + 0.625 H4 - I4   =    8.000
    I4 + 100T5  + 0.625 H5 - I5   =    6.000
    I5 + 100T6  + 0.625 H6 - I6   =    5.000

    H1 - 32T1 <= 0
    H2 - 32T2 <= 0
    H3 - 32T3 <= 0
    H4 - 32T4 <= 0
    H5 - 32T5 <= 0
    H6 - 32T6 <= 0

    C.N:N
     


     

    Hay infinidad de formas para modelar éste programa dentro del Excel Solver, por ejemplo se podría dejar como variables de decisión el número de contratos, despidos y horas extras, y todo lo demás en función de esto, o dejar el número de despidos y de contratos en función del número de trabajadores y que estos fueran las variables de decisión... en fin. Lo único que se necesita para comenzar a ver estas variantes de modelamiento, es comenzar a desarrollar ejercicios; primero los simples, como los de programación lineal continua de dos o tres variables, comenzar a cambiarlos, etc.  Cuando lo haya hecho notará que se pueden modelar mucho más fácil y rápido si no se fuerza a que el modelo en Excel quede exactamente igual que el matemático, sino reemplazarlo por uno equivalente.

    Bueno, pero como ya había dicho, eso es con un poco de práctica, así es primero sigamos el  modelo estándar de PM que ya planteamos:

    ...Pasito, por pasito, para no perdernos.

       1. Primero que todo, el formato:

    He comprobado estadísticamente que un formato agradable, intuitivo y organizado evita los errores; así es que manos a la obra.

    En cuanto al color, aunque pueda parecer totalmente irrelevante, nos puede mostrar rápidamente donde están las variables de decisión, las restricciones y la función objetivo, así es que cada uno escoja los que les parezcan más apropiados. Por mi parte me quedo con el negro para el color de fondo, para que salga con el fondo de mi página, que apropósito estuve escogiendo como durante tres horas texturas, backgrounds de todos los tipos, pero por último escogí el más sencillo, el negro... bueno, si, si, ya sé que el negro no es ningún color, sino precisamente la ausencia de ellos, pero esos detalles los discutiremos en la sección de cromatología de la página de física que estoy escribiendo, o como dicen lás páginas gringas, "under construction".

    Qué hubo del formato? ya? A mí me quedo así:

     


     

         *  Se debe dejar una celda que se corresponda con la función objetivo. En ella se escribirá la fórmula de maximización o minimización, en función de las variables de decisión. En este caso la celda para la función objetivo es la B4 y las variables de decisión están en el rango de las celdas B9:G13 (o sea desde la fila 9 hasta la fila 13 y desde la columna B hasta la columna G)
        * Se debe dejar una celda por cada restricción que represente el lado izquierdo de cada restricción. La dirección (o sea si es <=, <=, o =) se especificará más adelante en el cuadro de diálogo de Solver. Además el lado derecho de la restricción también se debe especificar allí. En la figura anterior, la del formato se ve que en la columna C filas 16 en adelante aparece el símbolo '=' y a la derecha de él aparece el lado derecho de la restricción. Esto es sólo por presentación, y para que nos ayude a recordar más adelante al introducir los valores en el Solver. Observe que hay seis celdas correspondientes al primer grupo de restricciones en el rango B16:B21, de igual manera debe existir una celda  por cada restricción existente.

    Luego de tener el formato de la Hoja, ahora viene lo más importante: Las fórmulas.

    Para indicar como introducir las fórmulas, seguiré la convención siguiente:  
    CoordenadaCelda=Fórmula.   Ejemplo B4=B5+B6, esto significa que en la celda B4 se debe escribir la fórmula "=B5+B6".

    Función Objetivo

    Min Z = 800 Ti + 200 Ci +500Di +0.06 ii + 7.5 Hi (i=1,2,3,4,5,6)

    B4= 800 * SUMA(B9:G9)       +    200  *   SUMA(B10:G10)+
            500 * SUMA(B11:G11)   +    0.066 * SUMA(B12:G12)+
            7.5  * SUMA(B13:G13)

    Notará que he escrito 800 * SUMA(B9:G9) en vez de escribir  F2 * SUMA(B9:G9), por que en F2 está el valor de 800. Bueno, lo que sucede es que me parece, que es mejor pasarle constantes a Solver en vez de variables. Creo que se demora menos en encontrar la solución si lo hago así, tal vez da igual, pero como desarrollador sé que un bucle es más rápido si trabaja con una constante que sobre la propiedad de un control.  Así es que a menos que esté totalmente seguro de lo contrario le aconsejo que mientras pueda le pase a Solver constantes en vez de variables.

    Restricciones

    Primer Grupo: No de Trabajadores.

    Restricción Fórmula en Excel
    T1  - C1 +D1 = 70 B16 =B9-B10+B11
    T2 - T1  -C2  +D2 = 0 B17=C9-B9-C10+C11
    T3 - T2  -C3  +D3 = 0 B18=D9-C9-D10+D11
    T4 - T3  -C4  +D4 = 0 B19=E9-D9-E10+E11
    T5 - T4  -C5  +D5 = 0 B20=F9-E9-F10+F11
    T6 - T5  -C6  +D6 = 0 B21=G9-F9-G10+G11

     

    Segundo Grupo: Demanda

    Restricción Fórmula en Excel

    I1 -  100T1  -  0.625 H1           =  1.000

    B22=B12-100*B9-0.625*B13
    I1 + 100T2  + 0.625 H2 - I2   = 10.000 B23=B12+100*C9+0.625*C13-C12
    I2 + 100T3  + 0.625 H3 - I3   = 12.000 B24=C12+100*D9+0.625*D13-D12
    I3 + 100T4  + 0.625 H4 - I4   =    8.000 B25=D12+100*E9+0.625*E13-E12
    I4 + 100T5  + 0.625 H5 - I5   =    6.000 B26=E12+100*F9+0.625*F13-F12
    I5 + 100T6  + 0.625 H6 - I6   =    5.000 B27=F12+100*G9+0.625*G13-F12


    Tercer Grupo: Horas Extras

     

    Restricción Fórmula en Excel

    H1 - 32T1 <= 0

    B28=B13-32*B9

    H2 - 32T2 <= 0

    B29=C13-32*C9
    H3 - 32T3 <= 0 B30=D13-32*D9
    H4 - 32T4 <= 0 B31=E13-32*E9
    H5 - 32T5 <= 0 B32=F13-32*F9
    H6 - 32T6 <= 0 B33=G13-32*G9

     

    Ahora, se debe invocar el cuadro de diálogo de Solver. Del menú herramientas escoger Solver (en caso que no esté en el menú hacer click en la opción "Complementos"  y chulearlo en el listado), tal como se ve en figura:



    El cuadro de diálogo luce así:



    Donde dice "Celda Objetivo" se escribe la referencia de la celda que contiene la función objetivo. También puede seleccionarlo, haciendo click en la flecha roja que se ve a la derecha del recuadro y luego señalandola con el mouse.  Luego se escoge la opción "Mínimo", a contiuación escriba el rango donde se encuentran las variables de decisión, tal como se puede ver en la figura anterior.

    Agregar las restriciones:

    Se hace click en el botón agregar del cuadro de diálogo de Solver. En la parte izquierda se escribirá la referencia de la celda que contiene la parte izquierda de la restricción, luego se escoge la dirección, si es <=, >=, o =,  a continuación se escribe el lado derecho de la restricción que para nosotros es una constante. Por ejemplo la primera restricción:

     


    Y se presiona aceptar. De igual manera se hace para las demás restricciones.  Los parámetros habrán quedado de la siguiente manera:

     


    Antes de hacer click en "Resolver" es conveniente revizar las opciones por defecto para el problema. Para esto hacer click en el botón "Opciones..."  y seleccionar "Adoptar modelo lineal" y "Asumir no negativos".

     


    Presionar aceptar y luego "Resolver". Luego de haber hecho esto la solución que obtendermos es la siguiente:

     

    }

    El valor de la función objetivo es de 332.707, pero esta es del programa matemático continuo. como en el mes de enero no podemos tener 72 personas y media, es mejor que escojamos el No de trabajadores como variables enteras. Para hacer esto se le agrega una restricción de más en los parámetros de solver, donde le decimos que el rango B9:G9 es entera:

     


    Volvemos a resolver y los resultados son ahora:

     


    La solución ahora con las variables enteras es de 333.037,20

     

     

    Contenido :

    Social