1. Mark
Proctor
Project Lead
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
3. Sample Industries and Users
Investment
Millennium Investment Group (MIG)
Logistics
Fedex
Airline
Sabre
Mortgage
Franklin American
Healthcare
OSDE
4. 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 ....
9. Declarative Programming
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 Has Name and
LivesAt Address
10. Definitions
public class Applicant {
private String name;
private int age;
private boolean valid;
// getter and setter methods here
}
rule "Is of valid age" when
$a : Applicant( age < 18 )
then
modify( $a ) { valid = false };
ends
14. Executing
rule "Is of valid age" when
$a : Applicant( age < 18 )
then
modify( $a ) { valid = false };
ends
StatelessKnowledgeSession ksession = kbase.newStatelessKnowledgeSession();
Applicant applicant = new Applicant( "Mr John Smith", 16 );
assertTrue( applicant.isValid() );
ksession.execute( applicant );
assertFalse( applicant.isValid() );
15. 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 {
}
16. Conditional Elements
not Bus( color = “red” )
exists Bus( color = “red” )
forall ( $bus : Bus( color == “red” ) )
forall ( $bus : Bus( floors == 2 )
Bus( this == $bus, color == “red” ) )
17. Accumulate CE
rule "accumulate"
when
accumulate( Bus( color == "red", $t : takings );
$sum : sum( $t ),
$min : min( $t ),
$max : max( $t );
$min > 100 && $max < 200 && $sum > 500 )
then
print "sum is “ + $sum;
end
18. Classes
C a s h f lo w
A cco u n t
D a te d a te
lo n g a c c o u n t N o
d o u b le a m o u n t
d o u b le b a la n c e
in t t y p e
lo n g a c c o u n t N o
A c c o u n t in g P e r io d
D a te s ta r t
D a te e n d
19. Credit Cashflow Rule
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
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
20. Rules as a “view”
CashFlow AccountingPeriod
date amount type accountNo start end
12-Jan-07 100 CREDIT 1 01-Jan-07 31-Mar-07
2-Feb-07 200 DEBIT 1
18-May-07 50 CREDIT 1 Account
9-Mar-07 75 CREDIT 1 accountNo balance
1 0
rule “increase balance for AccountPeriod rule “decrease balance for AccountPeriod
Credits” Debits”
when when
ap : AccountPeriod() ap : AccountPeriod()
acc : Account( $accountNo : accountNo ) acc : Account( $accountNo : accountNo )
CashFlow( type == CREDIT, CashFlow( type == DEBIT,
accountNo == $accountNo, accountNo == $accountNo,
date >= ap.start && <= ap.end, date >= ap.start && <= ap.end,
$ammount : ammount ) $ammount : ammount )
then then
acc.balance += $amount; acc.balance -= $amount;
end CashFlow end CashFlow
date amount type date amount type
12-Jan-07 100 CREDIT 2-Feb-07 200 DEBIT
9-Mar-07 75 CREDIT
Account
accountNo balance
1 -25
21. TMS and Inference
rule "Issue Child Bus Pass"
when
$p : Person( age < 16 )
then
insert(new ChildBusPass( $p ) );
end
rule "Issue Adult Bus Pass"
when
$p : Person( age >= 16 )
then
insert(new AdultBusPass( $p ) );
end
22. TMS and Inference
rule "Issue Child Bus Pass" Couples the logic
when
$p : Person( age < 16 )
then
insert(new ChildBusPass( $p ) );
end
rule "Issue Adult Bus Pass" What happens when the Child
stops being 16?
when
$p : Person( age >= 16 )
then
insert(new AdultBusPass( $p ) );
end
24. 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 ) de-couples the logic
then
logicalInsert( new IsChild( $p ) )
end
when
Maintains the truth by
$p : Person( age >= 16 ) automatically retracting
then
logicalInsert( new IsAdult( $p ) )
end
25. TMS and Inference
rule "Issue Child Bus Pass"
when
$p : Person( )
IsChild( person =$p )
then
logicalInsert(new ChildBusPass( $p ) );
end
rule "Issue Adult Bus Pass"
The truth maintenance
when cascades
$p : Person( age >= 16 )
IsAdult( person =$p )
then
logicalInsert(new AdultBusPass( $p ) );
end
26. TMS and Inference
rule "Issue Child Bus Pass"
when
$p : Person( )
not( ChildBusPass( person == $p ) )
then The truth maintenance
cascades
requestChildBusPass( $p );
end
27. TMS and Inference
Good
De-couple knowledge responsibilities
Encapsulate knowledge
Provide semantic abstractions for those encapsulation
Integrity robustness – truth maintenance
32. What is Complex Event Processing
1. Detect 2. Correlate
3. React
33. Time is Money
Business Event
Value Loss
Business Value
Reaction
Time
Time Loss
Adapted from a presentation by James Taylor, Sep/2011
34. Terminology: CEP and ESP
For the scope of this presentation:
“CEP is used as a common term
meaning both CEP and ESP.”
35. EDA vs SOA
EDA is **not** SOA 2.0
Complementary architectures
Metaphor
In our body:
SOA is used to build our muscles and organs
EDA is used to build our sensory system
37. 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 Abstraction:
Ability to compose complex events from atomic events
AND reason over them
38. Drools Fusion
Features:
Event Semantics as First Class Citizens
Allow Detection, Correlation and Composition
Temporal Constraints
Session Clock
Stream Processing
Sliding Windows
CEP volumes (scalability)
(Re)Active Rules
Data Loaders for Input
39. Drools Fusion
Features:
Event Semantics as First Class Citizens
Allow Detection, Correlation and Composition
Temporal Constraints
Session Clock
Stream Processing
Sliding Windows
CEP volumes (scalability)
(Re)Active Rules
Data Loaders for Input
40. Event Declaration and Semantics
// declaring existing class
import some.package.VoiceCall Event semantics:
declare VoiceCall Point-in-time and Interval
@role( event )
@timestamp( calltime )
@duration( duration )
An event is a fact with a few special
end
characteristics:
// generating an event class Usually immutable, but not enforced
declare StockTick
@role( event )
Strong temporal relationships
Lifecycle may be managed
symbol : String
price : double
Allow use of sliding windows
end
“All events are facts, but not all facts
are events.”
41. Temporal Reasoning
Semantics for:
time: discrete
events: point-in-time and interval
Ability to express temporal relationships:
Allen’s 13 temporal operators
James F. Allen defined the 13 possible temporal
relations between two events.
Eiko Yoneki and Jean Bacon defined a unified
semantics for event correlation over time and space.
42. Stream Support (entry-points)
A scoping abstraction for stream support
Rule compiler gather all entry-point declarations and
expose them through the session API
Engine manages all the scoping and synchronization
behind the scenes.
rule “Stock Trade Correlation”
when
$c : Customer( type == “VIP” )
BuyOrderEvent( customer == $c, $id : id ) from entry-point “Home Broker Stream”
BuyAckEvent( sourceEvent == $id ) from entry-point “Stock Trader Stream”
then
// take some action
end
43. Delaying Rules
Negative patterns may require rule firings to be delayed.
rule “Order timeout”
when
$bse : BuyShares ( $id : id )
not BuySharesAck( id == $id, this after[0s,30s] $bse )
then
// Buy order was not acknowledged. Cancel operation
// by timeout.
end
44. Temporal Relationships
rule “Shipment not picked up in time”
when
Shipment( $pickupTime : scheduledPickupTime )
not ShipmentPickup( this before $pickupTime )
then
// shipment not picked up... action required.
end
45. Temporal Relationships
rule “Shipment not picked up in time”
when
Shipment( $pickupTime : scheduledPickupTime )
not ShipmentPickup( this before $pickupTime )
then
// shipment not picked up... Action required.
end
Temporal
Relationship
46. Allen’s 13 Temporal Operators
Point-Point Point-Interval Interval-Interval
A
A before B B
A
A meets B B
A
A overlaps B
B
A
A finishes B B
A
A includes B
B
A
A starts B B
A
A coincides B
B
47. Allen’s 13 Temporal Operators
Point-Point Point-Interval Interval-Interval
A
A after B B
A
A metBy B B
A
A overlapedBy B
B
A
A finishedBy B B
A
A during B
B
A
A finishes B B
48. Sliding Window Support
Allows reasoning over a moving window of “interest”
Time
Length
Sliding window 1
Sliding window 2
Joined window
49. Sliding Window Support
accumulate( $s : StockTicker( symbol == “RHAT” ) over window:time( 5s );
$avg : avg( $s.price );
$avg > 100 )
Aggregate ticker price for RHAT over last 5 se
50. Sliding Window Support
Allows reasoning over a moving window of “interest”
Time
Length
rule “Average Order Value over 12 hours”
when
$c : Customer()
accumulate(
BuyOrder( customer == $c, $p : price )
over window:time( 12h );
$a : avg( $p );
$a > 10 )
then
// do something
end
51. Calendars
rule "weekdays are high priority"
calendars "weekday"
timer (int:0 1h) Execute now and after
1 hour duration
when
Alarm()
then
send( "priority high - we have an alarm” );
end
rule "weekend are low priority"
calendars "weekend"
timer (int:0 4h) Execute now and after
4 hour duration
when
Alarm()
then
send( "priority low - we have an alarm” );
end
52. Timers
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 ,-*?/LW
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
rule “name”
timer ( cron: 0 0/15 * * * * )
when
Alarm( )
then
sendEmail( ”Alert Alert Alert!!!” )
53. CEP Applied at FedEx Custom Critical
* Presented by Adam Mollemkopf at ORF 2009
54. 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.
55. 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
56. 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
57. 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.
en.
o, Joshua.
he only winning move is not to play. How about a nice game of chess?