01 · Punto de partida
Cerrar la puerta no vacía el banco
A las 13:00 el banco cierra la puerta: no entra nadie más, pero adentro quedan 3 esperando y 1 en caja. ¿La simulación termina a las 13:00 con 3 “tirados”, o sigue hasta atenderlos a las 13:12? Ambas son válidas… si se declaran. Lo inválido es no decidirlo y que cada réplica haga una cosa.
Finalizar es declarar cuándo se para y qué se hace con lo en curso. Sin esa regla, dos programas “iguales” dan esperas distintas con los mismos datos.
- ¿Paro por tiempo, por cantidad atendida o porque se vació?
- ¿Los en curso se truncan, se completan o se ignoran?
- ¿El área y las esperas se dividen por T o por otro denominador?
- ¿Todas mis réplicas usan la misma regla?
02 · Definición
Tres paradas y dos cierres
Por vacío
FEL vacía: no hay futuro. Fin natural, sin en curso pendientes raros.
Por horizonte
Reloj > T o próximo > T: “simular 12”. Deja en curso que hay que tratar.
Por conteo
atendidos ≥ N: “1000 clientes”. Compara configuraciones por cliente, no por hora.
| Cierre | Qué hace | Denominador | Cuándo |
|---|---|---|---|
| Truncar | Corta en T: lo en curso queda a medias | T (tiempo fijo) | Jornada que cierra puerta; L = área/T |
| Vaciar | Sigue sin llegadas hasta N=0 | T + extra (tiempo real usado) | “Atender hasta vaciar” post-cierre |
| Ignorar en curso | Descarta sus esperas parciales | Sesga Wq a la baja: evitar | Nunca sin declararlo |
03 · Reglas de cierre
Truncar o vaciar, pero escribirlo
- 1Truncar en T.
Se para el reloj en T: el área se cobra hasta T, los en curso aportan espera parcial o se marcan “no completados”. L = área/T es comparable entre réplicas con igual T.
- 2Vaciar sin llegadas.
Se cierra la puerta (no más llegadas) y se sigue hasta N=0: tiempo extra variable. Mide “cuánto cuesta cerrar” y atiende a todos, pero cada réplica dura distinto.
- 3Por conteo.
Se para al atender N clientes (ej. 1000): cada réplica simula distinto T pero igual muestra. Ideal para comparar cajas (Tema 47).
- En curso
- En servicio + en cola a la hora del cierre. Truncar los deja a medias; vaciar los completa.
- Denominador coherente
- Truncado divide por T; vaciado por T+extra. Dividir vaciado por T infla L.
- Cierre de puerta
- Deja de agendar llegadas pero sigue salidas: el FEL se drena solo. Así se implementa vaciar.
- Reporte de cierre
- N final, en curso, tiempo extra, atendidos y regla usada. Sin esto el número es huérfano.
Truncar
Foto a las T en punto
T fijo, comparable, deja trabajo a medias. Bien para jornadas y L = área/T.
Vaciar
Película hasta el final
Atiende a todos, dura variable, mide costo de cierre. Bien para “dejar todo limpio”.
04 · Ejemplos
Cerrar cada mundo
| Sistema | Parada | Cierre |
|---|---|---|
| Banco 9–13 h | Horizonte T=4 h | Vaciar: atiende a los de adentro |
| Web (SLA diario) | Horizonte 24 h | Truncar: lo de las 24:00 es mañana |
| Comparar 1 vs. 2 cajas | Conteo 1000 atendidos | Vaciar la cola de los 1000 |
05 · Representación en Python
Parar con peek y cerrar con regla
El while mira fel[0] sin pasarse de T; el vaciado cierra la puerta y drena. Dos patrones, dos respuestas.
Python en tu navegador. El primero trunca en T; el segundo cierra la puerta y vacía. Contá atendidos en cada uno.
import heapq
T = 12.0
fel = [(2.0, "llegada"), (14.0, "salida")] # la salida cae fuera
heapq.heapify(fel)
while fel and fel[0][0] <= T: # peek: no pasarse
t, e = heapq.heappop(fel)
print("proceso", t, e)
print("trunco en", T, "| queda en FEL:", len(fel))
# Vaciar: cierro puerta (no más llegadas) y dreno salidas
import heapq
fel = [(11.0, "salida"), (13.0, "salida")]
heapq.heapify(fel)
puerta = False # True = no agendar llegadas
while fel:
t, e = heapq.heappop(fel)
print("atiendo hasta vaciar:", t, e)
print("vacío: todos completados, tiempo extra usado")
06 · Exploración
Laboratorio: truncar deja trabajo, vaciar lo termina
Llega uno cada A, S, 1 caja, puerta en T=12 (línea blanca). La curva lima es N(t); el tramo punteado naranja es el drenaje si se vacía sin llegadas. La ficha compara: en curso en 12, tiempo extra, atendidos truncando vs. vaciando.
Cierre con regla escrita
truncar: paro en 12 · vaciar: dreno hasta N=0
Mueve A y S para llenar el cierre.
Lima sólida: hasta las 12. Naranja punteada: drenaje sin llegadas hasta vaciar (puede pasar de 16). Blanca: puerta en 12.
Preguntas para explorar
- Con A=2, S=3, ¿cuántos quedan en curso en 12? ¿Cuánto extra cuesta vaciar?
- Con A=4, S=2, ¿hay en curso? ¿Truncar y vaciar coinciden?
- Si dividieras el área del vaciado por 12 en vez de por 12+extra, ¿L sale alta o baja?
Ver respuestas sugeridas
- Varios en curso y varios pasos extra: el sistema llega cargado al cierre y drenar cuesta.
- Casi no: llega poco y se atiende rápido; ambas reglas dan lo mismo. El cierre importa cuando hay congestión.
- Alta: el numerador trae trabajo extra pero el denominador no. Cada regla exige su denominador.
07 · Comprensión
Confusiones frecuentes
«Parar es cerrar»
Parar es detener el reloj; cerrar es decidir qué hacer con lo en curso y con qué denominador reportar. Parar sin cerrar deja números huérfanos.
«Vacío es lo mismo que horizonte»
Vacío termina solo y sin en curso; horizonte interrumpe con trabajo adentro. Mezclarlos compara un partido terminado con uno cortado al entretiempo.
«Los en curso no cuentan»
Cuentan como trabajo (área) aunque no como atendidos. Ignorarlos sesga Wq a la baja: los que más esperaban eran ellos.
«El extra del vaciado es gratis»
El extra es tiempo real atendiendo: horas extra del personal. Vaciar mide ese costo; truncar lo evita. Ninguno es gratis.
08 · Práctica guiada
Ejercicios con Python
Ejercicio 1: peek que no se pasa
Con próximo en 14 y T=12, ¿extraer o parar?
T, proximo = 12.0, 14.0
print("paro" if proximo > T else "extraigo", "| en curso: se aplica regla")
Ver solución razonada
Paro sin extraer: el 14 queda fuera. Lo que estuviera en curso a las 12 se trata con truncar o vaciar, nunca se ignora en silencio.
Ejercicio 2: contar en curso
Si llegaron 6 y salieron 4 a las 12, ¿en curso y atendidos truncando?
llegaron, salieron = 6, 4
print("en curso:", llegaron - salieron, "| atendidos truncando:", salieron)
Ver solución
2 en curso, 4 atendidos. Vaciando serían 6 atendidos con tiempo extra: otra respuesta con otra regla.
Ejercicio 3: denominador coherente
Área 30 hasta 12, más 9 de drenaje hasta 15: L truncando vs. vaciando.
Ver una posible respuesta
print("truncar L =", 30 / 12) # 2.5
print("vaciar L =", (30 + 9) / 15) # 2.6
Cada una con su denominador. Dividir 39 por 12 daría 3.25: L inventada por denominador ajeno.
09 · Síntesis
Ideas para recordar
- Parada por vacío (natural), horizonte T o conteo N; el peek evita pasarse.
- Cierre truncar (foto en T, divide por T) o vaciar (drena sin llegadas, divide por T+extra).
- En curso siempre se declara: nunca se ignora en silencio.
- Regla + denominador coherentes o los números no son comparables.
- El reporte trae T_usado, atendidos, en curso y regla.
En el próximo tema mediremos todo con la recolección de estadísticas: áreas, esperas y promedios honestos.