Cálculo del Cuello de Botella de un Proceso Productivo

El término «Cuello de Botella» de un proceso productivo se refiere a una actividad (o conjunto de actividades) que limita la capacidad de producción y en consecuencia el tiempo de ciclo del proceso. Es importante recordar que no necesariamente la actividad que requiere mayor tiempo para ser ejecutada en un proceso será el cuello de botella del mismo, tal cual fue analizado en el artículo Preguntas Frecuentes sobre Procesos: Capacidad, Tiempo de Flujo y Tiempo de Ciclo. En el siguiente artículo presentamos un ejemplo de un proceso productivo simple que nos ayudará a ilustrar el concepto de cuello de botella y cómo este puede ser modificado al incorporar variaciones en el proceso.

En la cafetería de la Universidad todas las mañanas se venden cafés y sándwich a pedido. Actualmente la dueña Soledad está analizando el proceso en su local. Para vender cafés y sándwich Soledad contrató a 5 alumnos: Matilde, Ignacia, Valentina, Lorenzo y Gustavo, para realizar las siguientes etapas en forma secuencial:

  • Matilde: Tomar orden (1 min/orden)
  • Ignacia: Juntar materiales (vaso de café e ingredientes sándwich) (2 min/orden)
  • Valentina: Preparar el café y cortar el pan (3 min/orden)
  • Lorenzo: Preparar sándwich (jamón/queso) (4 min/orden)
  • Gustavo: Preparar bandeja con servilletas, servicio y plato (1,5 min/orden)

Confeccione un Diagrama de Flujo, indique la capacidad de cada etapa y del sistema y también el tiempo promedio de ciclo del sistema.

diagrama-de-flujo-proceso

Con el Diagrama de Flujo anterior se procede a calcular la capacidad de cada estación de trabajo en órdenes/hora u órdenes/minuto. La elección es arbitraria y en nuestro caso calcularemos la capacidad de cada etapa y del proceso como un todo en órdenes/hora según se muestra a continuación:

capacidad-proceso-productiv

Preparar sándwich es el cuello de botella (Lorenzo) por tanto la capacidad del proceso es de 15 (órdenes/hora) o equivalentemente 1/4 (orden/min). El tiempo de ciclo promedio es de 4 (min/orden). En el artículo Cómo Calcular la Capacidad y el Tiempo de Ciclo de un Proceso con una Carta Gantt se detalla el procedimiento para obtener estos indicadores. En este contexto a continuación se puede apreciar que el tiempo promedio entre órdenes consecutivas (en operación estable) es de 4 min/orden.

carta-gantt-proceso

Consideremos ahora la siguiente pregunta adicional: Soledad quiere aumentar la capacidad de la cafetería y decide contratar a Mauricio. Mauricio puede trabajar en paralelo con cualquiera de sus colegas, demorándose lo mismo que ellos (por ejemplo si trabaja con Matilde se demora 1 min para tomar orden). Con la contratación de Mauricio, Soledad afirma que se puede doblar la capacidad del sistema. ¿Ella está en lo correcto? Si está de acuerdo, explique porque. Si no diga cuál es el menor número de funcionarios con las mismas características de Mauricio que hay que contratar para doblar la capacidad del sistema.

Soledad no está en lo correcto. Para doblar la capacidad son necesarias 2 personas: una persona adicional para preparar café y cortar pan y una persona adicional en la tarea preparar el Sándwich. La nueva capacidad subirá a 30 ordenes/hora, el doble de la original, con cuellos de botella en Juntar Materiales (Ignacia) y Preparar sándwich (Lorenzo). Con una sola persona trabajando con Lorenzo en Preparar el Sándwich el cuello de botella será Preparar café y cortar el pan (Valentina) y la capacidad subirá a solamente a 20 ordenes/hora.

proceso-paralelo

carta-gantt-actividades-par

Notar que en la nueva Carta Gantt que considera incorporar a Mauricio a la tarea de preparar el sándwich (cuello de botella original) el tiempo de ciclo promedio es de 3 (min/orden), corroborando que la capacidad modificada es de 20 (órdenes/hora).

Reglas de Prioridad en la Programación de Trabajos con el Software LEKIN®

LEKIN® es un software gratuito e intuitivo que permite entre otras cosas la programación de n trabajos en una máquina. Este programa fue desarrollado en Stern School of Business, NYU, siendo la mayor parte de su diseño y programación a cargo de estudiantes de la Universidad de Columbia en Estados Unidos. El software LEKIN® fue creado como herramienta educacional con el propósito principal de difundir en los estudiantes conceptos de programación de trabajos y sus aplicaciones en la industria.

En el siguiente artículo detallaremos como implementar la regla de prioridad FIFO (First In First Out) o análogamente en su acrónimo en español PEPS (Primero en Entrar Primero en Salir). Para ello consideraremos un problema que consiste en la programación de 5 trabajos a una máquina, donde los tiempos de proceso son determinísticos (es decir, se asume que no hay incertidumbre respecto a la duración de cada trabajo) y el patrón de llegada es estático (Todos los trabajos llegan simultáneamente y de manera previa al inicio de las operaciones).

tabla-trabajos-con-fecha-de

Paso 1: Descargar el software LEKIN® (seleccionando Lekin.exe (1.67MB) según se muestra en la imagen) y seguir las instrucciones las instrucciones para su instalación.

descargar-lekin

Paso 2: Una vez instalado el programa y dadas las características de nuestro ejemplo, en el Menú Principal debemos seleccionar “Single Machine” (Una Máquina).

main-menu-lekin

Paso 3: A continuación ingresamos la cantidad de trabajos que necesitamos programar. En nuestro ejemplo son 5 trabajos. Luego seleccionamos “OK”.

single-machine-lekin

Paso 4: Ingresamos los datos de los trabajos en la interfaz que se muestra a continuación. Notar que hemos editado el nombre o etiqueta que identifica el trabajo (Job ID) el Tiempo de Procesamiento (Processing Time) y la Fecha de Entrega (Due Date). Al presionar “OK” se puede repetir el procedimiento para el resto de los trabajos.

add-jobs-lekin

Paso 5: En el menú del programa seleccionamos “Schedule” ==> “Rule” ==> “4 FCFS” (FCFS es equivalente a FIFO o PEPS).

fcfs-lekin

LEKIN® genera una Carta Gantt donde se muestra la programación de los trabajos y el tiempo total o makespan para concluir la totalidad de éstos (80 días). Adicionalmente según se aprecia en “Job Pool” se detalla el día en que se da inicio y término a cada uno de los trabajos.

carta-gantt-lekin

Paso 6: Finalmente en el Menú “Tools” (Herramienta) ejecutamos la opción “Performance”.

tools-lekin

Esto permite obtener un cuadro resumen con los principales indicadores de gestión de la programación según se observa en la imagen:

shop-perfomance-lekin

De donde se corrobora los siguientes resultados según lo obtenido previamente en el artículo: Reglas de Prioridad para la Programación de n Trabajos en una Máquina.

  • Tiempo de Flujo Promedio = 245[días]/5[trabajos]=49[días/trabajo]
  • Tiempo de Atraso Promedio = 108[días]/5[trabajos]=21,6[días/trabajo]
  • Atraso Máximo = 40[días]
  • Número de Trabajos Atrasados = 3[trabajos]
  • Makespan = 80[días]

Conclusiones: El software LEKIN® puede ser utilizado tanto para la aplicación de otras reglas de prioridad en el contexto del ejemplo anterior (según se puede apreciar en el Paso 5 de este tutorial) como también en otras problemáticas relativas a la Programación de Tareas. Una de las ventajas del programa es que su distribución es gratuita y además resulta ser compatible aún con las versiones más recientes de Windows (teniendo en cuenta que su última actualización data de Abril de 2002). Lo anterior ha sido corroborado en la utilización de este software sin inconvenientes en un computador con sistema operativo Windows 7 Home Premium de 64 bits. Lo anterior constituye una ventaja en comparación a otras herramientas como WINQSB que requiere el uso de máquinas virtuales si se desea utilizar en versiones recientes del sistema operativo Windows.

Actualización (Febrero 2017): Se dispone de una versión más reciente del software LEKIN® que la utilizada en este tutorial y cuya fecha de actualización corresponde al mes de Octubre de 2010 y puede ser descargada en el siguiente enlace: Descargar LEKIN® (2010).

Cómo calcular la Capacidad y el Tiempo de Ciclo de un Proceso con una Carta Gantt

Una forma intuitiva de obtener el tiempo de ciclo de un proceso y luego su capacidad es a través de una Carta Gantt. En el siguiente artículo mostraremos cómo calcular dichos indicadores tomando como ejemplo un proceso sencillo que consta de 3 etapas secuenciales (A, B y C, respectivamente) cuyos tiempos de flujo se detallan en el diagrama. Es importante destacar que asumimos que existe la posibilidad de almacenar inventario en proceso (o WIP por sus siglas en inglés «work in progress») entre las actividades A y B y B y C, que se denota usualmente a través de un triangulo entre cada actividad.

diagrama-proceso-abc

Una Carta Gantt que representa la configuración y evolución del proceso descrito anteriormente corresponde a:

carta-gantt-proceso-abc

Para una mayor claridad se han considerado distintos colores para las unidades que pasan por el proceso. Por ejemplo, la primera unidad (color amarillo) requiere 5 minutos en la etapa A y luego pasa inmediatamente por 15 minutos adicionales (es decir hasta el minuto 20) a la etapa B, para finalmente terminar en la etapa C (10 minutos adicionales) al cabo de 30 minutos desde que se inició su procesamiento (es decir, el tiempo de flujo de la primera unidad es de 30 minutos). En cuanto a la segunda unidad (color azul), ésta comienza en la etapa A tan pronto termina la primera unidad (comienza en el minuto 5 y termina en el minuto 10), sin embargo, para que sea procesada en la etapa B requiere que dicha etapa haya completado previamente la primera unidad (lo que retrasa el inicio de la segunda unidad al minuto 20 en la etapa B y terminando por tanto en el minuto 35). Finalmente la segunda unidad pasa a la etapa C concluyendo su operación en el minuto 45 (se puede apreciar que el tiempo de flujo de la segunda unidad sería en este caso 40 minutos que corresponde al tiempo trascurrido desde que se inician las operaciones para la segunda unidad en la etapa A (minuto 5) hasta que se concluye la etapa C para dicha unidad (minuto 45).

Es importante observar, por ejemplo, que la segunda unidad debe esperar 10 minutos (en el inventario en proceso) para pasar de la etapa A a la etapa B. Adicionalmente se puede concluir que el tiempo mínimo que requiere una unidad en pasar por el sistema (etapas A, B y C) es de 30 minutos (tiempo de flujo).

Repitiendo el procedimiento anterior se concluye que el tiempo que transcurre entre la primera y segunda unidad es de 15 minutos, patrón que se repite entre los tiempos de termino de la segunda y tercera unidad, tercera y cuarta unidad (y así sucesivamente). En consecuencia el tiempo de ciclo (tiempo promedio para la producción de dos unidades consecutivas es de 15[min/u]. Luego la capacidad del proceso es el recíproco del tiempo de ciclo, es decir, 1/15[u/min] o equivalentemente 4[u/hora] (que se obtiene de multiplicar 1/15[u/min] por 60[min/hora]). La actividad «cuello de botella» en este caso sería la etapa B.

Notar sin embargo que en la primera hora de trabajo no se han completado 4 unidades (en particular se han terminado sólo 3 unidades) lo cual no contradice la definición de capacidad de un proceso, dado que 4[u/hora] es lo máximo que puede generar el proceso bajo un régimen estable de operación, es decir, cuando se reconoce que las unidades consecutivas terminan el proceso en un intervalo de tiempo fijo (que en el ejemplo corresponde a 15 minutos lo cual representa el tiempo de ciclo).

Algoritmo de Moore aplicado a la Programación de Trabajos

En el contexto de las Reglas de Prioridad para Programar n trabajos en una Máquina, el Algoritmo de Moore tiene por objetivo minimizar el número de trabajos atrasados, independientemente de cuán atrasados estén.

Este criterio es especialmente útil cuando existen penalizaciones por concepto de atraso, las cuales en algunas ocasiones se activan por el hecho de no responder a tiempo una fecha de entrega comprometida aun cuando el atraso en su magnitud pudiese haber sido mínimo. La descripción general del algoritmo consta de 4 pasos según se describe a continuación:

Algoritmo de Moore

Paso 1. Ordenar los trabajos de acuerdo a la regla de prioridad EDD (Earliest Due Date o Fecha de Entrega más Próxima).
Paso 2. Seleccionar el primer trabajo atrasado en la secuencia actual, digamos el trabajo i. Si no hay ninguno atrasado siga al Paso 4.
Paso 3. Considere los trabajos 1 al i. Rechace el trabajo con mayor tiempo de proceso, vuelva al Paso 2.
Paso 4. Forme la secuencia que resulta de tomar la secuencia actual y colocar todos los trabajos rechazados al final.

Si luego de realizar la primera iteración del Algoritmo de Moore existe un nuevo trabajo atrasado (asumiendo que en la iteración 1 se rechazo un trabajo, digamos trabajo A), dicho trabajo se rechaza (digamos trabajo B) y se envía al «final de la secuencia», entendiendo por ello que desde la perspectiva del número de trabajos atrasados (objetivo del algoritmo) resulta indistinto que la secuencia final termine con A-B o con B-A. Si fuese necesario realizar una tercera iteración (o más) se procede bajo el mismo criterio.

Ejemplo Algoritmo de Moore en Programación de Trabajos

Consideremos el siguiente ejemplo en el cual se deben programar 6 trabajos en una máquina, donde se ilustra la aplicación del Algoritmo de Moore:

tabla-algoritmo-de-moore

Paso 1. Ordenamos los trabajos según la regla de prioridad EDD obteniendo la secuencia B-A-E-D-C-F (notar que los trabajos se secuencian desde el que tiene fecha de entrega más próxima al que tiene fecha de entrega más lejana).

edd-algoritmo-de-moore

Paso 2. Seleccionamos el primer trabajo atrasado en la secuencia actual (al que llamaremos trabajo «i«). En el ejemplo dicho trabajo corresponde a E.

Paso 3. Consideramos los trabajos del 1 al i (en el ejemplo de B a E) y rechazamos el que tiene mayor tiempo de proceso (en el ejemplo el trabajo A).

Paso 4. En la secuencia actual colocar los trabajos rechazados al final. De esta forma la nueva secuencia sería B-E-D-C-F-A que por supuesto tiene idéntico makespan (23[días]) y sólo un trabajo atrasado (trabajo A).

algoritmo-de-moore-final

La Carta Gantt para la secuencia propuesta por el Algoritmo de Moore es la siguiente:

carta-gantt-algoritmo-de-mo

Se propone al lector aplicar otras reglas de prioridad (por ejemplo FIFO, LIFO, SPT, LPT, EDD, etc) y corroborar que el Algoritmo de Moore permite efectivamente minimizar el número de trabajos atrasados en el contexto de las características del problema anterior.

Por cierto pueden existir otras reglas de prioridad que permitan tener un trabajo atrasado para el ejemplo propuesto, sin embargo, no debiésemos esperar que exista una secuencia que omitamos que evite tener trabajos atrasados.

Regla de Jackson en la Programación de n Trabajos en 2 Máquinas

A diferencia de la Regla de Johnson aplicable a la programación de n trabajos en 2 máquinas bajo un esquema de atención fijo (es decir, los trabajos siguen siempre el mismo orden, por ejemplo primero pasan por la máquina A y luego por la máquina B), la Regla de Jackson (Método de Jackson) permite generar una Programación de Trabajos cuando la secuencia de dichos trabajos es aleatoria, es decir, se elimina el supuesto de que los trabajos siguen la misma secuencia.

En este contexto el Método de Jackson considera los siguientes pasos:

  • Paso 1: Clasificar los trabajos existentes en las 4 familias posibles: Los que requieren sólo la máquina 1 (A) – Los que requieren sólo la máquina 2 (B) – Los que pasan primero por máquina 1 y luego la 2 (AB) – Los que pasan primero por máquina 2 y luego la 1 (BA).

  • Paso 2:  Ordenar los trabajos de (AB) y (BA) aplicando la Regla de Johnson.

  • Paso 3: Ordenar los trabajos de (A) y (B) en forma arbitraria.

  • Paso 4: Programar en la máquina 1 en primer lugar los trabajos de (AB), luego los trabajos en (A) y finalmente los trabajos en (BA).

  • Paso 5: Programar en la máquina 2 en primer lugar los trabajos de (BA), luego los trabajos en (B) y finalmente los trabajos en (AB).

Ejemplo Regla de Jackson

A continuación se presenta un ejemplo donde se deben programar 10 trabajos que tienen los siguientes tiempos y secuencias (Paso 1):

Tabla Regla de Jackson

Paso 2: Los trabajos que siguen la secuencia A-B son el 1, 5, 6 y 9. El trabajo 9 es el más breve es en la máquina A por tanto se asigna y ejecuta en primer lugar. El trabajo 1 y 6 siguen con el tiempo más breve (10), sin embargo, el criterio de desempate nos indica que el trabajo 6 se asigna y ejecuta en segundo lugar. Posteriormente el tiempo más breve es en el trabajo 1 (máquina B) por lo cual se asigna este trabajo en tercer lugar y se ejecuta al último. La secuencia por tanto de los trabajos que siguen el orden A-B es: 9-6-5-1. Análogamente, siguiendo un procedimiento similar, los trabajos que siguen la secuencia B-A se ordenan 3-7-10 según la Regla de Johnson.

Paso 3: Los trabajos que sólo requieren la máquina A son el 2 y 8. De forma arbitraria seleccionaremos la secuencia 8-2. Finalmente existe un único trabajo que sólo requiere de la máquina B (trabajo 4).

Paso 4: La programación para la máquina A es: (9-6-5-1)-(8-2)-(3-7-10)

Paso 5: La programación para la máquina B es: (3-7-10)-(4)-(9-6-5-1)

Se propone a nuestros usuarios desarrollar una Carta Gantt considerando la secuencia anterior para ambas máquinas que permita encontrar el makespan asociado a dicha programación.