pub:projects:samurai:cases:ploc
Table of Contents
PLOC
- 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$andcreate$were used for creation of multifield value (see heremember$) - 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
slotdefinition - 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)
- Model 2: ploc-jess-v2.clp
- Rules: 32
- Uwagi:
- The calculation rule uses
accumulateCE and thus it is fired one instead of several times (for eachbase-modifierfact).
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-typecan be defined using JAVAenumtypes. - 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 usinglock-on-activeproperty which prevents rule, with this property set to true, from firing until theiragenda-groupwill 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
CLIPSorJess:
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-grouponly one rule is defined - LHS-less rule that asserts all the initial facts. Such rule corresponds todeffactsCLIPS/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-gropnames must be reversed in comparison to the order of the names withindeffactsconstruct.
- Model 2: ploc.java ploc-drools-v2.drl
- Rules: 33
- Uwagi:
- The calculation rule uses
accumulateCE and thus it is fired one instead of several times (for eachbase-modifierfact).
Model in XTT2
- Model 1: ploc-xtt.hml
- Rules: 57
- Uwagi:
pub/projects/samurai/cases/ploc.txt · Last modified: 2016/01/05 22:32 by 127.0.0.1