Skip to content

it-courses-material/basic-queue-simulation

Repository files navigation

Scripts to basic queue simulation (batch processing)

Propósito del Proyecto

Sistema de simulación de eventos discretos para modelar el funcionamiento de un call center con procesamiento por lotes (batch processing). Evalúa diferentes configuraciones de operadores para optimizar recursos y analizar métricas de rendimiento.


Arquitectura del Sistema

1. Modelo Base (CallCenterModel.py)

Componentes Principales

Clase OcupadoException (línea 12)

  • Excepción personalizada para manejar conflictos de disponibilidad
  • Permite control de flujo mediante try-catch en cascada

Interfaz IOperador (líneas 15-46)

class IOperador:
    tipo = None
    def ocupar(self, tiempo, duracion)     # Marca slots de tiempo como ocupados
    def is_ocupado(self, i)                # Verifica disponibilidad
    def getTiempoOcioso(self, tiempo_max)  # Calcula tiempo no productivo

Características:

  • Gestión de ocupación temporal mediante arrays NumPy
  • Estados: -1 (no inicializado), 0 (libre), 1 (ocupado)
  • Validación de conflictos antes de asignación

Clase Operador (líneas 49-52)

class Operador(IOperador):
    def __init__(self, n, M):
        self.tiempo = np.ones(n+M)*-1  # Array de estados temporales

2. Generadores Estocásticos

Distribución de Duración de Llamadas (getDuracionLlamada, líneas 59-75)

Probabilidad Duración (min) Rango RN
20% 2 0-19
40% 5 20-59
20% 9 60-79
15% 13 80-94
5% 15 95-100

Técnica: Método de la transformada inversa

Distribución de Espacios Entre Llamadas (getEspacioEntreLlamadas, líneas 77-91)

Probabilidad Tiempo (min) Rango RN
40% 1 0-39
20% 2 40-59
20% 3 60-79
20% 4 80-100

Distribución de Tipo de Llamada (getTipoLlamada, líneas 93-107)

Tipo Probabilidad Rango RN Operador Asignado
Consulta 40% 0-39 Junior
Turno 30% 40-69 Junior
Garantía 20% 70-89 Senior
Uso 10% 90-100 Semi-senior

Scripts de Simulación

Configuraciones Implementadas

Archivo Operadores Distribución Línea Definición
call_center_4operadores-211.py 4 2 Junior, 1 Semi-senior, 1 Senior 45-48
call_center_5operadores_221.py 5 2 Junior, 2 Semi-senior, 1 Senior 48-52
call_center_5operadores-311.py 5 3 Junior, 1 Semi-senior, 1 Senior -
call_center_6operadores_321.py 6 3 Junior, 2 Semi-senior, 1 Senior 50-55

Política de Enrutamiento

Skill-based Routing con Fallback:

# Ejemplo para llamadas de "consulta" o "turno"
if tipo in ["consulta", "turno"]:
    try:
        op1.ocupar(tiempo, dur)  # Intenta Junior 1
    except OcupadoException:
        try:
            op2.ocupar(tiempo, dur)  # Fallback a Junior 2
        except OcupadoException:
            no_atendido[i] = 1  # Llamada perdida

Jerarquía de asignación:

  1. Consulta/Turno → Junior (con fallback entre juniors)
  2. Uso → Semi-senior (con fallback entre semi-seniors)
  3. Garantía → Senior (sin fallback)

About

Scripts to basic queue simulation (batch processing)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages