See: Description
| Interface | Description | 
|---|---|
| NodeExpander.NodeListener | Interface for progress Tracers | 
| PerceptToStateFunction | This interface is to define how to Map a Percept to a State representation
 for a problem solver within a specific environment. | 
| SearchForActions | Interface for all AIMA3e search algorithms which store at least a part of the
 exploration history as search tree and return a list of actions leading from
 the initial state to a goal state. | 
| SearchForStates | Interface for all AIMA3e search algorithms which forget the exploration history and
 return just a single state which is hopefully a goal state. | 
| SolutionChecker | A specialization of the  GoalTest | 
| Class | Description | 
|---|---|
| Metrics | Stores key-value pairs for efficiency analysis. | 
| Node | Artificial Intelligence A Modern Approach (3rd Edition): Figure 3.10, page
 79. Figure 3.10 Nodes are the data structures from which the search tree is constructed. | 
| NodeExpander | Instances of this class are responsible for node creation and expansion. | 
| PrioritySearch | Performs search by creating a priority queue based on a given
  Comparatorand feeding it to a givenQueueSearchimplementation which finally controls the simulated search space exploration. | 
| ProblemSolvingAgent | Modified copy of class
  aima.search.framework.SimpleProblemSolvingAgentwhich can be used for
 online search, too. | 
| QueueFactory | Factory class for queues. | 
| SearchAgent | |
| SearchUtils | Provides several useful static methods for implementing search. | 
| SimpleProblemSolvingAgent | Artificial Intelligence A Modern Approach (3rd Edition): Figure 3.1, page 67. | 
SearchForActions and
 SearchForStates. Most of the concrete
 algorithms implement both of them. Many search algorithms are basically
 queue-based algorithms. They construct a tree of nodes which represents the
 possible sequences of actions and the corresponding resulting states. A queue
 is used to manage and prioritize the current end points of already analyzed
 sequences.
 
 PrioritySearch. They delegate the work of
 controlling the actual search to some
 QueueSearch implementation. The
 most important concrete implementations are TreeSearch, GraphSearch, and
 BidirectionalSearch.
 
 NodeExpander class is used for
 this purpose. The default implementation should work for most purposes, but
 it is possible to equip search algorithms with specialized versions (e.g.
 which modify path cost computation - extra costs for move direction changes).
 The node structure is needed when searching for sequences of actions (just
 follow parent links after a goal state node was found). Defining search for
 states (e.g. in a local search strategy) based on nodes makes sense, too.
 Nodes do not necessary increase space complexity as long as parent links can
 be switched off. However, by switching on parent links, those algorithms can
 be turned into search for actions algorithms. Additionally, the common node
 expander interface unifies progress tracing for all search algorithms (just
 add a node listener to get notifications about expanded nodes).