Search
Vaším úkolem je najít co nejlepší strategii v prostředí, o němž nemáte žádné informace (posilované učení). Můžete jen vykonávat dostupné akce a pozorovat jejich účinky.
Stáhněte si archiv kuimaze.zip (Aktualizováno 21.4.2023)
V modulu rl_agent.py implementujte funkci learn_policy(env). Hledáme strategii, která nás dovede do cíle s co nejvyšším očekávaným součtem zlevněných odměn. Během přednášek jste slyšeli o několika metodách pro řešení tohoto problému (Q-learning, Sarsa, …).
rl_agent.py
learn_policy(env)
Výstupem funkce má být strategie (policy). Její reprezentace je shodná s předchozí úlohou (MDP), tj. slovník, který každému stavu přiřadí akci. Akce jsou označeny hodnotami [0,1,2,3], což odpovídá akcím up, right, down, left (N,E,S,W).
Vstupem funkce (env) je instance třídy HardMaze. Inicializace prostředí a vizualizační metody jsou stejné, jako u MDPMaze, ale práce s prostředím je odlišná. Připomeňme z přednášky, že 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 pomocí hlavní metody env.step(action). Prostředí-simulátor ví, jaký je aktuální stav.
env
HardMaze
MDPMaze
env.step(action)
Další požadavky:
rl_sandbox.py
Váš kód bude hodnoticím skriptem volán cca takto:
import rl_agent env = kuimaze.HardMaze(...) # tady skript vytvoří prostředí # Volání vaší funkce! policy = rl_agent.learn_policy(env) # limit 20 sekund # Ohodnocení jedné epizody využívající vaší policy observation = env.reset() state = observation[0:2] is_done = False while not is_done: action = int(policy[state]) observation, reward, is_done, _ = env.step(action) next_state = observation[0:2] 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ř.
numpy
q
state
action
q[state, action]
q[state][action]
Ať už si reprezentaci Q-funkce vyberete jakoukoli, budete potřebovat ji nějak inicializovat, k čemuž by se hodilo znát množinu stavů. 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ů. V naší úloze ale RL musí skončit a vy musíte vrátit úplnou strategii, tedy co nejlepší akci pro každý stav. Proto i zde lze získat seznam všech validních stavů v prostředí pomocí metody get_all_states():
get_all_states()
>>> env.get_all_states() [(x=0, y=0), ... (x=4, y=2)]
>>> x_dims = env.observation_space.spaces[0].n >>> y_dims = env.observation_space.spaces[1].n >>> maze_size = (x_dims, y_dims)