- #ORF09 An introduction to the RETE algorithm
- #ORF09 Playing With the Rules Presentation
- #ORF09 Rule Patterns and Features Presentation
- #ORF09 Early Alert System Presentation
- #ORF09 Engineer’s perspective on Rule Technology Keynote
- #ORF09 Enterprise Architecture Presentation
- #ORF09 Enterprise Architecture Presentation Part II
- #ORF09 Model Driven Approach for BRMS Presentation
- #ORF09 Production Rule Systems
- #ORF09 Graph Based Knowledge Bases and Rules Presentation
- #ORF09 Truth versus Useful Lies Presentation
- #ORF09 Automated Verification of rules Presentation
- #ORF09 Agile Business Rule Development Presentation
- #ORF09 Rule Classification First Presentation
- #ORF09 Rule Violation and Over-Constrained Problems Presentation
- #ORF09 Generating Rules from UML presentation
- #ORF09 What’s Different about Rules in CEP Presentation
- #ORF09 Measuring your Rules’ KPI Presentation
- #ORF09 Designing a System of Rule Based Agents Presentation
- #ORF09 Extending General Purpose Engines Presentation
- #ORF09 Programming Rules using a spreadsheet interface
- #ORF09 Practical and Modern RBE Presentation
- #ORF09 Temporal Reasoning Presentation
- #ORF09 Business Rules in the Cloud Presentation
- #ORF09 October Rules Fest Think Tank
- #ORF09 October Rules Fest Think Tank – Part II
- #ORF09 CLIPS implementation of RETE Presentation
- #ORF09 Complex Event Processing Models Presentation
- #ORF09 Distributed Programming with Agents Presentation
- #ORF09 making Parallelism Available to Rule Developers Presentation
Gary Riley is talking about his implementation of RETE in CLIPS.
A couple of years ago, benchmarks for rules engines (Manners and Waltz) showed that CLIPS was not not doing well. He wanted to improve speed although it may have not been the only issue.
He started adding different improvements, although he was thinking that none of it was “new” since it had been done elsewhere before. These changes improved performance a great deal.
CLIPS and Java can’t be easily compared since they have 2 different structures. So comparing a C implementation to a Java Object Oriented implementation is not necessarily “fair” since in C you are working closer to the machine and don’t have the overhead.
The biggest improvement was to hash the Alpha memories. The hash table is statically sized which assumes that the user can adapt the size to the needs of the application.
The then hashed the Beta memories as well. In this case, the Beta memories are dynamically resized. It is much harder for a user to try and figure out how to size these memories. It is possible to turn hashing off. In some benchmarks hashing made no difference, but there are use cases that show that beta memory hashing does provide performance improvements.
The Salience (priority) had some advantages in some cases but is costly when implemented as a linked list and inserting somewhere in the middle. So he created Salience Groups which are basically buckets that hold instances with the same salience.
He then talked about how the “Not” conditional element was implemented.
Asymmetric retracts relates to the traditional approach which takes a more symmetric approach to assertions and retractions. So asymmetric retracts work slightly differently, he referred to Tree based removal and a bottom-up approach for removing partial matches.
He also changed the “Exists” conditional element. It is implemented as a single join. it takes just one partial and you don’t need to keep a count.
He then talk about other miscellaneous improvements to the code.
Benchmarks (specifically Manners and Waltz) are useful but they should not be the only thing that people look at.
His conclusions, still good to code in C. Open Source is Good. We need more benchmarks, not different benchmarks to test other parts of the system.