Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Language and
System Ergonomics
http://www.slideshare.net/MarkProctor/property-reactive-ruleml-2013
Saturday, 13 July 13
Extending an Object-Oriented RETE
Network with fine-grained
Reactivity to Property Modifications
Mark Proctor, Mario Fusco...
Agenda
The Problem
Property Reactive
The technique
Related Work
The Implementation
Benchmarking
Conclusion
Saturday, 13 Ju...
The Problem
Loop Control
Saturday, 13 July 13
The problem
Reactive rule based systems are hard to
write
Saturday, 13 July 13
Too Much!!!!
Reactive rule based systems are hard to
write
Saturday, 13 July 13
Reactive Rule
rule <rule_name>
<attribute><value>
when
<conditions>
then
<actions>
end
Saturday, 13 July 13
Patterns
Person(age >= 18)
field name restriction
constraintobject type
pattern
Saturday, 13 July 13
CashFlow Ruleselect * from
AccountPeriod ap,
Account acc,
Cashflow cf
where cf.type == CREDIT and
acc.accountNo == cf.acco...
Loop Problem
rule “Salary award for min 2 years service” when
e : Employee( lengthOfService > 2 )
then
modify( e ) { setSa...
Loop Problem
rule “Salary award for min 2 years service” no-loop
when
e : Employee( lengthOfService > 2 )
then
modify( e )...
Loop Problem
rule “Salary award for min 2 years service” no-loop when
e : Employee( lengthOfService > 2 )
then
modify( e )...
Loop Problem
rule “Salary award for min 2 years service” when
e : Employee( lengthOfService > 2 )
not SalaryMin2Years( emp...
Loop Problem
rule “Year End” when
d : ChangeDate( )
e : Employee( )
then
modify( e ) { lengthOfService(
d.getYear() - e.ge...
Refraction
This term comes from the neurobiological
observation of a refractory period for a neuron,
which means that the ...
W3C RIF Refraction
Refraction
When a rule instance is fired, it is removed
from the conflict set (and thus will not be
cre...
W3C RIF Refraction
Repeatability
After the execution of a rule instance, the
rule instance is removed from the conflict
se...
Loop Problem (Refraction)
rule “Salary award for min 2 years service”
repeatable false when
e : Employee( lengthOfService ...
AAAAAAhhhhhhhhhh
Saturday, 13 July 13
Saturday, 13 July 13
Property Reactive
The Technique
Saturday, 13 July 13
Saturday, 13 July 13
Annotate Class
@PropertyReactive
public class Employee {
int salary;
int lengthOfService
// getters and setters below
}
Sa...
Loop Problem Fixed
rule “Salary award for min 2 years service” when
e : Employee( lengthOfService > 2 )
then
modify( e ) {...
@Watch
rule “Salary award for min 2 years service” when
e : Employee( salary < 1000, lengthOfService > 2 )
@Watch( !salary...
@Watch
rule “Record Salary Changes” when
e : Employee( ) @Watch( salary )
then
insert( new SalaryChange( e, e.getSalary() ...
@Watch
@Watch( salary, lengthOfService, age )
@Watch( * )
@Watch( !* )
@Watch( *, !salary )
@Watch( !*, salary )
Saturday,...
Good Form
Good Function
Saturday, 13 July 13
Property Reactive
Related Work
Saturday, 13 July 13
Related Work
CLIPS COOL
Uses Triples for properties
Property Reactivity is just a useful side effect,
not an intention.
No...
Related Work
YES/OPS
“New Trigger Conditions”
Simple @Watches with “!” symbol
No literature on implementation
Saturday, 13...
Property Reactive
The Implementation
Saturday, 13 July 13
Class
@PropertyReactive
public class Bar {
int a; // 1
int b; // 2
int c; // 4
int d; // 8
int e; // 16
int f; // 32
// ge...
Propagation Masks
@PropertyReactive
public class Bar {
int a; // 1
int b; // 2
int c; // 4
int d; // 8
int e; // 16
int f;...
Network Masks
rule R1 when
Foo( $v : v )
bar : Bar( c >= 1, a >= 1, e >= $v ) then ... end
Bar
a => 1
c => 1
e => V
b1
a1
...
Network Masks
rule R1 when
Foo( $v : v )
Bar( c >= 1, a >= 1, e >= $v )
rule R2 when
Foo( $v : v )
Bar( c >= 1, d >= 1, b ...
Network Masks
rule R1 when
Foo( $v : v )
Bar( c >= 1, a >= 1, e >= $v )
rule R2 when
Foo( $v : v )
Bar( c >= 1, d >= 1, b ...
Network Masks
Bar
a => 1
c => 1
d => 1
e => V b => V
a1
a2 a3
Network
Share
Here
declared : 001000
inferred : 111111
decla...
Network Masks
Bar
a => 1
c => 1
d => 1
e => V b => V
a1
a2 a3
Network
Share
Here
declared : 001000
inferred : 111111
decla...
Property Reactive
Benchmark
Saturday, 13 July 13
Hardware
i7-2820QM@2.30GHz Quad core CPU
with HyperThreading
8Gb of RAM,
OpenJDK 1.7
Ubuntu Quetzal 64bit operating system...
Classes
A
int a1, int b1
B
int b2, int b2
Saturday, 13 July 13
Benchmark #1
rule R0 when
$a: A( $a1 : a1 < 10 )
then
modify( $a ) { setA2( $a1 + 1 ) };
end
rule R0 no-loop when
$a: A( $...
Benchmark #4
rule R3 when
a: A( a1 < 10 )
b: B( b1 < a.a1 )
...
x: X( x1 < w.w1, x2 > a.a2 )
then
modify( a ) { setA2( c.g...
Benchmark #4 Results
rule R3 when
a: A( a1 < 10 )
b: B( b1 < a.a1 )
...
x: X( x1 < w.w1, x2 > a.a2 )
then
modify( a ) { se...
Conclusion
Saturday, 13 July 13
Conclusion - Achieved
Enabled and Disabled at a Class level for flexibility
Complimentary and additional to RIF Refraction...
Conclusion - Future Work
@Watch
Can we push all or part of the @Watch higher up the alpha
network
Discriminates earlier, b...
Zen-like Calmness
Saturday, 13 July 13
Upcoming SlideShare
Loading in …5
×

Property Reactive RuleML 2013

1,992 views

Published on

30 minute presentation for the RuleML 2013 paper submission on the Drools feature Propert yReactive

Published in: Business, Technology
  • Be the first to comment

Property Reactive RuleML 2013

  1. 1. Language and System Ergonomics http://www.slideshare.net/MarkProctor/property-reactive-ruleml-2013 Saturday, 13 July 13
  2. 2. Extending an Object-Oriented RETE Network with fine-grained Reactivity to Property Modifications Mark Proctor, Mario Fusco and David Sottara Saturday, 13 July 13
  3. 3. Agenda The Problem Property Reactive The technique Related Work The Implementation Benchmarking Conclusion Saturday, 13 July 13
  4. 4. The Problem Loop Control Saturday, 13 July 13
  5. 5. The problem Reactive rule based systems are hard to write Saturday, 13 July 13
  6. 6. Too Much!!!! Reactive rule based systems are hard to write Saturday, 13 July 13
  7. 7. Reactive Rule rule <rule_name> <attribute><value> when <conditions> then <actions> end Saturday, 13 July 13
  8. 8. Patterns Person(age >= 18) field name restriction constraintobject type pattern Saturday, 13 July 13
  9. 9. CashFlow Ruleselect * from AccountPeriod ap, Account acc, Cashflow cf where cf.type == CREDIT and acc.accountNo == cf.accountNo cf.date >= ap.start and cf.date <= ap.end rule “increase balance for AccountPeriod Credits” when ap : AccountPeriod() acc : Account() cf : CashFlow( type == CREDIT, accountNo == acc.accountNo, date >= ap.start && <= ap.end ) then acc.balance += cf.amount; end acc.balance += cf.amount Saturday, 13 July 13
  10. 10. Loop Problem rule “Salary award for min 2 years service” when e : Employee( lengthOfService > 2 ) then modify( e ) { setSalary( e.getSalary() * 1.05 ) }; end Saturday, 13 July 13
  11. 11. Loop Problem rule “Salary award for min 2 years service” no-loop when e : Employee( lengthOfService > 2 ) then modify( e ) { setSalary( e.getSalary() * 1.05 ) }; end Saturday, 13 July 13
  12. 12. Loop Problem rule “Salary award for min 2 years service” no-loop when e : Employee( lengthOfService > 2 ) then modify( e ) { setSalary( e.getSalary() * 1.05 ) }; end rule “Salary award for min 8 years service” no-loop when e : Employee( lengthOfService > 8 ) then modify( e ) { setSalary( e.getSalary() * 1.05 ) }; end Saturday, 13 July 13
  13. 13. Loop Problem rule “Salary award for min 2 years service” when e : Employee( lengthOfService > 2 ) not SalaryMin2Years( employee == e ) then modify( e ) { setSalary( e.getSalary() * 1.05 ) }; insert ( new SalaryMin2Years(e) ); end rule “Salary award for min 8 years service” when e : Employee( lengthOfService > 8 ) not SalaryMin8Years( employee == e ) then modify( e ) { setSalary( e.getSalary() * 1.05 ) }; insert ( new SalaryMin8Years(e) ); end Saturday, 13 July 13
  14. 14. Loop Problem rule “Year End” when d : ChangeDate( ) e : Employee( ) then modify( e ) { lengthOfService( d.getYear() - e.getStartYear() ) }; end rule “Salary award for min 8 years service” when e : Employee( lengthOfService > 8 ) not SalaryMin8Years( employee == e ) then modify( e ) { setSalary( e.getSalary() * 1.05 ) }; insert ( new SalaryMin8Years(e) ); end Saturday, 13 July 13
  15. 15. Refraction This term comes from the neurobiological observation of a refractory period for a neuron, which means that the neuron is not able to fire immediately without first going through a relaxation process. In a similar way, OPS5 will not allow the same instantiation in the conflict set from firing twice in a row. This prevents the inference engine from entering into an infinite loop. Saturday, 13 July 13
  16. 16. W3C RIF Refraction Refraction When a rule instance is fired, it is removed from the conflict set (and thus will not be created again even its condition part remains true), unless one of the objects in its condition part is modified again. In the later case, the repeatability concept determines how the rule instance is treated Saturday, 13 July 13
  17. 17. W3C RIF Refraction Repeatability After the execution of a rule instance, the rule instance is removed from the conflict set by the refraction. Later on, if one of the objects in the condition part is modified and if the rule evaluates to true, the repeatability controls whether if the rule instance can be created again. Saturday, 13 July 13
  18. 18. Loop Problem (Refraction) rule “Salary award for min 2 years service” repeatable false when e : Employee( lengthOfService > 2 ) then modify( e ) { setSalary( e.getSalary() * 1.05 ) }; end rule “Salary award for min 8 years service” repeatable false when e : Employee( lengthOfService > 8 ) then modify( e ) { setSalary( e.getSalary() * 1.05 ) }; end Saturday, 13 July 13
  19. 19. AAAAAAhhhhhhhhhh Saturday, 13 July 13
  20. 20. Saturday, 13 July 13
  21. 21. Property Reactive The Technique Saturday, 13 July 13
  22. 22. Saturday, 13 July 13
  23. 23. Annotate Class @PropertyReactive public class Employee { int salary; int lengthOfService // getters and setters below } Saturday, 13 July 13
  24. 24. Loop Problem Fixed rule “Salary award for min 2 years service” when e : Employee( lengthOfService > 2 ) then modify( e ) { setSalary( e.getSalary() * 1.05 ) }; end rule “Salary award for min 8 years service” when e : Employee( lengthOfService > 8 ) then modify( e ) { setSalary( e.getSalary() * 1.05 ) }; end Saturday, 13 July 13
  25. 25. @Watch rule “Salary award for min 2 years service” when e : Employee( salary < 1000, lengthOfService > 2 ) @Watch( !salary ) then modify( e ) { setSalary( e.getSalary() * 1.05 ) }; end Saturday, 13 July 13
  26. 26. @Watch rule “Record Salary Changes” when e : Employee( ) @Watch( salary ) then insert( new SalaryChange( e, e.getSalary() ); end Saturday, 13 July 13
  27. 27. @Watch @Watch( salary, lengthOfService, age ) @Watch( * ) @Watch( !* ) @Watch( *, !salary ) @Watch( !*, salary ) Saturday, 13 July 13
  28. 28. Good Form Good Function Saturday, 13 July 13
  29. 29. Property Reactive Related Work Saturday, 13 July 13
  30. 30. Related Work CLIPS COOL Uses Triples for properties Property Reactivity is just a useful side effect, not an intention. No @Watch like capability Jess Slot Specific no literature on implementation No @Watch like capability Saturday, 13 July 13
  31. 31. Related Work YES/OPS “New Trigger Conditions” Simple @Watches with “!” symbol No literature on implementation Saturday, 13 July 13
  32. 32. Property Reactive The Implementation Saturday, 13 July 13
  33. 33. Class @PropertyReactive public class Bar { int a; // 1 int b; // 2 int c; // 4 int d; // 8 int e; // 16 int f; // 32 // getters and setters below } Saturday, 13 July 13
  34. 34. Propagation Masks @PropertyReactive public class Bar { int a; // 1 int b; // 2 int c; // 4 int d; // 8 int e; // 16 int f; // 32 } modify ( bar ) { a = 1 } // 000001 modify ( bar ) { a = 1, c = 1 } // 000101 modify ( bar ) { a = 1, c = 1, f = 1 } // 100101 Saturday, 13 July 13
  35. 35. Network Masks rule R1 when Foo( $v : v ) bar : Bar( c >= 1, a >= 1, e >= $v ) then ... end Bar a => 1 c => 1 e => V b1 a1 a2 Foo declared : 000100 inferred : 010101 declared : 000001 inferred : 010101 declared : 010000 inferred : 010101 modify ( bar ) { a = 1, c = 1 } // 000101 modify ( bar ) { b = 1, d = 1 } // 010010 Saturday, 13 July 13
  36. 36. Network Masks rule R1 when Foo( $v : v ) Bar( c >= 1, a >= 1, e >= $v ) rule R2 when Foo( $v : v ) Bar( c >= 1, d >= 1, b >= $v ) Bar a => 1 c => 1 d => 1 e => V b => V a1 a2 a3 Network Share Here declared : 001000 inferred : 011111 declared : 000001 inferred : 010101 declared : 010000 inferred : 010101 declared : 001000 inferred : 001110 declared : 000010 inferred : 001110 b1 b2 Saturday, 13 July 13
  37. 37. Network Masks rule R1 when Foo( $v : v ) Bar( c >= 1, a >= 1, e >= $v ) rule R2 when Foo( $v : v ) Bar( c >= 1, d >= 1, b >= $v ) rule R3 when Dummy( ) Bar( c >= 1 ) @Watch( f, d, !c ) Bar a => 1 c => 1 d => 1 e => V b => V @watch(f, d, !c) b1 b2 b3 a1 a2 a3 Saturday, 13 July 13
  38. 38. Network Masks Bar a => 1 c => 1 d => 1 e => V b => V a1 a2 a3 Network Share Here declared : 001000 inferred : 111111 declared : 000001 inferred : 010101 declared : 010000 inferred : 010101 declared : 001000 inferred : 001110 declared : 000010 inferred : 001110 b1 b2 @watch(f, d, !c) b3 declared : 101000 inferred : 101000 Saturday, 13 July 13
  39. 39. Network Masks Bar a => 1 c => 1 d => 1 e => V b => V a1 a2 a3 Network Share Here declared : 001000 inferred : 111111 declared : 000001 inferred : 010101 declared : 010000 inferred : 010101 declared : 001000 inferred : 001110 declared : 000010 inferred : 001110 b1 b2 @watch(f, d, !c) b3 declared : 101000 inferred : 101000 Saturday, 13 July 13
  40. 40. Property Reactive Benchmark Saturday, 13 July 13
  41. 41. Hardware i7-2820QM@2.30GHz Quad core CPU with HyperThreading 8Gb of RAM, OpenJDK 1.7 Ubuntu Quetzal 64bit operating system Saturday, 13 July 13
  42. 42. Classes A int a1, int b1 B int b2, int b2 Saturday, 13 July 13
  43. 43. Benchmark #1 rule R0 when $a: A( $a1 : a1 < 10 ) then modify( $a ) { setA2( $a1 + 1 ) }; end rule R0 no-loop when $a: A( $a1 : a1 < 10 ) then modify( $a ) { setA2( $a1 + 1 ) }; end insert 1mill A Initial a1, a2 set to 1 No-loop 2.275±0.080s Property Reactive 2.265 ± 0.047s Gain 0.44% Saturday, 13 July 13
  44. 44. Benchmark #4 rule R3 when a: A( a1 < 10 ) b: B( b1 < a.a1 ) ... x: X( x1 < w.w1, x2 > a.a2 ) then modify( a ) { setA2( c.getC2() + 1 ) }; end Saturday, 13 July 13
  45. 45. Benchmark #4 Results rule R3 when a: A( a1 < 10 ) b: B( b1 < a.a1 ) ... x: X( x1 < w.w1, x2 > a.a2 ) then modify( a ) { setA2( c.getC2() + 1 ) }; end Saturday, 13 July 13
  46. 46. Conclusion Saturday, 13 July 13
  47. 47. Conclusion - Achieved Enabled and Disabled at a Class level for flexibility Complimentary and additional to RIF Refraction and Repeatable, adding finer grained control. @Watch provides even further declarative control. Keeps rules clean. Not Polluted with control logic. Not any slower, and can give increased gains, by avoiding wasted join evaluations. Cost pushed to compile time, works with dynamic rules addition and removal. Good Form, Good Function Saturday, 13 July 13
  48. 48. Conclusion - Future Work @Watch Can we push all or part of the @Watch higher up the alpha network Discriminates earlier, better performance Further flexibility to control propagations based on rising and falling edges onMatch, onReMatch, onUnmatch Saturday, 13 July 13
  49. 49. Zen-like Calmness Saturday, 13 July 13

×