Search
Prostředí kuimaze2.MDPProblem budete využívat v úlohách, kde jde o nalezení optimální strategie pro Markovský rozhodovací problém (MDP). Je použito ve třetí povinné úloze 08-MDPs.
kuimaze2.MDPProblem
08-MDPs
Po vytvoření instance třídy MDPProblem (viz Použití) můžete využívat následující metody:
MDPProblem
env.get_states()
State
env.is_terminal(state)
True
env.get_reward(state)
env.get_actions(state)
env.get_next_states_and_probs(state, action)
(<State>, probability)
env.render()
help(env.render)
MDPAgent.render()
example_mdp.py
Prostředí se typicky používá následujícím způsobem:
Import prostředí:
>>> from kuimaze2 import Map, MDPProblem
Vytvoření mapy, jíž budeme prostředí inicializovat:
>>> MAP = """ S.D ..G """ >>> map = Map.from_string(MAP)
Vytvoření prostředí, nejprve deterministického:
>>> env1 = MDPProblem(map)
Pokud chcete zapnout grafické zobrazení prostředí:
>>> env1 = MDPProblem(map, graphics=True)
Pokud chceme vytvořit prostřední nedeterministické (a to v případě MDP obvykle chceme), musíme určit, s jakými pravděpodobnostmi prostředí vykoná agentovu akci a s jakými “někam uhne”.
>>> env2 = MDPProblem(map, action_probs=dict(forward=0.8, left=0.1, right=0.1, backward=0.0))
Seznam všech validních stavů v prostředí:
>>> env2.get_states() [State(r=0, c=0), State(r=0, c=1), State(r=0, c=2), State(r=1, c=0), State(r=1, c=1), State(r=1, c=2)]
Zjištění, zda je stav terminální:
>>> env2.is_terminal(State(0, 0)) False >>> env2.is_terminal(State(0, 2)) True
Jaké odměny jsou spojeny s jednotlivými stavy? Odměny se vyplácejí při opuštění stavu.
>>> env2.get_reward(State(0,0)) -0.04 >>> env2.get_reward(State(0,2)) -1.0 >>> env2.get_reward(State(1,2)) 1.0
Jaké akce jsou ve stavu přípustné? V našem prostředí budou přípustné vždy všechny 4 akce, ale pokud narazíme do zdi, zůstaneme na místě.
>>> actions = env2.get_actions(State(0, 0)) >>> actions [<Action.UP: 0>, <Action.RIGHT: 1>, <Action.DOWN: 2>, <Action.LEFT: 3>]
Do jakých stavů a s jakou pravděpodobností se mohu dostat, pokud v nějakém stavu provedu jistou akci? V deterministickém prostředí:
>>> env1.get_next_states_and_probs(State(0, 0), actions[0]) [(State(r=0, c=0), 1.0)]
>>> env2.get_next_states_and_probs(State(0, 0), actions[0]) [(State(r=0, c=0), 0.8), (State(r=0, c=1), 0.1), (State(r=1, c=0), 0.0), (State(r=0, c=0), 0.1)]