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.
| Sistema | Flujo | Evento |
|---|---|---|
| Stock con camión | Venta −k·N continua. | Cada ΔT suma Q. |
| Batería con recarga | Descarga −k·N. | Si N < 20, salta a 100. |
| Termostato | Enfría −k·(T − T_amb). | Si T < 19 enciende, si > 21 apaga. |
| Dosis | Elimina −λ·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:
- 1Inventario.
Venta fluida + camión semanal: sierra con techo.
- 2Batería.
Descarga + recarga al 20 %: diente controlado.
- 3Termostato.
Enfría/corta entre 19 y 21: ciclo límite.
- 4Fármaco.
Elimina −λM + dosis cada 8 h: meseta terapéutica.
- 5Riego.
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.
Flujo que cae, evento que salva
dN/dt = −k·N · si N ≤ umbral → 100
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
- Con umbral 50, ¿las recargas se juntan o se separan? ¿El mínimo sube?
- Duplicá k con el mismo umbral. ¿El período se duplica o se parte?
- Si el umbral fuera 100 (lleno), ¿qué haría el simulador?
Ver respuestas sugeridas
- Se juntan (período ≈ 13,9): menos caída permitida, más rescates. El mínimo sube a 50.
- Se parte a la mitad: el período escala como 1/k. Más descarga, más eventos.
- 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.