01 · Punto de partida
El curso en un simulador
Un call center recibe llamadas con ritmo λ(t) (Temas 10–15), las atiende con c agentes y promete SLA: esperar < 15 min. ¿Cuántos agentes hacen falta? Eso se responde simulando el día completo.
Este proyecto integra: proceso de conteo + Poisson no homogéneo + thinning + cola + réplicas + indicadores.
- ¿Qué λ(t): base + pico al mediodía?
- ¿Cuántos agentes c y qué μ de servicio?
- ¿Qué SLA: espera < 0,25 h en qué %?
- ¿El día cierra con dotación propuesta?
02 · Definición
Alcance del proyecto
El simulador mínimo viable incluye:
Arribos λ(t)
Base 2/h + pico 6 al mediodía por thinning (Temas 15, 18).
Cola FIFO
c agentes, servicio Exp(μ = 1/h). Espera = inicio − arribo.
SLA
% con espera < 0,25 h. Meta ≥ 80 % para aprobar dotación.
Entregables: código con semilla, tabla por turnos (Λ, espera media, SLA) y decisión de dotación con intervalo.
| Criterio | Puntos | Qué se mira |
|---|---|---|
| Modelo λ(t) + cola | 30 | S, λ(t), c, μ declarados y válidos. |
| Simulación correcta | 30 | Thinning + FIFO + semilla + R réplicas. |
| Indicadores + decisión | 25 | SLA, espera media, dotación justificada. |
| Reproducibilidad | 15 | Semillas, README y test media ≈ Λ. |
03 · Anatomía
Piezas y protocolo
El proyecto en cuatro bloques:
- Generador
- Thinning con λ* (Tema 18): arribos ordenados del día. Test: total ≈ Λ.
- Cola
- FIFO con c agentes y servicios Exp(μ): asignar cada arribo al primer agente libre.
- Réplicas
- R = 100+ días simulados con semillas distintas. Sin réplicas no hay SLA.
- Decisión
- SLA por dotación c = 1, 2, 3: elegir el menor c con SLA ≥ 80 %.
Día promedio
Un número
Λ total y espera media: resume pero esconde el pico.
Día por turnos
La decisión
SLA mañana/tarde/noche: dimensiona por pico, no por promedio.
04 · Ejemplos
Variantes del mismo esqueleto
Cambiando λ(t) y servicio salen otros proyectos:
- 1Call center (base).
λ(t) con pico + c agentes + SLA 15 min.
- 2Guardia hospital.
Dos picos (mañana/tarde) + prioridad por triaje.
- 3Servidor web.
Base + pico de evento + timeout en vez de espera infinita.
- 4Caja de comercio.
Dos picos + cajas que abren por turno.
- 5Soporte con niveles.
Nivel 1 Markov → nivel 2: red de colas.
05 · Representación en Python
Esqueleto completo en 30 líneas
En Python, el proyecto son tres funciones: arribos (thinning), cola (FIFO) y experimento (R réplicas con SLA). Este esqueleto es tu punto de partida.
Python en tu navegador. Estos bloques se ejecutan localmente con Pyodide, sin instalar nada. Cambiá c y mirá el SLA.
import random, math
def lam(t, base=2.0, pico=6.0):
return base + pico * math.exp(-((t - 12) ** 2) / 8)
def arribos(T=24.0, base=2.0, pico=6.0, semilla=7):
lam_star = base + pico
random.seed(semilla)
t, ev = 0.0, []
while True:
t += -math.log(1 - random.random()) / lam_star
if t > T:
return ev
if random.random() < lam(t, base, pico) / lam_star:
ev.append(round(t, 2))
Con base 2 y pico 6 salen ~90 arribos/día. Otra semilla, otro día del mismo λ(t).
Cola FIFO y SLA
Asignar cada arribo al primer agente libre con servicio Exp(μ):
import random, math
def simular_dia(arribos, c=2, mu=1.0, semilla=99):
random.seed(semilla)
libres = [0.0] * c
esperas = []
for t in arribos:
i = min(range(c), key=lambda k: libres[k])
inicio = max(t, libres[i])
libres[i] = inicio + -math.log(1 - random.random()) / mu
esperas.append(inicio - t)
sla = sum(1 for w in esperas) and sum(1 for w in esperas if w < 0.25) / len(esperas)
return round(sum(esperas) / len(esperas), 3), round(sla, 3)
a = arribos(semilla=7)
print("arribos:", len(a), simular_dia(a, c=2))
06 · Exploración
Laboratorio: dimensionar la dotación
Un día simulado con tu pico y tus agentes c: la curva es la cola en el tiempo y los puntos, arribos. Métricas: espera media, SLA < 15 min y cola máxima. Subí el pico: el SLA exige más agentes.
Call center 24 h
λ(t) = 2 + pico·joroba(12h) · FIFO(c)
Con pico 6 y c 2: SLA ≈ 75 %. Probar con 3.
El eje es la hora del día; la altura, llamadas en sistema. Al mediodía la curva se empina: ahí se juega el SLA.
Preguntas para explorar
- Con pico 6 y c = 1, ¿el SLA llega al 80 %? ¿Y con c = 3?
- Subí el pico a 10 con c = 2. ¿La espera media se duplica o explota?
- Generá otros días con igual (pico, c). ¿El SLA es fijo o fluctúa?
Ver respuestas sugeridas
- No (≈ 40 %); sí (≈ 95 %+). Un agente no absorbe el pico.
- Explota (no lineal): la cola del pico no se drena. Régimen ρ > 1 local.
- Fluctúa ±5–10 puntos: por eso el proyecto exige R = 100 días, no uno.
07 · Comprensión
Confusiones frecuentes
«Un día simulado decide»
No: un día es una réplica. La decisión sale de R = 100+ con intervalo.
«SLA medio = SLA por turnos»
No: el día puede dar 85 % con mediodía en 60 %. Dimensionar por turnos.
«Más agentes siempre rinde»
Rinde decreciente: de 1→2 mucho, de 4→5 casi nada. Costo vs SLA marginal.
«Validar es optativo en un TP»
No: sin test total ≈ Λ el jurado no cree tu cola. Validar primero.
08 · Práctica guiada
Ejercicios con Python (el proyecto por pasos)
Paso 1: validar arribos
Generá 1 día y verificá que el total ronda Λ ≈ 48 + pico·5 (joroba). Con pico 6: ≈ 78.
a = arribos(semilla=21)
print(len(a))
Ver solución razonada
Da ≈ 70–90 según semilla: válido si cae cerca de Λ. Si da 20, λ(t) o λ* están mal.
Paso 2: barrer dotación
Sin ejecutar primero: ¿SLA(c=1) < SLA(c=2) < SLA(c=3)? Comprobalo con R = 30.
import random, math
def dia(c=2, semilla=1):
a = arribos(semilla=semilla)
return simular_dia(a, c=c, semilla=semilla + 500)[1]
for c in [1, 2, 3]:
random.seed(0)
print(c, round(sum(dia(c, s) for s in range(30)) / 30, 3))
Ver solución
Monótona: ≈ 0,4 – 0,75 – 0,95. Más agentes, más SLA con rindes decrecientes.
Paso 3: informe mínimo
Escribí el README de 5 líneas: λ(t), c elegido, SLA con intervalo, semillas y cómo correr.
Ver una posible respuesta
print("λ(t)=2+6·joroba12 | c=3 | SLA=0.95±0.02 | R=100 | python proyecto.py --semilla 7")
Reproducible en una línea: modelo, decisión, precisión y comando.
09 · Síntesis
Ideas para recordar
- Proyecto = λ(t) por thinning + FIFO(c) + R réplicas + SLA.
- Validar arribos (Λ) antes de medir esperas.
- Decidir por turnos, no por promedio diario.
- Informar SLA con intervalo y semillas.
- El curso cierra donde abrió: X(t) simulado para decidir.
Fin del curso: Procesos Estocásticos y Cadenas de Markov para Programadores. ¡A simular sistemas reales!