Search
Prostředí kuimaze2.RLProblem využijete při učení co nejlepší strategie pro neznámý MDP metodami posilovaného učení (reinforcement learning). Je použito ve čtvrté povinné úloze 11-RL.
kuimaze2.RLProblem
11-RL
Po vytvoření instance třídy RLProblem (viz Použití) můžete využívat následující metody:
RLProblem
env.get_states()
State
env.get_action_space()
MDPProblem.get_actions(state)
env.sample_action(action_probs)
action_probs
env.reset()
env.step(action)
new_state
reward
float
episode_finished
True
step()
reset()
env.render()
help(env.render)
RLAgent.render()
example_rl.py
Prostředí se vytváří prakticky stejně jako MDPProblem, ale použití je jiné.
MDPProblem
Import prostředí:
>>> from kuimaze2 import Map, RLProblem
Vytvoření mapy, jíž budeme prostředí inicializovat:
>>> MAP = "SG" >>> map = Map.from_string(MAP)
Vytvoření deterministického prostředí s grafickým zobrazením:
>>> env1 = RLProblem(map, graphics=True)
Vytvoření nedeterministického prostředí (určení pravděpodobností, kam se agent ve skutečnosti pohne):
>>> env2 = RLProblem(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)]
Seznam všech akcí, které lze v nějakém stavu prostředí vykonat:
>>> env2.get_action_space() [<Action.UP: 0>, <Action.RIGHT: 1>, <Action.DOWN: 2>, <Action.LEFT: 3>]
Může se hodit i náhodně vybraná akce:
>>> env2.sample_action() # Výsledkem může být kterákoli z možných akcí. <Action.UP: 0>
Metoda step se pokusí v prostředí vykonat zvolenou akci:
>>> env2.step(env2.sample_action())
Traceback (most recent call last): File "<stdin>", line 1, in <module> File "...\kuimaze2\rl.py", line 60, in step raise NeedsResetError( kuimaze2.exceptions.NeedsResetError: RLProblem: Episode terminated. You must call reset() first.
reset
Volání metody reset() vrátí počáteční stav agenta pro danou epizodu:
>>> state = env2.reset() >>> state State(r=0, c=0)
Nyní můžeme zavolat metodu step():
>>> action = env2.sample_action() >>> action <Action.DOWN: 2> >>> new_state, reward, episode_finished = env2.step(action) >>> new_state State(r=0, c=0) >>> reward -0.04 >>> episode_finished False
Action.DOWN
-0.04
Zkusme tedy dělat náhodné kroky, dokud epizoda neskončí:
>>> while not episode_finished: ... action = env2.sample_action() ... new_state, reward, episode_finished = env2.step(action) ... print(f"{state=} {action=} {reward=} {new_state=} {episode_finished=}") ... state = new_state ... state=State(r=0, c=0) action=<Action.DOWN: 2> reward=-0.04 new_state=State(r=0, c=0) episode_finished=False state=State(r=0, c=0) action=<Action.RIGHT: 1> reward=-0.04 new_state=State(r=0, c=1) episode_finished=False state=State(r=0, c=1) action=<Action.UP: 0> reward=1.0 new_state=None episode_finished=True
Další volání metody step() by opět vyvolalo výjimku. Epizoda skončila, chceme začít novou, musíme tedy opět zavolat reset().