Hi Ellen Zhao,
Thanks a mill for answering my question. You answer do helps a lot. I ll
put questions like this to other mail list next time, and sorry for the
inconvenience I caused.
Best Regards
Wei Tai
Ellen Zhao wrote:
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 <taiw(a)cs.tcd.ie> 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 <taiw(a)cs.tcd.ie> 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
>>> rules-dev(a)lists.jboss.org
>>>
https://lists.jboss.org/mailman/listinfo/rules-dev
>>>
>>>
>>>
>> _______________________________________________
>> rules-dev mailing list
>> rules-dev(a)lists.jboss.org
>>
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
>
>
>> taiw(a)cs.tcd.ie
>> Tel: +353 (0)1 8968431
>>
> _______________________________________________
> rules-dev mailing list
> rules-dev(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/rules-dev
>
>
_______________________________________________
rules-dev mailing list
rules-dev(a)lists.jboss.org
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