home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume42 / aisearch / patch01 next >
Encoding:
Internet Message Format  |  1994-05-06  |  7.8 KB

  1. From: peter@obelix.icce.rug.nl (Peter Bouthoorn)
  2. Newsgroups: comp.sources.misc
  3. Subject: v42i068:  aisearch - C++ AI search class library, Patch01
  4. Date: 6 May 1994 13:01:12 -0500
  5. Organization: Sterling Software
  6. Sender: kent@sparky.sterling.com
  7. Approved: kent@sparky.sterling.com
  8. Message-ID: <2qe0l8$mst@sparky.sterling.com>
  9. X-Md4-Signature: f0c23121e3c6be5ec76bbebc3b5842d7
  10.  
  11. Submitted-by: peter@obelix.icce.rug.nl (Peter Bouthoorn)
  12. Posting-number: Volume 42, Issue 68
  13. Archive-name: aisearch/patch01
  14. Environment: C++ (UNIX, DOS)
  15. Patch-To: aisearch: Volume 41, Issue 127-131
  16.  
  17. To install these patches cd to the directory where you unpacked
  18. the AIsearch library and issue a 
  19.  
  20.   patch -p0 < thisfile 
  21.  
  22. command. Note that I changed a few lines in search.tex, but there are
  23. no patches for the .dvi and .ps file (the changes aren't really essential,
  24. but if you want the updated versions of these files just get the complete 
  25. package via anonymous ftp from obelix.icce.rug.nl:/pub/peter).
  26.  
  27. Cheers,
  28. Peter
  29.  
  30. -----------------------------------------
  31. --- src/bisear/bisearch.cpp    Fri Apr 15 18:32:16 1994
  32. *** ../old/doc/search.tex    Fri May  6 12:51:58 1994
  33. --- ./doc/search.tex    Fri May  6 12:50:50 1994
  34. ***************
  35. *** 181,194 ****
  36.   node, which has no parent). Searching a tree is easier than searching a graph,
  37.   because when a new node is generated in the tree we can be sure it has not
  38.   been generated before. This is true because every node has only one parent, so
  39. ! there cannot be two or more different paths leading to the same node. In a graph,
  40. ! however, nodes usually have more than one parent.  Therefore, when
  41. ! searching a graph one should make provisions to deal with these situations. For
  42. ! example, in the case of the 8-puzzle the same state may be generated by a
  43. ! different sequence of operators. That is, the same node may be part of several
  44. ! paths, e.g., when we apply operators 'move empty tile left, move empty tile down'
  45. ! we produce exactly the same node as in the sequence 'move empty tile down, move
  46. ! empty tile left'. Continuing the processing of both these nodes (which are
  47.   really the same node) would be redundant and a waste of effort. This can be
  48.   avoided at the price of additional bookkeeping. Instead of traversing a tree we
  49.   traverse a {\em directed graph\,}\footnote{Knuth(1979), p.371.}: every time a
  50. --- 181,192 ----
  51.   node, which has no parent). Searching a tree is easier than searching a graph,
  52.   because when a new node is generated in the tree we can be sure it has not
  53.   been generated before. This is true because every node has only one parent, so
  54. ! there cannot be two or more different paths leading to the same node. In a
  55. ! graph, however, nodes usually have more than one parent.  Therefore, when
  56. ! searching a graph one should make provisions to deal with these situations.
  57. ! Saying that a node has more than one parent means that the node is generated
  58. ! by a different sequence of the same operators. That is, the same node may be
  59. ! part of several paths, and continuing the processing of both these nodes (which are
  60.   really the same node) would be redundant and a waste of effort. This can be
  61.   avoided at the price of additional bookkeeping. Instead of traversing a tree we
  62.   traverse a {\em directed graph\,}\footnote{Knuth(1979), p.371.}: every time a
  63. ***************
  64. *** 811,819 ****
  65.   Intelligence}, Los Altos: Kaufmann.\\
  66.   Nillson, N.J. (1971), {\em Problem Solving Methods in Artificial
  67.   Intelligence\,}, New York: McGraw-Hill.\\
  68. !               (1986), {\em Principles of Artifial Intelligence\,}, Los Altos:
  69.   Kaufmann.\\
  70. ! Knuth, D.E. (1979), {\em The Art of Computer Programs\,} (2nd ed.). London:
  71.   Addison-Wesley.\\
  72.   Pearl, J. (1984), {\em Heuristics: Intelligent Strategies for Computer Problem
  73.   Solving\,}, London: Addison-Wesley.\\
  74. --- 809,817 ----
  75.   Intelligence}, Los Altos: Kaufmann.\\
  76.   Nillson, N.J. (1971), {\em Problem Solving Methods in Artificial
  77.   Intelligence\,}, New York: McGraw-Hill.\\
  78. ! Nilsson, N.J. (1986), {\em Principles of Artifial Intelligence\,}, Los Altos:
  79.   Kaufmann.\\
  80. ! Knuth, D.E. (1979), {\em The Art of Computer Programming\,} (2nd ed.). London:
  81.   Addison-Wesley.\\
  82.   Pearl, J. (1984), {\em Heuristics: Intelligent Strategies for Computer Problem
  83.   Solving\,}, London: Addison-Wesley.\\
  84. *** ../old/src/bisear/bisearch.cpp    Fri May  6 12:51:59 1994
  85. --- ./src/bisear/bisearch.cpp    Fri May  6 12:50:49 1994
  86. ***************
  87. *** 183,189 ****
  88.   NODE_ *BISEARCH_::solve(SORTEDLIST_ *x_open, SORTEDLIST_ *x_closed, SORTEDLIST_ *y_closed)
  89.   {
  90.       NODE_
  91. !         *connect,
  92.           *father,
  93.           *child;
  94.   
  95. --- 183,189 ----
  96.   NODE_ *BISEARCH_::solve(SORTEDLIST_ *x_open, SORTEDLIST_ *x_closed, SORTEDLIST_ *y_closed)
  97.   {
  98.       NODE_
  99. !         *aux,
  100.           *father,
  101.           *child;
  102.   
  103. ***************
  104. *** 196,212 ****
  105.       {
  106.           child->setparent(father);           // sets up solution path
  107.   
  108. !         if ((connect = (NODE_ *) y_closed->lookup(*child)) != NULL)
  109.           {                                 // here the paths connect
  110.               x_open->addtohead(*child);      // we store both of the nodes
  111.               y_closed->remove_found();       // at the start of the lists
  112. !             y_closed->addtohead(*connect);  // so we can easily find them back
  113.               return(child);                // return node connecting both paths
  114.           }
  115.   
  116.           if (!add(x_open, x_closed, child))
  117.               delete(child);
  118. !         child = child->getnext();
  119.       }
  120.       return(NULL);
  121.   }
  122. --- 196,213 ----
  123.       {
  124.           child->setparent(father);           // sets up solution path
  125.   
  126. !         if ((aux = (NODE_ *) y_closed->lookup(*child)) != NULL)
  127.           {                                 // here the paths connect
  128.               x_open->addtohead(*child);      // we store both of the nodes
  129.               y_closed->remove_found();       // at the start of the lists
  130. !             y_closed->addtohead(*aux);  // so we can easily find them back
  131.               return(child);                // return node connecting both paths
  132.           }
  133.   
  134. +     aux = child->getnext();
  135.           if (!add(x_open, x_closed, child))
  136.               delete(child);
  137. !         child = aux;
  138.       }
  139.       return(NULL);
  140.   }
  141. *** ../old/src/list/list.cpp    Fri May  6 12:52:07 1994
  142. --- ./src/list/list.cpp    Fri May  6 12:50:49 1994
  143. ***************
  144. *** 27,39 ****
  145.   
  146.   VOBJECT_ *LIST_::gethead() const
  147.   {
  148. !     return(head->getdata());
  149.   }
  150.   
  151.   
  152.   VOBJECT_ *LIST_::gettail() const
  153.   {
  154. !     return(tail->getdata());
  155.   }
  156.   
  157.   
  158. --- 27,39 ----
  159.   
  160.   VOBJECT_ *LIST_::gethead() const
  161.   {
  162. !     return(head ? head->getdata() : NULL);
  163.   }
  164.   
  165.   
  166.   VOBJECT_ *LIST_::gettail() const
  167.   {
  168. !     return(tail ? tail->getdata() : NULL);
  169.   }
  170.   
  171.   
  172. *** ../old/src/unisear/search.cpp    Fri May  6 12:51:59 1994
  173. --- ./src/unisear/search.cpp    Fri May  6 12:50:50 1994
  174. ***************
  175. *** 102,107 ****
  176. --- 102,108 ----
  177.       NODE_
  178.           *father,
  179.           *child,
  180. +     *next,
  181.           *goal = NULL;
  182.   
  183.       while((father = (NODE_ *) open.gethead()) != NULL)
  184. ***************
  185. *** 120,128 ****
  186.   /* We don't stop immediately after finding the goal node, because we may be
  187.      looking for the best or cheapest path and a better/cheaper goal node may
  188.      still be ahead in the list */
  189.               if (!add(child))
  190.                   delete(child);               // child aready in graph: kill it!
  191. !             child = child->getnext();        
  192.           }
  193.           if (goal)
  194.               return(goal);
  195. --- 121,130 ----
  196.   /* We don't stop immediately after finding the goal node, because we may be
  197.      looking for the best or cheapest path and a better/cheaper goal node may
  198.      still be ahead in the list */
  199. +             next = child->getnext();
  200.               if (!add(child))
  201.                   delete(child);               // child aready in graph: kill it!
  202. !             child = next;        
  203.           }
  204.           if (goal)
  205.               return(goal);
  206. exit 0 # Just in case...
  207.