Passo 1 - Definir os estados e a matriz de transição
import numpy as np
Estados possíveis do clima
estados = ["Ensolarado", "Nublado", "Chuvoso"]
Matriz de transição
Cada linha representa o estado atual
Cada coluna representa a probabilidade de ir para o próximo estado
matriz_transicao = np.array([
[0.7, 0.2, 0.1], # Ensolarado -> Ensolarado, Nublado, Chuvoso
[0.3, 0.4, 0.3], # Nublado -> Ensolarado, Nublado, Chuvoso
[0.2, 0.3, 0.5] # Chuvoso -> Ensolarado, Nublado, Chuvoso
])
Passo 2 - Implementar a lógica da Cadeia de Markov
def prever_clima(estado_inicial, dias):
clima_atual = estado_inicial
previsao = [clima_atual]
for _ in range(dias):
indice_atual = estados.index(clima_atual)
# Escolhe o próximo estado conforme as probabilidades
proximo_estado = np.random.choice(
estados,
p=matriz_transicao[indice_atual]
)
previsao.append(proximo_estado)
clima_atual = proximo_estado
return previsao
Passo 3 - Testar o modelo
estado_inicial = "Ensolarado"
dias = 10
resultado = prever_clima(estado_inicial, dias)
print("Previsão do clima:")
for dia, clima in enumerate(resultado):
print(f"Dia {dia}: {clima}")
Se hoje está Ensolarado, existe:
70% de chance de continuar Ensolarado.
20% de chance de ficar Nublado.
10% de chance de chover.
A cada dia, o programa "sorteia" o próximo clima usando essas chances.
Por exemplo:
Dia 0: Ensolarado
Dia 1: Ensolarado
Dia 2: Nublado
Dia 3: Chuvoso
Dia 4: Chuvoso
Dia 5: Nublado
Dia 6: Ensolarado
Dia 7: Ensolarado
Dia 8: Nublado
Dia 9: Chuvoso
Dia 10: Chuvoso
Isso é uma Cadeia de Markov, porque o clima de amanhã depende apenas do clima de hoje, e não dos dias anteriores. É como se o clima tivesse memória de apenas um dia.