Simulación de Eventos Discretos · Tema 24

Proceso de servicio

Tiempos de atención, tasa μ y variabilidad — cuánto tarda cada cliente y por qué un lento esporádico traba toda la fila.

01 · Punto de partida

La misma velocidad media, dos cajas distintas

Dos cajas atienden 30 clientes por hora en promedio. La primera tarda siempre 2 minutos. La segunda tarda 30 segundos con casi todos y 12 minutos con uno de cada diez (el trámite trabado). ¿Cuál deja fila? La segunda, aunque su μ sea idéntico.

Esa es la lección del proceso de servicio: no alcanza con decir “atiendo tantos por hora”. Hay que decir cuántos (μ) y cuán desparejos (variabilidad de S). La tasa μ abre la capacidad; la variabilidad la desperdicia en esperas.

  • ¿Cuánto dura una atención (S) y cuántas salen por hora si nadie espera (μ = 1/E[S])?
  • ¿Son todas parecidas o hay enanos y gigantes mezclados?
  • ¿Cómo paso de tiempos cronometrados a μ y a su dispersión?
  • ¿Qué variabilidad asumo si todavía no medí nada?

02 · Definición

Tiempo, tasa y desparejura

S

Tiempo S

Lo que el servidor dedica a un cliente, sin contar su espera. Se cronometra de inicio a fin de atención.

μ

Tasa μ

Atenciones por unidad si hay trabajo siempre: μ = 1/E[S]. Con c servidores, capacidad = cμ y ρ = λ/(cμ).

±

Variabilidad Cs²

Cuánto se despareja S: Cs² = Var(S)/E[S]². 0 = clones, 1 = exponencial, >1 = enanos + gigantes.

Cuatro procesos de servicio de manual (letra B de Kendall).
ProcesoCómo son los SCs²Cuándo usarlo
D deterministaTodos iguales: S = 1/μ0Cajero automático, lavado de 3 min, pieza robotizada
M markovianoExponenciales: S ~ Exp(μ)1Caja de banco, request web típico (defecto)
Ek ErlangSuma de k etapas Exp(kμ)1/kTrámite en k ventanillas parecidas, checklists
G general / mixtoCualquiera: lognormal, mezcla, lotes lentos≠1Soporte (90% rápido + 10% trabado), cirugías, builds

03 · El corazón: el gigante bloquea

Por qué la varianza de S duele tanto

ocupa servidor→sortea S→agenda fin en t + S

Cuando un cliente entra a servicio, el simulador sortea su S y agenda su salida en t + S. Si S sale gigante, todos los que esperan pagan ese gigante: es el bloqueo de cabeza de línea. La fórmula de Pollaczek-Khinchine lo resume para M/G/1: Wq crece con (1 + Cs²). Pasar de D (0) a M (1) duplica Wq; una mezcla con gigantes la multiplica.

  1. 1
    Cronometrar solo atención.

    De “empiezo a atenderte” a “terminé”. La espera en cola (Wq) no es S: mezclarlas infla μ.

  2. 2
    Estimar μ y Cs².

    μ̂ = N/ΣS (inversa de la media). Cs² = varianza/media². Con [2,2,2] Cs²=0; con [0.5,0.5,12] Cs²≫1.

  3. 3
    Sortear el fin.

    Con M: S = -ln(1-U)/μ. Con D: S = 1/μ. Con mezcla: primero el tipo (90/10), luego su Exp.

  4. 4
    Liberar o encadenar.

    En t+S el servidor queda libre o toma al siguiente sin pausa. Ese encadenado propaga el atraso del gigante.

Erlang-k
Suma de k exponenciales de tasa kμ: media 1/μ pero Cs² = 1/k. Más etapas ⇒ más parejo. k=1 es M, k→∞ es D.
Sin memoria (solo M)
Si lleva 5 min atendiendo, lo que falta sigue siendo Exp(μ). Con D o con gigantes no: lo que queda depende de lo que va.
Mezcla / hiperexponencial
Con prob. p, S rápido; con 1−p, S lento. Misma media que M pero Cs² > 1: el laboratorio muestra al gigante pintado.
ρ manda la estabilidad
ρ = λ/(cμ). Si E[S] sube, μ baja y ρ se acerca a 1: la misma λ que andaba ahora avalancha.

Servicio parejo

Rinde lo que promete

Todos los bloques miden parecido (D, Erlang-k alto). El makespan es predecible y la espera solo nace de λ.

Servicio desparejo

Un gigante paga todo

Enanos rápidos + un trabado ocasional (G). Misma μ, pero cada gigante deja una tanda esperando detrás.

04 · Ejemplos

La misma μ, tres mostradores

  1. 1
    Cajero automático (D).

    S = 1 min clavado ⇒ μ = 60/h, Cs² = 0. Seis clientes seguidos tardan 6 min exactos, sin sorpresas.

  2. 2
    Caja de banco (M).

    S ~ Exp con media 2 min ⇒ μ = 30/h, Cs² = 1. Hay de 20 segundos y de 7 minutos: el makespan de 6 ronda 12 ± √.

  3. 3
    Soporte con trabados (G).

    90% en 1 min + 10% en 11 min ⇒ media 2, μ = 30/h, Cs² ≫ 1. Casi siempre vuela, pero cuando cae el de 11, la fila explota.

De cronometrajes a μ en un renglón.
Tiempos medidos S (min)Mediaμ̂Lectura
2, 2, 2, 22.030/hD: clones
0.4, 3.1, 0.9, 3.62.030/hM: pinta exponencial
0.5, 0.5, 0.5, 6.52.030/hG: tres enanos + un gigante

05 · Representación en Python

De cronometrajes a μ, de μ a futuros

Medir es promediar S e invertir; simular es sortear S. Con random.expovariate(μ) generás M; con una constante, D; con una moneda previa, mezcla G.

Python en tu navegador. El primero estima μ y Cs² desde tiempos; el segundo genera la tanda que alimenta los fines de servicio. Cambiá la mezcla y mirá al gigante.

# Estimar mu y Cs2 desde tiempos de atención S (min)
S = [0.5, 0.5, 0.5, 6.5]
media = sum(S) / len(S)
var = sum((x - media) ** 2 for x in S) / len(S)
print(f"E[S]={media:.2f} mu={1/media:.2f}/min Cs2={var/media**2:.2f}")
# Generar 6 servicios: M puro vs mezcla 90/10 con misma media 2
import random
random.seed(24)
mu = 0.5  # media 2 min
print("M:", [round(random.expovariate(mu), 2) for _ in range(6)])
rap, lento = 1/0.9, 1/0.1  # medias 1.11 y 10 -> mezcla media 2
mez = [(random.expovariate(1/rap) if random.random() < 0.9 else random.expovariate(1/lento)) for _ in range(6)]
print("G:", [round(x, 2) for x in mez])

06 · Exploración

Laboratorio: misma μ, distinto S

Un servidor atiende N trabajos seguidos (cola inicial, sin llegadas nuevas) con S medio fijo. Con Regular todos miden igual; con Exponencial se dispersan; con Mezcla hay enanos y un gigante ocasional (pintado de naranja). La barra inferior es el makespan: misma media, pero el gigante se come la línea.

EXPERIMENTO 24

μ manda el promedio, Cs² manda el bloqueo

μ̂ = N/ΣS · makespan = ΣS

Los resultados numéricos aparecen debajo.
Makespan (suma S)0
S máximo (gigante)0
S medio obs.0
El gigante pesa0%

Mueve el régimen para cazar al gigante.

Una sola fila = el servidor; cada bloque = un trabajo con su S. Naranja = el gigante (S máximo). Todos los regímenes comparten el mismo S medio pedido.

Preguntas para explorar

  1. Con N=6 y S medio 3, ¿makespan en Regular? ¿Y en Exponencial (aprox.)? ¿Por qué rondan lo mismo?
  2. En Regular, ¿cuánto pesa el máximo sobre el makespan? ¿Y en Mezcla cuando aparece el gigante?
  3. Si λ = 0.25/min y S medio = 3 (μ ≈ 0.33), ¿ρ con c=1? ¿Y si el gigante duplica E[S] un rato?
Ver respuestas sugeridas
  1. Regular: 18 exactos (6×3); Exponencial: ~18 ± dispersión (misma media, suma parecida). μ manda el total medio.
  2. Regular: 3/18 ≈ 17% (todos iguales). Mezcla: el gigante puede pesar 30–50%: un solo S traba a los 5 que siguen.
  3. ρ = 0.25/0.33 ≈ 0.75 (estable). Si E[S] se duplica a 6, μ cae a 0.167 y ρ ≈ 1.5: avalancha transitoria hasta que pasa el gigante.

07 · Comprensión

Confusiones frecuentes

«μ es qué tan rápido atiendo ahora»

μ es tasa media sostenida (1/E[S]), no velocidad instantánea. Podés atender rapidísimo 5 seguidos y trabarte 10 min en el sexto: μ promedia ambos.

«Promedio los 1/S de cada uno para sacar μ»

Mal: μ = N/ΣS = 1/media(S). Promediar inversos sobrepondera a los rapidísimos y te inventa capacidad que no tenés.

«S incluye la espera en cola»

No: S es solo atención. Si medís “llegó → se fue” obtenés W = Wq + S y calculás una μ falsamente lenta.

«Más μ siempre compensa cualquier variabilidad»

Subir μ ayuda, pero con Cs² alto necesitás mucho más margen (ρ bajo) para la misma Wq. A veces conviene separar la fila de gigantes (caja rápida).

08 · Práctica guiada

Ejercicios con Python

Ejercicio 1: estimar μ

Cronometraste S = [2, 1, 3, 2] min. ¿E[S] y μ por hora?

S = [2, 1, 3, 2]
media = sum(S) / len(S)
print(f"E[S]={media} min, mu={60/media:.1f}/h")
Ver solución razonada

E[S] = 2 min ⇒ μ = 0.5/min = 30/h. Con c=2, capacidad 60/h: una λ=45/h da ρ=0.75.

Ejercicio 2: sortear un fin de servicio

Son las t=10 y μ=0.5/min (M). ¿Cuándo termina el que empieza ahora? Compará con D.

import random
random.seed(2)
mu, t = 0.5, 10.0
print("M termina:", round(t + random.expovariate(mu), 2), "vs D:", t + 1/mu)
Ver solución

M puede dar 10.6 o 14.3 (azar); D siempre 12.0. Esa es la agenda que el FEL recibe en cada inicio.

Ejercicio 3: ρ decide con S

λ=0.25/min, S medio 3 (c=1) y luego S medio 5: ¿estable?

Ver una posible respuesta
lam = 0.25
for E in [3, 5]:
    print(f"E[S]={E} rho={lam/(1/E):.2f}")

E=3 ⇒ ρ=0.75 estable; E=5 ⇒ ρ=1.25 avalancha. El mismo arribo, otro servicio: ρ decide.

09 · Síntesis

Ideas para recordar

  • Servicio = tiempos S; μ = 1/E[S] manda la capacidad, Cs² manda el bloqueo.
  • D (0), Erlang (1/k), M (1), G (>1): misma μ, esperas muy distintas (Wq ∝ 1+Cs²).
  • En el simulador: al ocupar, sortear S y agendar fin en t + S.
  • En Python: expovariate(μ) para M, constante para D, moneda + Exp para mezcla.
  • Medí S sin Wq y reportá (μ, Cs²): μ solo no explica la fila.

En el próximo tema pondremos orden en la espera: la disciplina de la cola.