Modelos Continuos · Tema 38

Modelos híbridos

Flujos continuos con eventos discretos: la EDO anda y el evento la interrumpe.

01 · Punto de partida

La EDO anda, el evento interrumpe

La batería se descarga fluida y al llegar al 20 % salta la recarga; el tanque pierde continuo y cada lunes llega el camión; el termostato corta al llegar a 22 °C. Entre eventos manda la EDO; en el evento manda la regla discreta (sumar, recortar, conmutar).

Lo híbrido es el pan de cada día aplicado: ni todo flujo ni todo salto, cada parte con su naturaleza.

  • ¿Qué fluye entre eventos (EDO)?
  • ¿Qué dispara el evento (fecha, umbral, condición)?
  • ¿Qué cambia el evento (salto, reseteo, modo)?
  • ¿Cuántos eventos hay y cuánto cuestan?

02 · Definición

¿Qué es un modelo híbrido?

Dos motores con un árbitro:

∿

Flujo

La EDO entre eventos: dN/dt = −k·N, descarga, enfriamiento. Curva suave.

⚡

Evento

El salto: cada ΔT suma Q, al cruzar el umbral recarga a C. Punto anguloso.

◉

Disparo

Por tiempo (cada lunes) o por estado (N < 5): fecha fija o condición vigilada.

El simulador híbrido integra la EDO y vigila el disparo en cada paso: si cruza, aplica el salto y sigue.

Tres híbridos de manual.
SistemaFlujoEvento
Stock con camiónVenta −k·N continua.Cada ΔT suma Q.
Batería con recargaDescarga −k·N.Si N < 20, salta a 100.
TermostatoEnfría −k·(T − T_amb).Si T < 19 enciende, si > 21 apaga.
DosisElimina −λ·M.Cada 8 h suma dosis.

03 · Anatomía

Tiempo, umbral y salto

Todo híbrido se arma igual:

Evento por tiempo
Fecha fija: cada ΔT, cada lunes 8 h. Fácil de programar, ciego al estado.
Evento por umbral
Condición: N < mínimo, T > máximo. Vigilar cada paso con interpolación del cruce.
Salto o reseteo
N += Q, N = C, modo on/off: el estado cambia discontinuo, el tiempo no.
Modo
Encendido/apagado, cargando/usando: la EDO cambia según el modo (dos f alternadas).

Por tiempo

Camión de los lunes

Predecible y simple: el evento cae en fecha aunque el nivel esté alto. Puede rebalsar.

Por umbral

Recarga al 20 %

Eficiente y justo a tiempo: el evento espera al estado. Pide vigilar el cruce.

04 · Híbridos del curso

El mismo interruptor, cinco aparatos

Cada control on/off es híbrido:

Flujo f→Disparo→Salto
  1. 1
    Inventario.

    Venta fluida + camión semanal: sierra con techo.

  2. 2
    Batería.

    Descarga + recarga al 20 %: diente controlado.

  3. 3
    Termostato.

    Enfría/corta entre 19 y 21: ciclo límite.

  4. 4
    Fármaco.

    Elimina −λM + dosis cada 8 h: meseta terapéutica.

  5. 5
    Riego.

    Humedad que cae + lluvia o riego al umbral: verde intermitente.

05 · Representación en Python

Integrar, vigilar, saltar

En Python, el híbrido es un bucle con vigilante: integra el flujo y chequea el disparo en cada nodo.

Python en tu navegador. Estos bloques se ejecutan localmente con Pyodide, sin instalar nada. Bajá el umbral a 10 y observá que las recargas se espacian.

def simular_hibrido(n0=100.0, k=0.05, umbral=20.0, carga=100.0, t_final=60.0, dt=0.1):
    n, t, eventos = n0, 0.0, []
    historia = [(t, n)]
    while t < t_final - 1e-9:
        n = n + (-k * n) * min(dt, t_final - t)
        t += min(dt, t_final - t)
        if n <= umbral:
            n, eventos = carga, eventos + [round(t, 1)]
        historia.append((round(t, 1), round(n, 1)))
    return historia, eventos


hist, ev = simular_hibrido()
print("eventos:", ev[:5], "… total:", len(ev))

Recargas al cruzar 20: el flujo cae exponencial y el evento lo devuelve a 100.

Contar eventos y mínimos

El híbrido se evalúa por sus eventos, no solo por la curva:

hist, ev = simular_hibrido(umbral=30.0)
print("recargas:", len(ev), "mínimo:", min(n for _, n in hist))

06 · Exploración

Laboratorio: la batería que se rescata sola

Batería que se descarga con k y al cruzar tu umbral salta a 100 (puntos blancos). Subí el umbral y observá que las recargas se juntan; bajá k y observá que se espacian. El mínimo nunca baja del umbral: el evento cuida.

EXPERIMENTO 38

Flujo que cae, evento que salva

dN/dt = −k·N · si N ≤ umbral → 100

Los resultados numéricos aparecen debajo.
Recargas1
Período entre recargas32,19
Mínimo19,89
LecturaCuida el piso

Con k 0,05 y umbral 20 hay 1 recarga cada 32,19.

Cada diente es descarga exponencial + salto vertical: la firma del híbrido por umbral. El período sale de ln(100/umbral)/k.

Preguntas para explorar

  1. Con umbral 50, ¿las recargas se juntan o se separan? ¿El mínimo sube?
  2. Duplicá k con el mismo umbral. ¿El período se duplica o se parte?
  3. Si el umbral fuera 100 (lleno), ¿qué haría el simulador?
Ver respuestas sugeridas
  1. Se juntan (período ≈ 13,9): menos caída permitida, más rescates. El mínimo sube a 50.
  2. Se parte a la mitad: el período escala como 1/k. Más descarga, más eventos.
  3. Recargaría siempre: el evento se dispara en cada paso. Umbral = techo es bucle, no control.

07 · Comprensión

Confusiones frecuentes

«El salto es error numérico»

No: es física del evento (camión, recarga). Suavizarlo con dt fino no lo borra: lo respeta.

«Umbral y tiempo dan igual»

No: por tiempo recarga aunque sobre; por umbral solo cuando falta. El costo en eventos difiere.

«dt grueso alcanza»

Atraviesa el umbral sin verlo y recarga tarde: el cruce pide dt que resuelva la zona.

«Más eventos es más fiel»

Cada evento cuesta logística real (camión, dosis): el óptimo minimiza eventos cumpliendo el piso.

08 · Práctica guiada

Ejercicios con Python

Ejercicio 1: período a mano

De 100 a 20 con k = 0,05, ¿cuánto tarda la descarga? Verificá con ln(100/20)/k.

import math


print(round(math.log(100 / 20) / 0.05, 2))
Ver solución

32,19: el período del laboratorio sale del logaritmo, no de la simulación.

Ejercicio 2: umbral que junta eventos

Compará recargas en T = 60 con umbral 20 y 50 (k = 0,05). ¿Cuántas más hay?

print(simular_hibrido(umbral=20.0)[1])
print(simular_hibrido(umbral=50.0)[1])
Ver solución

Usá la función del bloque Python: con 20 hay 1 recarga; con 50 hay 4. Subir el piso multiplica los eventos.

Ejercicio 3: evento por tiempo

Agregá un camión Q = 30 cada 14 días sobre descarga k = 0,05. ¿El mínimo aguanta sobre 20?

Ver una posible respuesta
def con_camion(q=30.0, cada=14.0, k=0.05, t_final=60.0, dt=0.1):
    n, t, prox, mn = 100.0, 0.0, cada, 100.0
    while t < t_final - 1e-9:
        h = min(dt, t_final - t)
        n, t = n + (-k * n) * h, t + h
        if t >= prox - 1e-9:
            n, prox = n + q, prox + cada
        mn = min(mn, n)
    return round(mn, 1)


print(con_camion())

El mínimo queda en ≈ 49,6: el camión llega antes del umbral. Por tiempo sobra, por umbral ajusta.

09 · Síntesis

Ideas para recordar

  • Híbrido = EDO entre eventos + saltos en disparos (tiempo o umbral).
  • Por umbral ajusta eventos al estado; por tiempo ajusta a la agenda.
  • El período de recarga sale del log: ln(carga/umbral)/k.
  • En Python: bucle con vigilante que devuelve (historia, eventos).
  • dt debe resolver el cruce: si lo atraviesa sin verlo, recarga tarde.

En el próximo tema calibraremos: ajustar tasas a los datos reales.