# Search Search plays a key role in many parts of AI. These algorithms provide the conceptual backbone of almost every approach to the systematic exploration.

## Presentation on theme: "Search Search plays a key role in many parts of AI. These algorithms provide the conceptual backbone of almost every approach to the systematic exploration."— Presentation transcript:

Search Search plays a key role in many parts of AI. These algorithms provide the conceptual backbone of almost every approach to the systematic exploration of alternatives. There are four classes of search algorithms, which differ along two dimensions: –First, is the difference between uninformed (also known as blind) search and then informed (also known as heuristic) searches. Informed searches have access to task-specific information that can be used to make the search process more efficient. –The other difference is between any solution searches and optimal searches. Optimal searches are looking for the best possible solution while any- path searches will just settle for finding some solution.

Graphs Graphs are everywhere; E.g., think about road networks or airline routes or computer networks. In all of these cases we might be interested in finding a path through the graph that satisfies some property. It may be that any path will do or we may be interested in a path having the fewest "hops" or a least cost path assuming the hops are not all equivalent.

Romania graph

Formulating the problem On holiday in Romania; currently in Arad. Flight leaves tomorrow from Bucharest. Formulate goal: –be in Bucharest Formulate problem: –states: various cities –actions: drive between cities Find solution: –sequence of cities, e.g., Arad, Sibiu, Fagaras, Bucharest

Another graph example However, graphs can also be much more abstract. A path through such a graph (from a start node to a goal node) is a "plan of action" to achieve some desired goal state from some known starting state. It is this type of graph that is of more general interest in AI.

Problem solving One general approach to problem solving in AI is to reduce the problem to be solved to one of searching a graph. To use this approach, we must specify what are the states, the actions and the goal test. A state is supposed to be complete, that is, to represent all the relevant aspects of the problem to be solved. We are assuming that the actions are deterministic, that is, we know exactly the state after the action is performed.

Goal test In general, we need a test for the goal, not just one specific goal state. –So, for example, we might be interested in any city in Germany rather than specifically Frankfurt. Or, when proving a theorem, all we care is about knowing one fact in our current data base of facts. –Any final set of facts that contains the desired fact is a proof.

Vacuum cleaner?

Vacuum cleaner

Formally… A problem is defined by four items: 1.initial state e.g., "at Arad" 2.actions and successor function S: = set of action-state tuples –e.g., S(Arad) = {(goZerind, Zerind), (goTimisoara, Timisoara), (goSilbiu, Silbiu)} 3.goal test, can be –explicit, e.g., x = "at Bucharest" –implicit, e.g., Checkmate(x) 4.path cost (additive) –e.g., sum of distances, or number of actions executed, etc. –c(x,a,y) is the step cost, assumed to be 0 A solution is a sequence of actions leading from the initial state to a goal state

Example: The 8-puzzle states? actions? goal test? path cost?

Example: The 8-puzzle states? locations of tiles actions? move blank left, right, up, down goal test? = goal state (given) path cost? 1 per move

Romania graph

Tree search example

Tree search algorithms Basic idea: –Exploration of state space by generating successors of already-explored states (i.e. expanding states)

(

Data type node: components : STATE, PARENT_NODE, OPERATOR, DEPTH, PATH_COST components : STATE, PARENT_NODE, OPERATOR, DEPTH, PATH_COST

Function GENERAL-SEARCH ( problem,QUEUING_FN ) returns a solution or failure nodes MAKE_QUEUE (MAKE_NODE (INITIAL_STATE [problem ] )) nodes MAKE_QUEUE (MAKE_NODE (INITIAL_STATE [problem ] )) Loop do if nodes is empty then return failure if nodes is empty then return failure node REMOVE_FRONT (nodes ) node REMOVE_FRONT (nodes ) if GOAL_TEST [problem ] applied to STATE ( node ) succeeds then return node if GOAL_TEST [problem ] applied to STATE ( node ) succeeds then return node nodes QUEUING_FN (nodes, EXPAND (node,OPERATORS [problem ] )) nodes QUEUING_FN (nodes, EXPAND (node,OPERATORS [problem ] ))End

Function SIMPLE-PROBLEM-SOLVING-AGENT (percept) returns an action Inputs: percept, a percept Static: seq, an action sequence, initially empty state, some description of the current world state goal, a goal, initially null problem, a problem formulation State UPDATE-STATE(state,percept) If seq is empty then do goal FORMULATE-GOAL(state) problem FORMULATE-PROBLEM(state,goal) seq SEARCH(problem) action FIRST(seq) seq REST(seq) Return action

Function Tree-Search(problem,fringe) returns a solution, or failure fringeInsert(MAKE-NODE(INITIAL-STATE[problem]),fringe) loop do if Empty?(fringe) then return failure node REMOVE-FIRST(fringe) if GOAL-TEST[problem] applied to STATE[node] succeeds then return SOLUTION(node) fringe INSERT-ALL(EXPAND(node,problem),fringe) Function EXPAND(node,problem) returns a set of nodes successors the empty set For each(action,result)in SUCCESSOR-FN[problem](STATE[node]) do s a new node STATE[s] result PARENT-NODE[s] node ACTION[s] action PATH-COST[s] PATH-COST[node]+STEP-COST(node,action,s) DEPTH[s] DEPTH[node]+1 add s to successors return successors

Search strategies A search strategy is defined by picking the order of node expansion Strategies are evaluated along the following dimensions: –completeness: does it always find a solution if one exists? –time complexity: number of nodes generated –space complexity: maximum number of nodes in memory –optimality: does it always find a least-cost solution? Time and space complexity are measured in terms of –b: maximum branching factor of the search tree –d: depth of the least-cost solution –m: maximum depth of the state space

Uninformed search strategies Uninformed do not use information relevant to the specific problem. Breadth-first search Uniform-cost search Depth-first search Depth-limited search Iterative deepening search Bidirectional search

Function BREADTH_FIRST_SEARCH ( problem ) return a solution or failure return GENERAL_SEARCH (problem,ENQUEUE_AT_END

Breadth-first search TreeSearch(problem, FIFO-QUEUE()) results in a breadth-first search. The FIFO queue puts all newly generated successors at the end of the queue, which means that shallow nodes are expanded before deeper nodes. –I.e. Pick from the fringe to expand the shallowest unexpanded node

Breadth-first search Expand shallowest unexpanded node Implementation: –fringe is a FIFO queue, i.e., new successors go at end

Breadth-first search Expand shallowest unexpanded node Implementation: –fringe is a FIFO queue, i.e., new successors go at end

Breadth-first search Expand shallowest unexpanded node Implementation: –fringe is a FIFO queue, i.e., new successors go at end

Properties of breadth-first search Complete? –Yes (if b is finite) Time? –1+b+b 2 +b 3 +… +b d + b(b d -1) = O(b d+1 ) Space? –O(b d+1 ) (keeps every node in memory) Optimal? –Yes (if cost is a non-decreasing function of depth, e.g. when we have 1 cost per step)

DepthNodesTimeMemory 011 millisecodns100 bytes 2111.1 sec11 kilobytes 411,11111 sec1 Megabyte 610 6 18 min111 Megabyte 810 8 31 hours11Gigabyte 1010 128 days1 Terabyte 1210 12 35 years111 Terabyte 1410 14 3500 years11111 Terabyte Suppose b=10, 1000 nodes/sec, 100 bytes/node

Uniform-cost search Expand least-cost unexpanded node. The algorithm expands nodes in order of increasing path cost. Therefore, the first goal node selected for expansion is the optimal solution. Implementation: –fringe = queue ordered by path cost (priority queue) Equivalent to breadth-first if step costs all equal Complete? Yes, if step cost ε (I.e. not zero) Time? number of nodes with g cost of optimal solution, O(b C*/ ε ) where C * is the cost of the optimal solution Space? Number of nodes with g cost of optimal solution, O(b C*/ ε ) Optimal? Yes – nodes expanded in increasing order of g(n)

Depth-first search Expand deepest unexpanded node Implementation: –fringe = LIFO queue, i.e., put successors at front

Depth-first search Expand deepest unexpanded node Implementation: –fringe = LIFO queue, i.e., put successors at front

Depth-first search Expand deepest unexpanded node Implementation: –fringe = LIFO queue, i.e., put successors at front

Depth-first search Expand deepest unexpanded node Implementation: –fringe = LIFO queue, i.e., put successors at front

Depth-first search Expand deepest unexpanded node Implementation: –fringe = LIFO queue, i.e., put successors at front

Depth-first search Expand deepest unexpanded node Implementation: –fringe = LIFO queue, i.e., put successors at front

Depth-first search Expand deepest unexpanded node Implementation: –fringe = LIFO queue, i.e., put successors at front

Depth-first search Expand deepest unexpanded node Implementation: –fringe = LIFO queue, i.e., put successors at front

Depth-first search Expand deepest unexpanded node Implementation: –fringe = LIFO queue, i.e., put successors at front

Depth-first search Expand deepest unexpanded node Implementation: –fringe = LIFO queue, i.e., put successors at front

Depth-first search Expand deepest unexpanded node Implementation: –fringe = LIFO queue, i.e., put successors at front

Depth-first search Expand deepest unexpanded node Implementation: –fringe = LIFO queue, i.e., put successors at front

Properties of depth-first search Complete? No: fails in infinite-depth spaces, spaces with loops –Modify to avoid repeated states along path complete in finite spaces Time? O(b m ): terrible if m is much larger than d – but if solutions are dense, may be much faster than breadth-first Space? O(bm), i.e., linear space! Optimal? No

Function DEPTH_FIRST_SEARCH ( problem ) return a solution or failure return GENERAL_SEARCH (problem,ENQUEUE_AT_FRONT ) DEPTH_FIRST_SEARCH 1.List s 2.if List = null then fail, stop 3.n First (List) 4.if n = GOAL then success, stop 5. List Tail ( List ) 6. Clist Expand( n ) 7. List Append (Clist, List ) 8. Goto 2 Nilsson Algorithm

DepthLimitedSearch (int limit) { stackADT fringe; insert root into the fringe do { if (Empty(fringe)) return NULL; /* Failure */ nodePT = Pop(fringe); if (GoalTest(nodePT->state)) return nodePT; /* Expand node and insert all the successors */ if (nodePT->depth < limit) insert into the fringe Expand(nodePT) } while (1); } Depth-limited search

Iterative deepening Search Function ITERATIVE_DEEPING_SEARCH( problem ) returns a solution sequence or failure inputs: problem, a problem for depth 0 to do if DEPTH_LIMITED_SEARCH ( problem, depth ) succeeds then return its result end return failure

Iterative deepening search l =0

Iterative deepening search l =1

Iterative deepening search l =2

Iterative deepening search l =3

Iterative deepening search Number of nodes generated in a breadth-first search to depth d with branching factor b: N BFS = b 0 + b 1 + b 2 + … + b d-2 + b d-1 + b d Number of nodes generated in an iterative deepening search to depth d with branching factor b: N IDS = (d+1)b 0 + d b 1 + (d-1)b 2 + … + 3b d-2 +2b d-1 + 1b d For b = 10, d = 5, –N BFS = 1 + 10 + 100 + 1,000 + 10,000 + 100,000 = 111,111 –N IDS = 6 + 50 + 400 + 3,000 + 20,000 + 100,000 = 123,456 Overhead = (123,456 - 111,111)/111,111 = 11%

Properties of iterative deepening search Complete? Yes Time? (d+1)b 0 + d b 1 + (d-1)b 2 + … + b d = O(b d ) Space? O(bd) Optimal? Yes, if step cost = 1

Which Direction Should We Search? Our choices: Forward, backwards, or bidirectional The issues: How many start and goal states are there? Branching factors in each direction How much work is it to compare states?

Summary of algorithms Criterion Breadth- First Uniform- Cost Depth- First Depth- Limited Iterative Deepening Bidirectional (if applicable) Complete? Yes No Yes, If l d Yes Time b d b m b l b d b d/2 Space b d bm bl bd b d/2 Optimal? Yes No Yes

Repeated states Failure to detect repeated states can turn a linear problem into an exponential one!

Graph search

Download ppt "Search Search plays a key role in many parts of AI. These algorithms provide the conceptual backbone of almost every approach to the systematic exploration."

Similar presentations