Procesos Estocásticos y Cadenas de Markov · Tema 06

Procesos en tiempo continuo

Tiempo real t ≥ 0 con cambios en cualquier instante: permanencias, saltos y simulación por eventos.

01 · Punto de partida

Entre paso y paso también pasa el tiempo

En el Tema 5 el tiempo avanzaba de a un paso: nada cambiaba entre n y n+1. Pero una llamada llega a las 9:03:27, una máquina falla un martes cualquiera a las 14:11. El tiempo continuo admite cambios en cualquier instante t ≥ 0.

La diferencia no es solo la unidad más fina: la simulación cambia de técnica. En vez de un for por pasos, se generan los instantes de salto y el estado queda fijo entre saltos.

  • ¿Cuándo ocurre el próximo cambio: en el paso 7 o en t = 4,32?
  • ¿Cuánto dura cada estado: la permanencia en 0 o en 1?
  • ¿Qué tan rápido ocurren los saltos: la tasa λ, μ?
  • ¿Evaluamos X(t) en cualquier t, no solo en enteros?

02 · Definición

¿Qué es un proceso continuo en el tiempo?

Todo proceso continuo combina tres piezas:

◔

Permanencia

Tiempo aleatorio en cada estado: cuánto dura «funciona» antes de fallar.

↯

Salto

El cambio instantáneo: 0 → 1 (falla), 1 → 0 (repara), N → N+1 (arribo).

λ

Tasa

Velocidad de los saltos: λ fallas por hora, μ reparaciones por hora.

Los Tₖ son los instantes de salto (aleatorios) y xₖ los estados visitados. Entre Tₖ y Tₖ₊₁ nada cambia: la trayectoria es una escalera.

Discreto frente a continuo: cambia el reloj y el bucle.
AspectoDiscreto (Tema 5)Continuo (este tema)
Relojn = 0, 1, 2… pasos fijost ≥ 0 real, saltos en T₁, T₂…
Buclefor n in range(N)while t < T: sortear espera, saltar
Pregunta típica¿X₅ vale?¿X(4,32) vale? ¿Cuánto duró el 0?

03 · Anatomía

Permanencias, reloj y muestreo

Cuatro ideas evitan confundir «continuo en el tiempo» con «continuo en los valores»:

Tiempo continuo
El reloj es real: los saltos caen en 2,17 o 9,03. No significa que X valga reales.
Estado discreto
Lo habitual aquí: X(t) ∈ {0, 1} o {0, 1, 2…} aunque t sea continuo. (Poisson y Markov continuas)
Permanencia
Tiempo en cada visita: se sortea con exponencial de tasa λ o μ. (Tema 12)
Muestreo
Mirar X(t) cada minuto es discretizar un continuo: útil, pero se pierden saltos intermedios.

Simular por pasos finos

Fácil pero aproximado

Avanza dt = 0,01 y sortea en cada rebanada. Funciona, pero desperdicia sorteos donde nada pasa.

Simular por eventos

Eficiente y exacto

Salta directo al próximo Tₖ sorteando la espera. Solo se trabaja donde algo cambia.

04 · Ejemplos

Continuos en el tiempo que simularás

Todos son escaleras: tramos fijos + saltos en instantes aleatorios:

Espera→Salto en Tₖ→Nuevo tramo
  1. 1
    Máquina funciona/falla.

    X(t) ∈ {0, 1}. Falla con tasa λ, se repara con tasa μ. (Laboratorio)

  2. 2
    Arribos acumulados.

    N(t) = 0, 1, 2… Solo sube de a 1 en cada Tₖ. (Poisson, Tema 8)

  3. 3
    Cola en tiempo real.

    Sube con llegadas, baja con servicios, en segundos reales.

  4. 4
    Stock con demanda continua.

    Baja de a unidades en instantes aleatorios; sube de golpe al reponer.

  5. 5
    Temperatura.

    Continua en tiempo y en valores: requiere otras técnicas (fuera del núcleo Markov).

05 · Representación en Python

El continuo se programa por eventos

En Python, un proceso continuo son dos listas: instantes Tₖ y estados xₖ. Las esperas se sortean con exponenciales: −ln(1−u)/tasa. Entre eventos, X(t) no cambia.

Python en tu navegador. Estos bloques se ejecutan localmente con Pyodide, sin instalar nada. Cambiá las tasas y observá las permanencias.

import random, math

def espera(tasa, u):
    # Sorteo exponencial: permanencia media 1/tasa.
    return -math.log(1 - u) / tasa

random.seed(7)
lam = 0.5  # fallas por hora: permanencia media 2 h en 0
print([round(espera(lam, random.random()), 2) for _ in range(5)])

Subí lam a 2,0: las esperas se acortan (media 0,5). La tasa manda la velocidad del reloj.

De esperas a trayectoria escalera

Alternamos 0 (funciona, tasa λ) y 1 (fallado, tasa μ) hasta el horizonte T:

import random, math

def simular_maquina(T, lam=0.5, mu=1.0, semilla=7):
    # Devuelve (tiempos, estados): X(t) constante entre tiempos.
    random.seed(semilla)
    t, x = 0.0, 0
    tiempos, estados = [0.0], [0]
    while t < T:
        tasa = lam if x == 0 else mu
        t += -math.log(1 - random.random()) / tasa
        if t > T:
            break
        x = 1 - x
        tiempos.append(round(t, 2))
        estados.append(x)
    return tiempos, estados

T, E = simular_maquina(10)
print(T)
print(E)

06 · Exploración

Laboratorio: una máquina que falla y se repara

Máquina 0 = funciona (falla con tasa λ), 1 = fallada (se repara con tasa μ). Cada fila es una réplica hasta el horizonte T: el tramo bajo es trabajo, el alto es parada. Subí λ y verás más cortes; subí μ y los cortes se acortan.

EXPERIMENTO 06

Permanencias y saltos en t real

0 → 1 con λ · 1 → 0 con μ · X(t) escalera

Los resultados numéricos aparecen debajo.
Disponibilidad (en 0)0 %
Fallas por réplica0,00
Teoría μ/(λ+μ)0 %
LecturaEstable

Con λ 0,50 y μ 1,00, la máquina trabaja 2 de cada 3 horas.

El eje horizontal es tiempo real: los saltos caen en decimales, no en enteros. La disponibilidad es la fracción de T en estado 0 promediada sobre las 5 réplicas.

Preguntas para explorar

  1. Con λ = 0,5 y μ = 1, ¿qué disponibilidad predice μ/(λ+μ)? ¿La simulada se acerca?
  2. Duplicá ambas tasas (λ = 1, μ = 2). ¿Cambia la disponibilidad? ¿Y la cantidad de fallas?
  3. Si mirás X(t) solo en enteros (muestreo), ¿podés perder una falla corta? ¿Qué implica?
Ver respuestas sugeridas
  1. 1/1,5 ≈ 66,7 %. Con 5 réplicas cae cerca (60–75 %); con más réplicas se estabiliza.
  2. La disponibilidad queda igual (2/3), pero hay el doble de fallas más cortas. Misma fracción, distinto ritmo.
  3. Sí: una falla entre dos enteros pasa invisible. Muestrear discretiza y puede ocultar eventos.

07 · Comprensión

Confusiones frecuentes

«Continuo significa valores reales»

No: aquí el reloj es continuo y los estados suelen ser discretos (0/1, conteos). Son dos continuidades distintas.

«Simular fino es simular continuo»

Un for con dt chico aproxima, pero sigue siendo discreto. El continuo exacto salta por eventos.

«La tasa es una probabilidad»

La tasa λ no está entre 0 y 1: son eventos por unidad de tiempo. La probabilidad vive en λ·dt chico, no en λ sola.

«Entre eventos no pasa nada»

Pasa lo más importante: el sistema permanece. La permanencia acumula disponibilidad, costo y espera.

08 · Práctica guiada

Ejercicios con Python

Ejercicio 1: evaluar X(t) en cualquier t

Ejecutá esta escalera y evaluá X en t = 2,5 y t = 4. Notá que t no es entero.

tiempos = [0.0, 1.2, 3.1, 3.8]
estados = [0, 1, 0, 1]

def X(t):
    x = estados[0]
    for Tk, xk in zip(tiempos, estados):
        if Tk <= t:
            x = xk
        else:
            break
    return x

print(X(2.5), X(4.0))
Ver solución razonada

Da 1 1: en 2,5 rige el salto de 1,2 (estado 1) y en 4,0 el de 3,8 (estado 1). X(t) se evalúa en cualquier real buscando el último Tₖ ≤ t.

Ejercicio 2: permanencia media

Sin ejecutar primero: con λ = 2, ¿qué permanencia media esperás en 0? Comprobala con 3000 sorteos.

import random, math

random.seed(3)
lam = 2.0
esperas = [-math.log(1 - random.random()) / lam for _ in range(3000)]
print("teórica:", 1 / lam)
print("simulada:", round(sum(esperas) / len(esperas), 3))
Ver solución

La teórica es 1/2 = 0,5. La simulada cae cerca (0,48–0,52): a mayor tasa, menor permanencia.

Ejercicio 3: disponibilidad simulada

Simulá la máquina hasta T = 100 con λ = 0,5 y μ = 1 y medí la fracción en 0. Compará con μ/(λ+μ).

Ver una posible respuesta
import random, math

def disponibilidad(T, lam=0.5, mu=1.0, semilla=11):
    random.seed(semilla)
    t, x, en_cero = 0.0, 0, 0.0
    while t < T:
        tasa = lam if x == 0 else mu
        dt = -math.log(1 - random.random()) / tasa
        proximo = min(t + dt, T)
        if x == 0:
            en_cero += proximo - t
        t = proximo
        if t < T:
            x = 1 - x
    return en_cero / T

print("teoría:", round(1.0 / 1.5, 3))
print("simulada:", round(disponibilidad(100), 3))

La teoría es 0,667 y la simulada cae cerca. Con T = 100 el ruido ya es chico; con T = 12 (laboratorio) fluctúa más.

09 · Síntesis

Ideas para recordar

  • Continuo = reloj real: X(t) escalera con saltos en Tₖ aleatorios.
  • Permanencia + salto + tasa describen toda la evolución.
  • Se simula por eventos (espera exponencial), no por pasos finos.
  • La tasa λ no es probabilidad: es velocidad (eventos por tiempo).
  • En Python: listas (tiempos, estados) y función X(t) para cualquier t.

En el próximo tema entraremos a los procesos de conteo: N(t) cuenta eventos y nunca baja.