Modelos y Simulación · Tema 14

Discretos y continuos

Eventos por pasos frente a cambio permanente: dos relojes para dos clases de sistemas.

01 · Punto de partida

Lo que salta y lo que fluye

Los clientes llegan de a uno: la cola salta. El agua entra sin pausa: el nivel fluye. Los modelos discretos cambian en instantes contables (eventos); los continuos cambian a cada momento (tasas).

  • ¿El estado cambia de a saltos o sin parar?
  • ¿Qué conviene contar: eventos o tiempo corrido?
  • ¿Con qué paso simulo el flujo sin romperlo?
  • ¿Dónde duele más el error: en el salto o en la tasa?

02 · Definiciones

Saltos y flujos

⋮

Discreto

El estado cambia en eventos: llega, sale, se rompe, se compra. Entre eventos, nada cambia.

∽

Continuo

El estado fluye con tasas: litros por minuto, interés por día. Siempre está cambiando.

⏱

Paso dt

El truco para simular flujos: avanzar de a pedacitos y suponer la tasa fija en cada uno.

Cada sistema pide su reloj.
SistemaTipoReloj natural
Fila de bancoDiscretoEventos: llegada, fin de atención
Inventario por unidadesDiscretoEventos: venta, reposición
Tanque con caudalesContinuoFlujo permanente en el tiempo
TemperaturaContinuoCambia a cada instante

03 · El reloj

Tres formas de avanzar el tiempo

  1. 1
    Por eventos.

    Saltar al próximo evento: ideal discreto, sin pasos vacíos. La agenda manda.

  2. 2
    Por paso fijo.

    Avanzar dt parejos: simple y versátil. El paso manda el error y el costo.

  3. 3
    Continuo exacto.

    Resolver la tasa con matemática (cuando se puede): sin pasos ni error de reloj.

Paso chico

Más fiel, más caro

Sigue mejor las curvas pero multiplica los cálculos. Rendimiento decreciente.

Paso grande

Barato y riesgoso

Pocos cálculos, pero puede saltar topes, oscilar o inventar historias.

Evento
Instante donde algo cambia: llegada, salida, ruptura.
Tasa
Velocidad de cambio: litros por minuto, clientes por hora.
Paso dt
Pedacito de tiempo simulado de una vez.
Método de Euler
Avanzar nuevo = actual + tasa × dt: simple y aproximado.

04 · Puentes

Discretizar flujos, suavizar eventos

Tasa continua→Elegir dt→Euler por pasos→Comparar y achicar

Todo flujo simulado en computadora se discretiza: la pregunta es con qué dt el error deja de importar. Y muchos discretos se suavizan con tasas promedio para estimar rápido. El Tema 15 mezclará ambos mundos.

05 · En Python

Eventos que saltan, Euler que fluye

Python en tu navegador. El discreto recorre eventos; el continuo aproxima la tasa con Euler.

def max_cola(llegadas, duracion):
    # Discreto por eventos: llegadas ordenadas, un servidor.
    libre, cola, pico = 0, 0, 0
    for t in llegadas:
        if t >= libre:
            libre = t + duracion
            cola = 0
        else:
            cola = cola + 1
            pico = max(pico, cola)
            libre = libre + duracion
    return pico


print(max_cola([0, 1, 2, 5], 2))

Euler: el flujo en pedacitos

def euler(n0, entrada, salida, dt, pasos):
    # Continuo aproximado: tasa fija durante cada dt.
    n = n0
    historia = []
    for t in range(pasos):
        n = n + (entrada - salida) * dt
        historia.append(round(n, 2))
    return historia


print(euler(10, 3, 2, 0.5, 6))

06 · Exploración

Laboratorio: el paso que miente

Un llenado que se frena solo (tasa proporcional a lo que falta). La curva blanca es la solución exacta; las otras, Euler con paso grueso y fino. Achicá el paso y mirá converger.

EXPERIMENTO 14

Euler contra la solución exacta

llenado con freno · 12 s

Los resultados numéricos aparecen debajo.
Exacto en t=1238,91
Euler fino39,05
Euler grueso39,84
Error grueso0,93

El paso fino casi calca la exacta; el grueso se desvía casi un punto.

Euler supone la tasa fija en cada paso: cuanto más largo el paso, más vieja la tasa y mayor el error.

Preguntas para explorar

  1. Con k = 0,8 y paso 3, ¿el grueso todavía parece un llenado? ¿Qué inventa?
  2. Bajá el paso grueso a 0,5. ¿Cuánto cae su error?
  3. ¿En qué casos usarías eventos y en cuáles Euler?
Ver respuestas sugeridas
  1. No: con k × dt = 2,4 el método oscila y diverge; inventa rebotes en vez de un llenado.
  2. Mucho: bajando a 0,5 el error cae varias veces. Medilo en el laboratorio.
  3. Eventos para saltos (colas, llegadas); Euler para flujos con tasas.

07 · Comprensión

Confusiones frecuentes

«Discreto es aproximado y continuo es exacto»

Ambos pueden ser exactos o aproximados: un modelo de eventos bien hecho es exacto, y Euler es una aproximación de un continuo.

«Paso más chico siempre es mejor»

Mejora hasta que el error del paso deja de mandar; después solo suma costo y errores de redondeo.

«Los eventos son casos especiales del paso fijo»

Al revés: el paso fijo muestrea; los eventos saltan exactamente a cada cambio. Para colas, eventos suele ganar.

«La tasa vale en todo el paso»

Eso supone Euler, y es falso cuando la tasa depende del nivel. Por eso el paso debe ser corto frente a la escala del sistema.

08 · Práctica guiada

Ejercicios con Python

Ejercicio 1: leer eventos

Con llegadas en 0, 1, 2 y 5 y atención de 2, ¿cuál es la cola máxima? Ejecutá y razoná cada evento.

def max_cola(llegadas, duracion):
    libre, cola, pico = 0, 0, 0
    for t in llegadas:
        if t >= libre:
            libre = t + duracion
            cola = 0
        else:
            cola = cola + 1
            pico = max(pico, cola)
            libre = libre + duracion
    return pico


print(max_cola([0, 1, 2, 5], 2))
Ver solución razonada

Da 3: en t = 0 arranca, en t = 1 y 2 se encola (pico 2) y en t = 5, todavía ocupado hasta las 8, llega a 3. Sin pasos vacíos: puro evento.

Ejercicio 2: Euler a mano

Calculá 6 pasos de Euler con n0 = 10, tasa neta 1 y dt = 0,5. ¿A dónde llega?

def euler(n0, entrada, salida, dt, pasos):
    n = n0
    historia = []
    for t in range(pasos):
        n = n + (entrada - salida) * dt
        historia.append(round(n, 2))
    return historia


print(euler(10, 3, 2, 0.5, 6))
Ver solución

Da [10.5, 11.0, 11.5, 12.0, 12.5, 13.0]: 6 pasos de media unidad avanzan 3 unidades de tiempo con tasa 1.

Ejercicio 3: elegir el reloj

Clasificá cada caso en eventos, paso fijo o continuo exacto: cola del banco, temperatura del tanque, interés mensual, llenado con freno.

Ver una posible respuesta
casos = {
    "cola del banco": "eventos",
    "temperatura del tanque": "paso fijo (Euler)",
    "interes mensual": "paso fijo (periodo dado)",
    "llenado con freno": "continuo exacto o Euler fino",
}
for c, r in casos.items():
    print(c, "->", r)

Los saltos piden eventos; los flujos, tasas. Y cuando la tasa tiene fórmula cerrada, lo exacto ahorra pasos.

09 · Síntesis

Ideas para recordar

  • Discreto suma eventos; continuo acumula tasas.
  • Eventos saltan sin pasos vacíos; Euler avanza dt con tasa congelada.
  • El dt es parámetro del experimento: se declara y se varía.
  • Paso grande con tasas que dependen del nivel inventa historias.
  • En Python: listas de eventos o bucles con tasa × dt.

En el próximo tema mezclaremos ambos mundos: modelos híbridos.