Search
Stáhněte si kuimaze balík kuimaze.zip. Úkolem je naimplementovat funkce find_policy_via_value_iteration(…) a find_policy_via_policy_iteration(…) s těmito vstupy a výstupy:
Vstupy: find_policy_via_value_iteration(problem, discount_factor, epsilon) a find_policy_via_policy_iteration(problem, discount_factor), kde:
find_policy_via_value_iteration(problem, discount_factor, epsilon)
find_policy_via_policy_iteration(problem, discount_factor)
problem
kuimaze.MDPMaze
discount_factor
(0,1)
epsilon
Výstupy: Očekávaný výstup je slovník, kde klíčem je dvojice (x,y) tuple a hodnotou je optimální akce (stačí uvažovat dosažitelné stavy a pro terminální stavy nechť je výstup None).
None
Metody implementujte v souboru mdp_agent.py; který odevzdejte do Upload systému. V balíku kuimaze.zip je i soubor mdp_sandbox.py, který ukazuje základní práci s MDPMaze, můžete ho použít jako start k další implementaci (viz též popis Základních metod níže).
mdp_agent.py
mdp_sandbox.py
Timeout: na jednotlivé běhy value/policy iteration pro danou instanci problému máte časový limit 30s.
Termín odevzdání úlohy lze vidět v Upload systému.
Hodnocení je rozděleno následovně:
Automatické hodnocení:
Kvalita kódu (1 bod):
Můžete následovat pro Python určený PEP8. Většina editorů (jistě PyCharm) na nedostatky s ohledem na PEP8 i sám upozorňuje. Můžete se také inspirovat např. zde nebo si přečíst o idiomatickém pythonu na mediu či u pythonu.
Ke komunikaci s prostředím MDPMaze slouží následující metody:
get_all_states() : vrátí seznam všech dosažitelných stavů, tedy bez zdí. V tomto případě jsou to weighted stavy i s rewards, tedy (state.x, state.y, state.reward)
get_all_states()
is_terminal_state(state) : True pokud ze stavu nevede cesta zpět - cílový dobrý, nebo naopak cílový špatný/nebezpečný - představte si propast, nebo minu.
is_terminal_state(state)
get_actions(state) : Pro daný stav navrátí seznam možných akcí, které se typicky použijí v následující metodě. Akce je typu enum, ale tím se nemusíte zabývat, viz příklad použití v mdp_sandbox.py
get_actions(state)
get_state_reward(state): Obvykle není potřeba, vstupem je pojmenovaná dvojice (state.x, state.y).
get_state_reward(state)
get_next_states_and_probs(state, action) : pro daný stav a požadovanou akci navrátí seznam dvojic ( (state.x, state.y), probability ) ; např. [ ( (2,3), 0.3), ( (3,3), 0.7)]
get_next_states_and_probs(state, action)
( (state.x, state.y), probability )
[ ( (2,3), 0.3), ( (3,3), 0.7)]
state je pojmenovaná n-tice buď (state.x, state.y, state.reward) nebo (state.x, state.y).
state
visualise(dictlist=None) : bez parametru visualizuje obvyklé bludiště. Jinak očekává seznam slovníků {'x': x_coord, 'y': y_coord, 'value: val'}, kde val může být buď skalární hodnota, nebo seznam/n-tice o čtyřech prvcích. Zde můžete konkrétně využít k vizualizaci:
visualise(dictlist=None)
{'x': x_coord, 'y': y_coord, 'value: val'}
env.visualise(get_visualisation_values(utils))
env.visualise(get_visualisation_values(policy))
Rovněž zůstávají k dispozici obvyklé metody render(), reset()
render(), reset()
Základní příklad použítí je vidět v souboru mdp_sandbox.py