home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / CLIPPER / MISC / CLDEC87.ZIP / AIEYE.LTG next >
Encoding:
Text File  |  1987-11-23  |  5.0 KB  |  184 lines

  1.  
  2. Aieye Listing 1
  3.  
  4.  
  5. ; hill climbing search
  6. ; in PC Scheme
  7. ; call: (hike-up 'o 'g)
  8.  
  9. (define hike-up
  10.   (lambda (origin goal)
  11.     (climb (list (list origin)) goal)))
  12.  
  13. (define climb
  14.   (lambda (path goal)
  15.     (cond ((eq? path '()) '())
  16.           ((eq? goal (caar path)) (reverse (car path)))
  17.           (else
  18.             (climb (append (sort-path   ;sort node's children
  19.                              (expand-node (car path)) ;by remaining distance
  20.                              (lambda (path1 path2)  ;children to front
  21.                                (nearest? path1 path2 goal)))
  22.                            (cdr path)) goal)))))
  23.  
  24. (define how-far          ;straightline distance   
  25.   (lambda (node1 node2)
  26.     (sqrt (+ (square (- (getprop node1 'x)
  27.                         (getprop node2 'x)))
  28.              (square (- (getprop node1 'y)
  29.                         (getprop node2 'y)))))))
  30.  
  31. (define (square x) (* x x))
  32.  
  33. (define nearest?      ;which is least distance from goal node
  34.   (lambda (path1 path2 goal)
  35.     (<? (how-far (car path1) goal)
  36.         (how-far (car path2) goal))))
  37.  
  38. (define (sort-path path by) 
  39.   (sort! path by))
  40.  
  41. (define expand-node  ;find node's offspring using
  42.   (lambda (path)     ;property list
  43.     (map (lambda (child) (cons child path))
  44.          (getprop (car path) 'children))))
  45. ;include property list from Listing 2
  46. ;end-of-hill-climbing-search
  47.  
  48.  
  49.  
  50. Aieye Listing 2
  51.  
  52.  
  53.  
  54. ; Property list describing net
  55. ; to be used with each search listingè; in Scheme.  Individual LISP implementations
  56. ; vary in property list structure and
  57. ; operations.
  58. (putprop 'O '(A C)    'children)
  59. (putprop 'A '(O C B)  'children)
  60. (putprop 'B '(A E G)  'children)
  61. (putprop 'C '(O A D E)'children)
  62. (putprop 'D '(E C)    'children)
  63. (putprop 'E '(C B D G)'children)
  64. (putprop 'G '(B E)    'children)
  65. (putprop 'o '20 'x)
  66. (putprop 'o '50 'y)
  67. (putprop 'a '55 'x)
  68. (putprop 'a '55 'y)
  69. (putprop 'b '70 'x)
  70. (putprop 'b '40 'y)
  71. (putprop 'c '20 'x)
  72. (putprop 'c '30 'y)
  73. (putprop 'd '25 'x)
  74. (putprop 'd '10 'y)
  75. (putprop 'e '45 'x)
  76. (putprop 'e '45 'y)
  77. (putprop 'g '65 'x)
  78. (putprop 'g '20 'y)
  79. ; end-of-property-list
  80.  
  81.  
  82.  
  83.  
  84.  
  85.  
  86.  
  87. Aieye Listing 3
  88.  
  89.  
  90.  
  91. ; best-first search
  92. ; in PC Scheme
  93. ; call: (best-first 'o 'g)
  94.  
  95. (define best-first
  96.   (lambda (origin goal)
  97.     (best (list (list origin)) goal)))
  98.  
  99. (define best
  100.   (lambda (path goal)
  101.     (cond ((eq? path '()) '())
  102.           ((eq? goal (caar path)) (reverse (car path)))
  103.           (else (best (sort-path  ;sort path by distance to goal
  104.                         (append (expand-node (car path))
  105.                                 (cdr path))
  106.                         (lambda (path1 path2)
  107.                           (nearest? path1 path2 goal))) goal)))))
  108. è(define how-far  ;straightline distance using property list
  109.   (lambda (node1 node2)
  110.     (sqrt (+ (square (- (getprop node1 'x)
  111.                         (getprop node2 'x)))
  112.              (square (- (getprop node1 'y)
  113.                         (getprop node2 'y)))))))
  114.  
  115. (define (square x) (* x x))
  116.  
  117. (define nearest?   ;test for least distance to goal
  118.   (lambda (path1 path2 goal)
  119.     (<? (how-far (car path1) goal)
  120.         (how-far (car path2) goal))))
  121.  
  122. (define (sort-path path by)
  123.   (sort! path by))
  124.  
  125. (define expand-node ;get node's offspring using property list
  126.   (lambda (path)
  127.     (map (lambda (child) (cons child path))
  128.          (getprop (car path) 'children))))
  129.  
  130. ;include property list from Listing 2
  131. ;end-of-best-first
  132.  
  133.  
  134.  
  135. Aieye Listing 4
  136.  
  137.  
  138.  
  139. ; branch-and-bound search
  140. ; in PC Scheme
  141. ; call: (branch-and-bound 'o 'g)
  142.  
  143. (define branch-and-bound
  144.   (lambda (origin goal)
  145.     (bnb (list (list origin)) goal)))
  146.  
  147. (define bnb
  148.   (lambda (path goal)
  149.     (cond ((eq? path '()) '())
  150.           ((eq? goal (caar path)) (reverse (car path)))
  151.           (else (bnb (sort-path
  152.                        (append     ;sort by distance with
  153.                          (expand-node (car path))  ;shortest to front
  154.                          (cdr path)) shorter-path) goal)))))
  155.  
  156. (define how-long  ;length of path
  157.   (lambda (path)
  158.     (cond ((eq? (cdr path) '()) 0)
  159.           (else (+ (how-far (car path) (cadr path))
  160.                    (how-long (cdr path)))))))
  161.  
  162. (define shorter-path  ;test if shorter path is path1è  (lambda (path1 path2)  
  163.     (<? (how-long path1) (how-long path2))))
  164.  
  165. (define how-far  ;straightline distance using property list
  166.   (lambda (node1 node2)
  167.     (sqrt (+ (square (- (getprop node1 'x)
  168.                         (getprop node2 'x)))
  169.              (square (- (getprop node1 'y)
  170.                         (getprop node2 'y)))))))
  171.  
  172. (define (square x) (* x x))
  173.  
  174. (define (sort-path path by)
  175.   (sort! path by))
  176.  
  177. (define expand-node  ;get node's offspring using property list
  178.   (lambda (path)
  179.     (map (lambda (child) (cons child path))
  180.          (getprop (car path) 'children))))
  181. ; include property list from Listing 2
  182. ;end-of-branch-and-bound
  183.