Metody Monte Carlo

Reinforcement Learning with Gymnasium in Python

Fouad Trad

Machine Learning Engineer

Rekapitulace: učení na základě modelu

 

  • Vyžadují znalost dynamiky prostředí
  • Bez interakce s prostředím

Obrázek schémat algoritmů iterace politiky a iterace hodnot z předchozího videa.

Reinforcement Learning with Gymnasium in Python

Učení bez modelu

 

  • Nevyžaduje znalost dynamiky prostředí
  • Agent interaguje s prostředím
  • Politiku se učí metodou pokus–omyl
  • Vhodnější pro reálné aplikace

Obrázek robota interagujícího se šachovým prostředím.

Reinforcement Learning with Gymnasium in Python

Metody Monte Carlo

  • Techniky bez modelu
  • Odhad Q-hodnot na základě epizod

Obrázek schématu shromážděné epizody zahrnující stavy, akce, odměny a výnosy.

Reinforcement Learning with Gymnasium in Python

Metody Monte Carlo

  • Techniky bez modelu
  • Odhad Q-hodnot na základě epizod

Obrázek druhého kroku odhadu Q-hodnot a ukázka podoby Q-tabulky s počtem řádků rovným počtu stavů a počtem sloupců rovným počtu akcí.

Reinforcement Learning with Gymnasium in Python

Metody Monte Carlo

  • Techniky bez modelu
  • Odhad Q-hodnot na základě epizod

Obrázek znázorňující poslední krok odvození optimální politiky, která mapuje každý stav na optimální akci.

  • Dvě metody: první návštěva, každá návštěva
Reinforcement Learning with Gymnasium in Python

Vlastní svět mřížky

Obrázek vlastního světa mřížky se 6 stavy, 2 řádky a 3 sloupci, číslovanými od levého horního rohu (0) po pravý dolní roh (5). Agent je ve stavu 3, hora je ve stavu 4 a cíl je ve stavu 5.

Reinforcement Learning with Gymnasium in Python

Sběr dvou epizod

Obrázek první shromážděné epizody – stavy, akce, odměny a výnosy.

Obrázek druhé shromážděné epizody – stavy, akce, odměny a výnosy.

Reinforcement Learning with Gymnasium in Python

Odhad Q-hodnot

Obrázek stavů, akcí, odměn a výnosů shromážděných pro dvě epizody.

  • Q-tabulka: tabulka Q-hodnot

Obrázek prázdné Q-tabulky, kterou je třeba vyplnit.

Reinforcement Learning with Gymnasium in Python

Q(4, left), Q(4, up) a Q(1, down)

Obrázek stavů, akcí, odměn a výnosů pro dvě epizody se zvýrazněnými hodnotami (4, vlevo), (4, nahoru) a (1, dolů).

  • (s,a) se vyskytuje jednou -> vyplnit výnosem

Q-tabulka s vyplněnými hodnotami (4, vlevo), (4, nahoru) a (1, dolů).

Reinforcement Learning with Gymnasium in Python

Q(4, right)

Obrázek stavů, akcí, odměn a výnosů pro dvě epizody se zvýrazněnou hodnotou (4, vpravo) v obou epizodách.

  • (s,a) se vyskytuje jednou za epizodu -> průměr

Q-tabulka s hodnotou (4, vpravo) vyplněnou průměrem výnosů z obou epizod.

Reinforcement Learning with Gymnasium in Python

Q(3, right) – Monte Carlo první návštěvy

Obrázek stavů, akcí, odměn a výnosů pro dvě epizody se zvýrazněnou hodnotou (3, vpravo) pouze pro první výskyt v každé epizodě.

  • Průměr prvních návštěv (s,a) v rámci epizod

Q-tabulka s hodnotou (3, vpravo) vyplněnou průměrem výnosů ze zvýrazněných řádků (první výskyty (3, vpravo)).

Reinforcement Learning with Gymnasium in Python

Q(3, right) – Monte Carlo každé návštěvy

Obrázek stavů, akcí, odměn a výnosů pro dvě epizody se zvýrazněnou hodnotou (3, vpravo) pro každý výskyt v obou epizodách.

  • Průměr každé návštěvy (s,a) v rámci epizod

Q-tabulka s hodnotou (3, vpravo) vyplněnou průměrem výnosů ze zvýrazněných řádků (každý výskyt (3, vpravo)).

Reinforcement Learning with Gymnasium in Python

Generování epizody

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 with Gymnasium in Python

Monte Carlo první návštěvy

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 with Gymnasium in Python

Monte Carlo každé návštěvy

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 with Gymnasium in Python

Získání optimální politiky

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

Vše dohromady

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}

Obrázek optimální politiky se šipkami znázorňujícími optimální akci v každém stavu.

Reinforcement Learning with Gymnasium in Python

Pojďme si procvičit!

Reinforcement Learning with Gymnasium in Python

Preparing Video For Download...