Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

0
respostas

Mão na massa: identificando objetos com MobileNetV2

import gymnasium as gym
import numpy as np
import random
env = gym.make("FrozenLake-v1", is_slippery=True)

print("Número de estados:", env.observation_space.n)
print("Número de ações:", env.action_space.n)
num_states = env.observation_space.n
num_actions = env.action_space.n
q_table = np.zeros((num_states, num_actions))
alpha = 0.1
gamma = 0.99

epsilon = 1.0
epsilon_decay = 0.995
epsilon_min = 0.01

num_episodes = 5000
max_steps = 100
for episode in range(num_episodes):

state, info = env.reset()

for step in range(max_steps):
    if random.uniform(0, 1) < epsilon:
        action = env.action_space.sample()
    else:
        action = np.argmax(q_table[state])
    next_state, reward, terminated, truncated, info = env.step(action)
    old_value = q_table[state, action]

    next_max = np.max(q_table[next_state])

    q_table[state, action] = old_value + alpha * (
        reward + gamma * next_max - old_value
    )

    state = next_state

    if terminated or truncated:
        break
epsilon = max(epsilon_min, epsilon * epsilon_decay)

print("Treinamento concluído!")
test_episodes = 1000
successes = 0

for episode in range(test_episodes):

state, info = env.reset()

for step in range(max_steps):
    action = np.argmax(q_table[state])

    state, reward, terminated, truncated, info = env.step(action)

    if terminated or truncated:

        if reward == 1:
            successes += 1

        break

success_rate = (successes / test_episodes) * 100

print("\n===== RESULTADOS =====")
print(f"Episódios de teste: {test_episodes}")
print(f"Sucessos: {successes}")
print(f"Taxa de sucesso: {success_rate:.2f}%")

print("\nQ-Table aprendida:")
print(q_table)

Número de estados: 16
Número de ações: 4
Treinamento concluído!

===== RESULTADOS =====
Episódios de teste: 1000
Sucessos: 714
Taxa de sucesso: 71.40%

Q-Table aprendida:
[[5.69595494e-01 4.61401952e-01 4.42278972e-01 4.99593771e-01]
[8.62681660e-02 2.22603958e-02 5.26718068e-02 3.86456629e-01]
[5.13778122e-02 2.44497762e-01 3.89114700e-02 1.17863614e-01]
[1.20884598e-04 5.15183751e-02 1.27619729e-02 1.87036503e-02]
[5.84307610e-01 4.57934873e-01 2.78667519e-01 3.35292774e-01]
[0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]
[3.47653946e-01 1.23230633e-01 5.25422280e-02 6.12384425e-03]
[0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]
[3.12215441e-01 3.88891219e-01 4.20988947e-01 6.14643834e-01]
[5.05312724e-01 6.47025603e-01 3.96018817e-01 4.16813098e-01]
[6.24482535e-01 3.99621463e-01 2.64670993e-01 2.58655182e-01]
[0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]
[3.57085825e-01 5.13644191e-01 7.98895850e-01 6.50830171e-01]
[6.53273102e-01 9.37320370e-01 5.82125010e-01 6.41876290e-01]
[0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]

alpha = 0.3
gamma = 0.79

Número de estados: 16
Número de ações: 4
Treinamento concluído!

===== RESULTADOS =====
Episódios de teste: 1000
Sucessos: 0
Taxa de sucesso: 0.00%

Q-Table aprendida:
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]