Hi Wei Tai,
So here I try to answer your questions "from a very high level of view" :-D An expert system uses deduction, abduction and induction as inferencing mechanisms. The interaction between knowledge base and inference engine can be summarized as follows: * deduction: cause + rule ----> effect * abduction: effect + rule ----> cause * induction: cause + effect ----> rule Inference engines that implement deduction are called forward-chaining inference engines, those implement abduction are called backward-chaining inference engines. They are also understood as data-driven and goal-driven inference engines. Many modern inference engines are hybrid engines, as many problems require both deduction and abduction for their solutions. The induction, however, happens usually in knowledge acquisition components and heavily employs pattern recognition and machine learning techniques such as Bayesian Nets and Artificial Neural Nets. *You need to know what your application exactly wants to achieve and then apply different styles of inference.* Expert systems enable domain experts and software engineers to program declaratively. Both facts and rules can be declared without any particular order (only specifying what but not how). This has two major benefits: 1. Facts and rules can be organized in any order or structure that better reflects the semantic of the problem. 2. Ignoring the sequences of facts and rules may significantly reduce a developer's cognitive load, therefore increases her efficiency and reduce her errors during engineering. But no problem can be solved if the application contains only declarations. The "declarative programming" only largely applies in the knowledge base. Normally, an inference engine is strictly algorithmic, which means it must be programmed procedurally. It is also an over-generalization to think that all knowledge bases contains only declarations and all inference engines only procedures. In practice, the "then" part of a rule declaration often contains procedures, more or less. Also, there are inference engines progammed declaratively in languages such as Prolog. Nevertheless, eventually all declarative instructions are translated into procedural machine code. In fact, the declarative programming model has nothing to contribute to a program's run-time performance but it may dramatically increase the performance of domain experts, software engineers, and information managers. The "if-then"-like rules are a type of production whose orgins go back to the 1940s. Production systems were first used in symbolic logic by Emil L. Post who originated the name. Post proved that any system of mathematics or logic is equivalent to a certain type of production rule system. This result established the great possibility of representing most kinds of knowledge in a canonical, if-thenlike form. Post's production rule system was never really practical because it lacked the specification guiding how the rules should be applied. When facts meet rules, should a fact seek applicable rules or should a rule seek suitable facts? No matter which strategy we choose, then in what kind of order should facts and rules match each other? In 1960, Andrey A. Markov published his string rewrite algorithm, which is a control strategy of how rules should be applied in a production system. The Markov algorithm organizes the rules in order of priority, with higher-priority rules ordered first. Given a string that is to be rewritten, the whole list of rules is scanned from the beginning to the end whenever a to-be-substituted symbol occurs in the string. Although directly the Markov Algorithm is only about string rewrite, most problems are in fact encoded as strings for computation. Therefore, this algorithm made the beautiful Post theorem practical. In practice, new problems arose when people put more and more rules and facts into knowledge bases. Modern knowledge bases usually contain hundreds, thousands or tens of thousands of rules. If the whole list of rules is iterated whenever there is a fact to be examed (the Markov Algorithm's principle: fact seeks the rules), the system performs poor. In the late 1970s, some production systems spent more than 90% of the total run time performing rules-iteration. In 1979, Charles L. Forgy invented the Rete Algorithm to increase the pattern-matching efficiency of production systems. The Rete Algorithm solved the scalability problem of modern production systems, was then widely implemented in many expert systems. Many variants of Forgy's original algorithm, such as Rete II, Rete III, and ReteOO, were spawned. I hope this explanation is high-level enough. Please refer to Drools docs, papers and books if you want to know more about different algorithms. And BTW, you better post such kind of questions to the rules-user mailing list. This dev list is for the development-related topics of the Drools project, it is normally for stuff like "Hi the svn 24567 does not build, there is a problem in the pom.xml in the package org.drools.guvnor.etc, I've submitted a JIRA with a patch, please have a look.....". Best Regards, Ellen N. Zhao On Thu, Oct 23, 2008 at 12:41 PM, Wei Tai <[EMAIL PROTECTED]> wrote: > Hi Ellen Zhao, > > Thank you for pointing me a way to digging into the rule and rule systems. > Maybe I didn't explain myself clearly enough. My project is about > description logic and its reasoner. Part of this area uses rules but not > all, and currently I am going to understand this area from a very high level > of view. The way you point to me (to read a lot of books) do helps a lot, > but that requries lots of time before I can totally answer the question I've > put in the last mail, and besides, my project's plan does not allow me to do > this, at least now. I do searched on Google and Wikipedia a lot to find me > the answer. But the reality is "there are too many definitions on these > concepts (and some of them are really confusing), and seems little of them > can clearly state the relationships between each other(e.g. to give a > taxonomy or something like "this partly uses that but not all")". I believe > only people who know this area well can answer this question, isnt it? To > clarify, what I want to know is something like a taxonomy or an answer like > "logic programming is partly implemented by production system and the > production system uses forward chaining as its underlying inference > approach". I just took a look at the Drools document. It helps but still can > not answer my question well. Hope someone could help me out. > > Cheers > Wei Tai > > > Ellen Zhao wrote: >> >> Hi Wei Tai, >> >> first of all, there is a Chinese proverb "Give a man a fish and you >> feed him for a day. Teach a man to fish and you feed him for a >> lifetime.", so please allow me to mention that google and wikipedia >> are your good friends when you start to learn something. Here is a >> Wikipedia entry for Production Rule System: >> >> http://en.wikipedia.org/wiki/Production_system >> >> You can search for the other concepts yourself. And, the official >> Drools Documentation is exceptionally good, please by all means read >> it if you are new to expert system and Drools. Here you can download >> the latest Drools 5.0.0 M2 doc as a zip file: >> >> http://www.jboss.org/drools/downloads.html >> >> You will know from the web articles and Drools doc that there are good >> books for beginners. Grab the book list and go to your univ. lib or >> amazon.com, get a copy and invest time for reading. >> >> Hope that helps. >> >> Ellen N. Zhao >> >> On Wed, Oct 22, 2008 at 6:00 PM, Wei Tai <[EMAIL PROTECTED]> wrote: >> >>> >>> Hi All, >>> >>> I am not sure whether it is the right place to put this question here. >>> Currently I am working on rules and got confused with some concepts: >>> >>> What are the relationships between: resolution, backward chaining, modus >>> ponens, foward chaining, production rule system, prolog, logic >>> programming? >>> Can all forward chaining systems be considered as logic programming >>> system? >>> >>> Some of these concepts seems overlap with each other. Can somebody kindly >>> give me an answer to these questions. Thanks in advance. >>> >>> >>> Best Regards >>> Wei >>> _______________________________________________ >>> rules-dev mailing list >>> [email protected] >>> https://lists.jboss.org/mailman/listinfo/rules-dev >>> >>> >> >> _______________________________________________ >> rules-dev mailing list >> [email protected] >> https://lists.jboss.org/mailman/listinfo/rules-dev >> > > > -- > Wei Tai > Student by Research, Knowledge & Data Engineering Research Group > Intelligent Systems Lab > School of Computer Science and Statistics > Trinity College Dublin > Dublin 2 > Ireland > >> [EMAIL PROTECTED] >> Tel: +353 (0)1 8968431 > > _______________________________________________ > rules-dev mailing list > [email protected] > https://lists.jboss.org/mailman/listinfo/rules-dev > _______________________________________________ rules-dev mailing list [email protected] https://lists.jboss.org/mailman/listinfo/rules-dev
