Table of Contents

4. Posilované učení

Vaším úkolem je implementovat algoritmus Q-learning pro nalezení co nejlepší strategie v prostředí, o němž máte jen velmi neúplné informace. Můžete jen vykonávat dostupné akce a pozorovat jejich účinky (posilované učení).

Specifikace

V modulu rl_agent.py implementujte třídu RLAgent. Třída musí implementovat následující rozhraní:

metoda vstupní parametry výstupní parametry vysvětlení
__init__ env: RLProblem, gamma: float, alpha: float žádné Inicializace agenta.
learn_policy žádné Policy Vrátí co nejlepší strategii, tedy slovník dvojic (stav, akce).

Poznámka: Prostředí (env) je instance třídy RLProblem. Inicializace prostředí a vizualizační metody jsou stejné, jako u MDPProblem, ale práce s prostředím je odlišná. Vykonání akce je nutné, abychom se o prostředí vůbec něco dozvěděli. Nemáme mapu a prostředí můžeme prozkoumávat jen pomocí hlavní metody env.step(action). Prostředí-simulátor ví, jaký je aktuální stav.

Jak na to?

Jak bude váš kód volán hodnotícím skriptem?

Váš kód bude hodnoticím skriptem volán cca takto:

import kuimaze2
import rl_agent
 
env = kuimaze2.RLProblem(...)  # tady skript vytvoří prostředí
 
# Volání vaší funkce!
agent = rl_agent.RLAgent(env, gamma, alpha)
policy = agent.learn_policy()  # limit 20 sekund
 
# Ohodnocení jedné epizody využívající vaší policy
state = env.reset()
episode_finished = False
while not episode_finished:
  action = policy[state]
  next_state, reward, episode_finished = env.step(action)
  total_reward += reward
  state = next_state

Reprezentace Q-funkce

Při implementaci budete patrně potřebovat pracovat s Q-funkcí. V našem diskrétním světě bude mít podobu tabulky. Tuto tabulku lze reprezentovat různými způsoby, např.

Inicializace Q-funkce

V reálných RL úlohách nemáme “mapu” prostředí a často ani neznáme množinu všech stavů. RL pak nikdy nekončí, protože si nikdy nemůžeme být jistí, že jsme se už dostali do všech dosažitelných stavů (a že jsme se všechny q-hodnoty naučili dostatečně dobře). V naší úloze ale RL skončit musí a vy musíte vrátit úplnou strategii, tedy co nejlepší akci pro každý stav. Musí tedy existovat možnost, jak zjistit množinu všech stavů. Seznam všech validních stavů lze získat pomocí metody get_states().

Ve skriptu example_rl.py je již implementována inicializace q_table ve formě slovníku slovníků. Zvolíte-li jinou reprezentaci tabulky q-hodnot, je třeba inicializaci adekvátně upravit.

Odevzdání

Hodnocení

Seznamte se s bodovým hodnocením úlohy.