Exercice 1 : Expolartion de l'Environnement FrozenLake¶
Objectif : Charger l'environnement FrozenLake-v1 et explorer les espaces d'états et d'actions. Exécuter des actions aléatoires pour observer les transitions et les récompenses.
In [1]:
# Charger l'environnement FrozenLake
import gymnasium as gym
# Créer l'environnement FrozenLake avec des transitions glissantes
env = gym.make("FrozenLake-v1", is_slippery=True, render_mode="human")
env.reset()
# Afficher les informations de l'espace d'états et d'actions
print("Nombre d'états:", env.observation_space.n)
print("Nombre d'actions:", env.action_space.n)
# Exécuter une boucle où l'agent prend des actions aléatoires
num_episodes = 10
for episode in range(num_episodes):
state = env.reset()[0] # Réinitialiser l'environnement
done = False
while not done:
action = env.action_space.sample() # Action aléatoire
next_state, reward, done, truncated, info = env.step(action)
print(f"Épisode {episode+1} - État: {state}, Action: {action}, Récompense: {reward}")
state = next_state
env.close()
Nombre d'états: 16 Nombre d'actions: 4 Épisode 1 - État: 0, Action: 1, Récompense: 0.0 Épisode 1 - État: 1, Action: 3, Récompense: 0.0 Épisode 1 - État: 0, Action: 2, Récompense: 0.0 Épisode 1 - État: 0, Action: 3, Récompense: 0.0 Épisode 1 - État: 1, Action: 1, Récompense: 0.0 Épisode 1 - État: 0, Action: 1, Récompense: 0.0 Épisode 1 - État: 1, Action: 0, Récompense: 0.0 Épisode 2 - État: 0, Action: 1, Récompense: 0.0 Épisode 2 - État: 1, Action: 1, Récompense: 0.0 Épisode 2 - État: 2, Action: 1, Récompense: 0.0 Épisode 2 - État: 1, Action: 1, Récompense: 0.0 Épisode 2 - État: 2, Action: 3, Récompense: 0.0 Épisode 2 - État: 2, Action: 0, Récompense: 0.0 Épisode 2 - État: 6, Action: 0, Récompense: 0.0 Épisode 2 - État: 2, Action: 2, Récompense: 0.0 Épisode 2 - État: 3, Action: 0, Récompense: 0.0 Épisode 2 - État: 2, Action: 0, Récompense: 0.0 Épisode 2 - État: 2, Action: 1, Récompense: 0.0 Épisode 2 - État: 3, Action: 0, Récompense: 0.0 Épisode 2 - État: 3, Action: 2, Récompense: 0.0 Épisode 3 - État: 0, Action: 1, Récompense: 0.0 Épisode 3 - État: 4, Action: 3, Récompense: 0.0 Épisode 3 - État: 4, Action: 1, Récompense: 0.0 Épisode 3 - État: 4, Action: 3, Récompense: 0.0 Épisode 3 - État: 4, Action: 3, Récompense: 0.0 Épisode 3 - État: 0, Action: 2, Récompense: 0.0 Épisode 3 - État: 0, Action: 1, Récompense: 0.0 Épisode 3 - État: 1, Action: 0, Récompense: 0.0 Épisode 3 - État: 1, Action: 1, Récompense: 0.0 Épisode 4 - État: 0, Action: 1, Récompense: 0.0 Épisode 4 - État: 0, Action: 1, Récompense: 0.0 Épisode 4 - État: 4, Action: 0, Récompense: 0.0 Épisode 4 - État: 0, Action: 1, Récompense: 0.0 Épisode 4 - État: 4, Action: 3, Récompense: 0.0 Épisode 4 - État: 4, Action: 2, Récompense: 0.0 Épisode 4 - État: 8, Action: 0, Récompense: 0.0 Épisode 5 - État: 0, Action: 2, Récompense: 0.0 Épisode 5 - État: 0, Action: 3, Récompense: 0.0 Épisode 5 - État: 1, Action: 1, Récompense: 0.0 Épisode 6 - État: 0, Action: 2, Récompense: 0.0 Épisode 6 - État: 1, Action: 3, Récompense: 0.0 Épisode 6 - État: 2, Action: 3, Récompense: 0.0 Épisode 6 - État: 3, Action: 3, Récompense: 0.0 Épisode 6 - État: 3, Action: 3, Récompense: 0.0 Épisode 6 - État: 2, Action: 0, Récompense: 0.0 Épisode 6 - État: 6, Action: 3, Récompense: 0.0 Épisode 7 - État: 0, Action: 3, Récompense: 0.0 Épisode 7 - État: 1, Action: 0, Récompense: 0.0 Épisode 7 - État: 1, Action: 0, Récompense: 0.0 Épisode 8 - État: 0, Action: 1, Récompense: 0.0 Épisode 8 - État: 0, Action: 1, Récompense: 0.0 Épisode 8 - État: 0, Action: 2, Récompense: 0.0 Épisode 8 - État: 4, Action: 0, Récompense: 0.0 Épisode 8 - État: 0, Action: 3, Récompense: 0.0 Épisode 8 - État: 1, Action: 1, Récompense: 0.0 Épisode 8 - État: 0, Action: 1, Récompense: 0.0 Épisode 8 - État: 1, Action: 1, Récompense: 0.0 Épisode 8 - État: 0, Action: 1, Récompense: 0.0 Épisode 8 - État: 4, Action: 2, Récompense: 0.0 Épisode 8 - État: 8, Action: 3, Récompense: 0.0 Épisode 8 - État: 9, Action: 2, Récompense: 0.0 Épisode 8 - État: 10, Action: 0, Récompense: 0.0 Épisode 8 - État: 14, Action: 1, Récompense: 1.0 Épisode 9 - État: 0, Action: 3, Récompense: 0.0 Épisode 9 - État: 0, Action: 2, Récompense: 0.0 Épisode 9 - État: 0, Action: 2, Récompense: 0.0 Épisode 9 - État: 4, Action: 3, Récompense: 0.0 Épisode 9 - État: 0, Action: 0, Récompense: 0.0 Épisode 9 - État: 4, Action: 2, Récompense: 0.0 Épisode 10 - État: 0, Action: 2, Récompense: 0.0 Épisode 10 - État: 0, Action: 2, Récompense: 0.0 Épisode 10 - État: 0, Action: 2, Récompense: 0.0 Épisode 10 - État: 0, Action: 2, Récompense: 0.0 Épisode 10 - État: 4, Action: 3, Récompense: 0.0 Épisode 10 - État: 4, Action: 2, Récompense: 0.0 Épisode 10 - État: 8, Action: 2, Récompense: 0.0 Épisode 10 - État: 4, Action: 0, Récompense: 0.0 Épisode 10 - État: 4, Action: 2, Récompense: 0.0 Épisode 10 - État: 0, Action: 2, Récompense: 0.0 Épisode 10 - État: 1, Action: 0, Récompense: 0.0 Épisode 10 - État: 1, Action: 2, Récompense: 0.0 Épisode 10 - État: 2, Action: 3, Récompense: 0.0 Épisode 10 - État: 1, Action: 3, Récompense: 0.0 Épisode 10 - État: 1, Action: 0, Récompense: 0.0 Épisode 10 - État: 0, Action: 0, Récompense: 0.0 Épisode 10 - État: 0, Action: 1, Récompense: 0.0 Épisode 10 - État: 1, Action: 3, Récompense: 0.0 Épisode 10 - État: 1, Action: 3, Récompense: 0.0 Épisode 10 - État: 1, Action: 3, Récompense: 0.0 Épisode 10 - État: 2, Action: 0, Récompense: 0.0 Épisode 10 - État: 2, Action: 0, Récompense: 0.0 Épisode 10 - État: 6, Action: 2, Récompense: 0.0 Épisode 10 - État: 10, Action: 2, Récompense: 0.0
Exercice 2 : Initialisation de la Q-Table¶
Objectif : Initialiser une Q-Table avec des valeurs nulles pour chaque état-action.
In [2]:
import numpy as np
# Initialiser la Q-table avec des zéros
num_states = env.observation_space.n
num_actions = env.action_space.n
q_table = np.zeros((num_states, num_actions))
# Affichage de la Q-Table initialisée
print("Q-Table initialisée:")
print(q_table)
Q-Table initialisée: [[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.]]
Exercice 3 : Implementation du Q-Learning avec Mise A jour¶
Objectif : Implémenter l'algorithme Q-Learning pour apprendre les meilleures actions à prendre dans chaque état.
In [5]:
import gymnasium as gym
import numpy as np
env = gym.make("FrozenLake-v1", is_slippery=True)
alpha = 0.1 # Taux d'apprentissage
gamma = 0.99 # Facteur de discount
epsilon = 1.0 # Exploration initiale
epsilon_decay = 0.995 # Décroissance d'epsilon
num_episodes = 1000 # Nombre d'épisodes
# Initialisation de la Q-table
num_states = env.observation_space.n
num_actions = env.action_space.n
q_table = np.zeros((num_states, num_actions))
for episode in range(num_episodes):
state, _ = env.reset()
done = False
while not done:
if np.random.uniform(0, 1) < epsilon:
action = env.action_space.sample() # Exploration
else:
action = np.argmax(q_table[state, :]) # Exploitation
next_state, reward, done, _, _ = env.step(action)
q_table[state, action] = q_table[state, action] + alpha * (
reward + gamma * np.max(q_table[next_state, :]) - q_table[state, action]
)
state = next_state
epsilon *= epsilon_decay
env.close()
print("Q-Table après apprentissage:")
print(q_table)
Q-Table après apprentissage: [[4.55325515e-01 3.30128174e-01 3.03743465e-01 2.83100367e-01] [3.93584984e-02 6.07668429e-02 3.48409588e-02 1.88395873e-01] [1.28907277e-01 4.34843500e-03 4.04681843e-03 1.82988758e-02] [3.53961632e-05 9.97287105e-04 1.99536934e-04 1.10395859e-03] [4.62847973e-01 2.93485088e-01 2.23050948e-01 2.03149009e-01] [0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] [2.83443278e-02 1.20796592e-01 1.85281001e-02 0.00000000e+00] [0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] [1.84689384e-01 2.26050303e-01 3.23309970e-01 4.90224207e-01] [2.34132866e-01 5.08018571e-01 2.26871642e-01 1.99337449e-01] [1.28685668e-01 3.98675869e-01 8.93723578e-02 7.84362375e-02] [0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] [0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] [2.01998140e-01 3.18079863e-01 6.69163875e-01 2.65208981e-01] [2.99399244e-01 8.29967099e-01 4.74885063e-01 5.21204981e-01] [0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]
Exercice 4 : Évaluation des Performances de l’Agent¶
Objectif : Évaluer les performances de l'agent en utilisant la Q-Table apprise.
In [6]:
num_test_episodes = 100
successes = 0
for episode in range(num_test_episodes):
state = env.reset()[0]
done = False
while not done:
action = np.argmax(q_table[state, :])
next_state, reward, done, truncated, _ = env.step(action)
state = next_state
if reward == 1:
successes += 1
print(f"Taux de réussite: {successes}/{num_test_episodes} ({(successes/num_test_episodes) * 100:.2f}%)")
Taux de réussite: 68/100 (68.00%)