• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
2011-03-29 London - drools
 

2011-03-29 London - drools

on

  • 3,782 views

 

Statistics

Views

Total Views
3,782
Views on SlideShare
3,782
Embed Views
0

Actions

Likes
0
Downloads
221
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    2011-03-29 London - drools 2011-03-29 London - drools Presentation Transcript

    • Mark Proctor Project Lead
      • T he SkyNet funding bill is passed.
      • The system goes online on August 4th, 1997.
      • Human decisions are removed from strategic defense.
      • SkyNet begins to learn at a geometric rate.
      • It becomes self-aware at 2:14am Eastern time, August 29th
      • In a panic, they try to pull the plug.
      • And, Skynet fights back
    • Agenda
      • Open Source
      • Community
      • History
      • Unified Concept
      • Expert
      • Quick Example
      • Conditional Elements
      • Truth Maintenance and Inference
      • Fusion
    • Open Source
    • Business Model
    • Free as in Free Speech
      • Think of “free speech”, not “free beer”
    • Cathedral & the Bazaar
      • Published 1997
        • Cathedral
          • GNU Emacs, GCC
        • Bazaar
          • Linux
      • 19 guidelines
        • Scratching an Itch
        • Given Enough Eyeballs
        • Release Early, Release Often
      • Linus' Law
        • "given enough eyeballs, all bugs are shallow“
      • Convinced Netscape to OSS
    • Open Source
      • Light Weight Components
      • Flexibility
      • Control
      • Academic / Engineering Bridge
    • Motivations
      • Fun
      • Learning/Exploring
      • Mastery
      • Being part of Something
      • Making a difference
      • Scratching an itch
      RSA Animate – Drive: The surprising truth about what motivates us http://www.youtube.com/watch?v=u6XAPnuFjJc
    • Risk
      • Health of Project
        • Mailing list, irc
        • Code commits
        • Number of Developers
        • % of internal to external developers
        • Commitment and health of commercial backers
        • Availability
      • Leaders or followers
      • Professional services
      • Hiring
      • Continued education
        • Books, events, blogs, articles
      • Ecosystem, 3 rd parties and satellite communities
    • Community
    • Books
      • Introduction to Expert Systems
        • Peter Jackson
      • Expert Systems, Principles and Programming
        • Joseph C. Giarratano and Gary D. Riley
    • Oh And There are Drools Books Too
    • Drools Research Network
      • http://www.jboss.org/drools/research-network.html
        • 40+ Research related pages
        • Many more as haven't updated
    • Community Collaboration
      • 40% of Drools work now done in the community
        • US Navy Healthcare
        • OSDE (Argentina's largest healthcare organisation)
        • Intalio
    • Standards
      • Part of the W3C RIF working group
      • Director in RuleML group
    • Sample Industries and Users
      • Investment
        • Millennium Investment Group (MIG)
      • Logistics
        • Fedex
      • Airline
        • Sabre
      • Mortgage
        • Franklin American
      • Healthcare
        • OSDE
    • Boot Camps
      • San Francisco 2009 (40+ attendees)
        • Sponsored by Third Pillar
        • Sun, FAMC, OSDE, Kaseya, Fedex, TU Group, Intermountain Healthcare, Gap, Sony Pictures, Lockheed Martin, Kaiser, HP, Wells Fargo, US Navy Research, FOLIOfn, Boeing .....
      • San Diego 2010 (80+ attendess)
        • Sponsored by US Navy
        • 5 day event, with 2 days focus on the healthcare industry
        • OSDE, AT&T, SAIC, US Navy Research, Kaiser, Clinica, Intermountain Healthcare, GE Healthcare, VA, Boeing, Nationwide ....
    • Communication
      • User and Dev mailing lists
      • IRC, Internet Relay Chat
    • History
    • It All Started Here Birth of CDSS 1970s 1980s Dendral Baobab Mycin Guidon Neomycin Teiresias Puff Emycin WM Sacon Centaur Wheeze Gravida Clot Oncocin
    • Because Not Everyone Is As Smart As He Is
    • Business Rules Engines 1980s 2010s 1990s 2000s OPS5 ART Clips Jess Drools 2 JRules Drools 3 Drools 4 Drools 5
    • Drools History
      • Drools 2
        • Rete like XML Scripting language
      • Drools 3
        • Based on Clips functionality
        • Iterative improves to JRules syntax with Clips functionality
      • Drools 4
        • More declarative
        • Basic functional programming feature with “from”
        • Basic Rule Flow
        • Basic BRMS
      • Drools 5
        • Improved functional programming with 'accumulate'
        • More Advanced Rule Flow integration
        • Complex Event Process
          • Temporal Comparators
          • Sliding Time Windows
        • Production ready BRMS
    • Unified Vision Behavioural Modelling
    • Integrated Systems Semantic Ontologies Rules Event Processes Workflows Rules Workflows Event Processes Semantic Ontologies
    • Integrated Systems
      • EDM
        • Enterprise Decision Management
      • edBPM
        • Event Driven BPM
      • sBPM
        • Semantic BPM
        • Semantic Business Ontologies/Taxonomies
      • EDA
        • Event Driven Architectures
        • Compliments SOA
    • Unified Vision “ A common platform to model and govern the business logic of the enterprise.”
    • Unified Vision “ A common platform to model and govern the business logic of the enterprise.”
    • Business Logic Lifecycle
    • jBPM3 File file = new File (“.....”); // file to XML process definition ProcessDefinition processDefinition = ProcessDefinition.parseXmlString( IoUtils.FileToString( file ) ); ProcessInstance processInstance = new ProcessInstance(processDefinition); Jess Rete engine = new Rete(); FileReader file = new FileReader("myfile.clp"); Jesp parser = new Jesp(file, engine); parser.parse(false); Esper EPServiceProvider epService = EPServiceProviderManager.getDefaultProvider(); EPStatement countStmt = admin.createEPL( "...." ); countStmt.start(); Knowledge API
    • Drools Flow KnowledegBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBulider(); kbuilder.addResource( ResourceFactory.newClassPathResource( “myflow.bpmn2”, ResourceType.BPMN2 ); If ( kbuilder.hasErrors() ) { log.error( kbuilder.hasErrors().toString() ); } KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addKnowledgePackages( kbase.getKnowledgePackages() ); Knowledge API
    • Drools Expert KnowledegBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBulider(); kbuilder.addResource( ResourceFactory.newClassPathResource( “myrules.drl”, ResourceType.DRL ); If ( kbuilder.hasErrors() ) { log.error( kbuilder.hasErrors().toString() ); } KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addKnowledgePackages( kbase.getKnowledgePackages() ); Knowledge API
    • <drools:kbase id=&quot;kbase1&quot;> <drools:resource type=&quot;DRL&quot; source=&quot;classpath:.../testSpring.drl&quot; /> </drools:kbase> <drools:ksession id=&quot;ksession1&quot; type=&quot; stateless &quot; kbase =&quot;kbase1&quot; /> <drools:ksession id=&quot;ksession2&quot; type=&quot; stateful &quot; kbase =&quot;kbase1&quot;/> <camelContext id=&quot;camel&quot;> <route> <from uri=&quot;cxfrs://bean://rsServer&quot;/> <marshal ref=&quot;xstream&quot;/> <to uri=”drools:ksession1” /> <unmarshal ref=&quot;xstream&quot;/> </route> </camelContext> Declarative Services Spring XML and Camel
    • Event Driven Architectures edBPM + EDM
    • EDA
      • Metaphor - In our body:
        • SOA is used to build our muscles and organs
        • EDA is used to build our sensory system
    • Rules and processes loosely coupled tightly coupled specific generic Decision Services Process Rules SCOPE COUPLING ?
    • Key Characteristics
      • Dynamic
      • Flexible
      • Adaptive
    • Domain Overview
    • Domain Overview
    • Hybrid Logic Engine
      • Production Rule Systems PRD (forward chaining)
        • Reactive
        • when Alarm( status == “alert” ) then send( “warning” )
      • Logic Programming LP (backward chaining)
        • Query
        • descendant( “mary”, “jane”)
      • Functional Programming FP
        • Map,Fold, Filter
        • avg([12, 16, 4, 6])
          • Returns single value 9.5
        • round([10.3, 4.7, 7.8] )
          • Returns List [10, 5, 8]
      • Description Logic
        • Person hasName String and livesAt Address
      • Production Rule Systems PRD (forward chaining FC)
        • Drools 5.0, OPSJ ( hyrbid BC), ART( hyrbid BC)
      • Logic Programming LP (backward chaining BC)
        • target : Prolog (POSL Position Slotted Language)
        • Drools Trunk has a prototype Prolog like query backward chaining capabilities. Stronger Polog like capabilities planned.
        • Opportunistic BC planned.
      • Functional Programming FP
        • Lisp, Haskell
        • Drools 5.0 has some functional capabilities
        • Drools 5.1, 5.2 will be looking to have strong functional capabilities
      Hybrid Logic Engine
      • Description Logic DL
        • KIF, OWL-DL
        • Planned, See “The Future”
      Hybrid Logic Engine
    • The Future
      • Full Hybrid Engine
        • http://community.jboss.org/wiki/DroolsLanguageEnhancements
      • Nested Objects
      • Casting Nested Objects
      • Positional Constraints
      • POSL - Positional-Slotted Language
      • Method Calls
      • Maps and Arrays (Collections)
      • Collections and XPath like filtering
      • Free form Expressions
      • Managed Object Graphs (MOGS)
      • Nested Patterns and Queries
      • Queries and Unification
      • Ontologies and Relations via
      • Query Based Backward Chaining with POSL
      • Triples with Hybrid POJO Graph Notation.
      • Escapes for Dialects
      • Accumulate Improvements to Support Haskell map/fold/filter and MVEL projection/fold
      • Otherwise
      • Branch (Labelled Else)
      • Rule Execution Groups
      • Rule Dependency Meta-Rule Language
      • Parallel Meta-Rule Language
      • Field Versioning
      • Logical Closures/OnFalse
      • Opportunistic Backward Chaining, Lazy Field/Object Values
      • ...
    • Drools Expert
    • Classes
    • rule “increase balance for AccountPeriod Credits” when ap : AccountPeriod() acc : Account( $accountNo : accountNo ) CashFlow( type == CREDIT, accountNo == $accountNo, date >= ap.start && <= ap.end, $ammount : ammount ) then acc.balance += $amount; end select * from Account acc, Cashflow cf, AccountPeriod ap where acc.accountNo == cf.accountNo and cf.type == CREDIT cf.date >= ap.start and cf.date <= ap.end trigger : acc.balance += cf.amount Credit Cashflow Rule
    • rule “increase balance for AccountPeriod Credits” when ap : AccountPeriod() acc : Account( $accountNo : accountNo ) CashFlow( type == CREDIT, accountNo == $accountNo, date >= ap.start && <= ap.end, $ammount : ammount ) then acc.balance += $amount; end rule “decrease balance for AccountPeriod Debits” when ap : AccountPeriod() acc : Account( $accountNo : accountNo ) CashFlow( type == DEBIT, accountNo == $accountNo, date >= ap.start && <= ap.end, $ammount : ammount ) then acc.balance -= $amount; end Rules as a “view”
    • Drools Expert Quick Example Stateless
    • Definitions public class Applicant { private String name; private int age; private boolean valid; // getter and setter methods here } rule &quot;Is of valid age&quot; when $a : Applicant( age < 18 ) then modify ( $a ) { valid = false }; ends
    • Building KnowledgeBuilder kbuilder = KnowledgeBuilderFactory .newKnowledgeBuilder(); kbuilder .add( ResourceFactory .newClassPathResource( &quot;licenseApplication.drl&quot; , getClass() ), ResourceType.DRL ); if ( kbuilder .hasErrors() ) { System.err.println( kbuilder .getErrors().toString() ); } kbase .addKnowledgePackages( kbuilder .getKnowledgePackages() );
    • Executing StatelessKnowledgeSession ksession = kbase .newStatelessKnowledgeSession(); Applicant applicant = new Applicant ( &quot;Mr John Smith&quot; , 16 ); assertTrue ( applicant .isValid() ); ksession .execute( applicant ); assertFalse ( applicant .isValid() ); rule &quot;Is of valid age&quot; when $a : Applicant( age < 18 ) then modify ( $a ) { valid = false }; ends
    • Drools Expert Quick Example Stateful
    • Definitions public class Room { private String name // getter and setter methods here } public class Sprinkler { private Room room ; private boolean on ; // getter and setter methods here } public class Fire { private Room room ; // getter and setter methods here } public class Alarm { }
    • Definitions rule &quot;When there is a fire turn on the sprinkler&quot; when Fire ($room : room) $sprinkler : Sprinkler ( room == $room, on == false ) then modify ( $sprinkler ) { on = true }; println ( &quot;Turn on the sprinkler for room &quot; + $room.name ); end rule &quot;When the fire is gone turn off the sprinkler&quot; when $room : Room ( ) $sprinkler : Sprinkler ( room == $room, on == true ) not Fire ( room == $room ) then modify ( $sprinkler ) { on = false }; println ( &quot;Turn off the sprinkler for room &quot; + $room.name ); end
    • Definitions rule &quot;Raise the alarm when we have one or more fires&quot; when exists Fire () then insert ( new Alarm () ); println ( &quot;Raise the alarm&quot; ); end rule &quot;Cancel the alarm when all the fires have gone&quot; when not Fire () $alarm : Alarm () then retract ( $alarm ); println ( &quot;Cancel the alarm&quot; ); end
    • Definitions rule &quot;Status output when things are ok&quot; when not Alarm () not Sprinkler ( on === true ) then println ( &quot;Everything is ok&quot; ); end
    • Executing String [] names = new String []{ &quot;kitchen&quot; , &quot;bedroom&quot; , &quot;office&quot; , &quot;livingroom&quot; }; Map < String , Room > name2room = new HashMap < String , Room >(); for ( String name : names ){ Room room = new Room ( name ); name2room .put( name , room ); ksession .insert( room ); Sprinkler sprinkler = new Sprinkler ( room ); ksession .insert( sprinkler ); } ksession .fireAllRules() > Everything is ok
    • Executing Fire kitchenFire = new Fire ( name2room.get( &quot;kitchen&quot; ) ); Fire officeFire = new Fire ( name2room.get( &quot;office&quot; ) ); FactHandle kitchenFireHandle = ksession .insert( kitchenFire ); FactHandle officeFireHandle = ksession .insert( officeFire ); ksession .fireAllRules(); > Raise the alarm > Turn on the sprinkler for room kitchen > Turn on the sprinkler for room office
    • Executing ksession .retract( kitchenFireHandle ); ksession .retract( officeFireHandle ); ksession .fireAllRules() > Turn off the sprinkler for room office > Turn off the sprinkler for room kitchen > Cancel the alarm > Everything is ok rule &quot;Status output when things are ok&quot; when not Alarm () not Sprinkler ( on === true ) then println ( &quot;Everything is ok&quot; ); end
    • Conditional Elements
    • not Bus( color = “red” ) Conditional Elements exists Bus( color = “red” ) forall ( $bus : Bus( floors == 2 ) Bus( this == $bus, color == “red” ) ) forall ( $bus : Bus( color == “red” ) )
    • Accumulate CE rule &quot;accumulate&quot; when $sum : Number( intValue > 100 ) from accumulate ( Bus( color == &quot;red&quot; , $t : takings ) sum( $t ) ) then print &quot;sum is “ + $sum; end
    • Accumulate CE Patterns and CE's can be chained with ' from ' rule &quot;collect&quot; when $zipCode : ZipCode() $sum : Number( intValue > 100 ) from accumulate ( Bus( color == &quot;red&quot; , $t : takings ) from $hbn.getNamedQuery( “Find Buses” ) .setParameters( [ “zipCode” : $zipCode ] ) .list(), sum( $t ) ) then print &quot;sum is “ + $sum; end
    • Timers Calendars
    • Timers rule “name” timer 1m30s when $l : Light( status == “on” ) then modify ( $l ) { status = “off” }; rule “name” timer (int: 1m30s 0) when $l : Light( status == “on” ) then modify ( $l ) { status = “off” }; When the light is on, and has been on for 1m30s then turn it off Same as above. Interval timer with JDK semantics for initial duration, then repeat duration.
    • Timers rule “name” timer ( cron: 0 0/15 * * * * ) when Alarm( ) then sendEmail( ”Alert Alert Alert!!!” ) Field Name Mandatory? Allowed Values Allowed Special Characters Seconds YES 0-59 , - * / Minutes YES 0-59 , - * / Hours YES 0-23 , - * / Day of month YES 1-31 , - * ? / L W Month YES 1-12 or JAN-DEC , - * / Day of week YES 1-7 or SUN-SAT , - * ? / L # Year NO empty, 1970-2099 , - * / Send alert every quarter of an hour
    • Calendars rule &quot;weekdays are high priority&quot; calendars &quot;weekday&quot; timer (int:0 1h) when Alarm() then send( &quot;priority high - we have an alarm” ); end rule &quot;weekend are low priority&quot; calendars &quot;weekend&quot; timer (int:0 4h) when Alarm() then send( &quot;priority low - we have an alarm” ); end Execute now and after 1 hour duration Execute now and after 4 hour duration
    • Truth Maintenance Inference
    • TMS and Inference rule &quot;Issue Child Bus Pass&quot; when $p : Person ( age < 16 ) then insert(new ChildBusPass ( $p ) ); end rule &quot;Issue Adult Bus Pass&quot; when $p : Person ( age >= 16 ) then insert(new AdultBusPass ( $p ) ); end Couples the logic What happens when the Child stops being 16?
    • TMS and Inference
      • Bad
        • Monolithic
        • Leaky
        • Brittle integrity - manual maintenance
    • TMS and Inference
      • A rule “logically” inserts an object
      • When the rule is no longer true, the object is retracted.
      when $p : Person ( age < 16 ) then logicalInsert ( new IsChild ( $p ) ) end when $p : Person ( age >= 16 ) then logicalInsert ( new IsAdult ( $p ) ) end de-couples the logic Maintains the truth by automatically retracting
    • TMS and Inference rule &quot;Issue Child Bus Pass&quot; when $p : Person ( ) IsChild ( person =$p ) then logicalInsert ( new ChildBusPass ( $p ) ); end rule &quot;Issue Adult Bus Pass&quot; when $p : Person ( age >= 16 ) IsAdult ( person =$p ) then logicalInsert ( new AdultBusPass ( $p ) ); end The truth maintenance cascades
    • TMS and Inference rule &quot;Issue Child Bus Pass&quot; when $p : Person ( ) not ( ChildBusPass ( person == $p ) ) then requestChildBusPass( $p ); end The truth maintenance cascades
    • TMS and Inference
      • Good
        • De-couple knowledge responsibilities
        • Encapsulate knowledge
        • Provide semantic abstractions for those encapsulation
        • Integrity robustness – truth maintenance
    • Fusion
    • Drools Fusion: Enables...
      • Event Detection:
        • From an event cloud or set of streams, select all the meaningful events, and only them.
      • [Temporal] Event Correlation:
        • Ability to correlate events and facts declaring both temporal and non-temporal constraints between them.
        • Ability to reason over event aggregation.
      • Event Sequencing:
        • A -> ( B OR C ) -> D
      • Event Abstraction:
        • Ability to compose complex events from atomic events AND reason over them
    • Drools Fusion: Features
      • Support to Event semantics:
        • Usually immutable, but not enforced
        • Strong temporal relationships
        • Managed lifecycle
        • Point-in-time and Interval events
      • Time semantics
        • Discrete
      • Temporal relationships
        • All 13 operators defined by James Allen (+ negations)
    • Drools Fusion: Temporal Reasoning
    • Drools Fusion: Temporal Reasoning
    • $c : Custumer( type == “VIP ) $oe : BuyOrderEvent( customer == $c ) from entry-point “Home Broker Stream” not BuyAckEvent( relatedEvent == $oe.id, this after[1s, 10s] $oe ) from entry-point “Stock Trader Stream” Operators Existing Drools 'not' Conditional Elements can be used to detect non-occurrence of events BackAckEvent must occur between 1s and 10s ' after' BuyOrderEvent
    • Aggregations Rule Engines do not deal with aggregations $n : Number( intValue > 100 ) from accumulate ( $s : StockTicker( symbol == “RHAT” ) over window:time ( 5s ), average ( $s.price ) ) Over 5 seconds Aggregate ticker price for RHAT over last 5 seconds The pattern 'Number' reasons 'from' the accumulate result
    • CEP Applied at FedEx Custom Critical * Presented by Adam Mollemkopf at ORF 2009
    • CEP Applied at FedEx Custom Critical * Presented by Adam Mollemkopf at ORF 2009
      • At least 50% of Alerts can be reasoned automatically, promoting staff savings and improved Customer and Driver experiences.
      • Risk Avoidance via pro-active monitoring
        • Reduction in insurance claims and shipment service failures
      • Minimum 30% efficiency gains in shipment monitoring , saving at least 15% of Operations staff cost.
      CEP Applied at FedEx Custom Critical * Presented by Adam Mollemkopf at ORF 2009
      • Some numbers (from early 2010):
        • 24 x 7 sessions, no downtime
        • Average of 500k+ facts/events concurrently in memory
          • Business hours: 1M+ facts/events concurrently
        • Response time for reasoning cycles:
          • Average: 150 ms
          • Peak: 1.2 sec
        • Several hundred rules
      CEP Applied at FedEx Custom Critical * Presented by Adam Mollemkopf at ORF 2009
    • Differential Update
      • Differential Update (a.k.a. “true modify”)
        • Implements a real “modify/update” operation, instead of retract+assert.
          • Reuses tuples, reduces GC stress, improves performance
    • Questions? Questions?
      • Dave Bowman : All right, HAL; I'll go in through the emergency airlock.
      • HAL : Without your space helmet, Dave, you're going to find that rather difficult.
      • Dave Bowman : HAL, I won't argue with you anymore! Open the doors!
      • HAL : Dave, this conversation can serve no purpose anymore. Goodbye.
      Joshua: Greetings, Professor Falken. Stephen Falken : Hello, Joshua. Joshua: A strange game. The only winning move is not to play. How about a nice game of chess?