home *** CD-ROM | disk | FTP | other *** search
-
- Aieye Listing 1
-
-
- ; hill climbing search
- ; in PC Scheme
- ; call: (hike-up 'o 'g)
-
- (define hike-up
- (lambda (origin goal)
- (climb (list (list origin)) goal)))
-
- (define climb
- (lambda (path goal)
- (cond ((eq? path '()) '())
- ((eq? goal (caar path)) (reverse (car path)))
- (else
- (climb (append (sort-path ;sort node's children
- (expand-node (car path)) ;by remaining distance
- (lambda (path1 path2) ;children to front
- (nearest? path1 path2 goal)))
- (cdr path)) goal)))))
-
- (define how-far ;straightline distance
- (lambda (node1 node2)
- (sqrt (+ (square (- (getprop node1 'x)
- (getprop node2 'x)))
- (square (- (getprop node1 'y)
- (getprop node2 'y)))))))
-
- (define (square x) (* x x))
-
- (define nearest? ;which is least distance from goal node
- (lambda (path1 path2 goal)
- (<? (how-far (car path1) goal)
- (how-far (car path2) goal))))
-
- (define (sort-path path by)
- (sort! path by))
-
- (define expand-node ;find node's offspring using
- (lambda (path) ;property list
- (map (lambda (child) (cons child path))
- (getprop (car path) 'children))))
- ;include property list from Listing 2
- ;end-of-hill-climbing-search
-
-
-
- Aieye Listing 2
-
-
-
- ; Property list describing net
- ; to be used with each search listingè; in Scheme. Individual LISP implementations
- ; vary in property list structure and
- ; operations.
- ;
- (putprop 'O '(A C) 'children)
- (putprop 'A '(O C B) 'children)
- (putprop 'B '(A E G) 'children)
- (putprop 'C '(O A D E)'children)
- (putprop 'D '(E C) 'children)
- (putprop 'E '(C B D G)'children)
- (putprop 'G '(B E) 'children)
- (putprop 'o '20 'x)
- (putprop 'o '50 'y)
- (putprop 'a '55 'x)
- (putprop 'a '55 'y)
- (putprop 'b '70 'x)
- (putprop 'b '40 'y)
- (putprop 'c '20 'x)
- (putprop 'c '30 'y)
- (putprop 'd '25 'x)
- (putprop 'd '10 'y)
- (putprop 'e '45 'x)
- (putprop 'e '45 'y)
- (putprop 'g '65 'x)
- (putprop 'g '20 'y)
- ; end-of-property-list
-
-
-
-
-
-
-
- Aieye Listing 3
-
-
-
- ; best-first search
- ; in PC Scheme
- ; call: (best-first 'o 'g)
-
- (define best-first
- (lambda (origin goal)
- (best (list (list origin)) goal)))
-
- (define best
- (lambda (path goal)
- (cond ((eq? path '()) '())
- ((eq? goal (caar path)) (reverse (car path)))
- (else (best (sort-path ;sort path by distance to goal
- (append (expand-node (car path))
- (cdr path))
- (lambda (path1 path2)
- (nearest? path1 path2 goal))) goal)))))
- è(define how-far ;straightline distance using property list
- (lambda (node1 node2)
- (sqrt (+ (square (- (getprop node1 'x)
- (getprop node2 'x)))
- (square (- (getprop node1 'y)
- (getprop node2 'y)))))))
-
- (define (square x) (* x x))
-
- (define nearest? ;test for least distance to goal
- (lambda (path1 path2 goal)
- (<? (how-far (car path1) goal)
- (how-far (car path2) goal))))
-
- (define (sort-path path by)
- (sort! path by))
-
- (define expand-node ;get node's offspring using property list
- (lambda (path)
- (map (lambda (child) (cons child path))
- (getprop (car path) 'children))))
-
- ;include property list from Listing 2
- ;end-of-best-first
-
-
-
- Aieye Listing 4
-
-
-
- ; branch-and-bound search
- ; in PC Scheme
- ; call: (branch-and-bound 'o 'g)
-
- (define branch-and-bound
- (lambda (origin goal)
- (bnb (list (list origin)) goal)))
-
- (define bnb
- (lambda (path goal)
- (cond ((eq? path '()) '())
- ((eq? goal (caar path)) (reverse (car path)))
- (else (bnb (sort-path
- (append ;sort by distance with
- (expand-node (car path)) ;shortest to front
- (cdr path)) shorter-path) goal)))))
-
- (define how-long ;length of path
- (lambda (path)
- (cond ((eq? (cdr path) '()) 0)
- (else (+ (how-far (car path) (cadr path))
- (how-long (cdr path)))))))
-
- (define shorter-path ;test if shorter path is path1è (lambda (path1 path2)
- (<? (how-long path1) (how-long path2))))
-
- (define how-far ;straightline distance using property list
- (lambda (node1 node2)
- (sqrt (+ (square (- (getprop node1 'x)
- (getprop node2 'x)))
- (square (- (getprop node1 'y)
- (getprop node2 'y)))))))
-
- (define (square x) (* x x))
-
- (define (sort-path path by)
- (sort! path by))
-
- (define expand-node ;get node's offspring using property list
- (lambda (path)
- (map (lambda (child) (cons child path))
- (getprop (car path) 'children))))
- ; include property list from Listing 2
- ;end-of-branch-and-bound