## Are you sure?

This action might not be possible to undo. Are you sure you want to continue?

Course: EA C461 (Artificial Intelligence) Prepared By: Dr. Mukesh Kumar Rohil Lab 4: Best-First Heuristic Search rohil@bits-pilani.ac.in

This Lab is based on the book by Ivan Bratko, Prolog Programming for Artificial Intelligence, Third Edition, 2001, Pearson Education Ltd., Second Impression 2007 (in India). Given the heuristic function f(n) = g(n) + h(n), where g(n) is an estimate of the cost of an optimal path from starting node, s, to current node, n, and h(n) is an estimate of the cost of an optimal path from node n to the goal node t. When node n is encountered by the search process we have following situation: a path from s to n must have already been found and its cost can be computed as the sum of the arc-costs on the path. It may not be optimal cost but its cost can serve as an estimate g(n) of the minimal cost from s to n.The other term, h(n), is more problematic because the ‘world’ between n and t has not been explored by the search until this point. Therefore, h(n) is typically is real heuristic guess, based on the algorithm’s general knowledge about the particular problem. Starting with the start node, the search keeps generating new successor nodes, always expanding in the most promising direction according to the f-values. During this process, a search tree is generated whose root is the start node of the search. The best-first search program will thus kep expanding this search tree until a solution is found. This tree will be represented in the program by terms of two forms: 1. l(N, F/G) represents a single node tree (a leaf); N is a node in the state space, G is g(N) (cost of the path found from the start node to N); F is f(N) = G + h(N). 2. t(N, F/G, Subs) represents a tree with non-empty subtree; N is the root of the tree, Subs is a list of its subtrees; G is g(N); F is updated f-value of N – that is, the f-value of the most promising successor of N; the list Subs is ordered according to increasing f-values of the sub-trees. The updating of the f-values is necessary to enable the program to recognize the most promising subtree at each level of the search tree. This modification of f-estimates lead, in fact, to a function f from nodes to tree. For a single node tree (a leaf), n, we have the original definition of f(n) i.e. f(n) = g(n) + h(n). For a tree, T, hose root is n, and n’s subtrees are S1, S2, etc., f(T) = minif(Si). A best-first program along these lines is shown in Table 1. Some more explanation of this program follows. The key procedure is expand, which has six arguments: expand(P, Tree, Bound, Tree1, Solved, Solution). It expands a current (sub)tree as long as the f-value of this tree remains less or equal to Bound. The arguments of expand are given in Table 2. P, Tree and Bound are ‘input’ parameters to expand. Expand produces three kinds of results which is indicated by the value of the argument Solved as follows:

(1).

Solved = yes. Solution = a solution path found by expanding Tree within Bound. Tree1 = uninstantiated. Solved = no. Solution = Tree expanded so that its f-value exceeds Bound. Tree1 = uninstantiated. Solved = never. Solution and Tree1 = uninstantiated.

(2).

(3).

A Prolog program (based on the best first search) to solve 8-puzzle problem is given in Table 3. However, some predicates need more clauses to be added. Do the following: 1. Apply the Best-first search (Table 2) to solve the routing problem (as given in Fig. 1) to find the shortest path from node s to node t. 2. Find the time taken by the method to find the shortest path for problem 1 above. [Hint: Read and Use time/2 predicate given in the LPA WinProlog help] 3. Comparing the program in Table 1 and Table 3, make a table of predicates of Table 1 and Table 3 by stating which predicate(s) in Table 3 does the analogous or similar work of which Figure 1: A routing network [The numbers along predicate(s) in Table 1. arcs are g(n) and numbers in square are h(n)] 4. The Table 3 (Best-first search applied to 8-puzzle problem) does not have some clauses of some predicate. Complete 1 2 those and run the program for five initial conditions to reach to the goal state. 3 4 5 The goal state is given in Fig. 2. 5. Name your files as L4_AI_YourID_pN and zip them as L4_AI_YourID.zip and 6 7 8 transmit to instructor’s email id. Replace the text YourID by your BITS Figure 2 IDNumber and N in pN by problem number 1, 2, 3, or 4 as the case may be.

% A best-first search program.

% bestfirst( Start, Solution): Solution is a path from Start to a goal bestfirst( Start, Solution) :expand( [], l( Start, 0/0), 9999, _, yes, Solution). % Assume 9999 is greater than any f-value % % % % expand( Path, Tree, Bound, Tree1, Solved, Solution): Path is path between start node of search and subtree Tree, Tree1 is Tree expanded within Bound, if goal found then Solution is solution path and Solved = yes

% Case 1: goal leaf-node, construct a solution path expand( P, l( N, _), _, _, yes, [N|P]) :goal(N). % Case 2: leaf-node, f-value less than Bound % Generate successors and expand them within Bound. expand( P, l(N,F/G), Bound, Tree1, Solved, Sol) :F =< Bound, ( bagof( M/C, ( s(N,M,C), not member(M,P) ), Succ), !, % Node N has successors succlist( G, Succ, Ts), % Make subtrees Ts bestf( Ts, F1), % f-value of best successor expand( P, t(N,F1/G,Ts), Bound, Tree1, Solved, Sol) ; Solved = never % N has no successors - dead end ). % Case 3: non-leaf, f-value less than Bound % Expand the most promising subtree; depending on % results, procedure continue will decide how to proceed expand( P, t(N,F/G,[T|Ts]), Bound, Tree1, Solved, Sol) :F =< Bound, bestf( Ts, BF), min( Bound, BF, Bound1), % Bound1 = min(Bound,BF)

expand( [N|P], T, Bound1, T1, Solved1, Sol), continue( P, t(N,F/G,[T1|Ts]), Bound, Tree1, Solved1, Solved, Sol). % Case 4: non-leaf with empty subtrees % This is a dead end which will never be solved expand( _, t(_,_,[]), _, _, never, _) :- !. % Case 5: f-value greater than Bound % Tree may not grow. expand( _, Tree, Bound, Tree, no, _) :f( Tree, F), F > Bound. % continue( Path, Tree, Bound, NewTree, SubtreeSolved, TreeSolved, Solution) continue( _, _, _, _, yes, yes, Sol). continue( P, t(N,F/G,[T1|Ts]), Bound, Tree1, no, Solved, Sol) :insert( T1, Ts, NTs), bestf( NTs, F1), expand( P, t(N,F1/G,NTs), Bound, Tree1, Solved, Sol). continue( P, t(N,F/G,[_|Ts]), Bound, Tree1, never, Solved, Sol) :bestf( Ts, F1), expand( P, t(N,F1/G,Ts), Bound, Tree1, Solved, Sol). % succlist( G0, [ Node1/Cost1, ...], [ l(BestNode,BestF/G), ...]): % make list of search leaves ordered by their F-values succlist( _, [], []). succlist( G0, [N/C | NCs], Ts) :G is G0 + C, h( N, H), % Heuristic term h(N) F is G + H, succlist( G0, NCs, Ts1), insert( l(N,F/G), Ts1, Ts). % Insert T into list of trees Ts preserving order w.r.t. f-values

insert( T, Ts, [T | Ts]) :f( T, F), bestf( Ts, F1), F =< F1, !. insert( T, [T1 | Ts], [T1 | Ts1]) :insert( T, Ts, Ts1).

% Extract f-value f( l(_,F/_), F). f( t(_,F/_,_), F). bestf( [T|_], F) :f( T, F). bestf( [], 9999). min( X, Y, X) :X =< Y, !. min( X, Y, Y). Table 1 P Tree Bound Tree1 Path between the start node and Tree Current search (sub)tree f-limit for expansion of Tree Tree expanded within Bound; consequently, the f-value of Tree1 is greater than Bound (unless a goal node has been found during the expansion). Solved Indicator whose value is ‘yes’, ‘no’, or ‘never’. Solution A solution path from the start node ‘through Tree1’ to a goal node within Bound (if such a goal node exists). Table 2 % Problem-specific procedures for the eight % puzzle, to be used in best-first search of Table 1. /* Problem-specific procedures for the eight puzzle Current situation is represented as a list of positions of the tiles, with first item in the list corresponding to the empty square. % f-value of a leaf % f-value of a tree % Best f-value of a list of trees % No trees: bad f-value

Example:

This position is represented by: 3 2 1 1 2 3 8 4 7 6 5 1 2 3

[2/2, 1/3, 2/3, 3/3, 3/2, 3/1, 2/1, 1/1, 1/2]

"Empty' can move to any of its neighbours which means that "empty' and its neighbour interchange their positions. */ % s( Node, SuccessorNode, Cost) s( [Empty | Tiles], [Tile | Tiles1], 1) :- % All arc costs are 1 swap( Empty, Tile, Tiles, Tiles1). % Swap Empty and Tile in Tiles swap( Empty, Tile, [Tile | Ts], [Empty | Ts] ) :mandist( Empty, Tile, 1). % Manhattan distance = 1 swap( Empty, Tile, [T1 | Ts], [T1 | Ts1] ) :swap( Empty, Tile, Ts, Ts1). mandist( X/Y, X1/Y1, D) :squares dif( X, X1, Dx), dif( Y, Y1, Dy), D is Dx + Dy. dif( A, B, D) :D is A-B, D >= 0, ! ; D is B-A. % D is Manhhattan dist. between two

% D is |A-B|

% Heuristic estimate h is the sum of distances of each tile % from its "home' square plus 3 times "sequence' score h( [Empty | Tiles], H) :goal( [Empty1 | GoalSquares] ), ﾍ

totdist( Tiles, GoalSquares, D), % Total distance from home squares seq( Tiles, S), % Sequence score H is D + 3*S. totdist( [], [], 0). totdist( [Tile | Tiles], [Square | Squares], D) :mandist( Tile, Square, D1), totdist( Tiles, Squares, D2), D is D1 + D2. % seq( TilePositions, Score): sequence score seq( [First | OtherTiles], S) :seq( [First | OtherTiles ], First, S). seq( [Tile1, Tile2 | Tiles], First, S) :score( Tile1, Tile2, S1), seq( [Tile2 | Tiles], First, S2), S is S1 + S2. seq( [Last], First, S) :score( Last, First, S). score( 2/2, _, 1) :- !. score( score( score( score( score( score( score( score( 1/3, 2/3, 3/3, 3/2, 3/1, 2/1, 1/1, 1/2, 2/3, 3/3, 3/2, 3/1, 2/1, 1/1, 1/2, 1/3, 0) 0) 0) 0) 0) 0) 0) 0) ::::::::!. !. !. !. !. !. !. !. % Tile in centre scores 1 % Proper successor scores 0

score( _, _, 2).

% Tiles out of sequence score 2

goal( [2/2,1/3,2/3,3/3,3/2,3/1,2/1,1/1,1/2] ). % Goal squares for tiles % Display a solution path as a list of board positions

showsol( [] ). showsol( [P | L] ) :showsol( L), nl, write( '---'), showpos( P). % Display a board position showpos( [S0,S1,S2,S3,S4,S5,S6,S7,S8] ) :member( Y, [3,2,1] ), % Order of Y-coordinates nl, member( X, [1,2,3] ), % Order of X-coordinates member( Tile-X/Y, % Tile on square X/Y [' '-S0,1-S1,2-S2,3-S3,4-S4,5-S5,6-S6,7-S7,8-S8] ), write( Tile), fail % Backtrack to next square ; true. % All squares done % Starting positions for some puzzles start1( [2/2,1/3,3/2,2/3,3/3,3/1,2/1,1/1,1/2] ). % Requires 4 steps start2( [2/1,1/2,1/3,3/3,3/2,3/1,2/2,1/1,2/3] ). % Requires 5 steps start3( [2/2,2/3,1/3,3/1,1/2,2/1,3/3,1/1,3/2] ). % Requires 18 steps % An example query: ?- start1( Pos), bestfirst( Pos, Sol), showsol( Sol). Table 3

- Rizal in UST vs. Ateneo
- Question About FATCA_2014
- Automatic Temp Controlled Fan
- 8 Puzzle Pro Log
- Visual Basic 6 Projects Tutorial With Source Code
- Yes or No Question
- Automatic Temperature Controller Using Lm35
- Worksheet Yes_no Questions
- What is Your Edge Among Other Applicants
- Hill Climbing Simulated Annealing and Best First Search
- TEMPERATURE SENSOR BASED CEILING FAN CONTROL SYSTEM
- Article2
- Jose Rizal HistoryA
- Rizal
- CH4_Depth-. Breadth-, And Best-First Search
- Resource Related Billing
- 21 Expand Tree on Initial Render 169158
- TreeView Structure in Excel VBA
- Tree
- Article II
- Tree Plan Guide 174
- Tree Plan Guide 176
- Copy BOL Node Trees Dynamically - CRM - SCN Wiki
- Unsql Spec
- 316515788-Resource-Related-Billing.pdf
- [Eng]Tutorial Tracking 2010.0.78
- TreePlan 203 Guide
- EVPI
- JKSimBlast_Surface_A5.pdf
- Predicting in-building WiFi Coverage

- null
- A Survey on Connected Target Coverage Algorithms in WSN
- Novel Approach for Mining E-Commerce Feedback Comments Using Comm Trust Data Mining Algorithm
- ClassMate - The Academic Assistant
- The benefits of collaboration in TOPdesk
- Prediction of changes in facial structure in anaplasty using Kinect
- Pi_Llution Monitoring Using Raspberry Pi
- A Study on CRAN R and MRAN R Interpreters
- Web Page Pattern Prediction Model Based on Dynamic Apriori Algorithm
- tmp5DAF.tmp
- Supply Chain and Value Chain Management for Sugar Factory
- MOUSE CONTROL USING COLOR BANDS
- GSTV 2015-16 CPNI Procedures.pdf
- AUTONOMOUS SURFACE CLEANING ROBOT EAMBEDED WITH AT89S52
- Identification and Prevention of Masquerade Attack using DDSGA Algorithm
- Ohio-Edison-Co-Trade-Ally-Sign-up-Form
- Image Processing Techniques For Quality Checking In Food Industry
- Ministry of Interior Request
- Tips and Tricks
- Clustering and Summarization of Tweet Streams
- Analytical Automation using IOT
- null
- Copy Move Image Forgery Detection using Pseudo Zernike Moment for Better Detection Accuracy
- Optimization of Routes for Vehicles on Google Map
- Liveness Detection for Biometric System using Image Quality Assessment
- Archiving the Web Guide
- zen.digital Announces BuzzJS 2.0 Conference for January 27th, 2017

- m07-logic
- m6-game-pub
- m08-fol
- m09 Inference
- m05-csp
- m14-bayesian
- m18 Learning
- m5-csp-pub
- m13 Uncertainty
- m06-game
- m04-Heuristics Informed Search
- m03 Uninformed Search
- m01 Introduction
- krepresentation
- m02 Agents Technology
- Lab 2 Tree Traversal in Prolog
- Lab 5 Best First Search for Scheduling
- Lab 3 N_Queens Problem in Prolog
- Lab 1 Introduction to PROLOG
- Lab 6 Lisp Programming and Working With Lisp Studio

Sign up to vote on this title

UsefulNot usefulRead Free for 30 Days

Cancel anytime.

Close Dialog## Are you sure?

This action might not be possible to undo. Are you sure you want to continue?

Close Dialog## This title now requires a credit

Use one of your book credits to continue reading from where you left off, or restart the preview.

Loading