1.0 - Blind and Uninformed Search Algorithms

1.1 - Intelligent Agents

Figure 1 - Agent Design Problem

1.2 - Recall our Goal

Our goal is to build a useful, intelligent agent

1.3 - The Agent Design Problem (& Agent Design Components)

1.4 - Defining the Environment

Properties about the environment itself or the agent's knowledge about the environment

  1. Discrete vs Continuous

    Are the state / action / percept spaces finite?

  2. Fully Observable vs Partially Observable
  3. Deterministic vs Stochastic (Non-Deterministic)
  4. Single Agent vs Multiple Agents

    Are there other agents interacting?

  5. Static vs Dynamic

    Can the world change while the agent is "thinking"?

1.4.1 - Environment Example - 8-Puzzle

1.4.2 - Noughts and Crosses / Tic-Tac-Toe

Note: The classification sometimes depends on time discretization. In this example, 1 time step = a single move by the agent & opponent.

Adversarial search problem or zero-sum game - covered in Module 5

2.0 - Introduction to Search Problems

2.1 - Where to Apply Search Methods

🧠 Why is this? Because it's fully observable (Percept function is the identity function)

2.2 - What is Search?

Figure 2 - 8 Puzzle
Goal: How to find the solution with the smallest exploration cost?

2.3 - Types of Search Methods

For this module of the course, we will discuss two types of search:

2.3.1 - Blind Search

2.3.2 - Informed Search

3.0 - Formulating a Problem as a Search Problem

3.1 - Example - 8-Puzzle

3.2 - How to do the search?

3.2.1 - State Graph Representation

Figure 2 - 8 Puzzle
Figure 3 - State Graph

4.0 - General Structure of Search Algorithms

4.1 - Generic Search Algorithm

Figure 4 - Visual Representation of a generic search algorithm searching through a graph. The starting node, frontier, explored nodes and unexplored nodes are labelled.

4.1.1 - General Structure of a Search Algorithm

4.2 - Search Graphs vs Search Trees

Figure 5 - Visual Representation of a generic search algorithm's traversal through a state space graph and its corresponding search tree.

4.3 - The Container is the Fringe of the Tree

Figure 6 - Fringe nodes and the container data structure they are stored in.

4.4 - General Structure of Search Algorithms with a Search Tree

Figure 6 - Difference between Tree Search and Graph Search. From Russell & Norvig. The difference between the two algorithms are in italics and bold.

4.5 - Performance Measures for Search Algorithms

4.5.1 - Big-O Notation

4.5.2 - Branching Factor

Figure 7 - Branching Factor and Graph Topologies

5.0 - Blind Search Methods

5.1 - Blind Search Algorithms

Figure 8 - Difference in exploration path between Breadth-First Search (BFS) and Depth-First Search (DFS)

5.1.2 - Breadth-First Search - Bidirectional Strategy

O(bd/2)<<O(bd)O(b^{d/2}) << O(b^d)

(Where <<<< means much less than)

Figure 9 - Bidirectional BFS

5.1.4 - Iterative Deepening DFS (IDDFS)

6.0 - Search with Edge Cost: Uniform Cost Search

cost(n0,...,nk)=i=1kcost(ni1,ni)cost(n_0, ..., n_k)=\sum^k_{i=1}cost(n_{i-1}, n_i)
import queue
q = queue.PriorityQueue()