[jboss-svn-commits] JBL Code SVN: r18158 - in labs/jbossrules/trunk/drools-analytics/src: main/resources/org/drools/analytics/subsumption and 1 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sun Jan 27 07:11:16 EST 2008
Author: Rikkola
Date: 2008-01-27 07:11:15 -0500 (Sun, 27 Jan 2008)
New Revision: 18158
Modified:
labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/components/AnalyticsComponent.java
labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/subsumption/Possibilities.drl
labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/subsumption/SubsumptantPossibilitiesTest.java
Log:
Fixed a rule that finds pattern subsumptions.
Modified: labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/components/AnalyticsComponent.java
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/components/AnalyticsComponent.java 2008-01-27 11:45:43 UTC (rev 18157)
+++ labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/components/AnalyticsComponent.java 2008-01-27 12:11:15 UTC (rev 18158)
@@ -12,10 +12,10 @@
protected int id;
protected AnalyticsComponent parent;
- protected int orderNumber = 0; // Order number of this instance under
+
+ // Order number of this instance under parent.
+ protected int orderNumber = 0;
- // parent.
-
public abstract AnalyticsComponentType getComponentType();
public int compareTo(AnalyticsComponent o) {
Modified: labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/subsumption/Possibilities.drl
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/subsumption/Possibilities.drl 2008-01-27 11:45:43 UTC (rev 18157)
+++ labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/subsumption/Possibilities.drl 2008-01-27 12:11:15 UTC (rev 18158)
@@ -13,96 +13,53 @@
#declare any global variables here
-
-#
-# Finds subsumptant patterns possibilities
-#
-# Depandencies: TODO: Dependencies
-#
rule "Find subsumptant pattern possibilities"
when
+
$redundancy :Redundancy(
left.causeType == CauseType.PATTERN
)
# Find two PatternPossibilities.
- (
- $pp1 :PatternPossibility(
- eval( patternId == $redundancy.getLeft().getId() )
- )
- and
- $pp2 :PatternPossibility(
- eval( patternId == $redundancy.getRight().getId() )
- )
- ) or (
- $pp1 :PatternPossibility(
- eval( patternId == $redundancy.getRight().getId() )
- )
- and
- $pp2 :PatternPossibility(
- eval( patternId == $redundancy.getLeft().getId() )
- )
+ $pp1 :PatternPossibility(
+ eval( patternId == $redundancy.getLeft().getId() )
)
-
+ $pp2 :PatternPossibility(
+ eval( patternId == $redundancy.getRight().getId() )
+ )
+
# For every restriction in $pp1 there is a redundancy to restriction in $pp2.
forall(
$r :Restriction(
- patternId == $pp1.patternId,
this memberOf $pp1.items
)
Redundancy(
- (
- left == $r
- &&
- right memberOf $pp2.items
- ) || (
- left memberOf $pp2.items
- &&
- right == $r
- )
+ left == $r,
+ right memberOf $pp2.items
)
)
-
- # There is at least one restriction in $pp2 that has a redundancy to restriction in $pp1.
- exists(
- $r :Restriction(
- patternId == $pp2.patternId,
+
+ # There is no restriction on $pp2 that has no redundancy in $pp1
+ # and has a lower order number than an existing redundancy from $pp2 to $pp1.
+ not(
+ $r1 :Restriction(
this memberOf $pp2.items
)
and
- Redundancy(
- (
- left == $r
- &&
- right memberOf $pp1.items
- ) || (
- left memberOf $pp1.items
- &&
- right == $r
- )
+ $r2 :Restriction(
+ this memberOf $pp2.items,
+ orderNumber > $r1.orderNumber
)
- )
-
- # There is at least one restriction in $pp2 that does not hava a redundancy to restriction in $pp1.
- not(
- $r :Restriction(
- patternId == $pp2.patternId,
- this memberOf $pp2.items
+ and
+ not Redundancy(
+ left memberOf $pp1.items,
+ right == $r1
)
and
- forall (
- Redundancy(
- (
- left == $r
- &&
- right memberOf $pp1.items
- ) || (
- left memberOf $pp1.items
- &&
- right == $r
- )
- )
+ Redundancy(
+ left memberOf $pp1.items,
+ right == $r2
)
)
@@ -110,6 +67,7 @@
insert( new Subsumption( $pp1, $pp2 ) );
end
+
#
# Finds subsumptant rule possibilities
#
@@ -138,29 +96,30 @@
this memberOf $rp1.items
)
-# Redundancy(
-# type == RedundancyType.STRONG,
-# left == $pp,
-# right memberOf $rp2.items
-# )
+ Redundancy(
+ type == RedundancyType.STRONG,
+ left == $pp,
+ right memberOf $rp2.items
+ )
)
# There is at least one PatternPossibility in $rp2 that does not hava a redundancy to PatternPossibility in $rp1.
+ $pp :PatternPossibility(
+ ruleId == $rp2.ruleId,
+ this memberOf $rp2.items
+ )
- #$pp :PatternPossibility(
- # ruleId == $rp2.ruleId,
- # this memberOf $rp2.items
- #)
+ # XXX: Problem here, or splits the rule in to two.
exists(
Subsumption(
-# left memberOf $rp2.items,
-# right memberOf $rp1.items
+ left memberOf $rp2.items,
+ right memberOf $rp1.items
)
or
Redundancy(
-# type == RedundancyType.STRONG,
-# left memberOf $rp2.items,
-# right memberOf $rp1.items
+ type == RedundancyType.STRONG,
+ left memberOf $rp2.items,
+ right memberOf $rp1.items
)
)
@@ -189,6 +148,6 @@
then
System.out.println("pim");
- #insert( new Subsumption( $rp1, $rp2 ) );
+ insert( new Subsumption( $rp1, $rp2 ) );
end
Modified: labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/subsumption/SubsumptantPossibilitiesTest.java
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/subsumption/SubsumptantPossibilitiesTest.java 2008-01-27 11:45:43 UTC (rev 18157)
+++ labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/subsumption/SubsumptantPossibilitiesTest.java 2008-01-27 12:11:15 UTC (rev 18158)
@@ -15,15 +15,13 @@
import org.drools.analytics.components.RulePossibility;
import org.drools.analytics.dao.AnalyticsResult;
import org.drools.analytics.dao.AnalyticsResultFactory;
-import org.drools.analytics.report.components.Cause;
-import org.drools.analytics.report.components.CauseType;
import org.drools.analytics.report.components.Redundancy;
import org.drools.analytics.report.components.RedundancyType;
import org.drools.base.RuleNameMatchesAgendaFilter;
public class SubsumptantPossibilitiesTest extends SubsumptionTestBase {
- public void FIXMEtestPatternPossibilityRedundancy() throws Exception {
+ public void testPatternPossibilityRedundancy1() throws Exception {
StatelessSession session = getStatelessSession(this.getClass()
.getResourceAsStream("Possibilities.drl"));
@@ -35,6 +33,9 @@
AnalyticsResult result = AnalyticsResultFactory.createAnalyticsResult();
session.setGlobal("result", result);
+ /*
+ * Redundant patterns
+ */
String ruleName1 = "Rule 1";
String ruleName2 = "Rule 2";
@@ -45,10 +46,13 @@
LiteralRestriction lr1 = new LiteralRestriction();
lr1.setRuleName(ruleName1);
+ lr1.setOrderNumber(0);
LiteralRestriction lr2 = new LiteralRestriction();
lr2.setRuleName(ruleName2);
+ lr2.setOrderNumber(0);
LiteralRestriction lr3 = new LiteralRestriction();
- lr2.setRuleName(ruleName2);
+ lr3.setRuleName(ruleName2);
+ lr3.setOrderNumber(1);
PatternPossibility pp1 = new PatternPossibility();
pp1.setPatternId(p1.getId());
@@ -79,18 +83,84 @@
Map<String, Set<String>> map = createSubsumptionMap(sessionResult
.iterateObjects());
- assertTrue(TestBase.mapContains(map, ruleName2, ruleName1));
+ assertTrue(TestBase.mapContains(map, ruleName1, ruleName2));
if (!map.isEmpty()) {
fail("More redundancies than was expected.");
}
}
- /**
- * The problem is in this test -Rikkola-
- *
- * @throws Exception
- */
+ public void testPatternPossibilityRedundancy2() throws Exception {
+ StatelessSession session = getStatelessSession(this.getClass()
+ .getResourceAsStream("Possibilities.drl"));
+
+ session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
+ "Find subsumptant pattern possibilities"));
+
+ Collection<Object> data = new ArrayList<Object>();
+
+ AnalyticsResult result = AnalyticsResultFactory.createAnalyticsResult();
+ session.setGlobal("result", result);
+
+ /*
+ * Not redundant patterns
+ *
+ * For example: Pattern ( a==1, b==1, c==1) and Pattern ( a==1, c==1)
+ */
+ String ruleName1 = "Rule 1";
+ String ruleName2 = "Rule 2";
+
+ Pattern p1 = new Pattern();
+ p1.setRuleName(ruleName1);
+ Pattern p2 = new Pattern();
+ p2.setRuleName(ruleName2);
+
+ LiteralRestriction lr1 = new LiteralRestriction();
+ lr1.setRuleName(ruleName1);
+ lr1.setOrderNumber(0);
+ LiteralRestriction lr2 = new LiteralRestriction();
+ lr2.setRuleName(ruleName2);
+ lr2.setOrderNumber(0);
+ LiteralRestriction lr3 = new LiteralRestriction();
+ lr3.setRuleName(ruleName2);
+ lr3.setOrderNumber(1);
+
+ PatternPossibility pp1 = new PatternPossibility();
+ pp1.setPatternId(p1.getId());
+ pp1.setRuleName(ruleName1);
+ pp1.add(lr1);
+
+ PatternPossibility pp2 = new PatternPossibility();
+ pp2.setPatternId(p2.getId());
+ pp2.setRuleName(ruleName2);
+ pp2.add(lr2);
+ pp2.add(lr3);
+
+ Redundancy r1 = new Redundancy(lr1, lr3);
+ Redundancy r2 = new Redundancy(p1, p2);
+
+ data.add(p1);
+ data.add(p2);
+ data.add(lr1);
+ data.add(lr2);
+ data.add(lr3);
+ data.add(pp1);
+ data.add(pp2);
+ data.add(r1);
+ data.add(r2);
+
+ StatelessSessionResult sessionResult = session.executeWithResults(data);
+
+ Map<String, Set<String>> map = createSubsumptionMap(sessionResult
+ .iterateObjects());
+
+ assertFalse(TestBase.mapContains(map, ruleName1, ruleName2));
+
+ if (!map.isEmpty()) {
+ fail("More redundancies than was expected.");
+ }
+ }
+
public void FIXMEtestRulePossibilityRedundancy() throws Exception {
StatelessSession session = getStatelessSession(this.getClass()
.getResourceAsStream("Possibilities.drl"));
More information about the jboss-svn-commits
mailing list