Q-Learning
Le Q-Learning est un algorithme de renforcement (reinforcement learning) utilisé pour apprendre la politique optimale d’un agent dans un environnement. L’agent cherche à maximiser une fonction de récompense cumulée en interagissant avec cet environnement, en prenant des actions et en recevant des récompenses basées sur ces actions.
Le cœur de l’algorithme est l’apprentissage de la fonction Q, qui associe à chaque couple état-action une valeur représentant la « qualité » de l’action prise dans cet état. L’objectif du Q-learning est d’apprendre cette fonction Q, qui permet à l’agent de choisir la meilleure action à chaque étape.
Formule de mise à jour de la fonction Q :
La mise à jour de la fonction Q suit la règle suivante :
-
: valeur actuelle de la fonction Q pour l’état et l’action
-
: taux d’apprentissage
-
: récompense obtenue après avoir pris l’action dans l’état
-
: facteur de discount qui indique l’importance des récompenses futures
-
: la valeur maximale de la fonction Q dans le prochain état, pour toutes les actions possibles
Fonctions :
-
Q-Learning (exemple)
Le Q-Learning est un algorithme d’apprentissage par renforcement qui permet à un agent d’apprendre à prendre des décisions optimales en interagissant avec son environnement. Par exemple, un robot peut utiliser le Q-Learning pour apprendre à naviguer dans un labyrinthe : à chaque déplacement, il reçoit une récompense positive s’il se rapproche de la sortie, ou négative s’il heurte un mur, et ajuste progressivement ses choix pour trouver le chemin le plus efficace.
Exemple de code :
import numpy as np import random # Paramètres de la grille grid_size = 5 goal_state = (4, 4) # Hyperparamètres Q-learning alpha = 0.1 # taux d'apprentissage gamma = 0.9 # facteur de discount epsilon = 0.2 # taux d'exploration episodes = 500 # Initialiser la table Q # (états = positions, actions = 0:haut, 1:bas, 2:gauche, 3:droite) Q = np.zeros((grid_size, grid_size, 4)) # Fonction pour choisir une action (epsilon-greedy) def choose_action(state): if random.uniform(0, 1) < epsilon: return random.randint(0, 3) # exploration else: return np.argmax(Q[state[0], state[1]]) # exploitation # Fonction de transition dans la grille def take_action(state, action): i, j = state if action == 0 and i > 0: i -= 1 elif action == 1 and i < grid_size - 1: i += 1 elif action == 2 and j > 0: j -= 1 elif action == 3 and j < grid_size - 1: j += 1 next_state = (i, j) reward = 1 if next_state == goal_state else -0.01 done = next_state == goal_state return next_state, reward, done # Entraînement for episode in range(episodes): state = (0, 0) done = False while not done: action = choose_action(state) next_state, reward, done = take_action(state, action) # Q-learning update best_next_action = np.max(Q[next_state[0], next_state[1]]) Q[state[0], state[1], action] += alpha * (reward + gamma * best_next_action - Q[state[0], state[1], action]) state = next_state print("\nQ-table entraînée :") print(Q) # Test du chemin appris print("\nChemin appris de (0,0) vers (4,4) :") state = (0, 0) path = [state] while state != goal_state: action = np.argmax(Q[state[0], state[1]]) state, _, _ = take_action(state, action) path.append(state) print(path)
Explication du code :
1. Initialisation de l’environnement de grille
- Grille de taille `5x5`. - État objectif : position `(4, 4)`. - États représentés par les positions `(i, j)` dans la grille. - 4 actions possibles par état : - `0 = haut`, `1 = bas`, `2 = gauche`, `3 = droite`.2. Paramètres du Q-learning
- `alpha = 0.1` : taux d’apprentissage (learning rate). - `gamma = 0.9` : facteur de discount pour les récompenses futures. - `epsilon = 0.2` : probabilité d’explorer (prendre une action aléatoire). - `episodes = 500` : nombre total d’épisodes d’apprentissage. - Table Q : matrice `Q[i][j][a]` initialisée à 0, où `i,j` sont les coordonnées de l’état et `a` l’action.3. Stratégie d’exploration (epsilon-greedy)
- Avec probabilité `epsilon`, une action aléatoire est choisie (exploration). - Sinon, l’action ayant la plus grande valeur Q est sélectionnée (exploitation). - `np.argmax(Q[state])` permet d’exploiter la politique actuelle.4. Fonction de transition d’état
- Mouvement dans la grille selon l’action choisie, avec limites de bord. - Récompense : - `+1` si l’état objectif `(4, 4)` est atteint. - `-0.01` pour toutes les autres transitions (pénalité légère). - Retourne le `next_state`, la `reward` et un booléen `done`.5. Entraînement de l’agent
- Pour chaque épisode : - L’agent démarre à `(0,0)` et explore jusqu’à atteindre l’objectif. - À chaque étape : - Choix d’une action via epsilon-greedy. - Mise à jour Q selon la formule : `Q[s,a] ← Q[s,a] + α * (r + γ * max(Q[s']) - Q[s,a])` - L’état est mis à jour avec `next_state`.6. Évaluation : chemin appris
- Une fois l’apprentissage terminé, l’agent suit la politique apprise à partir de `(0,0)`. - À chaque étape, l’action ayant la plus grande valeur Q est choisie. - Le chemin optimal est affiché jusqu’à atteindre `(4,4)`.