01 · Punto de partida
Del modelo quieto al modelo en marcha
En el Tema 2 escribimos modelos: funciones con supuestos que representan un sistema. Pero una función sin ejecutar es solo una promesa. La simulación pone el modelo en marcha: lo alimenta con un escenario, avanza el tiempo paso a paso y registra la historia resultante.
Simular es responder «qué pasaría si…» sin pagar el costo de probar en la realidad: ¿qué pasa si llegan más clientes, si sube la tasa, si falla una máquina?
- ¿Qué escenario queremos probar?
- ¿Cuántos pasos avanzamos y cuántas veces repetimos?
- ¿Qué medimos en cada corrida?
- ¿Qué decisión toma mejor con estos resultados?
02 · Definición
¿Qué es una simulación?
Una simulación combina tres piezas:
Ejecutar
El modelo avanza en el tiempo: cada paso actualiza el estado con las reglas y los datos del escenario.
Observar
Cada corrida produce una historia: niveles, colas, costos. Nada de esto existía antes de ejecutar.
Decidir
Las historias se comparan entre escenarios para elegir: más cajeros, otro stock, otra política.
| Término | Significado | Ejemplo |
|---|---|---|
| Modelo | Las reglas del comportamiento | La función del tanque o de la cola |
| Escenario | Los datos de una prueba concreta | Entrada 3, salida 2, 12 pasos |
| Corrida | Una ejecución del modelo con un escenario | Una historia de 12 niveles |
| Réplica | Repetición con otra semilla de azar | Misma cola, llegadas distintas |
| Simulador | El programa que ejecuta y registra | El bucle con historia y métricas |
03 · Motivos y límites
¿Por qué simular en lugar de probar en el sistema?
Probar en el sistema real
Caro o imposible
Cuesta dinero, lleva meses, arriesga clientes o vidas, o el evento todavía no ocurrió.
Experimentar simulando
Barato y repetible
Miles de escenarios en segundos, sin riesgo, con control total de las condiciones.
- Costo
- Probar semáforos en la calle cuesta; probarlos simulados, casi nada.
- Tiempo
- Un año de inventario se simula en milisegundos.
- Riesgo
- Saturar un servidor real pierde clientes; saturar el modelo, no.
- Control
- En la simulación repetimos exactamente el mismo escenario o cambiamos una sola cosa.
04 · Qué se experimenta
Escenarios, parámetros y políticas
Un escenario es una combinación concreta de valores. Cambiar el escenario es hacer una pregunta distinta:
- 1Variar entradas.
¿Qué pasa con llegadas altas, medias y bajas?
- 2Variar parámetros.
¿Y con 2, 3 o 4 cajeros?
- 3Variar el inicio.
¿Importa arrancar con la cola vacía o llena?
- 4Variar la política.
¿Atender por orden de llegada o con prioridades?
- 5Repetir con azar.
¿El resultado fue suerte de una corrida o patrón estable?
05 · Simulación en Python
El bucle que hace historia
Un simulador mínimo es un bucle temporal que actualiza el estado y guarda la historia. Con el tanque del Tema 1 ya tenemos uno determinístico: misma entrada, misma salida.
Python en tu navegador. Estos bloques se ejecutan localmente con Pyodide, sin instalar nada. Editá los escenarios y compará historias.
def simular_tanque(nivel_inicial, entrada, salida, pasos):
nivel = nivel_inicial
historia = []
for t in range(pasos):
nivel = nivel + entrada - salida
if nivel < 0:
nivel = 0
historia.append(nivel)
return historia
print("Escenario A:", simular_tanque(10, 3, 2, 6))
print("Escenario B:", simular_tanque(10, 2, 3, 6))
Cuando hay azar: réplicas con semilla
Muchos sistemas tienen azar: no sabemos cuántos clientes llegarán cada minuto. El modelo usa números aleatorios y cada corrida da una historia distinta. Para que el experimento sea reproducible, fijamos la semilla del generador.
import random
def simular_cola(llegada_max, atencion, pasos, semilla=7):
# Supuestos: por paso llegan entre 0 y llegada_max clientes al azar.
rng = random.Random(semilla)
cola = 0
max_cola = 0
atendidos = 0
for t in range(pasos):
cola = cola + rng.randint(0, llegada_max)
turno = min(cola, atencion)
cola = cola - turno
atendidos = atendidos + turno
if cola > max_cola:
max_cola = cola
return {"atendidos": atendidos, "cola_final": cola, "max_cola": max_cola}
print(simular_cola(3, 2, 24, 7))
06 · Exploración
Laboratorio: una cola con azar controlable
Simulá 24 pasos de una fila: por paso llegan entre 0 y un máximo al azar y se atiende hasta la capacidad. Cambiá la semilla para ver otras historias del mismo escenario y decidí si una sola corrida alcanza.
Cola: llegadas, atención y semilla
24 pasos · azar reproducible
Con estos valores, la cola se mantiene bajo control.
Cada barra es la cola al final de un paso. La línea punteada marca la atención por paso: si las llegadas la superan de forma sostenida, la cola crece.
Preguntas para explorar
- Mantené el escenario y cambiá solo la semilla del 1 al 9. ¿Cuánto varía la cola máxima?
- Poné atención 0. ¿Qué historia cuenta la simulación?
- ¿Qué escenario elegirías para decidir si hacen falta más cajeros?
Ver respuestas sugeridas
- Bastante: la cola máxima cambia entre réplicas. Mismo escenario, distintas historias: por eso hace falta repetir.
- Que nadie sale nunca: la cola crece sin cota, monótona. Es la historia de un sistema saturado.
- El de hora pico (llegada máxima alta) con varias semillas, comparando cola máxima y atendidos entre dotaciones.
07 · Comprensión
Confusiones frecuentes
«La simulación predice el futuro exacto»
La simulación genera historias posibles bajo supuestos. Con azar, cada corrida difiere: lo que importa es el patrón entre muchas réplicas, no una sola.
«Una corrida alcanza»
En modelos estocásticos, una corrida puede ser suerte. Se necesitan réplicas con distintas semillas para estimar el comportamiento típico.
«Una animación es una simulación»
La animación muestra; la simulación experimenta. Si no hay modelo, escenarios ni métricas, es solo una visualización.
«Aleatorio significa sin control»
El azar en simulación es controlado: distribuciones elegidas y semillas fijadas permiten repetir y comparar experimentos.
08 · Práctica guiada
Ejercicios con Python
Ejercicio 1: comparar escenarios
Ejecutá el tanque con dos escenarios y decidí cuál conviene si el objetivo es terminar lo más alto posible.
def simular_tanque(nivel_inicial, entrada, salida, pasos):
nivel = nivel_inicial
historia = []
for t in range(pasos):
nivel = nivel + entrada - salida
if nivel < 0:
nivel = 0
historia.append(nivel)
return historia
a = simular_tanque(10, 3, 2, 6)
b = simular_tanque(10, 4, 1, 6)
print("A:", a[-1], "B:", b[-1])
print("Gana:", "A" if a[-1] > b[-1] else "B")
Ver solución razonada
A termina en 16 y B en 28: gana B. Dos corridas del mismo modelo con distintos escenarios permiten decidir sin tocar el sistema.
Ejercicio 2: réplicas del mismo escenario
Repetí la cola con semillas 1, 2 y 3. ¿La cola máxima es estable o depende de la suerte?
import random
def simular_cola(llegada_max, atencion, pasos, semilla):
rng = random.Random(semilla)
cola = 0
max_cola = 0
for t in range(pasos):
cola = cola + rng.randint(0, llegada_max)
cola = cola - min(cola, atencion)
if cola > max_cola:
max_cola = cola
return max_cola
for s in [1, 2, 3]:
print("semilla", s, "max_cola", simular_cola(3, 2, 24, s))
Ver solución
Las máximas son 4, 3, 3: el escenario es el mismo pero las historias varían. Conclusión: hacen falta réplicas; una sola corrida no describe al sistema.
Ejercicio 3: diseñar el experimento
Querés decidir entre atención 2 o 3 con llegada máxima 4. Escribí el experimento: mismas semillas para ambas capacidades y comparación de colas máximas.
Ver una posible respuesta
import random
def max_cola(llegada_max, atencion, pasos, semilla):
rng = random.Random(semilla)
cola = 0
pico = 0
for t in range(pasos):
cola = cola + rng.randint(0, llegada_max)
cola = cola - min(cola, atencion)
pico = max(pico, cola)
return pico
for s in [1, 2, 3, 4, 5]:
c2 = max_cola(4, 2, 24, s)
c3 = max_cola(4, 3, 24, s)
print(s, "atencion 2:", c2, "atencion 3:", c3)
Usar las mismas semillas en ambas capacidades aísla el efecto de la decisión: si con 3 la cola máxima cae en todas las réplicas, la mejora es del escenario, no de la suerte.
09 · Síntesis
Ideas para recordar
- Simular es ejecutar el modelo con escenarios para generar historias y decidir.
- Un experimento define modelo, escenarios, corridas, réplicas y métricas.
- Con azar, una sola corrida no alcanza: se comparan réplicas con semillas fijadas.
- La semilla hace reproducible el azar: mismo escenario y semilla, misma historia.
- En Python, el simulador es un bucle temporal que actualiza el estado y registra.
En el próximo tema distinguiremos con precisión modelo, simulación y sistema real, la tríada que organiza todo el curso.