Monte-Carlo-Methoden

Reinforcement Learning mit Gymnasium in Python

Fouad Trad

Machine Learning Engineer

Rückblick: Model-based Learning

 

  • Nutzt Kenntnis der Umweltdynamik
  • Keine Interaktion mit der Umwelt

Bild zeigt die Diagramme von Policy Iteration und Value Iteration aus dem vorherigen Video.

Reinforcement Learning mit Gymnasium in Python

Modellfreies Lernen

 

  • Keine Kenntnis der Umweltdynamik nötig
  • Agent interagiert mit der Umwelt
  • Lernt die Policy durch Trial-and-Error
  • Besser für reale Anwendungen

Bild eines Roboters, der mit einer Schach-Umwelt interagiert.

Reinforcement Learning mit Gymnasium in Python

Monte-Carlo-Methoden

  • Modellfreie Verfahren
  • Schätzen Q-Werte aus Episoden

Bild zeigt das Gerüst einer Episode: Zustände, Aktionen, Belohnungen und Returns.

Reinforcement Learning mit Gymnasium in Python

Monte-Carlo-Methoden

  • Modellfreie Verfahren
  • Schätzen Q-Werte aus Episoden

Bild zeigt den zweiten Schritt zur Schätzung der Q-Werte und eine Q-Tabelle mit Zeilen = Zustände, Spalten = Aktionen.

Reinforcement Learning mit Gymnasium in Python

Monte-Carlo-Methoden

  • Modellfreie Verfahren
  • Schätzen Q-Werte aus Episoden

Bild zeigt den letzten Schritt zur optimalen Policy: ordnet jedem Zustand die optimale Aktion zu.

  • Zwei Varianten: First-Visit, Every-Visit
Reinforcement Learning mit Gymnasium in Python

Eigene Gridworld

Bild zeigt die benutzerdefinierte Gridworld mit 6 Zuständen (2 Zeilen, 3 Spalten), von oben links (0) bis unten rechts (5). Der Agent ist in Zustand 3, ein Berg in Zustand 4, das Ziel in Zustand 5.png

Reinforcement Learning mit Gymnasium in Python

Zwei Episoden sammeln

Bild zeigt die erste gesammelte Episode mit Zuständen, Aktionen, Belohnungen und Returns.

Bild zeigt die zweite gesammelte Episode mit Zuständen, Aktionen, Belohnungen und Returns.

Reinforcement Learning mit Gymnasium in Python

Q-Werte schätzen

Bild zeigt die für beide Episoden gesammelten Zustände, Aktionen, Belohnungen und Returns.

  • Q-Tabelle: Tabelle der Q-Werte

Bild einer leeren Q-Tabelle, die wir füllen.

Reinforcement Learning mit Gymnasium in Python

Q(4, links), Q(4, oben) und Q(1, unten)

Bild zeigt die gesammelten Zustände, Aktionen, Belohnungen und Returns der zwei Episoden mit Markierung für (4, links), (4, oben) und (1, unten).

  • (s,a) kommt einmal vor -> mit Return füllen

Q-Tabelle mit Werten für (4, links), (4, oben) und (1, unten).

Reinforcement Learning mit Gymnasium in Python

Q(4, rechts)

Bild zeigt die zwei Episoden mit Markierung für (4, rechts) in beiden Episoden.

  • (s,a) einmal pro Episode -> Mittelwert

Q-Tabelle mit Wert für (4, rechts) als Mittel der Returns beider Episoden.

Reinforcement Learning mit Gymnasium in Python

Q(3, rechts) – First-Visit Monte Carlo

Bild zeigt die zwei Episoden mit Markierung für (3, rechts) nur bei der ersten Auftretensstelle je Episode.

  • Mittelwert über den ersten Besuch von (s,a) je Episode

Q-Tabelle mit Wert für (3, rechts) als Mittel der Returns der markierten ersten Vorkommen.

Reinforcement Learning mit Gymnasium in Python

Q(3, rechts) – Every-Visit Monte Carlo

Bild zeigt die zwei Episoden mit Markierung für (3, rechts) bei jedem Auftreten.

  • Mittelwert über jeden Besuch von (s,a) je Episode

Q-Tabelle mit Wert für (3, rechts) als Mittel der Returns aller markierten Vorkommen.

Reinforcement Learning mit Gymnasium in Python

Eine Episode erzeugen

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

First-Visit Monte Carlo

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

Every-Visit Monte Carlo

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

Optimale Policy erhalten

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

Alles zusammenführen

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}

Bild zeigt die optimale Policy mit den optimalen Aktionen je Zustand als Pfeile.

Reinforcement Learning mit Gymnasium in Python

Lass uns üben!

Reinforcement Learning mit Gymnasium in Python

Preparing Video For Download...