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 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 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
    [<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).

courses/b3b33kui/semestralni_ulohy/kuimaze/10_searchproblem.txt · Last modified: 2024/02/20 16:08 by xposik