====== SearchProblem ======
Environment ''kuimaze2.SearchProblem'' shall be used for problems of finding the shortest path in a maze. It is used in optional task 01-easy_search and the first mandatory semestral task 03-search.
===== Available methods =====
After creation of the ''SearchProblem'' instance (see [[.:10_searchproblem#usage|Usage]]), you can use the following methods of the environment:
* ''env.get_start()'' returns the start ''State'' of the problem.
* ''env.get_goals()'' returns the set of goal ''State''s of the problem.
* ''env.is_goal(state)'' returns True, if the ''state'' is among the goal states.
* ''env.get_actions(state)'' returns a list of all actions available in the given state.
* ''env.get_transition_result(state, action)'' returns a pair of ''(new_state, transition_cost)'' when choosing applying ''action'' in ''state''.
* ''env.render()'' updates the graphical display of the environment. For the explanation of various parameters of this method, see ''help(env.render)''.
===== Usage =====
To use the environment, you need to:
* 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))
* Get the start (and goals, if needed):
>>> 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)}
* Communicate with the environment:
>>> 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.
To update the graphical display of the environment (if you created it with ''env = SearchProblem(..., graphics=True)''), use:
env.render()
Method ''render()'' has many arguments that can be used to display various parts of your algorithm. See ''help(SearchProblem.render)''.