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
  56. è; in Scheme.  Individual LISP implementations
  57. ; vary in property list structure and
  58. ; operations.
  59. (putprop 'O '(A C)    'children)
  60. (putprop 'A '(O C B)  'children)
  61. (putprop 'B '(A E G)  'children)
  62. (putprop 'C '(O A D E)'children)
  63. (putprop 'D '(E C)    'children)
  64. (putprop 'E '(C B D G)'children)
  65. (putprop 'G '(B E)    'children)
  66. (putprop 'o '20 'x)
  67. (putprop 'o '50 'y)
  68. (putprop 'a '55 'x)
  69. (putprop 'a '55 'y)
  70. (putprop 'b '70 'x)
  71. (putprop 'b '40 'y)
  72. (putprop 'c '20 'x)
  73. (putprop 'c '30 'y)
  74. (putprop 'd '25 'x)
  75. (putprop 'd '10 'y)
  76. (putprop 'e '45 'x)
  77. (putprop 'e '45 'y)
  78. (putprop 'g '65 'x)
  79. (putprop 'g '20 'y)
  80. ; end-of-property-list
  81.  
  82.  
  83.  
  84.  
  85.  
  86.  
  87.  
  88. Aieye Listing 3
  89.  
  90.  
  91.  
  92. ; best-first search
  93. ; in PC Scheme
  94. ; call: (best-first 'o 'g)
  95.  
  96. (define best-first
  97.   (lambda (origin goal)
  98.     (best (list (list origin)) goal)))
  99.  
  100. (define best
  101.   (lambda (path goal)
  102.     (cond ((eq? path '()) '())
  103.           ((eq? goal (caar path)) (reverse (car path)))
  104.           (else (best (sort-path  ;sort path by distance to goal
  105.                         (append (expand-node (car path))
  106.                                 (cdr path))
  107.                         (lambda (path1 path2)
  108.                           (nearest? path1 path2 goal))) goal)))))
  109.  
  110. è(define how-far  ;straightline distance using property list
  111.   (lambda (node1 node2)
  112.     (sqrt (+ (square (- (getprop node1 'x)
  113.                         (getprop node2 'x)))
  114.              (square (- (getprop node1 'y)
  115.                         (getprop node2 'y)))))))
  116.  
  117. (define (square x) (* x x))
  118.  
  119. (define nearest?   ;test for least distance to goal
  120.   (lambda (path1 path2 goal)
  121.     (<? (how-far (car path1) goal)
  122.         (how-far (car path2) goal))))
  123.  
  124. (define (sort-path path by)
  125.   (sort! path by))
  126.  
  127. (define expand-node ;get node's offspring using property list
  128.   (lambda (path)
  129.     (map (lambda (child) (cons child path))
  130.          (getprop (car path) 'children))))
  131.  
  132. ;include property list from Listing 2
  133. ;end-of-best-first
  134.  
  135.  
  136.  
  137. Aieye Listing 4
  138.  
  139.  
  140.  
  141. ; branch-and-bound search
  142. ; in PC Scheme
  143. ; call: (branch-and-bound 'o 'g)
  144.  
  145. (define branch-and-bound
  146.   (lambda (origin goal)
  147.     (bnb (list (list origin)) goal)))
  148.  
  149. (define bnb
  150.   (lambda (path goal)
  151.     (cond ((eq? path '()) '())
  152.           ((eq? goal (caar path)) (reverse (car path)))
  153.           (else (bnb (sort-path
  154.                        (append     ;sort by distance with
  155.                          (expand-node (car path))  ;shortest to front
  156.                          (cdr path)) shorter-path) goal)))))
  157.  
  158. (define how-long  ;length of path
  159.   (lambda (path)
  160.     (cond ((eq? (cdr path) '()) 0)
  161.           (else (+ (how-far (car path) (cadr path))
  162.                    (how-long (cdr path)))))))
  163.  
  164. (define shorter-path  ;test if shorter path is path1
  165. è  (lambda (path1 path2)  
  166.     (<? (how-long path1) (how-long path2))))
  167.  
  168. (define how-far  ;straightline distance using property list
  169.   (lambda (node1 node2)
  170.     (sqrt (+ (square (- (getprop node1 'x)
  171.                         (getprop node2 'x)))
  172.              (square (- (getprop node1 'y)
  173.                         (getprop node2 'y)))))))
  174.  
  175. (define (square x) (* x x))
  176.  
  177. (define (sort-path path by)
  178.   (sort! path by))
  179.  
  180. (define expand-node  ;get node's offspring using property list
  181.   (lambda (path)
  182.     (map (lambda (child) (cons child path))
  183.          (getprop (car path) 'children))))
  184. ; include property list from Listing 2
  185. ;end-of-branch-and-bound
  186.