As usual, I'm a few days late on responding to this email. However, here are just a few quotes from Dr. Forgy's 1979 thesis on the Rete Match Algorithm that might pertain to this subject. If you don't have a copy of his thesis, I'm sure that any major university nearby has one on file. I do have permission from Dr. Forgy to scan the thesis and put it on my web site. I'll probably do that later on this month as time permits.
[ Moderator's note: I'm not really sure what these quotes have to do with the OP's question, other than as general comments on Rete; there is similar material in the Jess manual and in "Jess in Action." Furthermore, be careful, because any algorithmic analysis performed on OPS or any of its immediate follow-ons are not going to be valid for Jess. Jess's implementation of Rete is quite highly modified, and doesn't generally behave as these early analyses of Rete would indicate. ] Chapter Two: Page 25: (P 2.1.1) "Moreover, any production that becomes instantiated was probably close to being instantiated on the previous cycles -- perhaps having instantiations for all but one of its condition elements. The match routine can take advantage of this by saving from one cycle to the next an indication of which productions are instantiated and which condition elements of the other productions a re instantiated, incrementally updating the information to reflect the changed state of working memory. If it does so, the effort required to perform the match will depend more on the small number of elements changed than on the much larger total number of elements in working memory." Page 27: (P 2.1.4) "Perhaps the most unusual feature of a match routine based on the Rete Match Algorithm is that it never examines working memory. Instead, it monitors the changes made to working memory and maintains internally information which is equivalent to that in working memory." Page 49: (P 2.4.2) "The Rete Match Algorithm takes advantage of structural similarity by sharing nodes between productions." Page 60: (P 2.6) There is a fundamental restriction on the kinds of data elements that can be processed by the algorithm, but the restriction is not that they must be OPS2-style lists. The restriction is that they must contain only constants. Variables and match functions cannot be handled without revising the nodes and the network interpreter." Chapter Three deals with the OPS2 Interpreter. Dr. Forgy has said that the three most important chapters in the thesis is Two, Three and Four but that understanding Three was maybe the most important. In Chapter Three he takes quite a bit of time explaining the problems of using NOT condition elements. Chapter Four deals extensive with optimizations and effects of working memory, production memory, number of objects, comparisons, etc., etc. It's kind of a slow read but fairly important to someone wanting to understand how to optimize a rulebase using the Rete Match Algorithm. SDG jco - -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Noah Zimmerman Sent: Tuesday, August 12, 2003 12:53 PM To: [EMAIL PROTECTED] Subject: JESS: Benchmarking Hello! I would like to run some tests with my existing rule base to check the performance under different conditions. My understanding of the Rete algorithm is that its efficiency is inversely proportional to the number of changes in the knowledge base. With this in mind, I would like to see the degradation of performance as an increasing number of facts are modified/retracted/asserted. I was wondering what the best practice was for doing these kind of speed benchmarks. This code will be embedded in a Java application which is responsible for altering the knowledge base. I would like to see the time for each iteration of the loop, as well as the overall elapsed time. Is there a way isolate just the JESS performance to separate it from the Java execution? Forgive me naivety, I have never tried to do speed testing before! ( When I tried to do something like: ( bind ?last-time ?time ) DO OTHER THINGS ( bind ?time ( time ) ) ( bind ?eTime ( - ?time ?last-time ) ) I only got values of 0 and 1 ) Thanks in advance! -------------------------------------------------------------------- To unsubscribe, send the words 'unsubscribe jess-users [EMAIL PROTECTED]' in the BODY of a message to [EMAIL PROTECTED], NOT to the list (use your own address!) List problems? Notify [EMAIL PROTECTED] --------------------------------------------------------------------