Prostředí kuimaze2.SearchProblem
budete využívat v úlohách, kde jde o nalezení nejkratší cesty v bludišti. Je použito v nepovinné úloze 01-easy_search
a v první povinné úloze 03-search
.
Po vytvoření instance třídy SearchProblem
(viz Použití) můžete využívat následující metody:
env.get_start()
vrací startovní stav (State
) prohledávacího problému.
env.get_goals()
vrací množinu cílových stavů prohledávacího problému.
env.is_goal(state)
vrací True
, pokud je state
mezi cílovými stavy.
env.get_actions(state)
vrací seznam akcí (Action
) dostupných v daném stavu (state
).
env.get_transition_result(state, action)
vrací nový stav a cenu přechodu (tj. dvojici (new_state, transition_cost)
) pro situaci, kdy ve stavu state
zvolíte akci action
.
env.render()
aktualizuje grafické zobrazení prostředí. (Pokud jste grafické zobrazení při vytváření prostředí nezapnuli, nedělá nic.) Vysvětlení jednotlivých parametrů této metody najdete v helpu (help(env.render)
).
Prostředí se typicky používá následujícím způsobem:
>>> from kuimaze2 import SearchProblem, Map
>>> MAP = "S...G" >>> env = SearchProblem(Map.from_string(MAP))nebo (pokud chcete grafické zobrazení)
>>> env = SearchProblem(Map.from_string(MAP), graphics=True)
>>> start = env.get_start() # start State >>> start State(r=0, c=0) >>> goals = env.get_goals() # set of goal States >>> goals {State(r=0, c=4)}
>>> actions = env.get_actions(start) >>> actions [<Action.UP: 0>, <Action.RIGHT: 1>, <Action.DOWN: 2>, <Action.LEFT: 3>] >>> next_state, cost = env.get_transition_result(start, actions[0]) >>> next_state State(r=0, c=0) # It is not possible to go UP from the start state, so stay in place >>> cost 1 # Although you stayed in place, the action costs you 1 unit >>> env.get_transition_result(start, actions[1]) # ... but it should be possible to go RIGHT (State(r=0, c=1), 1) # And yes, it is, we moved.
K aktualizaci grafického znázornění prostředí (pokud bylo vytvořeno pomocí env = SearchProblem(…, graphics=True)
), použijte:
env.render()Metoda
render()
má několik nepovinných argumentů, které vám mohou pomoct vizualizovat různé aspekty vašeho algoritmu; detaily zjistíte pomocí help(SearchProblem.render)
.