import numpy as np
# Definimos los estados posibles del clima:
estados = ["Soleado", "Nublado", "Lluvioso"]
# A continuación, creamos la matriz de transición, que representa las probabilidades de cambio de un estado a otro:
matriz_transicion = [
[0.8, 0.15, 0.05], # Transiciones desde "Soleado"
[0.2, 0.6, 0.2], # Transiciones desde "Nublado"
[0.25, 0.25, 0.5] # Transiciones desde "Lluvioso"
]
# Establecemos el estado inicial y el número de días para los cuales queremos predecir el clima:
estado_inicial = "Soleado"
numero_dias = 10
# Para facilitar la conversión entre el nombre del estado y su índice en la matriz, definimos una función:
# es decir Definimos una función para obtener el índice de un estado dado:
def obtener_indice_estado(estado):
return estados.index(estado)
# Ahora, creamos la función principal que realizará la predicción del clima:
# Esta función genera el pronóstico.
def predecir_clima(estado_inicial, numero_dias):
estado_actual = estado_inicial
# Comienza guardando el primer día.
pronostico = [estado_actual]
for _ in range(numero_dias - 1):
# Obtener el índice del estado actual para acceder a la matriz de transición indice_actual = obtener_indice_estado(estado_actual)
# Obtener las probabilidades de transición para el estado actual probabilidades = matriz_transicion[indice_actual]
# Elegir el siguiente estado basado en las probabilidades siguiente_estado = np.random.choice
indice_actual = obtener_indice_estado(estado_actual)
probabilidades = matriz_transicion[indice_actual]
# Aquí ocurre la simulación. Se elige el siguiente estado de forma aleatoria según las probabilidades de transición.
siguiente_estado = np.random.choice(
estados,
p=probabilidades
)
# se Agregar al pronóstico
pronostico.append(siguiente_estado)
# El siguiente estado se convierte en el actual para la próxima iteración
estado_actual = siguiente_estado
return pronostico
# Finalmente, ejecutamos la función y mostramos el pronóstico:
# Genera el pronóstico completo. Se simula el clima para cada día, y se almacena en la lista 'pronostico'.
pronostico = predecir_clima(estado_inicial, numero_dias)
print("*" * 50)
print(" PREDICCION DEL CLIMA - CADENA DE MARKOV")
print("*" * 50)
print(f" Estado inicial: {estado_inicial}")
print(f" Días a predecir: {numero_dias}\n")
print(" Pronóstico para los próximos dias:")
print("*" * 50)
# Mostramos cada día con su predicción. enumerate() agrega el número de día. start=1 hace que el conteo comience en 1 en lugar de 0.
for dies, estado in enumerate(pronostico, start=1):
print(f"Día {dies}: {estado}")