01 · Punto de partida
Del estado al conjunto de estados
En el Tema 2 elegimos el estado X(t): clientes en cola, stock, modo del servidor. Ahora damos un paso más: reunir todos los valores posibles en un solo conjunto S, el espacio de estados.
Sin S explícito no hay simulador serio: no podemos validar entradas, dimensionar una matriz P ni decidir si el sistema se satura, se vacía o deriva.
- ¿Qué valores puede tomar X(t) y cuáles nunca?
- ¿S es finito, infinito numerable o continuo?
- ¿Las etiquetas tienen orden (0, 1, 2…) o no (sol, lluvia)?
- ¿Cómo numeramos S para usarlo en código y matrices?
02 · Definición
¿Qué es el espacio de estados?
Todo S se describe con tres preguntas:
Elementos
Quiénes son: {libre, ocupado}, {0, 1, 2…}, [0, 100]. Sin lista, no hay validación.
Tamaño
Finito (6 caras), infinito numerable (0, 1, 2…) o continuo (temperatura real).
Índice
Numeración 0…K−1 para vectores y matrices. Las etiquetas se mapean a posiciones.
Esa pertenencia es la primera verificación de un simulador (Tema 35 del curso introductorio): si X(t) sale de S, la regla está mal o S está mal definido.
| Tipo de S | Ejemplo | Qué implica en código |
|---|---|---|
| Finito | {sol, lluvia}, {0, 1, 2, 3, 4, 5} | Lista cerrada; cabe en una matriz P de K × K. |
| Infinito numerable | {0, 1, 2…} clientes en cola sin tope | Enteros sin cota; se trunca para simular. |
| Continuo | [0, 100] nivel de batería | Reales; se discretiza o se modela por densidad. |
| Mixto / vector | (stock, en_camino), (cola, modo) | Producto cartesiano; el índice combina componentes. |
03 · Anatomía
Cardinalidad, orden y bordes
Tres distinciones evitan la mayoría de los errores de modelado:
- S finito
- K valores: caras, modos, niveles 0…K−1. Ideal para Markov con matriz. (Temas 19–28)
- S numerable
- 0, 1, 2… sin fin: conteos como N(t) en Poisson. En la práctica se corta en un máximo.
- S continuo
- Intervalos reales: temperatura, precio, nivel. Requiere discretizar o cambiar de técnica.
- Bordes
- Límites con regla propia: la cola no baja de 0, el depósito no pasa del tope. El borde es parte de S.
S discreto
Se cuenta
Estados separados: se puede enumerar, tabular P y dibujar el diagrama de flechas.
S continuo
Se mide
Infinitos valores entre dos marcas: se trabaja con rangos, topes y precisión.
04 · Ejemplos
Espacios que aparecen en todo el curso
Estos S volverán en Poisson, Markov y aplicaciones. Conviene fijarlos ahora:
- 1Moneda / servidor binario.
S = {0, 1} o {libre, ocupado}. El más chico útil: cabe en una P de 2 × 2.
- 2Dado / calificación.
S = {1,…,6}. Finito ordenado con bordes 1 y 6.
- 3Cola sin tope.
S = {0, 1, 2…}. Numerable: el laboratorio lo truncará en K−1.
- 4Depósito con tope.
S = {0,…,K}. Finito con bordes absorbentes o reflejantes según la regla.
- 5Clima + stock.
S = {sol, lluvia} × {0,…,K}. Vector mixto: el tamaño total es 2 × (K+1).
05 · Representación en Python
S es una lista, el índice es la posición
En Python, un espacio finito es una lista. Las etiquetas legibles viven en la lista y los cálculos usan índices 0…K−1: ese puente será la base de la matriz de transición (Tema 24).
Python en tu navegador. Estos bloques se ejecutan localmente con Pyodide, sin instalar nada. Podés editar S y volver a ejecutar para ver la validación.
S = ["libre", "ocupado", "caído"]
indice = {s: i for i, s in enumerate(S)}
def validar(estado):
return estado in indice
print("S =", S, "| K =", len(S))
print("índice de 'ocupado':", indice["ocupado"])
print("¿'roto' pertenece a S?", validar("roto"))
Probá agregar "mantenimiento" a S: ¿qué cambia en K y en los índices? ¿Qué habría que agrandar después?
Bordes explícitos
Un S acotado {0,…,K} necesita regla de borde. Sin ella, la caminata se escapa de S:
def paso_acotado(x, K, sube=True):
# S = {0, ..., K}. Reflejo: no se sale de S.
x = x + 1 if sube else x - 1
if x < 0:
x = 0
if x > K:
x = K
return x
K = 5
print([paso_acotado(x, K, sube=True) for x in [4, 5]])
print([paso_acotado(x, K, sube=False) for x in [0, 1]])
06 · Exploración
Laboratorio: vivir dentro de un S finito
Caminata en S = {0, …, K−1} con reflejo en los bordes: si intenta salir, se queda en el borde. Cambiá el tamaño K y observá cómo el mismo azar produce historias distintas según el espacio que lo contiene.
S finito con bordes reflejantes
X(n+1) = reflejo(X(n) ± 1) en {0, …, K−1}
Con K 6, las trayectorias rebotan entre 0 y 5.
Las líneas horizontales grises son los estados de S. Ninguna trayectoria puede salir de la franja: los bordes la devuelven. Con K chico el borde manda; con K grande casi no se toca.
Preguntas para explorar
- Con K = 2, ¿cuántos valores puede tomar X(n)? ¿Qué proceso de 2 estados conocés?
- Con K = 12 y X(0) = 3, ¿se tocan los bordes en 40 pasos? ¿Qué cambia si X(0) = 11?
- Si quitás el reflejo del código, ¿sigue valiendo X(n) ∈ S?
Ver respuestas sugeridas
- Solo {0, 1}: es el caso binario (moneda, libre/ocupado). Todo cabe en una matriz 2 × 2.
- Desde 3 casi no se llega a 11 en 40 pasos; desde 11 el borde superior se toca seguido. El inicio importa en horizontes cortos.
- No: sin reflejo la caminata sale de S y la pertenencia X(n) ∈ S se rompe. El borde es parte del modelo.
07 · Comprensión
Confusiones frecuentes
«El espacio es el estado actual»
El estado es un elemento x ∈ S; el espacio es todo el conjunto S. Confundirlos es confundir un habitante con la ciudad.
«Las etiquetas ya son índices»
«Caído» no es el 2 hasta que lo numerás. Sin el mapeo etiqueta → 0…K−1 no hay vectores ni matrices.
«Infinito se programa igual»
No: {0, 1, 2…} se trunca en un K con regla de borde declarada. Infinito en el papel, finito en la máquina.
«El borde es un detalle»
El borde decide saturaciones, vaciados y absorciones. Dos modelos con igual interior y distinto borde son distintos.
08 · Práctica guiada
Ejercicios con Python
Ejercicio 1: describir S
Ejecutá este espacio mixto y calculá su tamaño total. Luego agregá un modo y recalculá.
climas = ["sol", "lluvia"]
K = 6 # stock 0..5
S = [(c, s) for c in climas for s in range(K)]
print("K por clima:", K)
print("|S| =", len(S))
print(S[:3])
Ver solución razonada
El tamaño es 2 × 6 = 12. Si agregás «nublado», pasa a 3 × 6 = 18. Los espacios producto crecen rápido: por eso conviene el estado mínimo (Tema 2).
Ejercicio 2: validar pertenencia
Sin ejecutar primero: con S = {0,…,5}, ¿qué devuelve validar cada valor? Comprobalo después.
S = list(range(6))
def validar(x):
return x in S
print(validar(5))
print(validar(6))
print(validar(-1))
Ver solución
Devuelve True, False, False: 5 es el borde superior válido, 6 ya está fuera y −1 también. La pertenencia es la primera verificación del simulador.
Ejercicio 3: mapear etiquetas a índices
Construí el mapeo para S = {libre, ocupado, caído} y usalo para contar visitas por índice.
Ver una posible respuesta
S = ["libre", "ocupado", "caído"]
indice = {s: i for i, s in enumerate(S)}
visitas = [0] * len(S)
for obs in ["libre", "ocupado", "ocupado", "caído", "libre"]:
visitas[indice[obs]] += 1
print(S)
print(visitas)
Da [2, 2, 1]: 2 libres, 2 ocupados, 1 caído. Este vector de conteos será la base de π(n) y de la matriz P.
09 · Síntesis
Ideas para recordar
- S reúne todos los valores posibles: X(t) ∈ S siempre.
- S puede ser finito, numerable o continuo; el código trabaja con finitos o truncados.
- Las etiquetas se mapean a índices 0…K−1 para vectores y matrices.
- Los bordes (0, topes) llevan regla propia y son parte del modelo.
- Sin S explícito no se puede validar ni dimensionar el simulador.
En el próximo tema estudiaremos la evolución aleatoria en el tiempo: trayectorias, incrementos y cómo el presente genera el futuro.