Simulación de Eventos Discretos · Tema 48

Aplicaciones en atención al público

Bancos, salud y ventanillas — la teoría en la calle: picos, triage, abandono y dotación por turnos.

01 · Punto de partida

La misma cola con guardapolvo distinto

El banco de las 12, la guardia un sábado, el registro civil sin turno: mismos modelos, otra piel. Lo que cambia es el contexto: picos marcados (mediodía, lunes), clases innegociables (triage), abandono visible (el que se va) y fila física que se ve y se sufre.

Aplicar el curso acá es traducir: calle → Kendall + ventanas → Erlang/sim → dotación por turnos → pilotear y re-medir.

  • ¿Cómo mido λ y S por ventana (no por día)?
  • ¿Qué modelo toca por caso (M/M/c, prioridades, abandono)?
  • ¿Fila única o ventanillas especializadas?
  • ¿Cómo informo la espera para que duela menos?

02 · Definición

Picos, trámites y nivel visible

▲

Picos

λ por ventana (mañana/pico/tarde), no media diaria. El pico del mediodía puede triplicar el valle.

◈

Trámites

S mixto: 80% rápido + 20% trabado (G). Caja rápida para enanos + pooling para el resto.

👁

Nivel visible

Fila física, espera informada y abandono. Lo que se ve se gestiona (psicología de la espera).

Tres ventanillas, tres modelos (S = 2 min).
CasoDemanda picoModeloDotación
Banco mediodíaλ = 1.4/minM/M/c + caja rápidac = 4 (SLA Wq ≤ 4)
Guardia sábadoλ = 0.5, 3 clasesPRIO no expulsiva + abandonoMédicos por clase + triage
Registro con turnosD (cita) + M (espontáneo)D+M mixto, simCupo de espontáneos por hora

03 · El corazón: la receta de ventanilla

Medir, clasificar, dotar por turnos, pilotear

medir ventanas→clasificar→dotar turnos→pilotear
  1. 1
    Medir por ventana.

    Conteo de arribos por hora + cronómetro de S por trámite + tasa de abandono. Una semana típica, no un día raro.

  2. 2
    Clasificar.

    Kendall por ventanilla + clases (triage, premium) + abandono esperado. El modelo lo dicta el dato.

  3. 3
    Dotar por turnos.

    Erlang C o sim por ventana: c pico ≠ c valle. La plantilla única sobra a la mañana y falta al mediodía.

  4. 4
    Pilotear visible.

    Fila única, número, espera informada en pantalla, caja rápida señalizada. Medir de nuevo: el piloto es otro experimento.

Turnos que siguen λ(t)
Partir el día en ventanas estables y dotar cada una: el hydraulics de la atención pública.
Caja rápida
Ventanilla solo-trámites-cortos (SPT físico): parte la media sin software. El cartel es el algoritmo.
Abandono (reneging)
El que se va al ver la fila: alivia Wq y miente en L. Se modela con paciencia Exp o umbral.
Espera informada
Número + tiempo estimado visible: baja el abandono y la queja a igual Wq (psicología medible).

Plantilla única

Simple y cara

Un c para todo el día: sobra en valle (ocio pago) y falta en pico (fuga). Solo vale sin picos.

Turnos por ventana

Sigue la curva

c(t) con λ(t): pico reforzado, valle liviano. Exige medición y flexibilidad de personal.

04 · Ejemplos

Cuatro calles con número

  1. 1
    Banco mediodía (λ = 1.4, S = 2).

    c = 3 da Wq ≈ 8.8 (SLA ≤ 4 roto); c = 4 da ≈ 0.7. Se abre la 4ª solo al mediodía.

  2. 2
    Guardia con triage.

    PRIO 1-2-3 + abandono de leves: Wq rojo ≈ 0, verde pactado. Sin clases, el rojo espera como un verde.

  3. 3
    Registro con turnos + espontáneos.

    Cupos D cada 10 min + cola M con tope/hora: la mezcla se simula, no se promedia.

  4. 4
    Call center público con IVR.

    El IVR filtra 30% (baja λ efectiva) y el abandono podas picos: λef manda.

05 · Representación en Python

Dotación por ventana en dos bloques

El día como lista de (ventana, λ): Erlang por ventana + Little para sillas de espera.

Python en tu navegador. El primero dota cada ventana; el segundo dimensiona sillas con Little. Cambiá el pico.

# Dotar cada ventana (M/M/c, S=2, SLA Wq<=4)
import math
def Wq_mmc(lam, mu, c):
    a, rho = lam/mu, lam/mu/c
    s = sum(a**k/math.factorial(k) for k in range(c))
    C = (a**c/(math.factorial(c)*(1-rho)))/(s + a**c/(math.factorial(c)*(1-rho)))
    return C/(c*mu-lam)

for v, lam in [("valle", 0.5), ("pico", 1.4), ("tarde", 0.7)]:
    c = next(c for c in [2, 3, 4, 5] if lam/(0.5)/c < 1 and Wq_mmc(lam, 0.5, c) <= 4)
    print(f"{v}: lam={lam} -> c={c}")
# Sillas de espera con Little: Lq pico + margen
lam, Wq = 1.4, 0.7  # con c=4
print(f"sillas={lam*Wq:.1f} -> 2-3 sillas + fila de pie (pico)")

06 · Exploración

Laboratorio: el día con tres ventanas

Día con valle (35% del pico), pico (tu λ) y tarde (50%), S fijo en tu valor, dotación c pareja todo el día, SLA Wq ≤ 4. Las barras comparan Wq por ventana; el semáforo dice qué ventanas cumplen. Subí el pico y mirá cómo solo él se rompe —argumento para el turno refuerzo.

EXPERIMENTO 48

El pico pide su turno

valle 35% · pico 100% · tarde 50% · SLA≤4

Los resultados numéricos aparecen debajo.
Wq pico0
Ventanas que cumplen0/3
ρ pico0
Wq día (pond.)0

Subí c o bajá el pico para cumplir las tres.

Tres barras (valle/pico/tarde) contra la recta SLA = 4. Verde cumple, naranja rompe: el refuerzo va donde rompe.

Preguntas para explorar

  1. Default (λ=1.4, c=3, S=2): ¿qué ventanas cumplen? ¿Wq pico?
  2. Subí a c=4: ¿pico? ¿Valía la 4ª solo por el pico?
  3. Bajá S=1.5 (agilizar) con c=3: ¿pico? ¿Turno o proceso?
Ver respuestas sugeridas
  1. Valle y tarde cumplen; pico Wq ≈ 8.8 rompe (ρ = 0.93): 1 de 3.
  2. Pico ≈ 0.7: cumplen 3 de 3. La 4ª se abre solo 12–14 h (turno refuerzo).
  3. Pico ≈ 0.8: cumple sin contratar (ρ = 0.7). Si agilizar es posible, rinde antes que el puesto.

07 · Comprensión

Confusiones frecuentes

«Dimensiono por media diaria»

La media esconde el pico que fuga: se dota por ventana pico (y se valida el día ponderado).

«Ignoro a los que se van»

El abandono alivia Wq y miente en L: medirlo y usar λef, o la “mejora” es fuga disfrazada.

«Especializo todo por trámite»

Cada especialidad parte el pooling: solo lo que exige SLA de clase (triage); el resto, fila única.

«La espera no se gestiona»

Número, tiempo estimado y espera ocupada bajan abandono y queja a igual Wq: es intervención barata y medible.

08 · Práctica guiada

Ejercicios con Python

Ejercicio 1: turno pico

λ=1.4, S=2, SLA ≤4. ¿c? ¿Wq con ese c?

# c=3: 8.8 (rompe); c=4: ~0.7 (cumple) -> turno pico con 4
print("El pico pide su turno: 4 de 12 a 14")
Ver solución razonada

c = 4 solo en pico (ρ = 0.7): el resto del día sobra. Turno refuerzo, no plantilla.

Ejercicio 2: sillas con Little

λ=1.4, Wq=0.7. ¿Lq? ¿Sillas?

print(f"Lq={1.4*0.7:.1f} -> 2 sillas + resto de pie")
Ver solución

Lq ≈ 1.0: dos sillas alcanzan en media; el pico máximo pide colchón de pie señalizado.

Ejercicio 3: agilizar vs contratar

S=2→1.5 con c=3, λ=1.4. ¿Wq? Compará con c=4.

Ver una posible respuesta
# S=1.5: rho=0.7, Wq≈2-3 (cumple); c=4: 0.7 (sobra). Proceso antes que puesto
print("Agilizar rinde primero; el puesto es el plan B")

Agilizar cumple sin contratar: el proceso (S) se ataca antes que la plantilla (c).

09 · Síntesis

Ideas para recordar

  • Calle → ventanas (λ, S) → Kendall/clases → c por turno.
  • Pico manda; media esconde; abandono se mide con λef.
  • Fila única + caja rápida; especializar solo lo que el SLA exige.
  • En Python: tabla por ventana + Little para sillas.
  • Espera informada: intervención barata a igual Wq.

En el próximo tema cruzamos al data center: servidores y redes.