Powrót do samurai:start

PLOC

Orginal rules

ploc-rules.txt - 49 rules

Model in CLIPS

Model 1: ploc-clips.clp

Rules: 31

Uwagi:

It is necessary to use module mechanisms in order to avoid infinite recursion of rules that modify the facts that are also in their LHS.

In order to decrease number of rules, the predicates member$ and create$ were used for creation of multifield value (see here member$)

It is necessary to set fact duplication to true in order to assert a number of the same insurance base charge modifiers (set-fact-duplication TRUE)

It is not possible to express infinity (e.g. in case of declaring ranges of allowed values)

Model in Jess

Model 1: ploc-jess.clp

Rules: 31

Uwagi:

Jess does not allow for using '(range)' construct within slot definition - the domain of slots can be set by using (allowed-values). However listing of all values from range e.g. [18, 120] is inefficient.

Jess does not allow for fact duplication
Fact-duplication concept eliminated – fact duplication is never allowed. Fact list stored on a HashMap, not a Vector. 1)http://www.jessrules.com/doc/70/changes.html

Model 2: ploc-jess-v2.clp

Rules: 32

Uwagi:

The calculation rule uses accumulate CE and thus it is fired one instead of several times (for each base-modifier fact).

Model in Drools

Model 1: ploc.java ploc-drools.drl

Rules: 32

Uwagi:

Drools does not support neither default value nor constraints for fact fields.

The list of allowed values allowed-type can be defined using JAVA enum types.

Modules in Drools does not have to be defined explicitly - they are automatically defined while first rule assignment

Drools does not support any construct with the semantics of (pop-focus). However, this construct can be approximately simulated in drools using lock-on-active property which prevents rule, with this property set to true, from firing until their agenda-group will not loose a focus. In comparison to (pop-focus) this property does not remove focus from the current module and thus other rules can also be fired after rule having this property set to true.

The multifield values from clips and jess that are created using (create$) function, can be represented using Java collections (sometimes such rules must be expressed in java dialect):
CLIPS:

(create$ 160 60 0 -10 -20 -30 -40 -40 -50 -50 -60)

Java:

List<Integer> modifiers = Arrays.asList(160, 60, 0, -10, -20, -30, -40, -40, -50, -50, -60);

The management of focus stack in Drools can be distributed on DRL and JAVA files. Drools allows for set the focus stack in the same way as CLIPS or Jess:
CLIP/Jess

(focus base-charge bonus-malus base-charge-modifiers)

and corresponding code in Drools:

ksession.getAgenda().getAgendaGroup("base-charge-modifiers").setFocus(); ksession.getAgenda().getAgendaGroup("base-charge").setFocus(); ksession.getAgenda().getAgendaGroup("bonus-malus").setFocus(); ksession.getAgenda().getAgendaGroup("initial").setFocus();

Nevertheless, this can be done only within the Java file. In order to provide more more reliable translation from CLIPS/Jess to Drools the above setup of focus stack can be translated in the following way:

For each drools application, the java file push the first agenda-group (e.g. initial) on the focus stack.

Within this agenda-group only one rule is defined - LHS-less rule that asserts all the initial facts. Such rule corresponds to deffacts CLIPS/Jess construct.

In the RHS of this rule, the focus stack is defined e.g.

drools.setFocus("base-charge-modifiers"); drools.setFocus("base-charge"); drools.setFocus("bonus-malus");

the order of the agenda-grop names must be reversed in comparison to the order of the names within deffacts construct.

Model 2: ploc.java ploc-drools-v2.drl

Rules: 33

Uwagi:

The calculation rule uses accumulate CE and thus it is fired one instead of several times (for each base-modifier fact).

Model in XTT2

Model 1: ploc-xtt.hml

Rules: 57

Uwagi: