Procesos Estocásticos y Cadenas de Markov · Tema 02

Estado de un sistema

Qué guardar en X(t) para resumir el pasado, poder simular el futuro y no cargar datos inútiles.

01 · Punto de partida

Del proceso a la foto que lo resume

En el Tema 1 definimos el proceso como la familia X(t). Pero en cada instante t, ¿qué número o etiqueta es X(t)? No es toda la historia del sistema: es una foto que resume lo necesario para seguir adelante.

Pensá en un videojuego guardado: el archivo no contiene todo lo que hiciste, sino lo justo para continuar jugando. Eso es el estado.

  • ¿Qué dato resume la situación actual sin ambigüedad?
  • ¿Qué podemos olvidar sin perder capacidad de predicción?
  • ¿El estado es un número, una etiqueta o un vector?
  • ¿Cuándo un estado está mal elegido?

02 · Definición

¿Qué es el estado?

Un buen estado cumple tres condiciones a la vez:

◉

Resume

Condensa la historia relevante. Ejemplo: clientes en cola ahora, no la lista de todos los que pasaron hoy.

➤

Permite seguir

Con X(t) y la regla de evolución alcanza para generar X(t+1). No hay que mirar más atrás.

◌

Es mínimo

No guarda de más. Si dos datos siempre van juntos, uno sobra y complica el modelo.

Cuando el estado cumple esto lo llamaremos estado markoviano (Tema 20): el futuro depende del presente, no de cómo llegamos a él. No todo recorte lo logra, como veremos en el laboratorio.

El mismo sistema admite estados buenos y malos.
SistemaMal estadoBuen estado
Cola de atenciónCuántos llegaron hoy (no dice cuántos quedan)Clientes en sistema ahora
InventarioVentas del mes (falta el stock actual)Stock actual (+ pedidos pendientes si los hay)
ServidorUptime total (no dice si está caído hoy)Modo actual: libre, ocupado, caído
Clima diarioSi llovió hace un mesEstado de hoy (y ayer, si hay inercia)

03 · Anatomía

Estado, observación y memoria

Para elegir bien conviene distinguir tres ideas que suelen mezclarse:

Estado X(t)
Lo que el modelo necesita para continuar: stock, cola, modo. Vive dentro del simulador. (Este tema)
Observación
Lo que medimos desde afuera: ticket promedio, alarma, temperatura. Puede ser ruidosa o parcial.
Memoria necesaria
Cuánto pasado condensa X(t). A veces basta el presente; a veces hay que agregar ayer o los pedidos en camino.
Espacio de estados S
Todos los valores posibles de X(t). Lo estudiaremos en el Tema 3.

Estado insuficiente

Olvida lo relevante

Solo el stock sin contar pedidos en camino: el simulador pide de más o de menos porque no ve lo que viene.

Estado suficiente

Recuerda lo justo

Stock + pedidos pendientes: con eso la regla de reposición se simula sin mirar el historial completo.

04 · Ejemplos

Estados que un programador puede codificar

El estado puede ser un entero, una etiqueta o un vector. Lo importante es que sea explícito y actualizable:

Sistema→Estado X(t)→Regla de paso
  1. 1
    Cola: clientes en sistema.

    X(n) = 0, 1, 2… Suma llegadas, resta atenciones, nunca baja de 0.

  2. 2
    Inventario: stock + pendientes.

    X(n) = (stock, en_camino). Sin el segundo componente, la reposición es ciega.

  3. 3
    Servidor: modo.

    X(n) ∈ {libre, ocupado, caído}. Tres etiquetas alcanzan para decidir.

  4. 4
    Batería: nivel.

    X(t) ∈ [0, 100]. Continuo y acotado: carga menos descarga, con topes.

  5. 5
    Racha: último + racha.

    Para rachas de éxitos, guardar solo el último resultado no alcanza: hay que guardar el conteo actual.

05 · Representación en Python

El estado es una variable, la regla es una función

En Python, el estado suele ser un entero, string, tupla o diccionario. La regla es una función paso(estado) que devuelve el estado siguiente. Si la función necesita más que el estado, falta estado.

Python en tu navegador. Estos bloques se ejecutan localmente con Pyodide, sin instalar nada. Podés editar los parámetros y volver a ejecutar para ver cómo responde el estado.

import random

def paso_cola(clientes, p_llega=0.4, p_atiende=0.5):
    # Estado: clientes en sistema. Regla: +1 si llega, -1 si se atiende.
    if random.random() < p_llega:
        clientes += 1
    if clientes > 0 and random.random() < p_atiende:
        clientes -= 1
    return clientes


random.seed(3)
x = 2
for n in range(6):
    x = paso_cola(x)
    print(n + 1, x)

Probá cambiar el estado inicial a 0 o a 10: la regla es la misma, la historia cambia porque el estado resume el pasado.

Cuando un número no alcanza

Si hay pedidos en camino, el stock solo no es suficiente. El estado pasa a ser un par (stock, en_camino):

def paso_inventario(estado, demanda=2, pedido_en_camino=0):
    # Estado suficiente: (stock, en_camino). Sin el segundo, no se puede seguir.
    stock, en_camino = estado
    stock = stock - demanda + en_camino
    if stock < 0:
        stock = 0
    return (stock, pedido_en_camino)


print(paso_inventario((8, 0), demanda=3))
print(paso_inventario((8, 5), demanda=3))

06 · Exploración

Laboratorio: el estado X(n) alcanza para seguir

Simulamos una cola con estado X(n) = clientes en sistema. Cada paso llega uno con probabilidad de llegada y se atiende uno con probabilidad de servicio. Movete los controles: si la llegada supera al servicio, la cola deriva; si no, se vacía y rebota en 0.

EXPERIMENTO 02

Cola: X(n+1) desde X(n)

X(n+1) = máx(0, X(n) + A(n) − S(n))

Los resultados numéricos aparecen debajo.
Media final (40 pasos)0,00
Réplicas vacías0 %
Máximo final0,00
LecturaEstable

Con llegada 0,40 y servicio 0,50, la cola tiende a vaciarse.

Cada línea es una historia de la cola partiendo del mismo X(0). La línea blanca es el promedio: muestra que el futuro depende del estado actual y de las probabilidades, no de la historia detallada.

Preguntas para explorar

  1. Con llegada 0,4 y servicio 0,5, ¿qué pasa si X(0) es 15 en vez de 2? ¿El efecto del inicio dura para siempre?
  2. Subí la llegada a 0,7 con servicio 0,5. ¿Qué le pasa a la media? ¿Cómo se llama ese régimen?
  3. Si solo guardaras cuántos llegaron hoy (y no cuántos quedan), ¿podrías simular el paso siguiente?
Ver respuestas sugeridas
  1. La cola alta se drena y tras varios pasos se parece a la que empezó en 2. El estado inicial se olvida: el proceso tiene memoria corta.
  2. La media crece sin cota: es una cola inestable (llegan más de los que se atienden).
  3. No: sin X(n) = clientes actuales no sabés si hay a quién atender. Ese dato no es un estado suficiente.

07 · Comprensión

Confusiones frecuentes

«El estado es lo que se mide»

Lo medido (alarma, ticket) puede ser parcial o ruidoso. El estado es lo que el modelo necesita, aunque no se mida directo.

«Más datos en el estado siempre es mejor»

Cada componente agrega dimensiones, parámetros y costo. El mejor estado es el mínimo que permite continuar la simulación.

«El estado inicial no importa»

Importa al principio, aunque muchos procesos lo olvidan con el tiempo. En horizontes cortos, X(0) decide casi todo.

«Estado y trayectoria son lo mismo»

El estado es la foto X(t); la trayectoria es la película x(0), x(1), … Una es un valor, la otra es una lista.

08 · Práctica guiada

Ejercicios con Python

Ejercicio 1: elegir el estado

Ejecutá este sistema de servidor con estados textuales. Luego agregá un tercer estado «caído» y razoná qué reglas faltan.

estado = "ocupado"
print("X(0) =", estado)
print("Espacio S =", ["libre", "ocupado", "caído"])
print("¿Alcanza el string para seguir?", estado in ["libre", "ocupado", "caído"])
Ver solución razonada

El string alcanza como contenedor, pero falta la regla de transición (Tema 23): con qué probabilidad se pasa de «ocupado» a «libre» o a «caído». El estado sin regla no simula.

Ejercicio 2: estado que rebota en 0

Sin ejecutar primero: con X(0) = 1, sin llegadas y servicio seguro por 3 pasos, ¿qué estados esperás? Comprobalo después.

def paso_cola_det(clientes, llega, atiende):
    clientes += llega
    if clientes > 0:
        clientes -= atiende
    return max(0, clientes)


x = 1
for _ in range(3):
    x = paso_cola_det(x, 0, 1)
    print(x)
Ver solución

Sale 0, 0, 0: en el primer paso se atiende al único cliente y luego la cola queda vacía. El máx(0, ·) es parte del estado: la cola no puede ser negativa.

Ejercicio 3: detectar estado insuficiente

Este inventario solo guarda stock y pierde los pedidos en camino. Mostrá con un ejemplo que dos situaciones con igual stock evolucionan distinto.

Ver una posible respuesta
def paso_inventario(estado, demanda=2, pedido_en_camino=0):
    stock, en_camino = estado
    stock = stock - demanda + en_camino
    return (max(0, stock), pedido_en_camino)


# Mismo stock (8), distinto en_camino: el futuro difiere.
print(paso_inventario((8, 0), demanda=3))
print(paso_inventario((8, 5), demanda=3))

Con el mismo stock 8, el primero cae a 5 y el segundo sube a 10. El stock solo no es suficiente: hay que ampliar el estado a (stock, en_camino).

09 · Síntesis

Ideas para recordar

  • El estado X(t) resume el pasado para simular el futuro sin historia completa.
  • Un buen estado resume, permite seguir y es mínimo.
  • Estado no es lo medido: es lo que el simulador necesita.
  • En Python, el estado es la variable que entra y sale de paso().
  • Si necesitás la historia para avanzar, ampliá el estado hasta que el presente alcance.

En el próximo tema estudiaremos el espacio de estados: el conjunto S de todos los valores que X(t) puede tomar.