Polityki i funkcje wartości stanu

Uczenie przez wzmacnianie z Gymnasium w Pythonie

Fouad Trad

Machine Learning Engineer

Polityki

  • Cel RL → formułowanie skutecznych polityk
  • Określa akcję w każdym stanie, aby zmaksymalizować zwrot

Obraz przedstawiający dużą mapę drogową.

Uczenie przez wzmacnianie z Gymnasium w Pythonie

Przykład grid world

  • Agent dąży do diamentu, unikając gór
  • Dziewięć stanów
  • Ruchy deterministyczne

action_numbers_green.png

Obraz przedstawiający własne środowisko z 9 komórkami siatki, 2 górami i jedną komórką z diamentem.

Uczenie przez wzmacnianie z Gymnasium w Pythonie

Przykład grid world – nagrody

  • Zależne od stanów:
    • Diament: +10

Obraz pokazujący, że ruchy z sąsiednich komórek do diamentu dają nagrodę +10.

Uczenie przez wzmacnianie z Gymnasium w Pythonie

Przykład grid world – nagrody

  • Zależne od stanów:
    • Diament: +10
    • Góra: -2

Obraz pokazujący, że akcje prowadzące do gór skutkują nagrodą -2.

Uczenie przez wzmacnianie z Gymnasium w Pythonie

Przykład grid world – nagrody

  • Zależne od stanów:
    • Diament: +10
    • Góra: -2
    • Inne stany: -1

Obraz pokazujący, że każdy inny ruch skutkuje nagrodą -1.

Uczenie przez wzmacnianie z Gymnasium w Pythonie

Przykład grid world: polityka

# 0: left, 1: down, 2: right, 3: up
policy = {
    0:1, 1:2, 2:1, 
    3:1, 4:3, 5:1,
    6:2, 7:3
}

state, info = env.reset() terminated = False while not terminated: action = policy[state] state, reward, terminated, _, _ = env.step(action)

Obraz pokazujący politykę ze strzałkami reprezentującymi ruchy między stanami.

Uczenie przez wzmacnianie z Gymnasium w Pythonie

Funkcje wartości stanu

  • Szacowanie wartości stanu
  • Oczekiwany zwrot startując ze stanu, zgodnie z polityką

Obraz przedstawiający wzór funkcji wartości stanu jako zdyskontowany zwrot z rozpoczęcia w stanie s i podążania za polityką.

Uczenie przez wzmacnianie z Gymnasium w Pythonie

Przykład grid world: wartości stanów

Obraz pokazujący politykę ze strzałkami reprezentującymi ruchy między stanami.

  • Dziewięć stanów → dziewięć wartości stanu
  • Współczynnik dyskontowania: $\gamma = 1$
Uczenie przez wzmacnianie z Gymnasium w Pythonie

Wartość stanu docelowego

Obraz pokazujący agenta w stanie docelowym.

  • Startując w stanie docelowym, agent się nie porusza
  • $V(goal \, state) = 0$

Obraz pokazujący, że wartość stanu docelowego wynosi 0.

Uczenie przez wzmacnianie z Gymnasium w Pythonie

Wartość stanu 5

Obraz pokazujący agenta w stanie 5.

  • Startując w stanie 5, agent przechodzi do celu
  • $V(5) = 10$

Obraz pokazujący, że wartość stanu 5 wynosi 10.

Uczenie przez wzmacnianie z Gymnasium w Pythonie

Wartość stanu 2

Obraz pokazujący agenta w stanie 2.

  • Startując w stanie 2, nagrody: $-1, 10$
  • $ V(2) = (1 \times -1) + (1 \times 10) = 9$

Obraz pokazujący, że wartość stanu 2 wynosi 9.

Uczenie przez wzmacnianie z Gymnasium w Pythonie

Wszystkie wartości stanów

Obraz przedstawiający wszystkie wartości stanów dla 9 stanów środowiska.

Uczenie przez wzmacnianie z Gymnasium w Pythonie

Równanie Bellmana

  • Wzór rekurencyjny
  • Oblicza wartości stanów

Obraz przedstawiający równanie Bellmana jako sumę natychmiastowej nagrody w bieżącym stanie i zdyskontowanej wartości następnego stanu.

Uczenie przez wzmacnianie z Gymnasium w Pythonie

Obliczanie wartości stanów

def compute_state_value(state):

if state == terminal_state: return 0
action = policy[state]
_, next_state, reward, _ = env.unwrapped.P[state][action][0]
return reward + gamma * compute_state_value(next_state)

Obraz przedstawiający równanie Bellmana jako sumę natychmiastowej nagrody w bieżącym stanie i zdyskontowanej wartości następnego stanu.

Uczenie przez wzmacnianie z Gymnasium w Pythonie

Obliczanie wartości stanów

terminal_state = 8
gamma = 1

V = {state: compute_state_value(state) for state in range(num_states)}
print(V)
{0: 1, 1: 8, 2: 9, 
 3: 2, 4: 7, 5: 10, 
 6: 3, 7: 5, 8: 0}

Obraz przedstawiający wszystkie wartości stanów dla 9 stanów środowiska.

Uczenie przez wzmacnianie z Gymnasium w Pythonie

Zmiana polityk

# 0: left, 1: down, 2: right, 3: up
policy_two = {
    0:2, 1:2, 2:1,
    3:2, 4:2, 5:1,
    6:2, 7:2
}

V_2 = {state: compute_state_value(state) for state in range(num_states)} print(V_2)

Obraz pokazujący politykę ze strzałkami reprezentującymi ruchy między stanami.

Uczenie przez wzmacnianie z Gymnasium w Pythonie

Porównanie polityk

Wartości stanów dla polityki 1

{0: 1, 1: 8, 2: 9, 
 3: 2, 4: 7, 5: 10, 
 6: 3, 7: 5, 8: 0}

Obraz przedstawiający wartości stanów dla polityki 1.

Wartości stanów dla polityki 2

{0: 7, 1: 8, 2: 9, 
 3: 7, 4: 9, 5: 10, 
 6: 8, 7: 10, 8: 0}

Obraz przedstawiający wartości stanów dla polityki 2.

Uczenie przez wzmacnianie z Gymnasium w Pythonie

Czas na ćwiczenia!

Uczenie przez wzmacnianie z Gymnasium w Pythonie

Preparing Video For Download...