Simulación de Eventos Discretos · Tema 05

Entidades

Quiénes circulan por el modelo —clientes, trabajos, piezas— y quiénes los reciben —servidores, colas, máquinas— con su ciclo de vida completo.

01 · Punto de partida

Actores y escenario

En el banco hay dos clases de “cosas”: las personas, que llegan, esperan, son atendidas y se van; y la caja con su fila, que estaba antes y seguirá después. Si las mezclás en una sola bolsa, tu programa no sabrá qué se crea, qué espera ni qué se libera.

La distinción es teatral: las entidades dinámicas son los actores que entran y salen (clientes, requests, piezas); las entidades estáticas son el escenario que permanece (servidores, colas, máquinas). Los eventos cuentan qué les pasa a los actores; el estado resume dónde está cada uno.

  • ¿Qué se crea y se destruye durante la corrida?
  • ¿Qué estaba en t=0 y seguirá en t=fin?
  • ¿Cada actor tiene identidad propia o son masa anónima?
  • ¿Por qué etapas pasa un actor desde que entra hasta que sale?

02 · Definición

Las que fluyen y las que quedan

●

Dinámica

Temporal, contable, con historia: cliente C7, request R12, pieza P3. Se crea en una llegada y se destruye en una salida.

▣

Estática

Permanente en la corrida: caja 1, worker 2, cola principal. No nace ni muere: se ocupa y se libera.

🏷

Identidad

Cada dinámica lleva ID único (C1, C2…). Sin ID no hay esperas individuales ni prioridades ni trazabilidad.

El estado global del Tema 4 (N, ocupado) es un resumen numérico; las entidades son el detalle nominal: quién es cada uno de esos N y cuánto lleva esperando. Para contar basta N; para medir esperas por cliente o dar prioridades hacen falta entidades con ID.

Dinámicas frente a estáticas: quién es quién.
AspectoEntidad dinámicaEntidad estática
EjemplosCliente, request, paciente, piezaCaja, worker, máquina, cola
Nace / muereSí: llegada / salidaNo: se ocupa / libera
Se cuentaUno por uno (C1, C2…)Por capacidad (c=3 workers)
Lleva atributosSí: llegada, prioridad, tipo (Tema 6)Sí: estado libre/ocupado, cola asociada

03 · Ciclo de vida

De la puerta de entrada a la de salida

Toda dinámica recorre el mismo camino con bifurcaciones. Dibujalo antes de programar: cada flecha es un evento o una condición:

llega (se crea)→¿servidor libre?→espera o se sirve→sale (se destruye)
  1. 1
    Crear.

    La llegada fabrica la entidad con ID y hora de nacimiento: C7 nació en t=8. Nace en algún lugar (cola o servicio).

  2. 2
    Esperar o servir.

    Si hay servidor libre → directo a servicio; si no → a la cola. Esta decisión es el evento condicionado “inicio”.

  3. 3
    Ser servida.

    Ocupa una estática (caja, worker) durante S. La estática pasa a “ocupada”.

  4. 4
    Salir.

    Libera la estática, registra su espera y vida, y se destruye (o migra a otra cola en redes, Tema 40).

Transacción
Sinónimo de entidad dinámica en muchos simuladores: “la que realiza un recorrido”. Cliente = transacción del banco.
Recurso
Entidad estática con capacidad limitada que las dinámicas compiten por usar: cajas, workers. (Tema 7)
Cola
Entidad estática que alberga dinámicas en espera con una disciplina (FIFO…). (Temas 8 y 25)
ID y trazabilidad
Sin ID solo hay conteos; con ID hay historias (“C7 esperó 4, se atendió en caja 2”). Las estadísticas del Tema 20 exigen IDs.

Solo conteo (N)

Barato pero ciego

Sabés que hay 5, pero no quién espera más ni a quién priorizar. Alcanza para promedios gruesos.

Con entidades (IDs)

Medible y priorizable

Sabés que C7 lleva 6 esperando y es prioritario. Cuesta una lista, pero habilita Wq, prioridades y redes.

04 · Ejemplos

Quién circula en cada mundo

Reparto de actores y escenario por sistema.
SistemaDinámicas (fluyen)Estáticas (permanecen)
BancoClientes C1, C2…Cajas, fila principal
Servidor webRequests R1, R2…Workers, cola de espera
FábricaPiezas P1, P2…Máquinas A y B, buffers
Guardia médicaPacientes por triageMédicos, boxes, sala de espera
PeajeVehículosCabinas, carriles
  1. 1
    Banco.

    C7 llega en 8, espera tras C5 y C6, se sirve en caja 1 de 10 a 13, sale. Caja 1 sigue para C8.

  2. 2
    Web.

    R12 llega, encuentra 3 workers ocupados, espera 40 ms, se procesa 120 ms, responde y muere.

  3. 3
    Fábrica.

    P3 nace en corte, espera buffer, se mecaniza, migra a pintura: la misma dinámica visita dos estáticas.

05 · Representación en Python

La entidad es un dict con nacimiento

Cada dinámica es un diccionario con id y llegada como mínimo; las estáticas son otra estructura con ocupado. Las listas cola y en_servicio dicen dónde está cada una.

Python en tu navegador. El primer bloque crea entidades; el segundo les da el ciclo completo con una caja. Cambiá tiempos y observá quién espera.

# Dinámicas: nacen con id y hora. Estáticas: permanecen.
cola = [
    {"id": "C5", "llegada": 4.0},
    {"id": "C6", "llegada": 6.0},
    {"id": "C7", "llegada": 8.0},
]
caja = {"nombre": "caja 1", "ocupado": True}

print("en cola:", [c["id"] for c in cola])
print("caja ocupada:", caja["ocupado"])
# Ciclo: llega C7 con caja ocupada -> espera; al liberarse -> se sirve 3
S = 3
reloj = 8.0
entidad = {"id": "C7", "llegada": 8.0}
caja_libre_en = 10.0  # la caja se libera a las 10

if reloj < caja_libre_en:
    print(entidad["id"], "espera", round(caja_libre_en - reloj, 1))
    inicio = caja_libre_en
else:
    inicio = reloj
fin = inicio + S
print("se sirve de", inicio, "a", fin, "| espera:", round(inicio - entidad["llegada"], 1))

06 · Exploración

Laboratorio: seguir a cada cliente por su ID

Llega uno cada A (C1, C2…) más N(0) iniciales (C0…), cada atención dura S en una caja. Mové inspeccionar en Tp y mirá el plano: a la izquierda la cola con sus IDs y lo que llevan esperando; a la derecha la caja con quien se sirve. Debajo, el censo completo.

EXPERIMENTO 05

Actores sobre el escenario

cada ● tiene id, llegada, inicio y fin

Los resultados numéricos aparecen debajo.
En sistema0
Esperando0
En servicio0
Ya salieron0

Mueve Tp para seguir a cada entidad.

Círculos lima: en cola con su ID y espera acumulada. Rectángulo lima: en servicio con su ID. Grises: ya salieron (no están, pero se cuentan).

Preguntas para explorar

  1. Con A=2, S=3, N(0)=1 e Tp=6, ¿quién está en servicio y quiénes esperan? ¿Cuánto lleva esperando el primero de la fila?
  2. Llevá Tp a 12. ¿Cuántas entidades se crearon en total? ¿Cuántas siguen y cuántas salieron?
  3. ¿Qué pierde el modelo si borra los IDs y solo guarda N? ¿Qué conserva?
Ver respuestas sugeridas
  1. Entidades: C0 (t=0), C1 (2), C2 (4), C3 (6). Con S=3: C0 sale en 3, C1 de 3 a 6, en Tp=6 C1 termina y C2 entra; esperan C2 (llegó en 4, lleva 2) y C3 (llegó en 6, lleva 0). El laboratorio lo muestra con IDs.
  2. Se crearon 1 inicial + 6 llegadas (2,4,6,8,10,12) = 7. A las 12 varias ya salieron y 2–3 siguen según S: el censo lo confirma.
  3. Pierde esperas individuales, prioridades y trazabilidad; conserva conteos y promedios gruesos. Para Wq por cliente hacen falta IDs.

07 · Comprensión

Confusiones frecuentes

«La cola es una entidad dinámica»

La cola es estática: permanece toda la corrida y alberga dinámicas. Lo que fluye son los clientes, no la fila.

«Con contar N alcanza para todo»

Para contar sí; para medir esperas individuales, dar prioridades o seguir piezas por el taller, no. Ahí hacen falta entidades con ID.

«El servidor es una entidad dinámica porque trabaja»

Trabaja pero no circula: se ocupa y se libera en el mismo lugar. Es estática de tipo recurso.

«Los IDs son decoración»

Sin IDs no hay “espera de C7” ni “C7 era prioritario”. Reutilizar o perder IDs corrompe estadísticas sin error visible.

08 · Práctica guiada

Ejercicios con Python

Ejercicio 1: fabricar entidades

Creá 3 clientes con llegadas en 2, 4 y 6 y listá sus IDs.

llegadas = [2.0, 4.0, 6.0]
entidades = [{"id": f"C{i+1}", "llegada": t} for i, t in enumerate(llegadas)]
print([e["id"] for e in entidades])
print(entidades[2])
Ver solución razonada

IDs C1, C2, C3 con sus horas. La entidad nace como dato antes de entrar a la cola: primero se crea, después se ubica.

Ejercicio 2: ubicar a cada una

Con caja libre en t=10, ¿quién espera y quién entra directo si llegan en 8 y 11?

libre_en = 10.0
for cid, t in [("C7", 8.0), ("C8", 11.0)]:
    print(cid, "->", "espera" if t < libre_en else "directo a servicio")
Ver solución

C7 (t=8) espera 2 hasta las 10; C8 (t=11) entra directo. La misma entidad, distinto destino según el estado de la estática.

Ejercicio 3: ciclo completo con espera medida

Simulá una entidad que llega en 8, espera hasta 10 y se sirve 3. Calculá espera y salida.

Ver una posible respuesta
e = {"id": "C7", "llegada": 8.0}
inicio = max(e["llegada"], 10.0)
fin = inicio + 3
e.update({"inicio": inicio, "fin": fin, "espera": inicio - e["llegada"]})
print(e)  # espera 2.0, fin 13.0

La entidad acumula su historia en su dict: llegada, inicio, fin y espera derivada. Esa es la materia prima de las estadísticas.

09 · Síntesis

Ideas para recordar

  • Dinámicas fluyen (clientes, requests, piezas); estáticas permanecen (cajas, workers, colas).
  • Toda dinámica vive: crear → esperar/servir → salir; cada paso lo marca un evento.
  • Sin ID hay conteo; con ID hay historias, esperas individuales y prioridades.
  • En Python: dict por entidad con id y llegada; listas cola y en servicio.
  • El estado N resume; las entidades detallan: se necesitan mutuamente.

En el próximo tema agregaremos los atributos: los datos que lleva cada entidad para decidir y medir.