====== SearchProblem ======
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''.
===== Dostupné metody =====
Po vytvoření instance třídy ''SearchProblem'' (viz [[.:10_SearchProblem#pouziti|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)'').
===== Použití =====
Prostředí se typicky používá následujícím způsobem:
* Import it:
>>> from kuimaze2 import SearchProblem, Map
* Create an instance of the environment with the chosen [[.:05_map|map]]:
>>> MAP = "S...G"
>>> env = SearchProblem(Map.from_string(MAP))
nebo (pokud chcete grafické zobrazení)
>>> env = SearchProblem(Map.from_string(MAP), graphics=True)
* Dotaz na startovní (a cílové, pokud jsou třeba) stavy:
>>> 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)}
* Komunikace s prostředím:
>>> actions = env.get_actions(start)
>>> actions
[, , , ]
>>> 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)''.