Poductividad con Excel

Aprende Excel resolviendo problemas reales de ingeniería industrial. Cada artículo te guía desde cero con datos reales, fórmulas explicadas y ejercicios prácticos diseñados para que apliques lo que aprendes en clase.

Simulación de eventos discretos de una línea de producción con VBA

Simulación de eventos discretos de una línea de producción con VBA

Este instructivo técnico está diseñado para ingenieros industriales, analistas de operaciones y estudiantes que deseen modelar y simular procesos complejos de manufactura utilizando la potencia de Microsoft Excel y Visual Basic for Applications (VBA).

Definición del problema

En el entorno de manufactura moderna, la optimización de la línea de producción es crítica para reducir costos y aumentar la eficiencia. Un desafío común es la gestión de cuellos de botella, la variabilidad en los tiempos de procesamiento y la gestión de fallos de maquinaria. Consideremos la planta de ensamblaje de «ElectroTech S.A.», que produce tres modelos de dispositivos: Modelo A (Alto volumen, baja complejidad), Modelo B (Medio volumen, complejidad media) y Modelo C (Bajo volumen, alta complejidad).

El reto operativo es determinar la tasa de producción promedio y el tiempo de espera promedio de los pedidos en el buffer de entrada, considerando que el tiempo de procesamiento de cada modelo es aleatorio (distribución exponencial) y que la máquina principal puede sufrir paradas aleatorias (fallos).

Necesitamos una herramienta que pueda ejecutar miles de «ciclos de producción» (simulaciones) para obtener estadísticas robustas, algo que las fórmulas estáticas de Excel no pueden lograr eficientemente.

Explicación técnica

La Simulación de Eventos Discretos (SED) modela un sistema donde el estado del sistema cambia solo en puntos específicos en el tiempo, llamados «eventos». En este caso, los eventos son: «Inicio de procesamiento de unidad», «Fin de procesamiento de unidad» y «Fallo de máquina».

Conceptos Clave:

  • Generación de Aleatoriedad: Utilizaremos la función `Rnd()` de VBA para generar tiempos de llegada y tiempos de servicio basados en distribuciones de probabilidad (ej. Exponencial, que es común para modelar tiempos de espera o fallos).
  • Estructura de Eventos: Se mantendrá una «Cola de Eventos» (Event List) ordenada por tiempo. El sistema siempre procesa el evento que ocurrirá más pronto.
  • VBA: Se utilizará VBA para automatizar el bucle de simulación, gestionar el estado del sistema (ej. ¿La máquina está ocupada? ¿Hay trabajo en cola?) y registrar los datos de salida.

Guía paso a paso

Paso 1: Configuración del Entorno de Excel y Módulos VBA

Qué hacer: Abre Excel. Presiona Alt + F11 para abrir el Editor de VBA. En el menú, ve a Insertar > Módulo. Nombra este módulo «SimuladorProduccion».

Por qué se hace: Esto crea el espacio de código donde residirá la lógica de la simulación.

Resultado: Un nuevo módulo vacío listo para programar.

Paso 2: Definición de Parámetros y Datos de Entrada

Qué hacer: En la Hoja1 de Excel, configura las siguientes celdas para definir los parámetros de la simulación:

  • A1: Número de Simulaciones (Ej: 1000)
  • B1: Tiempo de Simulación Total (Ej: 8 horas en minutos = 480)
  • A3: Tasa de Llegada Promedio (Ej: 1 unidad cada 5 minutos)
  • B3: Tasa de Fallo de Máquina (Ej: 1 fallo cada 120 minutos)

Por qué se hace: Centralizar los parámetros permite modificar el escenario sin tocar el código VBA.

Resultado: Una hoja de cálculo con los parámetros de entrada definidos.

AB
1Nro Simulaciones1000
2Tiempo Total (min)480
3Tasa Llegada (min/unidad)5
4Tasa Fallo (min/fallo)120

Paso 3: Implementación de la Lógica de Generación de Tiempos (Función Exponencial)

Qué hacer: En el Módulo VBA, escribe una función auxiliar para generar tiempos aleatorios siguiendo una distribución exponencial, crucial para modelar tiempos de espera y fallos:

Function GenerarTiempoExponencial(tasa)
    Randomize
    ' Fórmula para distribución exponencial: -ln(U) / lambda
    GenerarTiempoExponencial = -Log(Rnd()) / tasa
End Function

Por qué se hace: La distribución exponencial es el modelo estándar para eventos aleatorios en intervalos de tiempo (como la llegada de clientes o fallos de componentes).

Resultado: Una función reutilizable en el código VBA.

Paso 4: Desarrollo del Bucle Principal de Simulación (El Motor SED)

Qué hacer: Dentro del Módulo VBA, crea el Sub principal (ej. Sub EjecutarSimulacion()). Este sub debe inicializar variables (TiempoActual = 0, UnidadesProducidas = 0, etc.) y luego ejecutar un bucle For i = 1 To N_Simulaciones. Dentro de este bucle, se debe gestionar la lógica de eventos:

  1. Generar el tiempo de llegada del próximo pedido usando GenerarTiempoExponencial(TasaLlegada).
  2. Comparar este tiempo de llegada con el tiempo en que la máquina terminará su tarea actual (si está ocupada).
  3. Si el evento es la llegada, se añade al buffer. Si el evento es el fin de tarea, se procesa la unidad y se genera el siguiente evento de servicio.
  4. Se debe incluir lógica para manejar la probabilidad de fallo de la máquina en cada intervalo de tiempo.

Por qué se hace: Este bucle es el corazón de la SED; simula el paso del tiempo y la ocurrencia secuencial de eventos.

Resultado: Un código funcional que avanza el estado del sistema a través del tiempo.

Paso 5: Registro y Análisis de Resultados

Qué hacer: Al finalizar cada simulación (o al final del tiempo total), el código debe registrar métricas clave en una hoja de resultados (ej. Hoja2). Las métricas incluyen: Tiempo de Espera Promedio, Tasa de Utilización de la Máquina, y Número Total de Unidades Producidas.

Por qué se hace: La simulación genera datos brutos; el registro permite el análisis estadístico posterior.

Resultado: Una tabla en Excel con los resultados agregados de las 1000 ejecuciones, permitiendo calcular promedios y desviaciones estándar.

MétricaResultado PromedioDesviación Estándar
1Tiempo de Espera (min)12.53.1
2Utilización Máquina (%)88.2%2.5%
3Unidades Producidas4500150

Ejercicio propuesto

Una vez que hayas implementado la simulación básica (solo con llegadas y tiempos de servicio), extiende el modelo para incorporar la complejidad del Modelo C (Alta complejidad). Asigna un tiempo de servicio promedio significativamente mayor para el Modelo C y una probabilidad de fallo de máquina más alta cuando este modelo esté siendo procesado. Luego, ejecuta la simulación 5000 veces y compara la utilización de la máquina y el tiempo de espera promedio entre un escenario donde solo se produce el Modelo A y el escenario mixto (A, B, C). Documenta cómo el cambio en la complejidad afecta la eficiencia general.

Errores habituales

  1. Error: No inicializar la semilla aleatoria (Randomize). Si olvidas poner Randomize al inicio de tu código VBA, la secuencia de números aleatorios será la misma en cada ejecución, haciendo que tu simulación sea determinista y no represente la variabilidad real del proceso. Solución: Asegúrate de que Randomize se ejecute una sola vez al inicio del procedimiento principal.
  2. Error: Manejo incorrecto del tiempo (Time Stepping). Un error común es intentar simular paso a paso (cada segundo) en lugar de por eventos. Esto es computacionalmente ineficiente. Si el tiempo de un evento es 1000 minutos, no debes iterar 1000 veces. Solución: Siempre avanza el TiempoActual al tiempo del próximo evento en la cola de eventos.
  3. Error: Confundir Tasa ($lambda$) con Intervalo de Tiempo ($1/lambda$). En la distribución exponencial, si la tasa de llegada es de 1 unidad cada 5 minutos, la tasa ($lambda$) es $1/5 = 0.2$ unidades/minuto. Si usas 5 como tasa en la fórmula -Log(Rnd()) / tasa, el tiempo generado será incorrecto. Solución: Si tu dato de entrada es el intervalo promedio (ej. 5 minutos), debes usar el inverso de ese valor como la tasa ($lambda$) en la función exponencial.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *