====== 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)''.