Search
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í).
V modulu rl_agent.py implementujte třídu RLAgent. Třída musí implementovat následující rozhraní:
rl_agent.py
RLAgent
__init__
env: RLProblem
gamma: float
alpha: float
learn_policy
Policy
env
kuimaze2.RLProblem
gamma
(0,1)
alpha
learn_policy()
kuimaze2.State
kuimaze2.Action
RLProblem
_
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.
MDPProblem
env.step(action)
kuimaze2
example_rl.py
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
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ř.
q_table
q_table[state][action]
numpy
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().
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.
11-RL
Seznamte se s bodovým hodnocením úlohy.