Méthodes Monte Carlo

Reinforcement Learning avec Gymnasium en Python

Fouad Trad

Machine Learning Engineer

Rappel : apprentissage basé sur modèle

 

  • S’appuie sur la dynamique de l’environnement
  • Aucune interaction avec l’environnement

Image montrant les schémas des algorithmes d’itération de politique et d’itération de valeur, vus dans la vidéo précédente.

Reinforcement Learning avec Gymnasium en Python

Apprentissage sans modèle

 

  • Ne dépend pas de la dynamique de l’environnement
  • L’agent interagit avec l’environnement
  • Apprend la politique par essai-erreur
  • Plus adapté aux cas réels

Image d’un robot interagissant avec un environnement d’échecs.

Reinforcement Learning avec Gymnasium en Python

Méthodes Monte Carlo

  • Techniques sans modèle
  • Estiment les Q-valeurs à partir des épisodes

Image montrant le squelette d’un épisode collecté : états, actions, récompenses et retours.

Reinforcement Learning avec Gymnasium en Python

Méthodes Monte Carlo

  • Techniques sans modèle
  • Estiment les Q-valeurs à partir des épisodes

Image montrant la deuxième étape d’estimation des Q-valeurs et l’aspect d’une Q-table, avec un nombre de lignes égal au nombre d’états et de colonnes égal au nombre d’actions.

Reinforcement Learning avec Gymnasium en Python

Méthodes Monte Carlo

  • Techniques sans modèle
  • Estiment les Q-valeurs à partir des épisodes

Image montrant l’étape finale pour obtenir la politique optimale, qui associe chaque état à l’action optimale.

  • Deux variantes : première visite, toutes visites
Reinforcement Learning avec Gymnasium en Python

Grid world personnalisé

Image montrant un grid world personnalisé avec 6 états, 2 lignes et 3 colonnes, numérotés de 0 (haut gauche) à 5 (bas droite). L’agent est en état 3, une montagne en état 4, et l’objectif en état 5.png

Reinforcement Learning avec Gymnasium en Python

Collecte de deux épisodes

Image montrant le premier épisode collecté en termes d’états, d’actions, de récompenses et de retours.

Image montrant le second épisode collecté en termes d’états, d’actions, de récompenses et de retours.

Reinforcement Learning avec Gymnasium en Python

Estimation des Q-valeurs

Image montrant les états, actions, récompenses et retours collectés pour les deux épisodes.

  • Q-table : table des Q-valeurs

Image montrant une Q-table vide à remplir.

Reinforcement Learning avec Gymnasium en Python

Q(4, gauche), Q(4, haut) et Q(1, bas)

Image montrant les états, actions, récompenses et retours des deux épisodes avec (4, gauche), (4, haut) et (1, bas) surlignés.

  • (s,a) apparaît une fois -> remplir avec le retour

Q-table avec les valeurs de (4, gauche), (4, haut) et (1, bas) renseignées.

Reinforcement Learning avec Gymnasium en Python

Q(4, droite)

Image montrant les états, actions, récompenses et retours des deux épisodes avec (4, droite) surligné dans les deux épisodes

  • (s,a) survient une fois par épisode -> moyenne

Q-table avec la valeur de (4, droite) remplie par la moyenne des retours des deux épisodes.

Reinforcement Learning avec Gymnasium en Python

Q(3, droite) - Monte Carlo première visite

Image montrant les états, actions, récompenses et retours des deux épisodes avec (3, droite) surligné uniquement pour la première occurrence dans chaque épisode

  • Moyenne de la première visite de (s,a) dans les épisodes

Q-table avec la valeur de (3, droite) remplie par la moyenne des retours des lignes surlignées (premières occurrences de (3, droite)).

Reinforcement Learning avec Gymnasium en Python

Q(3, droite) - Monte Carlo toutes visites

Image montrant les états, actions, récompenses et retours des deux épisodes avec (3, droite) surligné pour chaque occurrence dans les deux épisodes

  • Moyenne de chaque visite de (s,a) dans les épisodes

Q-table avec la valeur de (3, droite) remplie par la moyenne des retours des lignes surlignées (toutes les occurrences de (3, droite)).

Reinforcement Learning avec Gymnasium en Python

Générer un épisode

def generate_episode():
    episode = []
    state, info = env.reset()

terminated = False while not terminated: action = env.action_space.sample()
next_state, reward, terminated, truncated, info = env.step(action)
episode.append((state, action, reward)) state = next_state
return episode
Reinforcement Learning avec Gymnasium en Python

Monte Carlo première visite

def first_visit_mc(num_episodes):
    Q = np.zeros((num_states, num_actions))
    returns_sum = np.zeros((num_states, num_actions))
    returns_count = np.zeros((num_states, num_actions))

for i in range(num_episodes): episode = generate_episode() visited_states_actions = set()
for j, (state, action, reward) in enumerate(episode):
if (state, action) not in visited_states:
returns_sum[state, action] += sum([x[2] for x in episode[j:]])
returns_count[state, action] += 1 visited_states_actions.add((state, action))
nonzero_counts = returns_count != 0
Q[nonzero_counts] = returns_sum[nonzero_counts] / returns_count[nonzero_counts] return Q
Reinforcement Learning avec Gymnasium en Python

Monte Carlo toutes visites

def every_visit_mc(num_episodes):
    Q = np.zeros((num_states, num_actions))
    returns_sum = np.zeros((num_states, num_actions))
    returns_count = np.zeros((num_states, num_actions))    

    for i in range(num_episodes):
        episode = generate_episode()  

        for j, (state, action, reward) in enumerate(episode):

            returns_sum[state, action] += sum([x[2] for x in episode[j:]])
            returns_count[state, action] += 1


    nonzero_counts = returns_count != 0
    Q[nonzero_counts] = returns_sum[nonzero_counts] / returns_count[nonzero_counts]
    return Q
Reinforcement Learning avec Gymnasium en Python

Obtenir la politique optimale

def get_policy():
    policy = {state: np.argmax(Q[state]) for state in range(num_states)}    
    return policy
Reinforcement Learning avec Gymnasium en Python

Récapitulatif

Q = first_visit_mc(1000)

policy_first_visit = get_policy()
print("First-visit policy: \n", policy_first_visit)
Q = every_visit_mc(1000)
policy_every_visit = get_policy()
print("Every-visit policy: \n", policy_every_visit)
First-visit policy:
{0: 2, 1: 2, 2: 1, 
 3: 2, 4: 2, 5: 0}

Every-visit policy:
{0: 2, 1: 2, 2: 1, 
 3: 2, 4: 2, 5: 0}

Image montrant la politique optimale avec l’action optimale pour chaque état sous forme de flèches.

Reinforcement Learning avec Gymnasium en Python

Passons à la pratique !

Reinforcement Learning avec Gymnasium en Python

Preparing Video For Download...