Simulación de Eventos Discretos · Tema 19

Finalización de una simulación

Cuándo parar —por vacío, horizonte o conteo— y qué hacer con los que quedan adentro para no comparar peras con manzanas.

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.

T

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.

Cierres con en curso: qué se hace y qué se reporta.
CierreQué haceDenominadorCuándo
TruncarCorta en T: lo en curso queda a mediasT (tiempo fijo)Jornada que cierra puerta; L = área/T
VaciarSigue sin llegadas hasta N=0T + extra (tiempo real usado)“Atender hasta vaciar” post-cierre
Ignorar en cursoDescarta sus esperas parcialesSesga Wq a la baja: evitarNunca sin declararlo

03 · Reglas de cierre

Truncar o vaciar, pero escribirlo

llega T con N>0→¿trunco o vacío?→reporto coherente
  1. 1
    Truncar 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.

  2. 2
    Vaciar 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.

  3. 3
    Por 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

Cierres típicos por sistema.
SistemaParadaCierre
Banco 9–13 hHorizonte T=4 hVaciar: atiende a los de adentro
Web (SLA diario)Horizonte 24 hTruncar: lo de las 24:00 es mañana
Comparar 1 vs. 2 cajasConteo 1000 atendidosVaciar 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.

EXPERIMENTO 19

Cierre con regla escrita

truncar: paro en 12 · vaciar: dreno hasta N=0

Los resultados numéricos aparecen debajo.
En curso en 120
Tiempo extra vaciando0
Atendidos truncando0
Atendidos vaciando0

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

  1. Con A=2, S=3, ¿cuántos quedan en curso en 12? ¿Cuánto extra cuesta vaciar?
  2. Con A=4, S=2, ¿hay en curso? ¿Truncar y vaciar coinciden?
  3. Si dividieras el área del vaciado por 12 en vez de por 12+extra, ¿L sale alta o baja?
Ver respuestas sugeridas
  1. Varios en curso y varios pasos extra: el sistema llega cargado al cierre y drenar cuesta.
  2. Casi no: llega poco y se atiende rápido; ambas reglas dan lo mismo. El cierre importa cuando hay congestión.
  3. 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.