# Searching State Space

### 1. Problem solving as graph search

One of the earliest AI approaches is to see intelligence as problem-solving capability, and to specify problem-solving as state-space search, that is, by selecting applicable actions, changing the initial state into a goal state, step by step.
Example: 8-puzzle
A generic searching algorithm specifies a sequence of selections.

Direction of search: forward (data-driven), backward (goal-driven), or bidirectional.
Information about the selections:
- Fully informed search: human-designed problem-specific algorithm, no "search" is necessary. Example: sorting.
- Uninformed (blind, brute-force) search: only consider graph structure, such as Breadth-First and Depth-First, where the "frontier" data structure is a queue and a stack, respectively.
- Partially informed search: there are hints among the branches, though they can be wrong.

Exhaustive search can be considered as a general-purpose solution if the graph is finite and resource expense is ignored, though in reality resource is limited and response time matters. Therefore, combinatorial (exponential) explosion is a common problem in various AI domains, and the issue is not merely on computational complexity or hardware.
### 2. Heuristic search

AI research focuses on partially informed search, such as heuristic search, or "Best-First" search, where the "frontier" is a priority queue with a heuristic function to decide the search order of nodes, as in A* algorithm where a least-cost path is pursued until a goal node is reached.
Example: General Problem Solver (GPS) using means-ends analysis to get heuristics.

Newell-Simon76: "A physical symbol system has the necessary and sufficient
means for general intelligent action", "physical symbol systems solve problems by means of heuristic search".
A general principle: under bounded rationality, an agent should seek a satisfactory solution rather than an optimal one. This principle is
acknowledged as widely applicable.
### 3. Game playing

Two-player zero-sum games are often handled as state-space search using minimax algorithm, which find the most "rational" moves for both players.
Example: Tic-tac-toe.
To improve the efficiency of searching, various ideas have been tried:

- Alpha_beta pruning reduces the search scope without missing the right solution.
- Arthur Samuel used rote-learning and play-against-itself to learn a scoring function of positions.
- Deep Blue used parallel processing, opening-position and endgame databases, and a complicated evaluation function designed by experts.
- AlphaGo combines Monte Carlo tree search with learned evaluation functions to deal with the huge state-space of Go. The search algorithm uses random sampling to estimate the value of a node.

### 4. Analysis

When deciding whether to use heuristic search to solve a problem, the major questions to be asked are:
- Can this problem-solving process be naturally represented as state-space search?
- Can a good heuristic function be obtained to satisfy the time requirement?

In general, a problem-solving process involves a sequence of decisions or choices, even though not necessarily among enumerable alternatives at well-defined states. AI problems are often characterized by partially-informed decisions in changing environments, where traditional theories (on computability, computational complexity, decision making, gaming playing, operations research, etc.) are no longer fully applicable.
In particular, dealing with real-time requirement is even beyond the restriction of "bounded rationality". One possible approach is parallel search with dynamic resource allocation basing on learned priority.

### Reading

- Poole and Mackworth: Chapter 3, Section 14.3
- Russell and Norvig: Chapters 3 & 4 & 5
- Luger: Chapters 3 & 4