import numpy as np
# 1. Definir os estados do clima e um mapeamento para índices numéricos
clima_estados = ['Ensolarado', 'Nublado', 'Chuvoso']
estado_para_indice = {estado: i for i, estado in enumerate(clima_estados)}
indice_para_estado = {i: estado for i, estado in enumerate(clima_estados)}
print(f"Estados do Clima: {clima_estados}")
print(f"Mapeamento Estado -> Índice: {estado_para_indice}")
print(f"Mapeamento Índice -> Estado: {indice_para_estado}"
# 2. Definir a matriz de transição de probabilidades
matriz_transicao = np.array([
[0.7, 0.2, 0.1], # De Ensolarado
[0.3, 0.4, 0.3], # De Nublado
[0.2, 0.3, 0.5] # De Chuvoso
])
print("Matriz de Transição:")
print(matriz_transicao)
# 3. Função para prever o próximo estado
def prever_proximo_estado(estado_atual_indice, matriz_transicao):
probabilidades = matriz_transicao[estado_atual_indice]
# np.random.choice seleciona um índice baseado nas probabilidades fornecidas
proximo_estado_indice = np.random.choice(len(probabilidades), p=probabilidades)
return proximo_estado_indice
# Exemplo rápido:
print(f"Próximo estado a partir de Ensolarado: {indice_para_estado[prever_proximo_estado(estado_para_indice['Ensolarado'], matriz_transicao)]}")
# 4. Função para simular o clima por N dias
def simular_clima(estado_inicial, num_dias, matriz_transicao, estado_para_indice, indice_para_estado):
historico_clima = [estado_inicial]
estado_atual_indice = estado_para_indice[estado_inicial]
for _ in range(num_dias - 1):
proximo_estado_indice = prever_proximo_estado(estado_atual_indice, matriz_transicao)
historico_clima.append(indice_para_estado[proximo_estado_indice])
estado_atual_indice = proximo_estado_indice
return historico_clima
# 5. Testando o modelo com um exemplo
estado_inicial = 'Ensolarado'
num_dias = 7
previsao_clima = simular_clima(estado_inicial, num_dias, matriz_transicao, estado_para_indice, indice_para_estado)
print(f"Previsão do tempo para os próximos {num_dias} dias começando com '{estado_inicial}':")
for i, estado in enumerate(previsao_clima):
print(f"Dia {i+1}: {estado}")