Register Login
Internet / AI Technology University (ITU/AITU)





|

Top Links: >> 80. Technology >> Internet Technology Summit Program >> 7. Enterprise, Knowledge Architecture, IoT, AI and ML >> 7.2. Rules and Knowledge-Driven Applications >> 7.2.4. DRools Basics
Current Topic: 7.2.4.1. Truth Maintenance System
You have a privilege to create a quiz (QnA) related to this subject and obtain creativity score...
Truth Maintenance System

Truth Maintenance System (TMS) supports logical chaining in Drools.

TMS includes conditional elements, such as and/or/not/exists/test, logical concepts or operations, such as Assertion (Insert), Retraction (Retract), Modification (Update and Modify) and more…
Drools supports conditional element and as well as &&.

Drools supports conditional element or as well as ||.

Conditional Element exists checks for the existence of data in the Working Memory

Assertion
• Expert systems typically use the term assert or assertion to refer to facts made available to the system.
• However, due to "assert" being a keyword in most languages, DRools uses the insert keyword;
• These two terms are used interchangeably.
• When an Object is inserted it returns a FactHandle. This FactHandle is the token used to represent your inserted object within the WorkingMemory.
• It is also used for interactions with the WorkingMemory when you wish to retract or modify an object.

Person person = new Person("Bob");
FactHandle personHandle = ksession.insert( person );


Retraction
• Retraction is the removal of a fact from Working Memory.
• Any rules that are activated and dependent on that fact will be cancelled.
• Note that it is possible to have rules that depend on the nonexistence of a fact, in which case retracting a fact may cause a rule to activate. (See the not and exists keywords.)
• Retraction may be done using the FactHandle that was returned by the insert call.
• On the right hand side of a rule the retract statement is used, which works with a simple object reference.

Person person = new Person("Bob");
FactHandle personHandle = ksession.insert( person );
....
ksession.retract( personHandle );


Modification: Update & Modify
• The Rule Engine must be notified of modified facts, so that they can be reprocessed.
• You must use the update() method to notify the WorkingMemory of changed objects.
Update() always takes the modified object as a second parameter, which allows you to specify new instances for immutable objects.
Modify() statement is recommended on the right hand side of a rule the , as it makes the changes and notifies the engine in a single statement.

Example of modify with logical conditions:

when
exists (application.criminalRecord) or application.person.age < 18
then
modify(application.rejected = true);
end


Two rules with MODIFY and LOCK-ON-ACTIVE

rule "Assign people in North Carolina (NC) to sales region 1"
ruleflow-group "test"
lock-on-active true
when
$p : Person( )
$a : Address( state == "NC") from $p.address
then
modify ($p) {} // Assign person to sales region 1 in a modify block
end
----------------------------------------------------------------------------------------
rule "Apply a discount to people in the city of Raleigh"
ruleflow-group "test"
lock-on-active true
when
$p : Person( )
$a : Address( city == "Raleigh") from $p.address
then
modify ($p) {} // Apply discount to person in a modify block
end
Was it clear so far? Highlight the text in question Or

In the example, persons in Raleigh, NC should be assigned to sales region 1 and receive a discount;
i.e., you would expect both rules to activate and fire.
Instead you will find that only the second rule fires.
Why? Because of the lock-on-active true attribute.


Drools provide direct access to List & Map objects
• Directly access a List value by index
• Directly access a Map value by key
• Can use the contains keyword similar as in Java

Examples:

listOfProducts[0] = “redHat”;
mapOfProducts.put(“redHat”, aRedHatProductObject);

when
mapOfProducts contains “redHat”
then
modify($offer.add(mapOfProducts[“redHat”]) );
end


Drools function allows developers creating a method (function) in a rule source file
• Starts with the keyword “function” and makes sense when can be reused
• Very similar to a Java method, might be useful when a developer does not want to touch Java code

function void printTime() {
logger.info((new Date()).toString());
}


Drools can declare new Type, which is very similar to introducing a new class in Java

declare Product
productName : String
productPrice : double
productAvailability : java.util.Date
end

Declaration as well as Java classes might include metadata, for example @author Jeff Zhuk
Assignments:
1. Answer QnAs
2. Create at least one QnA related to the content and email to jeff.zhuk@javaschool.com
Questions and Answers (QnA): QnA1 | QnA2 | QnA3
We offer a fun way to share your experience and be rewarded.
You create a puzzle - quiz with a good question and several answers, one correct and several wrong ones.
The question as well as answers can include text, links, video.
This is your creation, completely up to your taste, humor, and of course your knowledge.
If there is an existing quiz above, you need first to solve the puzzles and evaluate the quality (at the bottom of every quiz).
After finishing the existing quiz you will be able to create your own. The best puzzles will be rewarded!
We invite you to create your own questions and answers (QnA) to increase your rank and win the Top Creativity Prize!

| Check Your Progress | Propose QnA | Have a question or comments for open discussion?
<br/>Person person = new Person("Bob");
<br/>FactHandle personHandle = ksession.insert( person );
<br/>


Retraction
• Retraction is the removal of a fact from Working Memory.
• Any rules that are activated and dependent on that fact will be cancelled.
• Note that it is possible to have rules that depend on the nonexistence of a fact, in which case retracting a fact may cause a rule to activate. (See the not and exists keywords.)
• Retraction may be done using the FactHandle that was returned by the insert call.
• On the right hand side of a rule the retract statement is used, which works with a simple object reference.
<br/>Person person = new Person("Bob");
<br/>FactHandle personHandle = ksession.insert( person );
<br/>....
<br/>ksession.retract( personHandle );
<br/>


Modification: Update & Modify
• The Rule Engine must be notified of modified facts, so that they can be reprocessed.
• You must use the update() method to notify the WorkingMemory of changed objects.
Update() always takes the modified object as a second parameter, which allows you to specify new instances for immutable objects.
Modify() statement is recommended on the right hand side of a rule the , as it makes the changes and notifies the engine in a single statement.

Example of modify with logical conditions:
<br/>when
<br/>   exists (application.criminalRecord) or application.person.age < 18
<br/>then
<br/>   modify(application.rejected = true);
<br/>end
<br/>


Two rules with MODIFY and LOCK-ON-ACTIVE
<br/>rule "Assign people in North Carolina (NC) to sales region 1"
<br/>ruleflow-group "test"
<br/>lock-on-active true
<br/>when
<br/>    $p : Person( ) 
<br/>    $a : Address( state == "NC") from $p.address 
<br/>then
<br/>    modify ($p) {} // Assign person to sales region 1 in a modify block
<br/>end
<br/>----------------------------------------------------------------------------------------
<br/>rule "Apply a discount to people in the city of Raleigh"
<br/>ruleflow-group "test"
<br/>lock-on-active true
<br/>when
<br/>    $p : Person( ) 
<br/>    $a : Address( city == "Raleigh") from $p.address 
<br/>then
<br/>    modify ($p) {} // Apply discount to person in a modify block
<br/>end
<br/>






Was it clear so far? Highlight the text in question

Or


In the example, persons in Raleigh, NC should be assigned to sales region 1 and receive a discount;
i.e., you would expect both rules to activate and fire.
Instead you will find that only the second rule fires.
Why? Because of the lock-on-active true attribute.


Drools provide direct access to List & Map objects
• Directly access a List value by index
• Directly access a Map value by key
• Can use the contains keyword similar as in Java

Examples:
<br/>listOfProducts[0] = “redHat”;
<br/>mapOfProducts.put(“redHat”, aRedHatProductObject);
<br/>
<br/>when
<br/>     mapOfProducts contains “redHat”
<br/>then
<br/>    modify($offer.add(mapOfProducts[“redHat”]) );
<br/>end
<br/>


Drools function allows developers creating a method (function) in a rule source file
• Starts with the keyword “function” and makes sense when can be reused
• Very similar to a Java method, might be useful when a developer does not want to touch Java code
<br/>function void printTime() {
<br/>    logger.info((new Date()).toString());
<br/>}
<br/>


Drools can declare new Type, which is very similar to introducing a new class in Java
<br/>declare Product
<br/>  productName : String
<br/>  productPrice : double
<br/>  productAvailability : java.util.Date
<br/>end
<br/>

Declaration as well as Java classes might include metadata, for example @author Jeff Zhuk
Assignments:
1. Answer QnAs
2. Create at least one QnA related to the content and email to jeff.zhuk@javaschool.com
Questions and Answers (QnA): QnA1 | QnA2 | QnA3

We offer a fun way to share your experience and be rewarded.
You create a puzzle - quiz with a good question and several answers, one correct and several wrong ones.
The question as well as answers can include text, links, video.
This is your creation, completely up to your taste, humor, and of course your knowledge.
If there is an existing quiz above, you need first to solve the puzzles and evaluate the quality (at the bottom of every quiz).
After finishing the existing quiz you will be able to create your own. The best puzzles will be rewarded!

We invite you to create your own questions and answers (QnA) to increase your rank and win the Top Creativity Prize!


| Check Your Progress | Propose QnA | Have a question or comments for open discussion?

Have a suggestion? - shoot an email
Looking for something special? - Talk to AI
Read: IT of the future: AI and Semantic Cloud Architecture | Fixing Education
Do you want to move from theory to practice and become a magician? Learn and work with us at Internet Technology University (ITU) - JavaSchool.com.

Technology that we offer and How this works: English | Spanish | Russian | French

Internet Technology University | JavaSchool.com | Copyrights © Since 1997 | All Rights Reserved
Patents: US10956676, US7032006, US7774751, US7966093, US8051026, US8863234
Including conversational semantic decision support systems (CSDS) and bringing us closer to The message from 2040
Privacy Policy