01 · Punto de partida
De 50 lecciones a un sistema que decide
El proyecto integra el curso: un simulador de colas por eventos con motor FEL, M/M/c con fila única, prioridades, cupo con pérdida, estadísticas con warmup, réplicas pareadas y doble auditoría (Little + Erlang). Entrega: código replicable + informe que dimensiona un caso real (banco, guardia o web).
Se construye por hitos validables: cada hito corre, audita y decide antes del siguiente. Sin big-bang final.
- ¿Qué incluye la v1 y qué queda fuera?
- ¿Cómo se valida cada hito?
- ¿Qué experimentos comparan y deciden?
- ¿Qué contiene el informe que se defiende?
02 · Definición
Alcance, arquitectura y terminado
Alcance v1
M/M/c, FIFO/PRIO no expulsivas, K finita, SLA, réplicas. Fuera: redes con bloqueo, expulsivas, GUI.
Arquitectura
Motor FEL + generadores + políticas (key) + estadísticas + auditoría + CLI/config. Regla separada del motor.
Terminado
Corre con semilla, audita (Little/Erlang), replica, compara con IC e informa (λ, S, c, T, t₀, N).
| Módulo | Hace | Se valida con |
|---|---|---|
| Motor FEL | Reloj, heap, rutinas llegada/salida, cierre T | M/M/1 vs fórmulas (Tema 31) |
| Políticas | key FIFO/PRIO, c servidores, K cupo | Erlang C/B, tablas 25–27 |
| Stats | Áreas, vidas, U, warmup, réplicas, IC | Little L=λW (Tema 37) |
| CLI/informe | Config, escenarios, tablas, veredicto | Re-correr con semilla da igual |
03 · El corazón: cuatro hitos
Integrar temprano, validar siempre
- H1Motor + M/M/1 válido.
FEL heap, Exp(λ, μ), áreas y vidas. Criterio: Little <5%, Wq vs teoría <10% con ρ = 0.5–0.8.
- H2M/M/c con pooling.
libre_en[c], primero libre, fila única. Criterio: vs Erlang C <10% en c = 2–4.
- H3Prioridades + K finita.
key (prio, arr), Pb y λef. Criterio: Little por clase + Erlang B en K = c.
- H4Escenarios + informe.
Réplicas pareadas R ≥ 8, IC de diferencias, tabla de dimensionamiento y veredicto con costo.
- Semilla fija
- Cada experimento declara semillas: re-correr da bit a bit lo mismo. Sin esto no hay defensa posible.
- Definición de terminado
- Hito = código + auditoría en verde + mini-informe. Sin verde no se avanza: el bug se muda con el código.
- Informe replicable
- Parámetros, (L, Wq, U, Pb), errores Little/Erlang, IC del duelo y decisión con precio. (Temas 38, 46–47).
- Fuera de v1
- Redes con bloqueo, expulsivas, animación: se anotan como trabajo futuro, no se colan en la entrega.
Por hitos
Integra temprano
Cada semana algo corre y audita. El riesgo se ve en H1, no la víspera.
Big-bang
Apuesta final
Todo junto al final: el bug del motor contamina prioridades y el informe nace muerto.
04 · Ejemplos
Tres casos a elegir (uno alcanza)
- 1Banco con turnos.
λ por ventana, S mixto, SLA Wq ≤ 4, dotación pico/valle + caja rápida. Duelo 3 vs 4.
- 2Guardia con triage.
3 clases PRIO + abandono de leves: Wq por clase, Little por clase, dotación por turno.
- 3API con autoscaling.
rps × latencia, pool por Little, SLA p95, tormenta de reintentos y regla de escala.
05 · Representación en Python
Esqueleto + suite de validación
El main en config y los asserts que hacen de juez: si esto corre en verde, el proyecto existe.
Python en tu navegador. El primero es el pipeline; el segundo, la suite que lo audita. Todo determinista.
# Esqueleto del proyecto: config -> simular -> auditar -> decidir
CONFIG = {"lam": 0.9, "mu": 0.5, "c": 3, "T": 500, "t0": 50,
"semillas": [101, 102, 103], "sla": (2.0, 0.8)}
PIPELINE = ["motor(H1)", "mmc(H2)", "prio+K(H3)", "duelo+informe(H4)"]
print(CONFIG)
print(" -> ".join(PIPELINE))
# Suite: M/M/1 exacto + Little del informe (tolerancias del Tema 43)
import math
def check(nombre, sim, teo, tol):
err = abs(sim-teo)/teo
print(f"{nombre}: {'OK' if err < tol else 'FALLA'} (err {err:.1%})")
check("Wq M/M/1", 2.02, 0.25/(0.5*0.25), 0.10)
check("Little", 2.0, (1/3)*6.0, 0.05)
print("Erlang C c=3 tabla 8.5/0.9/0.2: ver Temas 29-32")
06 · Exploración
Laboratorio: el dimensionador integrador
Tres casos del curso con su demanda, servicio y SLA. Elegí el caso, tu c y el crecimiento esperado: las barras dan P(SLA) por c = 1…6 con tu crecimiento aplicado; la corona es el mínimo que cumple y la banda el recomendado. Es el Tema 46 con los tres casos adentro.
Un laboratorio, tres defensas
P(Wq≤t) por c · con crecimiento
Elegí el caso y dimensioná con crecimiento.
Barras = P(SLA) por c con tu crecimiento; recta = objetivo; corona = mínimo; banda = recomendado +1.
Preguntas para explorar
- Banco con +20%: ¿cmín? ¿Tu c=3 cumple? ¿Recomendado?
- Guardia con +20%: ¿mínimo? ¿Qué cambia vs banco (t y objetivo)?
- Web con +50%: ¿mínimo? ¿Por qué el SLA duro encarece?
Ver respuestas sugeridas
- λ ≈ 1.08 (a ≈ 2.16): tu c=3 da ~77% (debajo del 80% por poco); cmín=4 (~97%), rec 5. El +20% se comió el margen.
- cmín=2 (~94%), rec 3: el t laxo (5 min) perdona aunque el objetivo sea 90%.
- λ = 1.65: cmín=6 (~96%), rec 6 (tope): el SLA duro 95% ≤ 1 min con rps altos pide pool sobrado.
07 · Comprensión
Confusiones frecuentes
«Más features, mejor nota»
La nota está en auditoría + veredicto + informe. Un M/M/1 validado con duelo sólido supera a una red sin números.
«Valido solo la media global»
Sin P0/L/Wq/Pb por clase no hay defensa: el jurado pregunta por el VIP, el pico y la fuga.
«Semillas después»
Sin semillas fijas no hay réplica ni pareo ni re-corrida: el experimento no existe para el jurado.
«El informe es el código comentado»
El informe decide (compra/no-compra) con tablas e intervalos: el código es el anexo que lo respalda.
08 · Práctica guiada
Ejercicios con Python
Ejercicio 1: alcance v1
Listá qué entra y qué no en 4 semanas. ¿Redes con bloqueo? ¿GUI?
# Entra: motor+M/M/c+PRIO+K+SLA+réplicas+informe. Fuera: bloqueo, expulsivas, GUI
print("v1 decidida: lo demás es futuro, no deuda")
Ver solución razonada
Ajusta a H1–H4: lo demás se anota como trabajo futuro con su experimento propuesto.
Ejercicio 2: matriz de validación
¿Qué chequeo por hito y con qué tolerancia?
# H1: Little<5%, Wq<10% | H2: ErlangC<10% | H3: Little/clase+B | H4: IC decide
print("Cada hito verde antes del siguiente")
Ver solución
La tabla de la sección 02 hecha checklist ejecutable (la suite del bloque Python).
Ejercicio 3: informe de una corrida
Escribí el encabezado replicable de tu caso.
Ver una posible respuesta
print("lam=0.9 mu=0.5 c=3 T=500 t0=50 sem=[101,102,103] N=430")
print("L=2.33 W=2.59 Wq=0.59 U=0.60 Little 1.2% Erlang 3% -> c=3 cumple 80/2")
Una línea que replica y decide: el resumen que el jurado lee primero.
09 · Síntesis y cierre
Ideas para llevarse del curso
- Eventos + reloj + FEL + rutinas = cualquier sistema discreto.
- λ, μ, c, K, disciplina: medir, clasificar (Kendall), predecir o simular.
- Little audita, Erlang predice, réplicas deciden, el costo firma.
- Warmup, T largo, semillas, informe: sin esto no hay número creíble.
- El proyecto es el curso compilado: motor, políticas, auditoría, veredicto.
Del evento observado al sistema dimensionado: a simular. ¡Buen proyecto!