2011-03-29 London - drools

Embed Size (px)

Citation preview

The 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

Mark ProctorProject Lead

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 1997CathedralGNU Emacs, GCC

BazaarLinux

19 guidelinesScratching 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 ushttp://www.youtube.com/watch?v=u6XAPnuFjJc

Risk

Health of ProjectMailing 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 educationBooks, events, blogs, articles

Ecosystem, 3rd parties and satellite communities

Community

Books

Introduction to Expert SystemsPeter Jackson

Expert Systems, Principles and ProgrammingJoseph C. Giarratano and Gary D. Riley

Oh And There are Drools Books Too

Drools Research Network

http://www.jboss.org/drools/research-network.html40+ Research related pages

Many more as haven't updated

Community Collaboration

40% of Drools work now done in the communityUS 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

InvestmentMillennium Investment Group (MIG)

LogisticsFedex

AirlineSabre

MortgageFranklin American

HealthcareOSDE

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

DendralBaobabMycinGuidonNeomycinTeiresiasPuffEmycinWMSaconCentaurWheezeGravidaClot

Oncocin

1970s

1980s

Because Not Everyone
Is As Smart As He Is

Business Rules Engines

OPS5ARTClipsJessDrools 2JRules

1980s

2010s

Drools 3

1990s

2000s

Drools 4Drools 5

Drools History

Drools 2Rete like XML Scripting language

Drools 3 Based on Clips functionality

Iterative improves to JRules syntax with Clips functionality

Drools 4More declarative

Basic functional programming feature with from

Basic Rule Flow

Basic BRMS

Drools 5Improved functional programming with 'accumulate'

More Advanced Rule Flow integration

Complex Event ProcessTemporal Comparators

Sliding Time Windows

Production ready BRMS

Unified Vision

Behavioural Modelling

Integrated Systems

Semantic
OntologiesRulesEventProcessesWorkflowsRules Workflows

EventProcesses

Semantic
Ontologies

Integrated Systems

EDMEnterprise Decision Management

edBPM Event Driven BPM

sBPMSemantic BPM

Semantic Business Ontologies/Taxonomies

EDAEvent Driven Architectures

Compliments SOA

Unified Vision

Business Logic integration System

Guvnor

Drools
Fusion

jBPM

Drools
ExpertA common platform to model and govern thebusiness logic of the enterprise.

Unified Vision

Drools
Grid

Drools
Planner

Drools
Semantics

Drools
Chance Business Logic integration System

A common platform to model and govern thebusiness logic of the enterprise.

Business Logic Lifecycle

jBPM3File file = new File (.....); // file to XML process definition

ProcessDefinition processDefinition = ProcessDefinition.parseXmlString( IoUtils.FileToString( file ) );

ProcessInstance processInstance = new ProcessInstance(processDefinition);

JessRete 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

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 coupledtightly coupledspecificgenericDecisionServicesProcessRulesSCOPECOUPLING?

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 FPMap,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 LogicPerson 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 FPLisp, 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 DLKIF, OWL-DL

Planned, See The Future

Hybrid Logic Engine

The Future

Full Hybrid Enginehttp://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.start and cf.date = ap.start && = ap.start && Everything is ok

Executing

Fire kitchenFire = new Fire( name2room.get( "kitchen" ) );Fire officeFire = new Fire( name2room.get( "office" ) );

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 "Status output when things are ok" when not Alarm() not Sprinkler( on === true ) then println( "Everything is ok" );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 "accumulate"when $sum : Number( intValue > 100 ) from accumulate( Bus( color == "red", $t : takings ) sum( $t ) )then print "sum is + $sum;end

Accumulate CE

Patterns and CE's can be chained with 'from'

rule "collect"when $zipCode : ZipCode() $sum : Number( intValue > 100 ) from accumulate( Bus( color == "red", $t : takings ) from $hbn.getNamedQuery(Find Buses) .setParameters( [ zipCode : $zipCode ] ) .list(), sum( $t ) )then print "sum is + $sum;end

TimersCalendars

Timers

rule name timer 1m30swhen $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 beenon for 1m30s then turn it offSame 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 CharactersSeconds YES 0-59 , - * /Minutes YES 0-59 , - * /Hours YES 0-23 , - * /Day of month YES 1-31 , - * ? / L WMonth 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 "weekdays are high priority" calendars "weekday" timer (int:0 1h)when Alarm()then send( "priority high - we have an alarm );end

rule "weekend are low priority" calendars "weekend" timer (int:0 4h)when Alarm()then send( "priority low - we have an alarm );end

Execute now and after
1 hour durationExecute now and after
4 hour duration

Truth MaintenanceInference

TMS and Inference

rule "Issue Child Bus Pass"when $p : Person( age < 16 )then insert(new ChildBusPass( $p ) );endrule "Issue Adult Bus Pass"when $p : Person( age >= 16 )then insert(new AdultBusPass( $p ) );end

Couples the logicWhat happens when the Child stops being 16?

TMS and Inference

BadMonolithic

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 ) )endwhen $p : Person( age >= 16 )then logicalInsert( new IsAdult( $p ) )end

de-couples the logicMaintains the truth by
automatically retracting

TMS and Inference

rule "Issue Child Bus Pass"when $p : Person( ) IsChild( person =$p )then logicalInsert(new ChildBusPass( $p ) );endrule "Issue Adult Bus Pass"when $p : Person( age >= 16 ) IsAdult( person =$p )then logicalInsert(new AdultBusPass( $p ) );end

The truth maintenance cascades

TMS and Inference

rule "Issue Child Bus Pass"when $p : Person( ) not( ChildBusPass( person == $p ) )then requestChildBusPass( $p );end

The truth maintenance cascades

TMS and Inference

GoodDe-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 semanticsDiscrete

Temporal relationshipsAll 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 eventsBackAckEvent 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 secondsAggregate ticker price for RHAT over last 5 secondsThe 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 monitoringReduction 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 memoryBusiness 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?

Click to edit the title text format

Click to edit the text format

Click to edit the title text format

Click to edit the outline text formatSecond Outline LevelThird Outline LevelFourth Outline LevelFifth Outline LevelSixth Outline LevelSeventh Outline LevelEighth Outline LevelNinth Outline Level

Click to edit the title text format

Click to edit the text format

CashFlow

dateamounttypeaccountNo

12-Jan-07100CREDIT1

2-Feb-07200DEBIT1

18-May-0750CREDIT1

9-Mar-0775CREDIT1

???Page ??? (???)15/09/2010, 12:54:11Page / CashFlow

dateamounttype

12-Jan-07100CREDIT

9-Mar-0775CREDIT

???Page ??? (???)15/09/2010, 12:55:59Page / CashFlow

dateamounttype

2-Feb-07200DEBIT

???Page ??? (???)15/09/2010, 12:55:59Page / AccountingPeriod

startend

01-Jan-0731-Mar-07

???Page ??? (???)15/09/2010, 12:35:13Page / Account

accountNobalance

10

???Page ??? (???)15/09/2010, 12:35:13Page / Account

accountNobalance

1-25

???Page ??? (???)15/09/2010, 12:35:13Page /