Production system: Difference between revisions

The educational technology and digital learning wiki
Jump to navigation Jump to search
 
m (Text replacement - "<pageby nominor="false" comments="false"/>" to "<!-- <pageby nominor="false" comments="false"/> -->")
 
(19 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{Stub}}
{{Stub}}
<pageby nominor="false" comments="false"/>
<!-- <pageby nominor="false" comments="false"/> -->
Note: This entry is just a copy/paste of some paragraphs I wrote '''many years''' ago when I was a graduate student - [[User:Daniel K. Schneider|Daniel K. Schneider]] 19:25, 14 August 2007 (MEST) (be warned).
 
== Definition ==
== Definition ==


A production system (PS) is a form of specifiying and defining an algorithm. Their main
A production system (PS) is a form of specifying and defining an algorithm. Their main
features are the so-called rewrite rules
features are the so-called rewrite rules
which are also used to define generative grammars in linguistics and
which are also used to define generative grammars in linguistics and
computer science.
computer science.


Production systems have been developped a few decades ago in the context of research on [[human information processing]] and [[knowledge representation]]. They are still being used in various kinds of expert systems and [[intelligent tutoring system]]s. An [[XSLT]] processor also can be considered a production system when it executes templates.
Production systems have been developed a few decades ago in the context of research on [[human information processing]] and [[knowledge representation]]. They are still being used in various kinds of [[expert system]]s and [[intelligent tutoring system]]s. An [[XSLT]] processor also can be considered a production system when it executes templates.


== Rewrite rules ==
== Rewrite rules ==


Before introducting production systems we shall
Before introducing production systems we shall
brievely explain the formal properties fo such rules.
briefly explain the formal properties of such rules.
A '''rewrite rule''' takes very generally
A '''rewrite rule''' takes very generally
speaking a chain of symbols and rewrites it into another
speaking a chain of symbols and rewrites it into another
Line 20: Line 22:
  (hello xy) --> (goal yz) xz  
  (hello xy) --> (goal yz) xz  
rewrites the string "(hello xy)" into the string  
rewrites the string "(hello xy)" into the string  
  (goal yz) xz"
  (goal yz) xz


A '''generative grammar''' is a collection
A '''generative grammar''' is a collection
Line 38: Line 40:
structures, until one matches the input.
structures, until one matches the input.
In this work we will not use these linguistic grammars
In this work we will not use these linguistic grammars
directely again.
directly again.


Production systems are in some sort a
Production systems are in some sort a
Line 53: Line 55:
# A set of production rules (rewrite rules)
# A set of production rules (rewrite rules)
# A data base
# A data base
# An interpreter which uses (1) and (2) in order to perform
# An interpreter which uses (1) and (2) in order to perform computations.
computations.


In a simple production system a production rule has the
In a simple production system a production rule has the
following general form :
following general form :


  if <SITUATION> then <ACTION>
  if <SITUATION> then <ACTION>
Line 78: Line 78:
Let's examine two rules in the following  
Let's examine two rules in the following  
that are inspired by a production system used to model the application of a law.
that are inspired by a production system used to model the application of a law.


  (define-rule decision-yes
  (define-rule decision-yes
Line 116: Line 115:
An interpreter works in cycles. It looks at the data-base
An interpreter works in cycles. It looks at the data-base
(which may contain several symbols) and tries to find
(which may contain several symbols) and tries to find
the rules which match that situation, ie. a symbol or a
the rules which match that situation, i.e.. a symbol or a
set of symbols. Then it executes the rule which seems to
set of symbols. Then it executes the rule which seems to
look best. This has an effect on the data base, i.e. the
look best. This has an effect on the data base, i.e. the
Line 125: Line 124:
tell the system that a problem is solved or that it is
tell the system that a problem is solved or that it is
not solvable and that it has to stop.
not solvable and that it has to stop.
Now we are able
to establish the correspondence to the theory of the
human information processor.  The sets of rules are part
of the long term memory, the data base on which the
interpreter works represents the short term memory, and
the processor contains the interpreter. Now it is of
course possible that a rewrite rule itself might be
rewritten, or at least the system might change the order
in which it prefers executing these rules in the case of
choice. This means that production systems can be used to
model adaptive behavior. In this case it will apply
different rules to the same situation. Production systems
can also be used to simulate real learning. In this case we
need rules that are able to write new rules.
Finally we have to say that even GPS had a more
complex organisation than the one which we have sketched
above and that more modern production systems only have the
name in common with the first models.
This brief presentation of some principles of GPS
shows the spirit and also some
of the fallacies of earlier AI programs.  First of all
we saw that the authors made the mistake of generalizing
the ideas they gained out of the analysis of specific
problem solving domains onto the whole area of human
problem solving. Second they did not pay much intention
to the issues of representation. The way in which
problems and rules were stated was fairly simple, which
was indeed possible for easy formalizable
problem-domains.
More modern systems integrated more elaborated
knowledge structures (e.g. plans and methods)
than the simple if-then
rules GPS used, i.e.
single productions sometimes look like complex frames,
a concept we will introduce later.
Attempts are also made to model real learning,
i.e. building completely knew rules with
the aid of learning heuristics, such
as discovering or rule abstraction from input.
GPS was a precurser of the production systems that
are used today for expert system engineering.
Expert system knowledge engineers don't make any
claims about the nature of human thought,
they just build programs that perform certain intelligent
task.
As such they are also very valuable for the social sciences:
They allow for analytical modeling as we shall demonstrate in
the second part.


== Forward chaining and backward chaining ==
== Forward chaining and backward chaining ==
Line 183: Line 132:
In our previous discussion we didn't really
In our previous discussion we didn't really
tell why the interpreter searches certain rules to
tell why the interpreter searches certain rules to
apply.
apply. There are two very basic situations:


There are two very basic situations:
If the interpreter works in a goal-oriented way ('''backward chaining'''),
If the interpreter works in a goal oriented way,
it wants to prove the "then-part" of a rule, i.e. some kind of intellectual goal.
he wants to prove the "then-part" of a rule,
i.e. some kind of intellectual goal.
Let's examine our rules again:
Let's examine our rules again:
In the "decision-yes" rule we have a clause
In the "decision-yes" rule we have a clause
Line 198: Line 145:
are also true.
are also true.
In other words he sets up two sub-goals and he
In other words he sets up two sub-goals and he
trie to find two rules that "prove" these clauses.
tries to find two rules that "prove" these clauses.
Looking through the rule-base he will certainly find
Looking through the rule-base he will certainly find
our second rule that makes such a conclusion if
our second rule that makes such a conclusion if
it's conditions are true.
its conditions are true.
This process continues until some facts are directely asserted
This process continues until some facts are directly asserted
as such in the data-base.
as such in the data-base.
E.g. in this case we might have the information that
E.g. in this case we might have the information that
a person acquired real estate and that the person is also foreign.
a person acquired real estate and that the person is also foreign.
Now it is understandable why this goal-oriented search procedure
Now it is understandable why this goal-oriented search procedure
is called backward-search.
is called '''backward-search'''.
In goal-oriented termiology we can say that the mechanism
 
In goal-oriented terminology we can say that the mechanism
starts from a general goal, and decomposes that general
starts from a general goal, and decomposes that general
goal into subgoals (or problems to be solved) until it stumbles on
goal into subgoals (or problems to be solved) until it stumbles on
Line 214: Line 162:
More technically speaking it walks down a decision tree.
More technically speaking it walks down a decision tree.


"Forward-chaining" works just the other way round.
'''Forward-chaining''' works just the other way round, it is fundamentally "fact-driven".
it is fundamentally "fact-driven".
Lets take again our two rules and imagine that the interpreter
Let's take again our two rules and imagine that the interpreter
just sits there and waits for data that trigger rules.
just sits there and waits for data that trigger rules.
Something might "write" into the data base now that
Something might "write" into the data base at some point that
"(person is foreign)" and that "(person acquired real estate)".
"(person is foreign)" and that "(person acquired real estate)".
Seeing these assertions, the interpreter will now immediately take
Seeing these assertions, the interpreter will now immediately take
Line 234: Line 181:


If the interpreter also finds the facts that "(person is a company)"
If the interpreter also finds the facts that "(person is a company)"
and "(real estate is used as production site)" it can also conclude
and "(real estate is used as production site)" it also can conclude
that "(person gets an authorization)".
that "(person gets an authorization)".
With these two intermediate conclusions combined,
With these two intermediate conclusions combined,
Line 242: Line 189:
Now let's try to generalize these rather technical concepts
Now let's try to generalize these rather technical concepts
forward and backward chaining.
forward and backward chaining.
Both actually represent two very aspects of human intellectual
Our small example should have made clear that problem-solving activity
activity and are thus important concepts for models of decision
can be guided both by goal-oriented and "forward-propagation"
makers.
Our small example made clear that problem-solving activity
is guided both by goal-oriented and "forward-propagation"
activities.
activities.
Both could represent two very aspects of human intellectual
activity and are thus help to model at least some kinds
of human thought, e.g. decision making.
Let's examine this phenomenon under a different,
Let's examine this phenomenon under a different,
but connected angle.
but connected angle.
Let's assume that we model a decision maker with a
Let's assume that we model a learner with a
simple data-base (short term memory) and a production system
simple data-base (short term memory) and a production system
(long term heuristic memory).
(long term heuristic memory).
Each time we insert something into the data base (memory)
 
(i.e. the problem solver learns something),
Each time we insert something into the data base (memory),
some processes (rules) are triggered and
the problem solver learns a fact and some processes (rules) are triggered and
conclusions are made which in turn
conclusions are made which in turn can trigger other conclusions, i.e. more
can trigger other conclusions.
complex learning than just fact storing occurs.
Somtimes a problem solver wants to learn something,
 
i.e. he wants to fetch something from memory.
Sometimes a problem solver wants to satisfy a goal, i.e. deduce something from facts and rules in his memories. This goal can be triggered by some input into the
This is a goal which can be triggered by some input into the
data base. If he does not directly find the answer (this something)
data base.
If he does not directely find the answer (this something)
in the data base, he tries to apply the rule base
in the data base, he tries to apply the rule base
until this goal is satisfied.
until this goal is satisfied.
So very generally speaking,
 
we perform '''forward inference''' whenever we learn something
So very generally speaking one could model some thought processes in 2 ways:
(i.e. insert something into a knowledge base) and
* We perform '''forward inference''' whenever we learn some new facts that will lead to yet new fact. We insert something into a knowledge base that triggers rules.
we perfom '''backward inference''' whenever we
* We perform '''backward inference''' whenever we need to deduct something, i.e. we fetch something from a knowledge base and if can't find it.
"search" for something (i.e. we fetch something from a knowledge
base).
These processes can be mixed of course and become quite complex.
These processes can be mixed of course and become quite complex.
We shall present a more complete model including these
concepts.
Before we must discuss the nature of complex knowledge structures
other than networks and rule bases.


[[Category: Technologies]]
Other related computer modelling techniques include [[semantic network]]s, application of mental scripts, schemas, frames, plans etc.
 
== A note on the relationship to cognitive theory ==
 
There is a correspondence with the theory of the [[human information processing]] and various models of [[knowledge representation]].  The sets of rules are part
of the long term memory, the data base on which the
interpreter works represents the short term memory, and
the processor contains the interpreter. Now it is of
course possible that a rewrite rule itself might be
rewritten, or at least the system might change the order
in which it prefers executing these rules in the case of
choice. This means that production systems can be used to
model adaptive behavior. In this case it will apply
different rules to the same situation. Production systems
can also be used to simulate real learning. In this case we
need rules that are able to write new rules.
Finally, we have to say that that computer models of human information like GPS and more modern successors like the ACT theory (see [[procedure learning]]) had a more complex organization than the one which we have sketched
above and that more modern production systems only have the
name in common with the models used in simpler expert systems.
 
== Recent developments ==
 
With talk (and some action) around the [[semantic web]] and [[business process modeling]], there is renewed interest in production systems
 
=== RIF Production Rule Dialect ===
 
See the W3C [[Rule Interchange Format]]
 
=== PRR rules ===
 
[http://www.omg.org/spec/PRR/index.htm Production Rule Representation (PRR)] is a 2009 standard by [http://www.omg.org/ OMG]. Below is an example found in the [[http://www.omg.org/spec/PRR/1.0/ v1.0 specification, p 52]
 
; English text:
: If the shopping cart contains between 2 and 4 items and either the purchase value is greater than $100 and the customer category is gold or the purchase value is greater than $200 and the customer category is Silver then apply a 15% discount on the shopping cart value.
 
; A proprietary rule language format (of one of the submitters):
<source lang="eiffel">
rule discount {
when
{
  ?customer: Customer();
  ?shoppingCart: ShoppingCart(customer == ?customer);
  evaluate((?shoppingCart.containsItemsInRange(2, 4)) &&
            (((((?shoppingCart.getValue() > 100d) && (?customer.category equals "Gold")) ||
            ((?shoppingCart.getValue() > 200d) &&
}
then
{
    modify ?shoppingCart
            {
              shoppingCart.discountValue = shoppingCart.discountValue + 15f);
            }
}
}
</source>
PRR OCL:
<source lang="eiffel">
Rule discount
 
ruleVariable:
      ?customer: Customer = Customer->any()
      ?shoppingCart: ShoppingCart = ShoppingCart->any(c: customer | c=?customer)
 
Condition:
      (?shoppingCart.containsItemsInRange(2, 4)
      and
      (((?shoppingCart.items->collect(i:Item|i.value))->sum()>100
        and
        ?customer.category == "Gold")
      or
      ((?shoppingCart.items->collect(value))->sum() > 200
        and
        ?customer.category == "Silver")))
 
Action:
      shoppingCart.discountValue = shoppingCart.discountValue+15f
 
</source>
 
== Links and references ==
 
* See [[expert system]] for some links to tools
 
; Introductions
* [http://en.wikipedia.org/wiki/Production_system Production system] (Wikipedia)
 
; Players
* [http://ruleml.org ruleml.org], The Rule Markup Initiative (one of the early standardization players)
* [http://www.w3.org/2005/rules/wiki/RIF_Working_Group RIF W3C working group]
* [http://www.omg.org/spec/PRR/index.htm PRR] group of the [http://www.omg.org/ Object Management Group]
 
=== Bibliography ===
 
* Forgy, Charles (1982). "Rete: A Fast Algorithm for the Many Pattern/Many Object Pattern Match Problem," Artificial Intelligence, 19, pp 17-37.
* Lee Brownston, Robert Farrell, Elaine Kant, Nancy Martin, Programming Expert Systems in OPS5 (Addison-Wesley, 1985) ISBN 0-201-10647-7
* Expert Systems: Principles and Programming, ISBN 0-534-95053-1
* Jess in Action: Rule Based Systems in Java, ISBN 1-930110-89-8
* Handbook of Research on Emerging Rule-Based Languages and Technologies: Open Solutions and Approaches, ISBN 1605664022, [http://dx.doi.org/10.4018/978-1-60566-402-6 DOI:10.4018/978-1-60566-402-6] (expensive).
 
 
[[Category: Tutorials]]
[[Category: Tutorials]]
[[Category: Programming]]

Latest revision as of 18:58, 22 August 2016

Draft

Note: This entry is just a copy/paste of some paragraphs I wrote many years ago when I was a graduate student - Daniel K. Schneider 19:25, 14 August 2007 (MEST) (be warned).

Definition

A production system (PS) is a form of specifying and defining an algorithm. Their main features are the so-called rewrite rules which are also used to define generative grammars in linguistics and computer science.

Production systems have been developed a few decades ago in the context of research on human information processing and knowledge representation. They are still being used in various kinds of expert systems and intelligent tutoring systems. An XSLT processor also can be considered a production system when it executes templates.

Rewrite rules

Before introducing production systems we shall briefly explain the formal properties of such rules. A rewrite rule takes very generally speaking a chain of symbols and rewrites it into another chain of symbols.

(hello xy) --> (goal yz) xz 

rewrites the string "(hello xy)" into the string

(goal yz) xz

A generative grammar is a collection of rewrite rules which permit to translate in successive steps some input into some output. A good example are so called parsers which translate a chain of symbols representing a sentence, into an axiomatic chain of symbols defining the grammatical structure of the sentence. This is called to perform perform bottom-up parsing, i.e. the resulting tree defines the input chain. The same procedure can be done in the opposite way. Starting form a axiom a longer string of symbols can be generated. This procedure can be used in top-down parsing, e.g. generating possible structures, until one matches the input. In this work we will not use these linguistic grammars directly again.

Production systems are in some sort a generalization of these rewrite grammars. First its rules may be more complex. Second there is also a formalized mechanism which uses these rules, i.e. an engine that applies this "grammar" to some data in some memory. Thus we can state the three essential components of a PS:

  1. A set of production rules (rewrite rules)
  2. A data base
  3. An interpreter which uses (1) and (2) in order to perform computations.

In a simple production system a production rule has the following general form :

if <SITUATION> then <ACTION>

This means that if the interpreter discovers a certain situation or condition in the data base which matches the "situation-side" of a rule, the rule is evoked and ready to be used. Thus the first function of the interpreter is evaluative or interpretive. It looks through the data base in order to find rules which it can possibly use. If it finds only one such rule that matches a situation, it is executed, that means that its action-part is used in order to transform the data base or to do some other symbolic computation. Thus instead of "situation" and "action" we can also use the terms "if" - "then", or "condition" - "conclusion".

Let's examine two rules in the following that are inspired by a production system used to model the application of a law.

(define-rule decision-yes
 IF
 (person is submitted to authorization regime)
 (person gets an authorization)
 THEN
 (message: "The acquisition will be authorized")
 (the system made a final legal conclusion)
)
(define-rule authorization-regime-yes
 IF
 (person acquired real estate)
 (person is foreign)
 THEN
 (person is submitted to authorization regime)
)

You don't need to understand in detail what it does, just get the general flavor of it. The rules are written in some pseudo-English language. Each rule has a name, an "if-part" and a "then-part". The first rule (called decision-yes) checks two things in the condition part (i.e. two legal conditions). If these things are true we know that the clauses in the conclusion part are also true, i.e. we can write into the data base an information about a legal case and a legal conclusion. The second rule checks whether one of the clauses in the first rule holds.

If the interpreter finds several rules which could be executed, it has to choose the best of all rules. This is its control function.

Very often he has to rely on another set of rules (selection heuristics) in order to able to do so. An interpreter works in cycles. It looks at the data-base (which may contain several symbols) and tries to find the rules which match that situation, i.e.. a symbol or a set of symbols. Then it executes the rule which seems to look best. This has an effect on the data base, i.e. the action part of a rule changes some of its content. At this point the interpreter starts looking for rules again and thus started its second cycle. Such a computation cannot go forever of course. Some rules might tell the system that a problem is solved or that it is not solvable and that it has to stop.

Forward chaining and backward chaining

Forward chaining and backward chaining are very important concepts of search that is done with production system. In our previous discussion we didn't really tell why the interpreter searches certain rules to apply. There are two very basic situations:

If the interpreter works in a goal-oriented way (backward chaining), it wants to prove the "then-part" of a rule, i.e. some kind of intellectual goal. Let's examine our rules again: In the "decision-yes" rule we have a clause "(the system made a final legal conclusion)". Let's assume further on that this might be the goal of the whole problem solving process. The interpreter knowing that, tries know to find out whether the two conditions in the "if-part" are also true. In other words he sets up two sub-goals and he tries to find two rules that "prove" these clauses. Looking through the rule-base he will certainly find our second rule that makes such a conclusion if its conditions are true. This process continues until some facts are directly asserted as such in the data-base. E.g. in this case we might have the information that a person acquired real estate and that the person is also foreign. Now it is understandable why this goal-oriented search procedure is called backward-search.

In goal-oriented terminology we can say that the mechanism starts from a general goal, and decomposes that general goal into subgoals (or problems to be solved) until it stumbles on some data that assert that a subgoal is reached. More technically speaking it walks down a decision tree.

Forward-chaining works just the other way round, it is fundamentally "fact-driven". Lets take again our two rules and imagine that the interpreter just sits there and waits for data that trigger rules. Something might "write" into the data base at some point that "(person is foreign)" and that "(person acquired real estate)". Seeing these assertions, the interpreter will now immediately take this second rule and conclude that "(person is submitted to authorization regime").

Now imagine a third rule:

(define-rule authorization-yes

 IF
 (person is a company)
 (real estate is used as production site)
 THEN
 (person gets an authorization)

If the interpreter also finds the facts that "(person is a company)" and "(real estate is used as production site)" it also can conclude that "(person gets an authorization)". With these two intermediate conclusions combined, the first rule will "fire" and conclude that the system made a legal conclusion.

Now let's try to generalize these rather technical concepts forward and backward chaining. Our small example should have made clear that problem-solving activity can be guided both by goal-oriented and "forward-propagation" activities. Both could represent two very aspects of human intellectual activity and are thus help to model at least some kinds of human thought, e.g. decision making.

Let's examine this phenomenon under a different, but connected angle. Let's assume that we model a learner with a simple data-base (short term memory) and a production system (long term heuristic memory).

Each time we insert something into the data base (memory), the problem solver learns a fact and some processes (rules) are triggered and conclusions are made which in turn can trigger other conclusions, i.e. more complex learning than just fact storing occurs.

Sometimes a problem solver wants to satisfy a goal, i.e. deduce something from facts and rules in his memories. This goal can be triggered by some input into the data base. If he does not directly find the answer (this something) in the data base, he tries to apply the rule base until this goal is satisfied.

So very generally speaking one could model some thought processes in 2 ways:

  • We perform forward inference whenever we learn some new facts that will lead to yet new fact. We insert something into a knowledge base that triggers rules.
  • We perform backward inference whenever we need to deduct something, i.e. we fetch something from a knowledge base and if can't find it.

These processes can be mixed of course and become quite complex.

Other related computer modelling techniques include semantic networks, application of mental scripts, schemas, frames, plans etc.

A note on the relationship to cognitive theory

There is a correspondence with the theory of the human information processing and various models of knowledge representation. The sets of rules are part of the long term memory, the data base on which the interpreter works represents the short term memory, and the processor contains the interpreter. Now it is of course possible that a rewrite rule itself might be rewritten, or at least the system might change the order in which it prefers executing these rules in the case of choice. This means that production systems can be used to model adaptive behavior. In this case it will apply different rules to the same situation. Production systems can also be used to simulate real learning. In this case we need rules that are able to write new rules. Finally, we have to say that that computer models of human information like GPS and more modern successors like the ACT theory (see procedure learning) had a more complex organization than the one which we have sketched above and that more modern production systems only have the name in common with the models used in simpler expert systems.

Recent developments

With talk (and some action) around the semantic web and business process modeling, there is renewed interest in production systems

RIF Production Rule Dialect

See the W3C Rule Interchange Format

PRR rules

Production Rule Representation (PRR) is a 2009 standard by OMG. Below is an example found in the [v1.0 specification, p 52

English text
If the shopping cart contains between 2 and 4 items and either the purchase value is greater than $100 and the customer category is gold or the purchase value is greater than $200 and the customer category is Silver then apply a 15% discount on the shopping cart value.
A proprietary rule language format (of one of the submitters)
rule discount {
when
{
   ?customer: Customer();
   ?shoppingCart: ShoppingCart(customer == ?customer);
   evaluate((?shoppingCart.containsItemsInRange(2, 4)) &&
            (((((?shoppingCart.getValue() > 100d) && (?customer.category equals "Gold")) ||
            ((?shoppingCart.getValue() > 200d) &&
}
then
{
     modify ?shoppingCart
            {
               shoppingCart.discountValue = shoppingCart.discountValue + 15f);
            }
}
}

PRR OCL:

Rule discount

ruleVariable:
       ?customer: Customer = Customer->any()
       ?shoppingCart: ShoppingCart = ShoppingCart->any(c: customer | c=?customer)

Condition:
       (?shoppingCart.containsItemsInRange(2, 4)
       and
       (((?shoppingCart.items->collect(i:Item|i.value))->sum()>100
        and
        ?customer.category == "Gold")
       or
       ((?shoppingCart.items->collect(value))->sum() > 200
         and
         ?customer.category == "Silver")))

Action:
      shoppingCart.discountValue = shoppingCart.discountValue+15f

Links and references

Introductions
Players

Bibliography

  • Forgy, Charles (1982). "Rete: A Fast Algorithm for the Many Pattern/Many Object Pattern Match Problem," Artificial Intelligence, 19, pp 17-37.
  • Lee Brownston, Robert Farrell, Elaine Kant, Nancy Martin, Programming Expert Systems in OPS5 (Addison-Wesley, 1985) ISBN 0-201-10647-7
  • Expert Systems: Principles and Programming, ISBN 0-534-95053-1
  • Jess in Action: Rule Based Systems in Java, ISBN 1-930110-89-8
  • Handbook of Research on Emerging Rule-Based Languages and Technologies: Open Solutions and Approaches, ISBN 1605664022, DOI:10.4018/978-1-60566-402-6 (expensive).