Property Reactive RuleML 2013

1,650 views
1,497 views

Published on

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

Published in: Business, Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,650
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
29
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

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

×