[jboss-svn-commits] JBL Code SVN: r26190 - in labs/jbossrules/branches/DroolsChance: drools-core/src/main/java/org/drools/base and 11 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Apr 21 12:03:09 EDT 2009
Author: dsotty
Date: 2009-04-21 12:03:09 -0400 (Tue, 21 Apr 2009)
New Revision: 26190
Added:
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/IntervalDegree.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/IntervalDegreeFactory.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/DefaultIntervalMergeStrategy.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/DefaultIntervalNullHandlingStrategy.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalEquivOperator.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalExistsOperator.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalForAnyOperator.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalForallOperator.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalIntersectionOperator.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalLukasAndOperator.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalLukasOrOperator.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalMaxOrOperator.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalMinAndOperator.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalModusPonensOperator.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalNegationOperator.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/filters/DefaultIntervalFilterStrategy.java
labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/chance/TestDegrees.java
Modified:
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/base/BaseImperfectEvaluator.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/base/SequentialKnowledgeHelper.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/DefaultAgenda.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/IDegreeFactory.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/SimpleDegreeFactory.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/Evaluation.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ImperfectAgendaItem.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/spi/KnowledgeHelper.java
labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/test.packagebuilder.conf
labs/jbossrules/branches/DroolsChance/drools-guvnor/src/main/java/org/drools/guvnor/public/version.txt
Log:
interval degrees + operators (alpha version)
test on degree combination by operators
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java 2009-04-21 15:25:41 UTC (rev 26189)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java 2009-04-21 16:03:09 UTC (rev 26190)
@@ -299,6 +299,8 @@
setMaxThreads( StringUtils.isEmpty( value ) ? -1 : Integer.parseInt( value ) );
} else if ( name.equals( "drools.eventProcessingMode" ) ) {
setEventProcessingMode( EventProcessingMode.determineAssertBehaviour( StringUtils.isEmpty( value ) ? "cloud" : value ) );
+ } else if ( name.equals( "drools.imperfect.factory" ) ) {
+ setFactoryName(value);
}
}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/base/BaseImperfectEvaluator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/base/BaseImperfectEvaluator.java 2009-04-21 15:25:41 UTC (rev 26189)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/base/BaseImperfectEvaluator.java 2009-04-21 16:03:09 UTC (rev 26190)
@@ -16,7 +16,7 @@
/**
- * BaseUncertainEvaluator implements the uncertain evaluators
+ * BaseImperfectEvaluator implements the imperfect evaluators
* by calling the crisp ones and then converting the boolean
* result into the used truth degree
*
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java 2009-04-21 15:25:41 UTC (rev 26189)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java 2009-04-21 16:03:09 UTC (rev 26190)
@@ -61,6 +61,7 @@
private InternalWorkingMemoryActions workingMemory;
private IDegree consequenceDegree;
+ private Evaluation evaluation;
public DefaultKnowledgeHelper() {
@@ -327,6 +328,15 @@
new ConstraintKey(key),
getConsequenceDegree());
}
+
+
+ public Evaluation getEvaluation() {
+ return evaluation;
+ }
+
+ public void setEvaluation(Evaluation eval) {
+ this.evaluation = eval;
+ }
}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/base/SequentialKnowledgeHelper.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/base/SequentialKnowledgeHelper.java 2009-04-21 15:25:41 UTC (rev 26189)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/base/SequentialKnowledgeHelper.java 2009-04-21 16:03:09 UTC (rev 26190)
@@ -245,4 +245,14 @@
// TODO Auto-generated method stub
}
+
+ public Evaluation getEvaluation() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public void setEvaluation(Evaluation eval) {
+ // TODO Auto-generated method stub
+
+ }
}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/DefaultAgenda.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/DefaultAgenda.java 2009-04-21 15:25:41 UTC (rev 26189)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/DefaultAgenda.java 2009-04-21 16:03:09 UTC (rev 26190)
@@ -934,8 +934,10 @@
//TODO:
//System.out.println(this.getClass()+"Hacked fireActivation to insert consequence degree");
- if (activation instanceof ImperfectAgendaItem)
+ if (activation instanceof ImperfectAgendaItem) {
this.knowledgeHelper.setConsequenceDegree(((ImperfectAgendaItem) activation).getDegree());
+ this.knowledgeHelper.setEvaluation(((ImperfectAgendaItem) activation).getEvaluation());
+ }
this.knowledgeHelper.setActivation( activation );
activation.getRule().getConsequence().evaluate( this.knowledgeHelper,
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/IntervalDegree.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/IntervalDegree.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/IntervalDegree.java 2009-04-21 16:03:09 UTC (rev 26190)
@@ -0,0 +1,76 @@
+package org.drools.degrees;
+
+public class IntervalDegree implements IDegree {
+
+
+ private float tau;
+ private float phi;
+
+
+ public IntervalDegree(float low, float upp) {
+ this.setTau(low);
+ this.setPhi(1.0f-upp);
+ }
+
+
+
+ public SimpleDegree getDegree() {
+ return new SimpleDegree(getTau());
+ }
+
+
+ //TODO : Consider... beware...
+ public boolean toBoolean() {
+ return getUpp() > 0.5;
+ }
+
+
+ public String toString() {
+ return new StringBuilder("[").append(getLow()).append(',').append(getUpp()).append(']').toString();
+ }
+
+
+ /**
+ * @param phi the phi to set
+ */
+ protected void setPhi(float phi) {
+ this.phi = phi;
+ }
+
+
+
+ /**
+ * @return the phi
+ */
+ public float getPhi() {
+ return phi;
+ }
+
+
+
+ /**
+ * @param tau the tau to set
+ */
+ protected void setTau(float tau) {
+ this.tau = tau;
+ }
+
+
+
+ /**
+ * @return the tau
+ */
+ public float getTau() {
+ return tau;
+ }
+
+
+ public float getLow() {
+ return getTau();
+ }
+
+ public float getUpp() {
+ return 1.0f - getPhi();
+ }
+
+}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/IDegreeFactory.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/IDegreeFactory.java 2009-04-21 15:25:41 UTC (rev 26189)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/IDegreeFactory.java 2009-04-21 16:03:09 UTC (rev 26190)
@@ -13,8 +13,6 @@
-
-
public IDegree buildDegree(float val);
@@ -24,6 +22,8 @@
public IDegree Unknown();
+ public IDegree Random();
+
public IDegree fromBoolean(boolean b);
public IDegreeCombiner getAndOperator();
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/IntervalDegreeFactory.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/IntervalDegreeFactory.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/IntervalDegreeFactory.java 2009-04-21 16:03:09 UTC (rev 26190)
@@ -0,0 +1,114 @@
+package org.drools.degrees.factory;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.IntervalDegree;
+import org.drools.degrees.operators.IDegreeCombiner;
+import org.drools.degrees.operators.IMergeStrategy;
+import org.drools.degrees.operators.INullHandlingStrategy;
+import org.drools.degrees.operators.intervals.DefaultIntervalMergeStrategy;
+import org.drools.degrees.operators.intervals.DefaultIntervalNullHandlingStrategy;
+import org.drools.degrees.operators.intervals.IntervalEquivOperator;
+import org.drools.degrees.operators.intervals.IntervalExistsOperator;
+import org.drools.degrees.operators.intervals.IntervalForAnyOperator;
+import org.drools.degrees.operators.intervals.IntervalForallOperator;
+import org.drools.degrees.operators.intervals.IntervalIntersectionOperator;
+import org.drools.degrees.operators.intervals.IntervalLukasAndOperator;
+import org.drools.degrees.operators.intervals.IntervalLukasOrOperator;
+import org.drools.degrees.operators.intervals.IntervalMaxOrOperator;
+import org.drools.degrees.operators.intervals.IntervalMinAndOperator;
+import org.drools.degrees.operators.intervals.IntervalModusPonensOperator;
+import org.drools.degrees.operators.intervals.IntervalNegationOperator;
+import org.drools.reteoo.filters.DefaultIntervalFilterStrategy;
+import org.drools.reteoo.filters.IFilterStrategy;
+
+public class IntervalDegreeFactory implements IDegreeFactory {
+
+
+ public static IDegree FALSE = new IntervalDegree(0,0);
+ public static IDegree TRUE = new IntervalDegree(1,1);
+ public static IDegree UNKNOWN = new IntervalDegree(0,1);
+
+ public IDegree False() {
+ return FALSE;
+ }
+
+ public IDegree True() {
+ return TRUE;
+ }
+
+ public IDegree Unknown() {
+ return UNKNOWN;
+ }
+
+ public IDegree Random() {
+ float low = (float) Math.random();
+ float upp = low + (1-low) * ((float) Math.random());
+ return new IntervalDegree(low,upp);
+ }
+
+ public IDegree buildDegree(float val) {
+ return new IntervalDegree(val,val);
+ }
+
+ public IDegree fromBoolean(boolean b) {
+ return b ? True() : False();
+ }
+
+ public IDegreeCombiner getAggregator() {
+ return new IntervalIntersectionOperator();
+ }
+
+ public IDegreeCombiner getAndOperator() {
+ return new IntervalLukasAndOperator();
+ }
+
+
+ public IFilterStrategy getDefaultStrategy() {
+ return new DefaultIntervalFilterStrategy();
+ }
+
+ public IDegreeCombiner getEquivOperator() {
+ return new IntervalEquivOperator();
+ }
+
+ public IDegreeCombiner getExistsOperator() {
+ return new IntervalExistsOperator();
+ }
+
+ public IDegreeCombiner getForAnyOperator() {
+ return new IntervalForAnyOperator();
+ }
+
+ public IDegreeCombiner getForallOperator() {
+ return new IntervalForallOperator();
+ }
+
+ public IDegreeCombiner getMaxOrOperator() {
+ return new IntervalMaxOrOperator();
+ }
+
+ public IMergeStrategy getMergeStrategy() {
+ return new DefaultIntervalMergeStrategy();
+ }
+
+ public IDegreeCombiner getMinAndOperator() {
+ return new IntervalMinAndOperator();
+ }
+
+ public IDegreeCombiner getModusPonensOp() {
+ return new IntervalModusPonensOperator();
+ }
+
+ public IDegreeCombiner getNegationOperator() {
+ return new IntervalNegationOperator();
+ }
+
+ public INullHandlingStrategy getNullHandlingStrategy() {
+ return new DefaultIntervalNullHandlingStrategy();
+ }
+
+ public IDegreeCombiner getOrOperator() {
+ return new IntervalLukasOrOperator();
+ }
+
+}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/SimpleDegreeFactory.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/SimpleDegreeFactory.java 2009-04-21 15:25:41 UTC (rev 26189)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/SimpleDegreeFactory.java 2009-04-21 16:03:09 UTC (rev 26190)
@@ -1,6 +1,7 @@
package org.drools.degrees.factory;
import org.drools.degrees.IDegree;
+import org.drools.degrees.IntervalDegree;
import org.drools.degrees.SimpleDegree;
import org.drools.degrees.operators.IDegreeCombiner;
import org.drools.degrees.operators.IMergeStrategy;
@@ -21,21 +22,35 @@
public class SimpleDegreeFactory implements IDegreeFactory {
-
- public IDegree buildDegree(float val) {
- return new SimpleDegree(val);
+ public static IDegree FALSE = new SimpleDegree(0);
+ public static IDegree TRUE = new SimpleDegree(1);
+
+ //BEWARE OF CWA
+ public static IDegree UNKNOWN = new SimpleDegree(0);
+
+ public IDegree False() {
+ return FALSE;
}
- public IDegree False() {
- return new SimpleDegree(0);
+ public IDegree True() {
+ return TRUE;
}
+ public IDegree Unknown() {
+ return UNKNOWN;
+ }
- public IDegree True() {
- return new SimpleDegree(1);
+
+ public IDegree Random() {
+ return new SimpleDegree((float) Math.random());
}
+
+ public IDegree buildDegree(float val) {
+ return new SimpleDegree(val);
+ }
+
public IDegree fromBoolean(boolean b) {
return b ? new SimpleDegree(1) : new SimpleDegree(0);
@@ -59,11 +74,9 @@
return new SimpleMaxOr();
}
- public IDegree Unknown() {
- return False();
- }
+
public IDegreeCombiner getModusPonensOp() {
return new SimpleMinAnd();
}
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/DefaultIntervalMergeStrategy.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/DefaultIntervalMergeStrategy.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/DefaultIntervalMergeStrategy.java 2009-04-21 16:03:09 UTC (rev 26190)
@@ -0,0 +1,44 @@
+package org.drools.degrees.operators.intervals;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.IntervalDegree;
+import org.drools.degrees.operators.IMergeStrategy;
+import org.drools.degrees.operators.INullHandlingStrategy;
+
+public class DefaultIntervalMergeStrategy implements IMergeStrategy {
+
+ private IntervalIntersectionOperator op = new IntervalIntersectionOperator();
+
+ public IDegree eval(IDegree[] degrees, INullHandlingStrategy nullStrat) {
+ IDegree[] args = new IDegree[degrees.length];
+ for (int j = 0; j < degrees.length; j++) {
+ args[j] = degrees[j] != null ? degrees[j] : nullStrat.convertNull();
+ }
+ return op.eval(args);
+ }
+
+ public IDegree eval(IDegree[] args) {
+ return eval(args, new DefaultIntervalNullHandlingStrategy());
+ }
+
+ public IDegree eval(Collection<? extends IDegree> degrees) {
+ IDegree[] args = new IDegree[degrees.size()];
+ Iterator<? extends IDegree> iter = degrees.iterator();
+ INullHandlingStrategy nullStrat = new DefaultIntervalNullHandlingStrategy();
+
+ int j = 0;
+ while (iter.hasNext()) {
+ IDegree deg = iter.next();
+ args[j++] = deg != null ? deg : nullStrat.convertNull();
+ }
+ return op.eval(args);
+ }
+
+ public String getName() {
+ return "i_intersect";
+ }
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/DefaultIntervalNullHandlingStrategy.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/DefaultIntervalNullHandlingStrategy.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/DefaultIntervalNullHandlingStrategy.java 2009-04-21 16:03:09 UTC (rev 26190)
@@ -0,0 +1,14 @@
+package org.drools.degrees.operators.intervals;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.factory.IntervalDegreeFactory;
+import org.drools.degrees.operators.INullHandlingStrategy;
+
+public class DefaultIntervalNullHandlingStrategy implements
+ INullHandlingStrategy {
+
+ public IDegree convertNull() {
+ return IntervalDegreeFactory.UNKNOWN;
+ }
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalEquivOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalEquivOperator.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalEquivOperator.java 2009-04-21 16:03:09 UTC (rev 26190)
@@ -0,0 +1,47 @@
+package org.drools.degrees.operators.intervals;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.IntervalDegree;
+import org.drools.degrees.factory.IntervalDegreeFactory;
+import org.drools.degrees.operators.IDegreeCombiner;
+
+public class IntervalEquivOperator implements IDegreeCombiner {
+
+ public IDegree eval(IDegree[] args) {
+ if (args == null || args.length < 2)
+ return IntervalDegreeFactory.UNKNOWN;
+
+ IntervalDegree a1 = (IntervalDegree) args[0];
+ IntervalDegree a2 = (IntervalDegree) args[1];
+
+ if (a1.getUpp() < a2.getLow() || a2.getUpp() < a1.getLow())
+ return IntervalDegreeFactory.FALSE;
+
+ float maxDist = Math.max(a2.getUpp()-a1.getLow(),a1.getUpp()-a2.getLow());
+ return new IntervalDegree(1-maxDist,1);
+
+ }
+
+ public IDegree eval(Collection<? extends IDegree> args) {
+ if (args == null || args.size() < 2)
+ return IntervalDegreeFactory.UNKNOWN;
+
+ Iterator<? extends IDegree> iter = args.iterator();
+ IntervalDegree a1 = (IntervalDegree) iter.next();
+ IntervalDegree a2 = (IntervalDegree) iter.next();
+
+ if (a1.getUpp() < a2.getLow() || a2.getUpp() < a1.getLow())
+ return IntervalDegreeFactory.FALSE;
+
+ float maxDist = Math.max(a2.getUpp()-a1.getLow(),a1.getUpp()-a2.getLow());
+ return new IntervalDegree(1-maxDist,1);
+ }
+
+ public String getName() {
+ return "i_equiv";
+ }
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalExistsOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalExistsOperator.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalExistsOperator.java 2009-04-21 16:03:09 UTC (rev 26190)
@@ -0,0 +1,49 @@
+package org.drools.degrees.operators.intervals;
+
+import java.util.Collection;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.IntervalDegree;
+import org.drools.degrees.factory.IntervalDegreeFactory;
+import org.drools.degrees.operators.IDegreeCombiner;
+
+public class IntervalExistsOperator implements IDegreeCombiner {
+
+ public IDegree eval(IDegree[] args) {
+ if (args == null || args.length == 0)
+ return IntervalDegreeFactory.UNKNOWN;
+
+ float tau = 0;
+ float phi = 1.0f;
+ for (IDegree deg : args) {
+ IntervalDegree ival = (IntervalDegree) deg;
+ if (ival == null)
+ continue;
+ tau = Math.max(tau,ival.getTau());
+ phi = Math.min(phi,ival.getPhi());
+ }
+ return new IntervalDegree(tau,1.0f-phi);
+ }
+
+ public IDegree eval(Collection<? extends IDegree> args) {
+ if (args == null || args.size() == 0)
+ return IntervalDegreeFactory.UNKNOWN;
+
+ float tau = 0;
+ float phi = 1.0f;
+ for (IDegree deg : args) {
+ IntervalDegree ival = (IntervalDegree) deg;
+ if (ival == null)
+ continue;
+ tau = Math.max(tau,ival.getTau());
+ phi = Math.min(phi,ival.getPhi());
+ }
+ return new IntervalDegree(tau,1.0f-phi);
+
+ }
+
+ public String getName() {
+ return "i_exists";
+ }
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalForAnyOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalForAnyOperator.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalForAnyOperator.java 2009-04-21 16:03:09 UTC (rev 26190)
@@ -0,0 +1,50 @@
+package org.drools.degrees.operators.intervals;
+
+import java.util.Collection;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.IntervalDegree;
+import org.drools.degrees.factory.IntervalDegreeFactory;
+import org.drools.degrees.operators.IDegreeCombiner;
+
+public class IntervalForAnyOperator implements IDegreeCombiner {
+
+ public IDegree eval(IDegree[] args) {
+ if (args == null || args.length == 0)
+ return IntervalDegreeFactory.UNKNOWN;
+
+ float low = 0;
+ float upp = 0;
+ for (IDegree deg : args) {
+ IntervalDegree ival = (IntervalDegree) deg;
+
+ low += ival.getLow();
+ upp += ival.getUpp();
+ }
+ low /= args.length;
+ upp /= args.length;
+ return new IntervalDegree(low,upp);
+ }
+
+ public IDegree eval(Collection<? extends IDegree> args) {
+ if (args == null || args.size() == 0)
+ return IntervalDegreeFactory.UNKNOWN;
+
+ float low = 0;
+ float upp = 0;
+ for (IDegree deg : args) {
+ IntervalDegree ival = (IntervalDegree) deg;
+
+ low += ival.getLow();
+ upp += ival.getUpp();
+ }
+ low /= args.size();
+ upp /= args.size();
+ return new IntervalDegree(low,upp);
+ }
+
+ public String getName() {
+ return "i_forAny";
+ }
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalForallOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalForallOperator.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalForallOperator.java 2009-04-21 16:03:09 UTC (rev 26190)
@@ -0,0 +1,48 @@
+package org.drools.degrees.operators.intervals;
+
+import java.util.Collection;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.IntervalDegree;
+import org.drools.degrees.factory.IntervalDegreeFactory;
+import org.drools.degrees.operators.IDegreeCombiner;
+
+public class IntervalForallOperator implements IDegreeCombiner {
+
+ public IDegree eval(IDegree[] args) {
+ if (args == null || args.length == 0)
+ return IntervalDegreeFactory.UNKNOWN;
+
+ float tau = 1.0f;
+ float phi = 0.0f;
+ for (IDegree deg : args) {
+ IntervalDegree ival = (IntervalDegree) deg;
+ if (ival == null)
+ continue;
+ tau = Math.min(tau,ival.getTau());
+ phi = Math.max(phi,ival.getPhi());
+ }
+ return new IntervalDegree(tau,1.0f-phi);
+ }
+
+ public IDegree eval(Collection<? extends IDegree> args) {
+ if (args == null || args.size() == 0)
+ return IntervalDegreeFactory.UNKNOWN;
+
+ float tau = 1.0f;
+ float phi = 0.0f;
+ for (IDegree deg : args) {
+ IntervalDegree ival = (IntervalDegree) deg;
+ if (ival == null)
+ continue;
+ tau = Math.min(tau,ival.getTau());
+ phi = Math.max(phi,ival.getPhi());
+ }
+ return new IntervalDegree(tau,1.0f-phi);
+ }
+
+ public String getName() {
+ return "i_forall";
+ }
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalIntersectionOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalIntersectionOperator.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalIntersectionOperator.java 2009-04-21 16:03:09 UTC (rev 26190)
@@ -0,0 +1,50 @@
+package org.drools.degrees.operators.intervals;
+
+import java.util.Collection;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.IntervalDegree;
+import org.drools.degrees.factory.IntervalDegreeFactory;
+import org.drools.degrees.operators.IDegreeCombiner;
+
+public class IntervalIntersectionOperator implements IDegreeCombiner {
+
+
+
+ public IDegree eval(IDegree[] args) {
+ if (args == null || args.length == 0)
+ return IntervalDegreeFactory.UNKNOWN;
+
+ float tau = 0;
+ float phi = 0;
+ for (IDegree deg : args) {
+ IntervalDegree ival = (IntervalDegree) deg;
+ if (ival == null)
+ continue;
+ tau = Math.max(tau,ival.getTau());
+ phi = Math.max(phi,ival.getPhi());
+ }
+ return new IntervalDegree(tau,1.0f-phi);
+ }
+
+ public IDegree eval(Collection<? extends IDegree> args) {
+ if (args == null || args.size() == 0)
+ return IntervalDegreeFactory.UNKNOWN;
+
+ float tau = 0;
+ float phi = 0;
+ for (IDegree deg : args) {
+ IntervalDegree ival = (IntervalDegree) deg;
+ if (ival == null)
+ continue;
+ tau = Math.max(tau,ival.getTau());
+ phi = Math.max(phi,ival.getPhi());
+ }
+ return new IntervalDegree(tau,1.0f-phi);
+ }
+
+ public String getName() {
+ return "i_intersect";
+ }
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalLukasAndOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalLukasAndOperator.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalLukasAndOperator.java 2009-04-21 16:03:09 UTC (rev 26190)
@@ -0,0 +1,52 @@
+package org.drools.degrees.operators.intervals;
+
+import java.util.Collection;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.IntervalDegree;
+import org.drools.degrees.factory.IntervalDegreeFactory;
+import org.drools.degrees.operators.IDegreeCombiner;
+
+public class IntervalLukasAndOperator implements IDegreeCombiner {
+
+
+
+ public IDegree eval(IDegree[] args) {
+ if (args == null || args.length == 0)
+ return IntervalDegreeFactory.UNKNOWN;
+
+ float tau = 0;
+ float phi = 0;
+ for (IDegree deg : args) {
+ IntervalDegree ival = (IntervalDegree) deg;
+
+ tau += ival.getTau();
+ phi += ival.getPhi();
+ }
+ tau = Math.max(0,tau - args.length + 1);
+ phi = Math.max(0,1.0f - phi);
+ return new IntervalDegree(tau,phi);
+ }
+
+ public IDegree eval(Collection<? extends IDegree> args) {
+ if (args == null || args.size() == 0)
+ return IntervalDegreeFactory.UNKNOWN;
+
+ float tau = 0;
+ float phi = 0;
+ for (IDegree deg : args) {
+ IntervalDegree ival = (IntervalDegree) deg;
+
+ tau += ival.getTau();
+ phi += ival.getPhi();
+ }
+ tau = tau - args.size() + 1;
+ phi = 1.0f - phi;
+ return new IntervalDegree(tau,phi);
+ }
+
+ public String getName() {
+ return "i_xand";
+ }
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalLukasOrOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalLukasOrOperator.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalLukasOrOperator.java 2009-04-21 16:03:09 UTC (rev 26190)
@@ -0,0 +1,49 @@
+package org.drools.degrees.operators.intervals;
+
+import java.util.Collection;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.IntervalDegree;
+import org.drools.degrees.factory.IntervalDegreeFactory;
+import org.drools.degrees.operators.IDegreeCombiner;
+
+public class IntervalLukasOrOperator implements IDegreeCombiner {
+
+ public IDegree eval(IDegree[] args) {
+ if (args == null || args.length == 0)
+ return IntervalDegreeFactory.UNKNOWN;
+
+ float tau = 0;
+ float phi = 0;
+ for (IDegree deg : args) {
+ IntervalDegree ival = (IntervalDegree) deg;
+
+ tau += ival.getTau();
+ phi += ival.getPhi();
+ }
+ tau = Math.min(tau, 1);
+ phi = Math.min(args.length - phi,1);
+ return new IntervalDegree(tau,phi);
+ }
+
+ public IDegree eval(Collection<? extends IDegree> args) {
+ if (args == null || args.size() == 0)
+ return IntervalDegreeFactory.UNKNOWN;
+
+ float tau = 0;
+ float phi = 0;
+ for (IDegree deg : args) {
+ IntervalDegree ival = (IntervalDegree) deg;
+
+ tau += ival.getTau();
+ phi += ival.getPhi();
+ }
+ phi = args.size() - phi;
+ return new IntervalDegree(tau,phi);
+ }
+
+ public String getName() {
+ return "i_+or";
+ }
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalMaxOrOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalMaxOrOperator.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalMaxOrOperator.java 2009-04-21 16:03:09 UTC (rev 26190)
@@ -0,0 +1,49 @@
+package org.drools.degrees.operators.intervals;
+
+import java.util.Collection;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.IntervalDegree;
+import org.drools.degrees.factory.IntervalDegreeFactory;
+import org.drools.degrees.operators.IDegreeCombiner;
+
+public class IntervalMaxOrOperator implements IDegreeCombiner {
+
+ public IDegree eval(IDegree[] args) {
+ if (args == null || args.length == 0)
+ return IntervalDegreeFactory.UNKNOWN;
+
+ float tau = 0;
+ float phi = 1.0f;
+ for (IDegree deg : args) {
+ IntervalDegree ival = (IntervalDegree) deg;
+ if (ival == null)
+ continue;
+ tau = Math.max(tau,ival.getTau());
+ phi = Math.min(phi,ival.getPhi());
+ }
+ return new IntervalDegree(tau,1.0f-phi);
+ }
+
+ public IDegree eval(Collection<? extends IDegree> args) {
+ if (args == null || args.size() == 0)
+ return IntervalDegreeFactory.UNKNOWN;
+
+ float tau = 0;
+ float phi = 1.0f;
+ for (IDegree deg : args) {
+ IntervalDegree ival = (IntervalDegree) deg;
+ if (ival == null)
+ continue;
+ tau = Math.max(tau,ival.getTau());
+ phi = Math.min(phi,ival.getPhi());
+ }
+ return new IntervalDegree(tau,1.0f-phi);
+
+ }
+
+ public String getName() {
+ return "i_maxOr";
+ }
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalMinAndOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalMinAndOperator.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalMinAndOperator.java 2009-04-21 16:03:09 UTC (rev 26190)
@@ -0,0 +1,48 @@
+package org.drools.degrees.operators.intervals;
+
+import java.util.Collection;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.IntervalDegree;
+import org.drools.degrees.factory.IntervalDegreeFactory;
+import org.drools.degrees.operators.IDegreeCombiner;
+
+public class IntervalMinAndOperator implements IDegreeCombiner {
+
+ public IDegree eval(IDegree[] args) {
+ if (args == null || args.length == 0)
+ return IntervalDegreeFactory.UNKNOWN;
+
+ float tau = 1.0f;
+ float phi = 0.0f;
+ for (IDegree deg : args) {
+ IntervalDegree ival = (IntervalDegree) deg;
+ if (ival == null)
+ continue;
+ tau = Math.min(tau,ival.getTau());
+ phi = Math.max(phi,ival.getPhi());
+ }
+ return new IntervalDegree(tau,1.0f-phi);
+ }
+
+ public IDegree eval(Collection<? extends IDegree> args) {
+ if (args == null || args.size() == 0)
+ return IntervalDegreeFactory.UNKNOWN;
+
+ float tau = 1.0f;
+ float phi = 0.0f;
+ for (IDegree deg : args) {
+ IntervalDegree ival = (IntervalDegree) deg;
+ if (ival == null)
+ continue;
+ tau = Math.min(tau,ival.getTau());
+ phi = Math.max(phi,ival.getPhi());
+ }
+ return new IntervalDegree(tau,1.0f-phi);
+ }
+
+ public String getName() {
+ return "i_minAnd";
+ }
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalModusPonensOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalModusPonensOperator.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalModusPonensOperator.java 2009-04-21 16:03:09 UTC (rev 26190)
@@ -0,0 +1,40 @@
+package org.drools.degrees.operators.intervals;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.IntervalDegree;
+import org.drools.degrees.factory.IntervalDegreeFactory;
+import org.drools.degrees.operators.IDegreeCombiner;
+
+public class IntervalModusPonensOperator implements IDegreeCombiner {
+
+ public IDegree eval(IDegree[] args) {
+ if (args == null || args.length < 2)
+ return IntervalDegreeFactory.UNKNOWN;
+
+ IntervalDegree a1 = (IntervalDegree) args[0];
+ IntervalDegree a2 = (IntervalDegree) args[1];
+
+
+ return new IntervalDegree(Math.min(a1.getLow(),a2.getLow()),1);
+ }
+
+ public IDegree eval(Collection<? extends IDegree> args) {
+ if (args == null || args.size() < 2)
+ return IntervalDegreeFactory.UNKNOWN;
+
+ Iterator<? extends IDegree> iter = args.iterator();
+ IntervalDegree a1 = (IntervalDegree) iter.next();
+ IntervalDegree a2 = (IntervalDegree) iter.next();
+
+
+ return new IntervalDegree(Math.min(a1.getLow(),a2.getLow()),1);
+ }
+
+ public String getName() {
+ return "i_modPon";
+ }
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalNegationOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalNegationOperator.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalNegationOperator.java 2009-04-21 16:03:09 UTC (rev 26190)
@@ -0,0 +1,32 @@
+package org.drools.degrees.operators.intervals;
+
+import java.util.Collection;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.IntervalDegree;
+import org.drools.degrees.factory.IntervalDegreeFactory;
+import org.drools.degrees.operators.IDegreeCombiner;
+
+public class IntervalNegationOperator implements IDegreeCombiner {
+
+ public IDegree eval(IDegree[] args) {
+ if (args == null || args.length == 0)
+ return IntervalDegreeFactory.UNKNOWN;
+
+ IntervalDegree arg = (IntervalDegree) args[0];
+ return new IntervalDegree(arg.getUpp(),arg.getLow());
+ }
+
+ public IDegree eval(Collection<? extends IDegree> args) {
+ if (args == null || args.size() == 0)
+ return IntervalDegreeFactory.UNKNOWN;
+
+ IntervalDegree arg = (IntervalDegree) args.iterator().next();
+ return new IntervalDegree(arg.getUpp(),arg.getLow());
+ }
+
+ public String getName() {
+ return "i_not";
+ }
+
+}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/Evaluation.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/Evaluation.java 2009-04-21 15:25:41 UTC (rev 26189)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/Evaluation.java 2009-04-21 16:03:09 UTC (rev 26190)
@@ -237,6 +237,9 @@
return "("+this.nodeId + ")" + this.key+ " : " + this.aggDegree +" "+ this.getBitS();
}
+ public String expand() {
+ return toString();
+ }
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ImperfectAgendaItem.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ImperfectAgendaItem.java 2009-04-21 15:25:41 UTC (rev 26189)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ImperfectAgendaItem.java 2009-04-21 16:03:09 UTC (rev 26190)
@@ -9,12 +9,14 @@
public class ImperfectAgendaItem extends AgendaItem {
private IDegree degree;
+ private Evaluation eval;
public ImperfectAgendaItem(long propagationNumber, LeftTuple cloned,
int value, PropagationContext context, Rule rule,
- GroupElement subrule, IDegree degree) {
+ GroupElement subrule, IDegree degree, Evaluation eval) {
super(propagationNumber,cloned,value,context,rule,subrule);
this.degree = degree;
+ this.eval = eval;
}
@@ -22,4 +24,7 @@
return degree;
}
+ public Evaluation getEvaluation() {
+ return eval;
+ }
}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java 2009-04-21 15:25:41 UTC (rev 26189)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java 2009-04-21 16:03:09 UTC (rev 26190)
@@ -199,7 +199,8 @@
context,
this.rule,
this.subrule,
- degree);
+ degree,
+ record);
item.setSequenence( this.sequence );
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/filters/DefaultIntervalFilterStrategy.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/filters/DefaultIntervalFilterStrategy.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/filters/DefaultIntervalFilterStrategy.java 2009-04-21 16:03:09 UTC (rev 26190)
@@ -0,0 +1,46 @@
+package org.drools.reteoo.filters;
+
+import org.drools.degrees.IntervalDegree;
+import org.drools.reteoo.Evaluation;
+import org.drools.reteoo.filters.IFilterStrategy;
+
+
+public class DefaultIntervalFilterStrategy implements IFilterStrategy {
+
+ private static DefaultIntervalFilterStrategy singleton = null;
+
+ public static DefaultIntervalFilterStrategy getInstance() {
+ if (singleton == null)
+ singleton = new DefaultIntervalFilterStrategy();
+ return singleton;
+ }
+
+
+ public DefaultIntervalFilterStrategy() { }
+
+ /**
+ * @deprecated
+ * Testing purposes
+ */
+ public int doTry(Evaluation eval) {
+ /*
+ System.out.println(""+eval.getInfoRate());
+
+ if (eval.getDegree().toBoolean() && eval.getInfoRate() == 1.0f)
+ return PASS;
+ else if (eval.getDegree().toBoolean() && eval.getInfoRate() < 1.0f)
+ return HOLD;
+ else
+ return DROP;
+ */
+
+ return PASS;
+
+ }
+
+
+ public boolean isAllowed(Evaluation eval) {
+ return doTry(eval) == PASS;
+ }
+
+}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/spi/KnowledgeHelper.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/spi/KnowledgeHelper.java 2009-04-21 15:25:41 UTC (rev 26189)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/spi/KnowledgeHelper.java 2009-04-21 16:03:09 UTC (rev 26190)
@@ -144,4 +144,10 @@
public void setConsequenceDegree(IDegree deg);
+
+ public Evaluation getEvaluation();
+
+ public void setEvaluation(Evaluation eval);
+
+
}
\ No newline at end of file
Added: labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/chance/TestDegrees.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/chance/TestDegrees.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/chance/TestDegrees.java 2009-04-21 16:03:09 UTC (rev 26190)
@@ -0,0 +1,313 @@
+package org.drools.examples.chance;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileWriter;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import org.drools.FactHandle;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseConfiguration;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.RuleBaseConfiguration;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderConfiguration;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceType;
+import org.drools.compiler.PackageBuilderConfiguration;
+import org.drools.definition.KnowledgePackage;
+import org.drools.event.rule.DebugAgendaEventListener;
+import org.drools.event.rule.DebugWorkingMemoryEventListener;
+import org.drools.io.ResourceFactory;
+import org.drools.logger.KnowledgeRuntimeLogger;
+import org.drools.logger.KnowledgeRuntimeLoggerFactory;
+import org.drools.runtime.StatefulKnowledgeSession;
+
+
+public class TestDegrees {
+
+ public static final void main(final String[] args) throws Exception {
+
+
+
+ // this will parse and compile in one step
+
+// kbuilder.add(ResourceFactory.newFileResource(new File("/home/davide/Projects/Eclipse_Drools/Test/target/classes/org/drools/examples/HelloWorld.drl")), ResourceType.DRL);
+
+ Properties props = new Properties();
+ props.load(new FileInputStream("src/test.packagebuilder.conf"));
+ KnowledgeBuilderConfiguration conf = new PackageBuilderConfiguration(props);
+ conf.setProperty("drools.assertBehaviour","equality");
+
+ final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory
+ .newKnowledgeBuilder(conf);
+
+
+ kbuilder.add(ResourceFactory.newClassPathResource("TestDegrees.drl",
+ TestDegrees.class), ResourceType.DRL);
+
+ // Check the builder for errors
+ if (kbuilder.hasErrors()) {
+ System.out.println(kbuilder.getErrors().toString());
+ throw new RuntimeException("Unable to compile \"HelloWorld.drl\".");
+ }
+
+ // get the compiled packages (which are serializable)
+ final Collection<KnowledgePackage> pkgs = kbuilder
+ .getKnowledgePackages();
+
+
+ RuleBaseConfiguration rbconf = new RuleBaseConfiguration(props);
+ rbconf.setProperty("drools.assertBehaviour","equality");
+ rbconf.setProperty("drools.imperfect.factory",
+ "org.drools.degrees.factory.IntervalDegreeFactory");
+
+ // add the packages to a knowledgebase (deploy the knowledge packages).
+ final KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(rbconf);
+ kbase.addKnowledgePackages(pkgs);
+
+ final StatefulKnowledgeSession ksession = kbase
+ .newStatefulKnowledgeSession();
+
+//
+ FileWriter writer = new FileWriter("testDegrees.log");
+ ksession.setGlobal("writer", writer);
+
+ final Message message = new Message();
+ message.setStatus(0);
+ ksession.insert(message);
+
+ ksession.fireAllRules();
+
+
+
+
+
+ writer.close();
+// logger.close();
+
+ ksession.dispose();
+ }
+
+ public static class Message {
+ public static final int HELLO = 0;
+ public static final int GOODBYE = 1;
+ public static final int IDK = 3;
+
+ public String message = "";
+
+ private int status;
+
+ public Message() {
+
+ }
+
+ public Message(int status) {
+ this.status = status;
+ }
+
+ public String getMessage() {
+ return this.message;
+ }
+
+ public void setMessage(final String message) {
+ this.message = message;
+ }
+
+ public int getStatus() {
+ return this.status;
+ }
+
+ public void setStatus(final int status) {
+ this.status = status;
+ }
+
+ public static Message doSomething(Message message) {
+ return message;
+ }
+
+ public boolean isSomething(String msg, List<Object> list) {
+ list.add(this);
+ return this.message.equals(msg);
+ }
+
+ public boolean equals(Object other) {
+ if (other == null) return false;
+ if (other instanceof Message) {
+ Message o = (Message) other;
+ //return o.message.equals(this.message) && o.status == this.status;
+ return o.status == this.status;
+ }
+ return false;
+
+ }
+
+ public int hashCode() {
+ //return this.message.hashCode()+this.status;
+ return this.status;
+ }
+ }
+
+
+
+
+
+
+
+
+
+
+ public static class Person {
+
+ private String name;
+ private int age;
+ /**
+ * @param name the name to set
+ */
+ public void setName(String name) {
+ this.name = name;
+ }
+ /**
+ * @return the name
+ */
+ public String getName() {
+ return name;
+ }
+ /**
+ * @param age the age to set
+ */
+ public void setAge(int age) {
+ this.age = age;
+ }
+ /**
+ * @return the age
+ */
+ public int getAge() {
+ return age;
+ }
+
+ public Person(String name, int age) {
+ this.name = name;
+ this.age = age;
+ }
+
+ public boolean equals(Object other) {
+ if (other == null) return false;
+ Person p = (Person) other;
+ if (p == null) return false;
+ return this.name.equals(p.name);
+ }
+
+ public int hashCode() {
+ return name.hashCode();
+ }
+
+
+
+ }
+
+
+
+ public static class Book {
+
+ private String title;
+ private Person owner;
+
+
+ public Book() {
+ }
+
+
+ public Book(String t, Person p) {
+ setTitle(t);
+ setOwner(p);
+ }
+
+ /**
+ * @param title the title to set
+ */
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ /**
+ * @return the title
+ */
+ public String getTitle() {
+ return title;
+ }
+
+ /**
+ * @param owner the owner to set
+ */
+ public void setOwner(Person owner) {
+ this.owner = owner;
+ }
+
+ /**
+ * @return the owner
+ */
+ public Person getOwner() {
+ return owner;
+ }
+
+
+ public boolean equals(Object other) {
+ if (other == null) return false;
+ Book b = (Book) other;
+ if (b == null) return false;
+ return this.title.equals(b.title);
+ }
+
+ public int hashCode() {
+ return title.hashCode();
+ }
+
+
+
+
+
+ }
+
+ public static class Trigger {
+
+ }
+
+
+ public static class Exercise {
+
+ private String topic;
+ public String getTopic() {
+ return topic;
+ }
+
+ public Exercise(String top) {
+ topic = top;
+ }
+
+ public int hashCode() {
+ return topic.hashCode();
+
+ }
+
+
+
+ public boolean equals(Object other) {
+ if (other == null) return false;
+ if (other == this) return true;
+
+
+ if (other instanceof Exercise)
+ return getTopic().equals(((Exercise) other).getTopic());
+ else
+ return false;
+ }
+
+ }
+
+}
Modified: labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/test.packagebuilder.conf
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/test.packagebuilder.conf 2009-04-21 15:25:41 UTC (rev 26189)
+++ labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/test.packagebuilder.conf 2009-04-21 16:03:09 UTC (rev 26190)
@@ -40,6 +40,6 @@
drools.evaluator.seems = org.drools.fuzzy.evaluators.SeemsEvaluatorDefinition
+drools.evaluator.random = org.drools.fuzzy.evaluators.RandomEvaluatorDefinition
-
Modified: labs/jbossrules/branches/DroolsChance/drools-guvnor/src/main/java/org/drools/guvnor/public/version.txt
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-guvnor/src/main/java/org/drools/guvnor/public/version.txt 2009-04-21 15:25:41 UTC (rev 26189)
+++ labs/jbossrules/branches/DroolsChance/drools-guvnor/src/main/java/org/drools/guvnor/public/version.txt 2009-04-21 16:03:09 UTC (rev 26190)
@@ -1 +1 @@
-5.0.0.SNAPSHOT 26142
\ No newline at end of file
+5.0.0.SNAPSHOT 26142:26163M
\ No newline at end of file
More information about the jboss-svn-commits
mailing list