Warning
This page is located in archive. Go to the latest version of this course pages. Go the latest version of this page.

3. Markovské rozhodovací procesy

Vaším úkolem je implementovat metody value iteration a policy iteration k nalezení optimální strategie (policy) pro zadaný MDP.

Specifikace

V modulu mdp_agent.py implementujte dvě třídy:

  • ValueIterationAgent, která bude hledat strategii metodou value iteration, a
  • PolicyIterationAgent, která bude hledat strategii metodou policy iteration.

Rozhraní obou tříd bude shodné, obě musí implementovat následující metody:

metoda vstupní parametry výstupní parametry vysvětlení
__init__ env: MDPProblem, gamma: float, epsilon: float žádné Inicializace agenta.
find_policy žádné Policy Vrátí optimální strategii, tedy slovník dvojic (stav, akce).
  • Třída se bude inicializovat následujícími parametry:
    • env je prostředí, tj. objekt typu kuimaze2.MDPProblem
    • gamma je tzv. “discount factor” (zlevnění) z rozmezi (0,1)
    • epsilon je maximalní povolená chyba pro hodnoty jednotlivých stavů (využije se ve value iteration)
  • Výstupem metody find_policy() musí být strategie (policy) reprezentovaná jako slovník, kde klíčem je vždy stav (instance třídy kuimaze2.State) a hodnotou je optimální akce pro daný stav (instance třídy kuimaze2.Action). Strategie musí obsahovat akci pro všechny volné stavy, včetně terminálních. U terminálních stavů na konkrétní zvolené akci nezáleží.
  • Timeout: na jednotlivé běhy value/policy iteration pro danou instanci problému máte časový limit 30s. (Ale měli byste potřebovat jen zlomek tohoto času.)
  • Algoritmy implementované ve třídách ValueIterationAgent a PolicyIterationAgent musí odpovídat zadání. Například není možné v PolicyIterationAgent.find_policy() prostě zavolat ValueIteration.find_policy() nebo v ní (znovu) implementovat algoritmus value iteration (nebo opačně). V takovém případě může být celá úloha ohodnocena 0 body!
  • V implementaci algoritmů můžete používat jen veřejné rozhraní třídy ''MDPProblem''. Pokud byste měli pocit, že potřebujete využívat metody jiných tříd než MDPProblem nebo že potřebujete využít neveřejné proměnné a metody (jejichž jméno začíná na _), proberte to se svým cvičícím.

Jak na to?

  • Doporučujeme vytvořit si pro úlohu nový pracovní adresář. Zprovozněte si v něm aktualizovanou verzi balíčku kuimaze2.
  • Seznamnte se s prostředím MDPProblem.
  • V balíčku kuimaze2 najdete také skript example_mdp.py, který také ukazuje, jak se s prostředím dá pracovat. Lze jej využít jako výchozí kód pro implementaci obou tříd.
  • Je dost možné, že obě třídy budou mít nějaké společné části. V takovém případě doporučujeme (jak je naznačeno v example_mdp.py) extrahovat sdílené části do společného předka obou tříd:
    class MDPAgent:
        # Parts common to both methods/agents
        ...
     
    class ValueIterationAgent(MDPAgent):
        # Parts specific for value iteration
        ...
     
    class PolicyIterationAgent(MDPAgent):
        # Parts specific for policy iteration
        ...

Odevzdání

  • Termín odevzdání úlohy najdete v BRUTE, úloha 08-MDPs.
  • Odevzdejte modul mdp_agent.py, příp. ZIP archiv s modulem mdp_agent.py a dalšími vámi vytvořenými moduly, které váš agent potřebuje/importuje. Tyto soubory musí být v kořeni archívu, archív nesmí obsahovat žádné adresáře! Neodevzdávejte žádné moduly, které jste dostali od nás!

Hodnocení

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

courses/b3b33kui/semestralni_ulohy/3_mdp/start.txt · Last modified: 2024/03/27 08:06 by xposik