Modelos y Simulación · Tema 03

Concepto de simulación

Qué significa simular: ejecutar el modelo con escenarios, juntar historias y decidir sin intervenir el sistema real.

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.

Vocabulario mínimo de simulación.
TérminoSignificadoEjemplo
ModeloLas reglas del comportamientoLa función del tanque o de la cola
EscenarioLos datos de una prueba concretaEntrada 3, salida 2, 12 pasos
CorridaUna ejecución del modelo con un escenarioUna historia de 12 niveles
RéplicaRepetición con otra semilla de azarMisma cola, llegadas distintas
SimuladorEl programa que ejecuta y registraEl 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:

Pregunta→Escenarios→Corridas→Comparación
  1. 1
    Variar entradas.

    ¿Qué pasa con llegadas altas, medias y bajas?

  2. 2
    Variar parámetros.

    ¿Y con 2, 3 o 4 cajeros?

  3. 3
    Variar el inicio.

    ¿Importa arrancar con la cola vacía o llena?

  4. 4
    Variar la política.

    ¿Atender por orden de llegada o con prioridades?

  5. 5
    Repetir 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.

EXPERIMENTO 03

Cola: llegadas, atención y semilla

24 pasos · azar reproducible

Los resultados numéricos aparecen debajo.
Atendidos (24 pasos)24
Cola final0
Cola máxima2
LecturaFluye

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

  1. Mantené el escenario y cambiá solo la semilla del 1 al 9. ¿Cuánto varía la cola máxima?
  2. Poné atención 0. ¿Qué historia cuenta la simulación?
  3. ¿Qué escenario elegirías para decidir si hacen falta más cajeros?
Ver respuestas sugeridas
  1. Bastante: la cola máxima cambia entre réplicas. Mismo escenario, distintas historias: por eso hace falta repetir.
  2. Que nadie sale nunca: la cola crece sin cota, monótona. Es la historia de un sistema saturado.
  3. 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.