====== Posilované učení ======
Implementujte metodu ''learn_policy(env)'' v souboru ''rl_agent.py'' který nahrajte do Brute. ''env'' je tentokrát typu ''HardMaze''. Očekávaným výstupem je ''policy'', slovník klíčovaný stavy, hodnoty mohou být z [0,1,2,3], což odpovídá up, right, down, left (N,E,S,W). Limit na učení na jednom postředí je 20 sekund. Nezapomeňte před odevzdáním vypnout vizualizace, viz VERBOSITY v ''rl_sandbox.py''.
Opět budeme používat kostičkový svět. Stahněte si aktualizovaný balík ''{{ :courses:b3b33kui:cviceni:sekvencni_rozhodovani:kuimaze_rl.zip |kuimaze.zip}}''. Vizualizační metody jsou stejné, rovněž i inicializace, ale základní filozofie práce s prostředím je odlišná. 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. Hledáme co nejlepší cestu ze startu do cíle. Chceme cestu s co nejvyšším očekávaným součtem zlevněných odměn.
obv, reward, done, _ = env.step(action)
state = obv[0:2]
Akci můžete získat třeba náhodným výběrem:
action = env.action_space.sample()
Součástí balíku je i ''rl_sandbox.py'', kde je vidět základní náhodné procházení, možná inicializace tabulky Q hodnot, vizualizace atp.
Další příklady na stránce [[https://gym.openai.com/docs/|AI-Gym]]. Připomeňme z přednášky, že akce je nutná, abychom se o prostředí vůbec něco dozvěděli.
{{ :courses:b3b33kui:cviceni:sekvencni_rozhodovani:agent-environment-reward.png |}}
====== Bodové hodnocení a termíny ======
Termín odevzdání úlohy lze vidět v [[https://cw.felk.cvut.cz/upload/|Upload systému]].
Hodnocení je rozděleno následovně:
- Automatické hodnocení testuje výkon vašeho agenta na 5 prostředích. S vámi dodanou policy pro dané prostředí agenta pustíme n-krát a spočteme průměrný součet jím nasbíraných odměn. To pak porovnáme s učitelským řešením (agent vykonávající optimal policy). Na každém z 5ti prostředí, ve kterém budete mít 80% a více než je učitelská hodnota součtu odměn, získáváte jeden bod.
- Manuální hodnocení je založeno na hodnocení kódu (clean code).
^ Hodnocený výkon ^ min ^ max ^ poznámka ^
| Kvalita RL algoritmu | 0 | 5 | Ohodnocení algoritmu automatickým evaluačním systémem. |
| Kvalita kódu | 0 | 1 | Komentáře, struktura, elegance, čistota kódu, vhodné pojmenování proměnných... |
Kvalita kódu (1 body):
* vhodné komentáře, nebo kód je srozumitelný natolik, že komentáře nepotřebuje
* rozumně dlouhé, respektive krátké metody/funkce
* jména proměnných (podst. jména) a funkcí (slovesa) pomáhají čitelnosti a srozumitelnosti
* kusy kódu se neopakují (žádné copy-paste)
* rozumné šetření pamětí a procesorovým časem
* konzistentní názvy i rozložení kódu v celém souboru (oddělovat slova ve všech metodách stejně, atp.)
* přehledná struktura kódu (vyvarujte se např. nepythonovskému přiřazování mnoha proměnných v jednom řádku)
* ...
Můžete následovat pro Python určený [[https://www.python.org/dev/peps/pep-0008/|PEP8]]. Většina editorů (jistě PyCharm) na nedostatky s ohledem na PEP8 i sama upozorňuje. Můžete se také inspirovat např. [[https://github.com/zedr/clean-code-python|zde]] nebo si přečíst o idiomatickém pythonu na [[https://medium.com/the-andela-way/idiomatic-python-coding-the-smart-way-cc560fa5f1d6|mediu]] či u [[http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html|pythonu]].