Every context has its own conflict resolution strategy, specified in the
defcontext
form. A conflict resolution strategy is an ordered list of conflict resolution tactics. A conflict resolution tactic may be any of the following:
priority
-- instantiations of rules with the highest priority are preferred
-priority --
instantiations of rules with the lowest priority are preferred
recency
-- the most recently created instantiations are preferred
-recency --
the least recently created instantiations are preferred
order
-- instantiations of rules defined/loaded earliest are preferred. This favours the topmost rules in a file.
-order --
instantiations of rules defined/loaded latest are preferred
specificity --
the most specific rules are preferred (specificity is a score where a point is awarded for every occurrence of a variable after the first, every Lisp test, and every destructuring expression; the highest score wins)
-specificity --
the least specific rules are preferred
mea --
(stands for Means End Analysis) instantiations are preferred where the object corresponding to the topmost object-matching condition is more recently modified
-mea --
instantiations are preferred where the object corresponding to the topmost object-matching condition is less recently modified
lex --
(stands for LEXicographic) each instantiation is represented by the (in descending order) sorted list of the most recently modified cycle numbers of the objects in the instantiation; these lists are compared place by place with an instantiation being preferred if it first has a larger number in a particular position, or if it runs out first (hence the analogy with lexicographic ordering)
-lex --
the converse of the above.
The tactics are applied successively starting with the left-most until only one instantiation is left or until all tactics have been applied when it is unspecified which of the resulting set is chosen. For example, using the strategy
(priority recency)
first all the instantiations which are not of the highest priority rule or rules (as given by the rule's priority number) are discarded and then all instantiations which were not created in the same forward chaining cycle as the most recently created instantiation will be discarded. If more than one instantiation is left it is unspecified which will be selected to fire.
Note that the strategy
(lex specificity)
is equivalent to the OPS5 strategy
LEX
and
(mea lex specificity)
is equivalent to the OPS5 strategy MEA, hence the borrowing of these terms. For further information on LEX and MEA in OPS5 the reader is referred to
Programming Expert Systems in OPS5
, by Brownston, Farrel, Kant and Martin (published by Addison-Wesley). However, KnowledgeWorks is not heavily optimized to use the tactics
mea
,
-mea
,
lex
or
-lex
.