Search in AI
Search in AI
connected disconnected
◻ A graph is connected if
every pair of nodes is
connected by a path
tree
◻ A connected graph with no
loop is called tree
◻ A weighted graph, is a
graph for which a value is weighted
1
associated to each arc 1
4 5
6
2 1
2 1
Example: Towers of Hanoi*
These nodes
are equals
1
2
3
A B C
2 2
3 1 3 1
A B C A B C
… 2
3 1 2 3 2 1 3 1
A B C A B C A B C
…
1 1 1 1
3 2 3 2 3 2 3 2
A B C A B C A B C A B C
… … … … …
1 …
2 3
A B C
… …
* A partial tree search space representation
Example: Towers of Hanoi*
◻ Informed methods
Use problem specific information to guide search in
promising directions
UNINFORMED SEARCH
Brute force approach to explore search
space
Uninformed Search
◻ A class of general purpose algorithms that operates in a brute force way
The search space is explored without leveraging on any information on the
problem
◻ Also called blind search, or naïve search
◻ Since the methods are generic they are intrinsically inefficient
◻ Prominent methods:
Depth-First Search
Breadth-First Search
Uniform-Cost Search
Depth-First Search
◻ Depth-First Search (DFS) begins at the root node and exhaustively search each branch to it
maximum depth till a solution is found
The successor node is selected going in depth using from right to left (w.r.t. graph
representing the search space)
◻ If greatest depth is reached without solution, we backtrack till we find an unexplored branch
to follow
◻ The algorithm can be implemented with a Last In First Out (LIFO) stack or recursion
Depth-First Search: Algorithm
List open, closed, successors={};
Node root_node, current_node;
insert-first(root_node,open)
while not-empty(open);
current_node= remove-first(open);
insert-first (current_node,closed);
if (goal(current_node)) return current_node;
else
successors=successorsOf(current_node);
for(x in successors)
if(not-in(x,closed)) insert-first(x,open);
endIf
endWhile
A B
2
3
S B F F A C D
5
4
6
open={S} closed ={}
A B
S B F F A C D
S A F D
d=1
◻ Space Complexity
how many nodes can be in the d=2
queue (worst-case)?
at each depth l < d we have b-1 d=3
nodes
at depth m we have b nodes m=d=4
total = (d-1)*(b-1) + b = O(bm)
Breadth-First Search
◻ Breadth-First Search (BFS) begins at the root
node and explore level-wise al the branches
◻ BFS is complete
If there is a solution, BFS will find it
◻ BFS is optimal
The solution found is guaranteed to be the shortest path
possible
while not-empty(open);
current_node=remove-first(open);
insert-last(current_node,closed);
if (goal(current_node)) return current_node;
else
successors=successorsOf(current_node);
for(x in successors)
if(not-in(x,closed)) insert-last(x,open);
endIf
endWhile
2
A B
3
4 5
S B F F A D C
A B
S B F F A C D
S A F D
d=2
=1 + b + b2+ ......... + bm 6 7
= O 4(bm) 5 d=3
14 15
8 9 10 1 12 13 G d=4
1
Further Uninformed Search
Strategies
◻ Depth-limited search (DLS): Impose a cut-off (e.g. n for
searching a path of length n-1), expand nodes with max.
depth first until cut-off depth is reached (LIFO strategy,
since it is a variation of depth-first search).
◻ Bidirectional search (BIDI): forward search from initial
state & backward search from goal state, stop when the
two searches meet. Average effort O(bd/2) if testing
whether the search fronts intersect has constant effort
◻ In AI, the problem graph is typically not known. If the
graph is known, to find all optimal paths in a graph with
labelled arcs, standard graph algorithms can be used
INFORMED SEARCH
Using knowledge on the search space to
reduce search costs
Informed Search
◻ Blind search methods take O(bm) in the worst case
◻ Best-First Search
◻ A*
◻ Hill Climbing
Cost and Cost Estimation
f(n)=g(n)+h(n)
◻ g(n) the cost (so far) to reach the node n
◻ h(n) estimated cost to get from the node to the
goal
◻ f(n) estimated total cost of path through n to
goal
Informed Search: Best-First Search
◻ Special case of breadth-first search
◻ Uses h(n) = heuristic function as its evaluation function
◻ Ignores cost so far to get to that node (g(n))
◻ Expand the node that appears closest to goal
◻ Special cases:
uniform cost search: f(n) = g(n) = path to n
A* search
Best-First Search: Algorithm
List open, closed, successors={};
Node root_node, current_node;
insert-last(root_node,open)
h=1 h=1
2
A B
h=2 h=2
3
h=2 h=2 h=2 h=2 h=2
S B F F A D C
In this case we estimate the cost as the distance from the root node (in term of nodes)
Best-First Search: Example
S
S A F D
In this case we estimate the cost as the distance from the root node (in term of nodes)
A* : Example
S
h=1, w=2, g=2 h=1, w=1, g=1
A B
h=2, h=2, w=7, g=9 h=2, w=4, g=5
w=2, h=2,
h=2 h=2, w=4, g=5
g=4 w=1
w=3
g=3 h=2,
S B F F A g=4 C w=1 D
g=2
S A F D
current_node=root_node
while (current_node!=null)
if (goal(current_node)) return current_node;
else
successors=successorsOf(current_node);
nextEval = -∞; nextNode=null;
for(x in successors)
if(eval(x)> nextEval)
nexEval=eval(x);
nextNode=x;
current_node=nextNode,
endIf
endWhile
Hill Climbing: Example
1 S
h=1 h=1
A B
h=2 h=2
2
h=3 h=2 h=2 h=2 h=2
S B F F A D C
In this case we estimate the cost as the distance from the root node (in term of nodes)
Hill Climbing: Example
S
h=1 h=1
A B
h=2 h=2
h=3 h=2 h=2 h=2 h=2
S B F F A C D
h=1
S A F D
b, branching factor
d, tree depth of the solution
m, maximum tree depth
ILLUSTRATION BY A LARGER
EXAMPLE
Route Search
◻ Start point:
Milan
◻ End point:
Innsbruck
◻ Search space:
Cities
Nodes: Cities
Arcs: Roads
◻ Let’s find a
possible route!
Graph Representation
◻ We start from the
Feldkirck root node, and
Landeck Innsbruck (Goal) pick the leaves
Piacenza
Depth-First Search
Milan
Innsbruck Innsbruck
N.B.: by building the tree, we are exploring the search space!
Breadth-First search
Milan
1 4
2
3
Innsbruck Innsbruck
Merano Merano
Innsbruck Innsbruck
According to Google
Maps: 358 km – 5 hours
Landeck
Landeck 18 mins
Innsbruck Innsbruck
100
90
180 140 Merano
25
Bolzano
135
Chiavenna 55
40 Sondrio
Lugano 60 Trento
42
20
25 Lecco
Como 90
50 Bergamo 80
45
45
55
Milan (Root) 60
Brescia Verona
60 70
Piacenza
Best-First search
Milan
Innsbruck Innsbruck
Merano Merano
Innsbruck Innsbruck
According to Google
Maps: 358 km – 5 hours
Landeck
Landeck 18 mins
And this is really the shortest way!
Innsbruck Innsbruck
◻ Informed Search
Heuristic function selection determines the efficiency of
the algorithm
If actual cost is very expensive to be computed, then Best
First Search is a good solution
Hill climbing tends to stack in local optimal solutions