[jboss-svn-commits] JBL Code SVN: r18625 - in labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools: base/evaluators and 6 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Feb 28 19:12:56 EST 2008
Author: dsotty
Date: 2008-02-28 19:12:56 -0500 (Thu, 28 Feb 2008)
New Revision: 18625
Modified:
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/base/BaseEvaluator.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/base/ClassObjectType.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/base/evaluators/EqualityEvaluatorsDefinition.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/base/evaluators/Operator.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/common/BetaConstraints.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/common/DefaultAgenda.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/common/InternalRuleBase.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/facttemplates/FactTemplateObjectType.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/AlphaNode.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ClassObjectTypeConf.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/CollectNode.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/CompositeTupleSinkAdapter.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/EmptyObjectSinkAdapter.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/EmptyTupleSinkAdapter.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/EntryPointNode.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/FactHandleMemory.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/JoinNode.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/NotNode.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ObjectSink.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ObjectSinkPropagator.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/PropagationQueuingNode.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/Rete.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ReteTuple.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/SingleObjectSinkAdapter.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/SingleTupleSinkAdapter.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/TupleMemory.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/TupleSinkPropagator.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/AndConstraint.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/LiteralConstraint.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/MultiRestrictionFieldConstraint.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/OrConstraint.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/PredicateConstraint.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/ReturnValueConstraint.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/ReturnValueRestriction.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/VariableConstraint.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/VariableRestriction.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/spi/AlphaNodeFieldConstraint.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/spi/Evaluator.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/spi/ObjectType.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/spi/Restriction.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/util/AbstractHashTable.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/util/FactHandleIndexHashTable.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/util/FactHashTable.java
labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/util/FactList.java
Log:
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/base/BaseEvaluator.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/base/BaseEvaluator.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/base/BaseEvaluator.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -18,8 +18,15 @@
import org.drools.base.evaluators.Operator;
import org.drools.common.InternalFactHandle;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.rule.VariableRestriction.VariableContextEntry;
import org.drools.spi.Evaluator;
+import org.drools.spi.Extractor;
+import org.drools.spi.FieldValue;
+import uncertainty.truthvals.Degree;
+import uncertainty.truthvals.IUncertainDegree;
+
/**
* BaseEvaluator is an Object Comparator that is operator aware
*
@@ -62,6 +69,7 @@
}
if ( object == null || !(object instanceof BaseEvaluator) ) {
return false;
+
}
final Evaluator other = (Evaluator) object;
@@ -72,4 +80,34 @@
return (this.getValueType().hashCode()) ^ (this.getOperator().hashCode()) ^ (this.getClass().hashCode());
}
+
+ public IUncertainDegree evaluateUnc(InternalWorkingMemory workingMemory,
+ Extractor extractor,
+ Object object1,
+ FieldValue value) {
+ return evaluate(workingMemory,extractor,object1,value) ? new Degree(1) : new Degree(0);
+ }
+
+ public IUncertainDegree evaluateUnc(InternalWorkingMemory workingMemory,
+ Extractor leftExtractor,
+ Object left,
+ Extractor rightExtractor,
+ Object right) {
+ return evaluate(workingMemory,leftExtractor,left,rightExtractor,right) ? new Degree(1) : new Degree(0);
+ }
+
+ public IUncertainDegree evaluateCachedLeftUnc(InternalWorkingMemory workingMemory,
+ VariableContextEntry context,
+ Object object1) {
+ return evaluateCachedLeft(workingMemory,context,object1) ? new Degree(1) : new Degree(0);
+ }
+
+ public IUncertainDegree evaluateCachedRightUnc(InternalWorkingMemory workingMemory,
+ VariableContextEntry context,
+ Object object2) {
+ return evaluateCachedRight(workingMemory,context,object2) ? new Degree(1) : new Degree(0);
+ }
+
+
+
}
\ No newline at end of file
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/base/ClassObjectType.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/base/ClassObjectType.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/base/ClassObjectType.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -18,6 +18,9 @@
import org.drools.spi.ObjectType;
+import uncertainty.truthvals.Degree;
+import uncertainty.truthvals.IUncertainDegree;
+
/**
* Java class semantics <code>ObjectType</code>.
*
@@ -165,4 +168,30 @@
return this.objectTypeClass.hashCode();
}
+
+ /**
+ * Ontological ???? based connection between classes
+ * As this is a method stub, it returns TRUE if the objects
+ * belong to the same class and 0.9-TRUE if the object is a subclass of the given
+ *
+ * This is purely an example of output behaviour
+ * @author Sotty
+ *
+ */
+ public IUncertainDegree isCompatibleWith(Object object) {
+ if ( object == null) {
+ return new Degree(0);
+ }
+
+ Class clazz = object instanceof ShadowProxy ? object.getClass().getSuperclass() : object.getClass();
+ if ( this == object || clazz == objectTypeClass) {
+ return new Degree(1);
+ }
+ if (this.objectTypeClass.isAssignableFrom(object.getClass())) {
+ System.out.println("Deprec: ClassObjectTypeFilter : Object is not a 'full' member of type, lose degree ");
+ return new Degree(0.66);
+ }
+ return new Degree(0);
+ }
+
}
\ No newline at end of file
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -105,6 +105,7 @@
public void insertLogical(final Object object,
final boolean dynamic) throws FactException {
+ System.out.println("DefaultKnwHelper: Insert Logical inf.duration");
this.workingMemory.insert( object,
0,
dynamic,
@@ -116,6 +117,7 @@
public void insertLogical(final Object object,
final long duration,
final boolean dynamic) throws FactException {
+ System.out.println("DefaultKnwHelper: Insert Logical duration - ----------- "+duration);
this.workingMemory.insert( object,
duration,
dynamic,
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/base/evaluators/EqualityEvaluatorsDefinition.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/base/evaluators/EqualityEvaluatorsDefinition.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/base/evaluators/EqualityEvaluatorsDefinition.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -34,6 +34,9 @@
import org.drools.spi.FieldValue;
import org.drools.util.DateUtils;
+import uncertainty.truthvals.Degree;
+import uncertainty.truthvals.IUncertainDegree;
+
/**
* This class defines the default built in equality
* evaluators == and !=
@@ -76,10 +79,13 @@
addEvaluator( ValueType.FLOAT_TYPE, Operator.NOT_EQUAL, FloatNotEqualEvaluator.INSTANCE );
addEvaluator( ValueType.PFLOAT_TYPE, Operator.EQUAL, FloatEqualEvaluator.INSTANCE );
addEvaluator( ValueType.PFLOAT_TYPE, Operator.NOT_EQUAL, FloatNotEqualEvaluator.INSTANCE );
- addEvaluator( ValueType.INTEGER_TYPE, Operator.EQUAL, IntegerEqualEvaluator.INSTANCE );
+
+ addEvaluator( ValueType.INTEGER_TYPE, Operator.EQUAL, IntegerAlmostEqualEvaluator.INSTANCE );
addEvaluator( ValueType.INTEGER_TYPE, Operator.NOT_EQUAL, IntegerNotEqualEvaluator.INSTANCE );
- addEvaluator( ValueType.PINTEGER_TYPE, Operator.EQUAL, IntegerEqualEvaluator.INSTANCE );
+ addEvaluator( ValueType.PINTEGER_TYPE, Operator.EQUAL, IntegerAlmostEqualEvaluator.INSTANCE );
addEvaluator( ValueType.PINTEGER_TYPE, Operator.NOT_EQUAL, IntegerNotEqualEvaluator.INSTANCE );
+
+
addEvaluator( ValueType.LONG_TYPE, Operator.EQUAL, LongEqualEvaluator.INSTANCE );
addEvaluator( ValueType.LONG_TYPE, Operator.NOT_EQUAL, LongNotEqualEvaluator.INSTANCE );
addEvaluator( ValueType.PLONG_TYPE, Operator.EQUAL, LongEqualEvaluator.INSTANCE );
@@ -92,6 +98,7 @@
addEvaluator( ValueType.PSHORT_TYPE, Operator.NOT_EQUAL, ShortNotEqualEvaluator.INSTANCE );
addEvaluator( ValueType.STRING_TYPE, Operator.EQUAL, StringEqualEvaluator.INSTANCE );
addEvaluator( ValueType.STRING_TYPE, Operator.NOT_EQUAL, StringNotEqualEvaluator.INSTANCE );
+
}
};
@@ -1422,6 +1429,85 @@
}
}
+
+ static class IntegerAlmostEqualEvaluator extends IntegerEqualEvaluator {
+
+
+
+ private static final long serialVersionUID = 400L;
+ public final static Evaluator INSTANCE = new IntegerAlmostEqualEvaluator();
+
+
+ private IntegerAlmostEqualEvaluator() {
+ super( ValueType.PINTEGER_TYPE,
+ Operator.AEQUAL );
+ }
+
+ public String toString() {
+ return "Integer ~==";
+ }
+
+
+ public IUncertainDegree evaluateUnc(InternalWorkingMemory workingMemory,
+ final Extractor extractor,
+ final Object object1, final FieldValue object2) {
+ if ( extractor.isNullValue( workingMemory, object1 ) ) {
+ return Degree.fromBoolean(object2.isNull());
+ } else if ( object2.isNull() ) {
+ return new Degree(0);
+ }
+
+ return eval(extractor.getIntValue( workingMemory, object1 ), object2.getIntValue());
+ }
+
+ public IUncertainDegree evaluateCachedRightUnc(InternalWorkingMemory workingMemory,
+ final VariableContextEntry context, final Object left) {
+ if ( context.declaration.getExtractor().isNullValue( workingMemory, left ) ) {
+ return Degree.fromBoolean(context.isRightNull());
+ } else if ( context.isRightNull() ) {
+ return new Degree(0);
+ }
+
+ return eval(context.declaration.getExtractor().getIntValue( workingMemory, left ) , ((LongVariableContextEntry) context).right);
+ }
+
+ public IUncertainDegree evaluateCachedLeftUnc(InternalWorkingMemory workingMemory,
+ final VariableContextEntry context, final Object object2) {
+ if ( context.extractor.isNullValue( workingMemory, object2 )) {
+ return Degree.fromBoolean(context.isLeftNull());
+ } else if ( context.isLeftNull() ) {
+ return new Degree(0);
+ }
+
+ return eval(context.extractor.getIntValue( workingMemory, object2 ),((LongVariableContextEntry) context).left);
+ }
+
+ public IUncertainDegree evaluateUnc(InternalWorkingMemory workingMemory,
+ final Extractor extractor1,
+ final Object object1,
+ final Extractor extractor2, final Object object2) {
+ if (extractor1.isNullValue( workingMemory, object1 )) {
+ return Degree.fromBoolean(extractor2.isNullValue( workingMemory, object2 ));
+ } else if (extractor2.isNullValue( workingMemory, object2 )) {
+ return new Degree(0);
+ }
+
+ return eval(extractor1.getIntValue( workingMemory, object1 ),extractor2.getIntValue( workingMemory, object2 ));
+ }
+
+ private IUncertainDegree eval(long i1, long i2) {
+ double den = (Math.abs(i1)+Math.abs(i2));
+ double num = Math.abs(i1-i2);
+
+ double ans = (den == 0) ? 1 : 1 - num / den;
+
+ return new Degree(ans);
+ }
+
+
+ }
+
+
static class IntegerEqualEvaluator extends BaseEvaluator {
/**
*
@@ -1433,6 +1519,11 @@
super( ValueType.PINTEGER_TYPE,
Operator.EQUAL );
}
+
+ protected IntegerEqualEvaluator(ValueType valueType, Operator op) {
+ super( valueType,
+ op );
+ }
public boolean evaluate(InternalWorkingMemory workingMemory,
final Extractor extractor,
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/base/evaluators/Operator.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/base/evaluators/Operator.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/base/evaluators/Operator.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -19,9 +19,10 @@
// these static operator constants are kept here just to make it easier for the engine
// to reference common used operators. The addition of new constants here is not
- // advisable though.
public static final Operator EQUAL = addOperatorToRegistry( "==",
false );
+ public static final Operator AEQUAL = addOperatorToRegistry( "~==",
+ false );
public static final Operator NOT_EQUAL = addOperatorToRegistry( "!=",
false );
public static final Operator LESS = addOperatorToRegistry( "<",
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -80,6 +80,9 @@
import org.drools.spi.PropagationContext;
import org.drools.temporal.SessionClock;
+import uncertainty.truthvals.Degree;
+import uncertainty.truthvals.IUncertainDegree;
+
/**
* Implementation of <code>WorkingMemory</code>.
*
@@ -614,6 +617,7 @@
* @see WorkingMemory
*/
public FactHandle insertLogical(final Object object) throws FactException {
+ System.out.println("Called insertLogical I");
return insert( object, //Not-Dynamic
0,
false,
@@ -624,6 +628,7 @@
public FactHandle insertLogical(final Object object,
final long duration) throws FactException {
+ System.out.println("Called insertLogical III");
return insert( object, /* Not-Dynamic */
duration,
false,
@@ -633,7 +638,7 @@
}
public FactHandle insert(final Object object,
- final boolean dynamic) throws FactException {
+ final boolean dynamic) throws FactException {
return insert( object,
0,
dynamic,
@@ -644,7 +649,7 @@
public FactHandle insert(final Object object,
final long duration,
- final boolean dynamic) throws FactException {
+ final boolean dynamic) throws FactException {
return insert( object,
duration,
dynamic,
@@ -655,6 +660,7 @@
public FactHandle insertLogical(final Object object,
final boolean dynamic) throws FactException {
+ System.out.println("Called insertLogical II");
return insert( object,
0,
dynamic,
@@ -666,6 +672,7 @@
public FactHandle insertLogical(final Object object,
final long duration,
final boolean dynamic) throws FactException {
+ System.out.println("Called insertLogical IV");
return insert( object,
duration,
dynamic,
@@ -726,6 +733,9 @@
boolean logical,
final Rule rule,
final Activation activation) throws FactException {
+
+ System.out.println("AbstractWorkingMemory : State / Justify Ordeal");
+
if ( object == null ) {
// you cannot assert a null object
return null;
@@ -750,6 +760,10 @@
return handle;
}
+
+
+
+
try {
this.lock.lock();
// check if the object already exists in the WM
@@ -932,9 +946,11 @@
this.agenda.getActiveActivations(),
this.agenda.getDormantActivations(),
entryPoint );
-
+ System.out.println("AbstractWorkingMemory : Wrapped a to-be-inserted obj with a handle");
+ System.out.println("AbstractWorkingMemory : Hijacked insert method to use uncValues");
doInsert( handle,
object,
+ new Degree(1),
propagationContext );
if ( !this.actionQueue.isEmpty() ) {
@@ -973,6 +989,11 @@
public abstract void doInsert(InternalFactHandle factHandle,
Object object,
PropagationContext propagationContext) throws FactException;
+
+ public abstract void doInsert(InternalFactHandle factHandle,
+ Object object,
+ IUncertainDegree tDegree,
+ PropagationContext propagationContext) throws FactException;
protected void removePropertyChangeListener(final FactHandle handle) {
Object object = null;
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/common/BetaConstraints.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/common/BetaConstraints.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/common/BetaConstraints.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -7,6 +7,8 @@
import org.drools.reteoo.ReteTuple;
import org.drools.util.LinkedList;
+import uncertainty.truthvals.IUncertainDegree;
+
public interface BetaConstraints
extends
Serializable {
@@ -15,7 +17,7 @@
ReteTuple tuple);
public void updateFromFactHandle(InternalWorkingMemory workingMemory,
- InternalFactHandle handle);
+ InternalFactHandle handle);
public boolean isAllowedCachedLeft(InternalFactHandle handle);
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/common/DefaultAgenda.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/common/DefaultAgenda.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/common/DefaultAgenda.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -547,6 +547,10 @@
try {
this.knowledgeHelper.setActivation( activation );
+
+ //TODO: KnowledgeHelpers are good starting points to inject the uncDegrees epsilon
+ // And the policies as well. Evaluation should take epsilon into account
+ System.out.println("DefaultAgenda: Firing rule consequence "+activation.getRule());
activation.getRule().getConsequence().evaluate( this.knowledgeHelper,
this.workingMemory );
this.knowledgeHelper.reset();
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/common/InternalRuleBase.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/common/InternalRuleBase.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/common/InternalRuleBase.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -33,6 +33,8 @@
import org.drools.spi.FactHandleFactory;
import org.drools.spi.PropagationContext;
+import uncertainty.truthvals.IUncertainDegree;
+
public interface InternalRuleBase
extends
RuleBase {
@@ -77,6 +79,29 @@
Object object,
PropagationContext context,
InternalWorkingMemory workingMemory) throws FactException;
+
+
+ /**
+ * Assert a fact object.
+ * @author Sotty
+ *
+ * @param handle
+ * The handle.
+ * @param object
+ * The fact.
+ * @param tDegree
+ * The truth (confidence) degree associated with the fact
+ * @param workingMemory
+ * The working-memory.
+ *
+ * @throws FactException
+ * If an error occurs while performing the assertion.
+ */
+ public void assertObject(FactHandle handle,
+ Object object,
+ IUncertainDegree tDegree,
+ PropagationContext context,
+ InternalWorkingMemory workingMemory) throws FactException;
/**
* Retract a fact object.
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/facttemplates/FactTemplateObjectType.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/facttemplates/FactTemplateObjectType.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/facttemplates/FactTemplateObjectType.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -19,6 +19,9 @@
import org.drools.base.ValueType;
import org.drools.spi.ObjectType;
+import uncertainty.truthvals.Degree;
+import uncertainty.truthvals.IUncertainDegree;
+
/**
* Java class semantics <code>ObjectType</code>.
*
@@ -146,4 +149,15 @@
public int hashCode() {
return this.factTemplate.hashCode();
}
+
+
+
+ /**
+ * TODO: Compatibility between fact templates is to be considered...
+ * @author Sotty
+ */
+ public IUncertainDegree isCompatibleWith(Object object) {
+ boolean ans = this.isAssignableFrom(object);
+ return ans ? new Degree(1) : new Degree(0);
+ }
}
\ No newline at end of file
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -33,6 +33,8 @@
import org.drools.util.Iterator;
import org.drools.util.ObjectHashMap.ObjectEntry;
+import uncertainty.truthvals.IUncertainDegree;
+
/**
* AccumulateNode
* A beta node capable of doing accumulate logic.
@@ -479,5 +481,12 @@
// keeping attributes public just for performance
public InternalFactHandle handle;
public Object context;
+ }
+
+ public void assertObject(InternalFactHandle handle,
+ IUncertainDegree degree, PropagationContext context,
+ InternalWorkingMemory workingMemory) {
+ // TODO Auto-generated method stub
+
}
}
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/AlphaNode.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/AlphaNode.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/AlphaNode.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -29,6 +29,9 @@
import org.drools.util.FactHashTable;
import org.drools.util.Iterator;
+import uncertainty.truthvals.Degree;
+import uncertainty.truthvals.IUncertainDegree;
+
/**
* <code>AlphaNodes</code> are nodes in the <code>Rete</code> network used
* to apply <code>FieldConstraint<.code>s on asserted fact
@@ -51,6 +54,7 @@
private static final long serialVersionUID = 400L;
/** The <code>FieldConstraint</code> */
+ //TODO : ANFC should be uncertain evaluators, thus yielding
private final AlphaNodeFieldConstraint constraint;
private ObjectSinkNode previousObjectSinkNode;
@@ -126,22 +130,71 @@
}
}
+ /**
+ * Alpha node propagation under uncertainty.
+ * The incoming truth degree is merged (and-ed) with that resulting from the constraint
+ * @author Sotty
+ */
public void assertObject(final InternalFactHandle handle,
+ IUncertainDegree tDegree,
final PropagationContext context,
final InternalWorkingMemory workingMemory) throws FactException {
- if ( this.constraint.isAllowed( handle,
- workingMemory ) ) {
+
+ IUncertainDegree constrDeg = this.constraint.matches(handle, workingMemory);
+
+ IUncertainDegree ansDeg = AlphaNode.combineDegs(tDegree,constrDeg);
+
+ System.out.println("UNCERTAIN AlphaNode : Passed object "+handle.getObject()+ " with degree "+ansDeg);
if ( isObjectMemoryEnabled() ) {
final FactHashTable memory = (FactHashTable) workingMemory.getNodeMemory( this );
memory.add( handle,
false );
}
-
+
this.sink.propagateAssertObject( handle,
+ ansDeg,
context,
workingMemory );
+
+ }
+
+ /**
+ * Degree combining strategy
+ * This method combines the degree of the evaluation so-far with the
+ * degree due to the evaluation of the local constraint.
+ * TODO : Parametrize by operator, extend to more general truth values
+ *
+ * @param degree The degree so far
+ * @param constrDeg The degree up to which the object satisfies the node's constraint
+ * @return degree*constrDeg (product and over real valued degrees)
+ */
+ public static IUncertainDegree combineDegs(final IUncertainDegree degree,
+ final IUncertainDegree constrDeg) {
+ return new Degree(constrDeg.getDegree().getValue()*degree.getDegree().getValue());
+ }
+
+ public void assertObject(final InternalFactHandle handle,
+ final PropagationContext context,
+ final InternalWorkingMemory workingMemory) throws FactException {
+ if ( this.constraint.isAllowed( handle,
+ workingMemory ) ) {
+
+ System.out.println("AlphaNode : Passed object "+handle.getObject());
+ if ( isObjectMemoryEnabled() ) {
+ final FactHashTable memory = (FactHashTable) workingMemory.getNodeMemory( this );
+ memory.add( handle,
+ false );
+ }
+
+ this.sink.propagateAssertObject( handle,
+ context,
+ workingMemory );
}
+ else {
+ System.out.println("AlphaNode : Blocked object "+handle.getObject());
+ }
}
+
public void retractObject(final InternalFactHandle handle,
final PropagationContext context,
@@ -318,6 +371,26 @@
workingMemory );
}
}
+
+
+ public void assertObject(final InternalFactHandle handle,
+ IUncertainDegree tDegree,
+ final PropagationContext context,
+ final InternalWorkingMemory workingMemory) {
+
+
+ IUncertainDegree constrDeg;
+
+ //TODO: pluggable evaluators here...
+ constrDeg = this.constraint.matches(handle, workingMemory);
+
+ IUncertainDegree ansDeg = AlphaNode.combineDegs(tDegree,constrDeg);
+ this.sink.assertObject( handle,
+ ansDeg,
+ context,
+ workingMemory );
+
+ }
public void modifyObject(final InternalFactHandle handle,
final PropagationContext context,
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ClassObjectTypeConf.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ClassObjectTypeConf.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ClassObjectTypeConf.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -283,7 +283,9 @@
cache.add( node );
}
}
-
+ //TODO: objects are assignable in a degree
+ // Here, the degree should be added to the cache
+ // Unless the degree is uselessly low
return (ObjectTypeNode[]) cache.toArray( new ObjectTypeNode[cache.size()] );
}
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/CollectNode.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/CollectNode.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/CollectNode.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -32,6 +32,8 @@
import org.drools.util.Iterator;
import org.drools.util.ObjectHashMap.ObjectEntry;
+import uncertainty.truthvals.IUncertainDegree;
+
/**
* @author etirelli
*
@@ -383,4 +385,11 @@
public InternalFactHandle handle;
public boolean propagated;
}
+
+ public void assertObject(InternalFactHandle handle,
+ IUncertainDegree degree, PropagationContext context,
+ InternalWorkingMemory workingMemory) {
+ // TODO Auto-generated method stub
+
+ }
}
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -21,6 +21,8 @@
import org.drools.util.ObjectHashMap;
import org.drools.util.ObjectHashMap.ObjectEntry;
+import uncertainty.truthvals.IUncertainDegree;
+
public class CompositeObjectSinkAdapter
implements
ObjectSinkPropagator {
@@ -323,6 +325,60 @@
}
+ public void propagateAssertObject(final InternalFactHandle handle,
+ IUncertainDegree tDegree,
+ final PropagationContext context,
+ final InternalWorkingMemory workingMemory) {
+ final Object object = handle.getObject();
+
+// Iterates t he FieldIndex collection, which tells you if particularly field is hashed or not
+// if the field is hashed then it builds the hashkey to return the correct sink for the current objects slot's
+// value, one object may have multiple fields indexed.
+ if ( this.hashedFieldIndexes != null ) {
+// Iterate the FieldIndexes to see if any are hashed
+ for ( FieldIndex fieldIndex = (FieldIndex) this.hashedFieldIndexes.getFirst(); fieldIndex != null; fieldIndex = (FieldIndex) fieldIndex.getNext() ) {
+ if ( !fieldIndex.isHashed() ) {
+ continue;
+ }
+// this field is hashed so set the existing hashKey and see if there is a sink for it
+ final int index = fieldIndex.getIndex();
+ final FieldExtractor extractor = fieldIndex.getFieldExtactor();
+ HashKey hashKey = new HashKey( index,
+ object,
+ fieldIndex.getFieldExtractor() );
+ final ObjectSink sink = (ObjectSink) this.hashedSinkMap.get( hashKey );
+ if ( sink != null ) {
+// The sink exists so propagate
+ sink.assertObject( handle,
+ tDegree,
+ context,
+ workingMemory );
+ }
+ }
+ }
+
+// propagate unhashed
+ if ( this.hashableSinks != null ) {
+ for ( ObjectSinkNode sink = this.hashableSinks.getFirst(); sink != null; sink = sink.getNextObjectSinkNode() ) {
+ sink.assertObject( handle,
+ tDegree,
+ context,
+ workingMemory );
+ }
+ }
+
+ if ( this.otherSinks != null ) {
+// propagate others
+ for ( ObjectSinkNode sink = this.otherSinks.getFirst(); sink != null; sink = sink.getNextObjectSinkNode() ) {
+ sink.assertObject( handle,
+ tDegree,
+ context,
+ workingMemory );
+ }
+ }
+
+ }
+
public void propagateRetractObject(final InternalFactHandle handle,
final PropagationContext context,
final InternalWorkingMemory workingMemory,
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/CompositeTupleSinkAdapter.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/CompositeTupleSinkAdapter.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/CompositeTupleSinkAdapter.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -4,6 +4,8 @@
import org.drools.common.InternalWorkingMemory;
import org.drools.spi.PropagationContext;
+import uncertainty.truthvals.IUncertainDegree;
+
public class CompositeTupleSinkAdapter
implements
TupleSinkPropagator {
@@ -33,6 +35,19 @@
workingMemory );
}
}
+
+ public void propagateAssertTuple(ReteTuple tuple,
+ InternalFactHandle handle, IUncertainDegree degree,
+ PropagationContext context, InternalWorkingMemory workingMemory) {
+
+ for ( TupleSinkNode sink = this.sinks.getFirst(); sink != null; sink = sink.getNextTupleSinkNode() ) {
+ sink.assertTuple( new UncReteTuple( tuple,
+ handle, degree ),
+ context,
+ workingMemory );
+ }
+
+ }
public void propagateAssertTuple(final ReteTuple tuple,
final PropagationContext context,
@@ -75,6 +90,18 @@
workingMemory );
}
}
+
+
+ public void createAndPropagateAssertTuple(final InternalFactHandle handle,
+ IUncertainDegree tDegree,
+ final PropagationContext context,
+ final InternalWorkingMemory workingMemory) {
+ for ( TupleSinkNode sink = this.sinks.getFirst(); sink != null; sink = sink.getNextTupleSinkNode() ) {
+ sink.assertTuple( new UncReteTuple( handle, tDegree ),
+ context,
+ workingMemory );
+ }
+ }
public void createAndPropagateRetractTuple(final InternalFactHandle handle,
final PropagationContext context,
@@ -165,4 +192,6 @@
public int size() {
return this.sinks.size();
}
+
+
}
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/EmptyObjectSinkAdapter.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/EmptyObjectSinkAdapter.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/EmptyObjectSinkAdapter.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -4,6 +4,8 @@
import org.drools.common.InternalWorkingMemory;
import org.drools.spi.PropagationContext;
+import uncertainty.truthvals.IUncertainDegree;
+
public class EmptyObjectSinkAdapter
implements
ObjectSinkPropagator {
@@ -26,7 +28,14 @@
final InternalWorkingMemory workingMemory) {
}
+
+ public void propagateAssertObject(final InternalFactHandle handle,
+ IUncertainDegree tDegree,
+ final PropagationContext context,
+ final InternalWorkingMemory workingMemory) {
+ }
+
public void propagateRetractObject(final InternalFactHandle handle,
final PropagationContext context,
final InternalWorkingMemory workingMemory,
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/EmptyTupleSinkAdapter.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/EmptyTupleSinkAdapter.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/EmptyTupleSinkAdapter.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -4,6 +4,8 @@
import org.drools.common.InternalWorkingMemory;
import org.drools.spi.PropagationContext;
+import uncertainty.truthvals.IUncertainDegree;
+
public class EmptyTupleSinkAdapter
implements
TupleSinkPropagator {
@@ -56,4 +58,16 @@
public int size() {
return 0;
}
+
+ public void createAndPropagateAssertTuple(InternalFactHandle handle,
+ IUncertainDegree degree, PropagationContext context,
+ InternalWorkingMemory workingMemory) {
+
+ }
+
+ public void propagateAssertTuple(ReteTuple tuple,
+ InternalFactHandle handle, IUncertainDegree degree,
+ PropagationContext context, InternalWorkingMemory workingMemory) {
+
+ }
}
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/EntryPointNode.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/EntryPointNode.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/EntryPointNode.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -36,6 +36,8 @@
import org.drools.util.FactHashTable;
import org.drools.util.Iterator;
+import uncertainty.truthvals.IUncertainDegree;
+
/**
* A node that is an entry point into the Rete network.
*
@@ -136,12 +138,68 @@
ObjectTypeNode[] cachedNodes = objectTypeConf.getObjectTypeNodes();
for ( int i = 0, length = cachedNodes.length; i < length; i++ ) {
+ System.out.println("EntrypointNode : Dispatch to "+cachedNodes[i].toString());
cachedNodes[i].assertObject( handle,
context,
workingMemory );
}
}
+
+
+
+ /**
+ * This is the entry point into the network for all asserted Facts. Iterates a cache
+ * of matching <code>ObjectTypdeNode</code>s asserting the Fact. If the cache does not
+ * exist it first iterates and builds the cache.
+ * This method allows a propagation to be seeded with a truth value. At this point, it
+ * is mostly useful to condition the confidence in the propagation
+ *
+ * @author Sotty
+ *
+ * @param handle
+ * The FactHandle of the fact to assert
+ * @param tval
+ * The global, initial truth value for the object insertion
+ * @param context
+ * The <code>PropagationContext</code> of the <code>WorkingMemory</code> action *
+ * @param workingMemory
+ * The working memory session.
+ */
+ public void assertObject(final InternalFactHandle handle,
+ IUncertainDegree tval,
+ final PropagationContext context,
+ final InternalWorkingMemory workingMemory) {
+ ObjectTypeConf objectTypeConf = workingMemory.getObjectTypeConf( this.entryPoint,
+ handle.getObject() );
+
+ // checks if shadow is enabled
+ if ( objectTypeConf.isShadowEnabled() ) {
+ // need to improve this
+ if ( !(handle.getObject() instanceof ShadowProxy) ) {
+ // replaces the actual object by its shadow before propagating
+ handle.setObject( objectTypeConf.getShadow( handle.getObject() ) );
+ handle.setShadowFact( true );
+ } else {
+ ((ShadowProxy) handle.getObject()).updateProxy();
+ }
+ }
+
+ ObjectTypeNode[] cachedNodes = objectTypeConf.getObjectTypeNodes();
+
+ for ( int i = 0, length = cachedNodes.length; i < length; i++ ) {
+ System.out.println("UNCERTAIN EntrypointNode : Dispatch to "+cachedNodes[i].toString());
+ cachedNodes[i].assertObject( handle,
+ tval,
+ context,
+ workingMemory );
+ }
+ }
+
+
+
+
+
/**
* Retract a fact object from this <code>RuleBase</code> and the specified
* <code>WorkingMemory</code>.
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -24,6 +24,8 @@
import org.drools.util.FactEntry;
import org.drools.util.Iterator;
+import uncertainty.truthvals.IUncertainDegree;
+
/**
* <code>ExistsNode</code> extends <code>BetaNode</code> to perform tests for
* the existence of a Fact plus one or more conditions. Where existence
@@ -267,4 +269,11 @@
return "[ExistsNode - " + ((ObjectTypeNode) source).getObjectType() + "]";
}
+ public void assertObject(InternalFactHandle handle,
+ IUncertainDegree degree, PropagationContext context,
+ InternalWorkingMemory workingMemory) {
+ // TODO Auto-generated method stub
+
+ }
+
}
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/FactHandleMemory.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/FactHandleMemory.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/FactHandleMemory.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -4,6 +4,8 @@
import org.drools.util.Entry;
import org.drools.util.Iterator;
+import uncertainty.truthvals.IUncertainDegree;
+
public interface FactHandleMemory {
public Iterator iterator();
@@ -13,6 +15,10 @@
boolean checkExists);
public boolean add(InternalFactHandle handle);
+
+ public void setUncDeg(InternalFactHandle handle, IUncertainDegree degree);
+
+ public IUncertainDegree getUncDeg(InternalFactHandle handle);
public boolean remove(InternalFactHandle handle);
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/JoinNode.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/JoinNode.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/JoinNode.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -24,6 +24,8 @@
import org.drools.util.FactEntry;
import org.drools.util.Iterator;
+import uncertainty.truthvals.IUncertainDegree;
+
/**
* <code>JoinNode</code> extends <code>BetaNode</code> to perform
* <code>ReteTuple</code> and <code>FactHandle</code> joins. Tuples are
@@ -104,10 +106,20 @@
for ( FactEntry entry = (FactEntry) it.next(); entry != null; entry = (FactEntry) it.next() ) {
final InternalFactHandle handle = entry.getFactHandle();
if ( this.constraints.isAllowedCachedLeft( handle ) ) {
- this.sink.propagateAssertTuple( leftTuple,
- handle,
- context,
- workingMemory );
+
+ IUncertainDegree deg = memory.getFactHandleMemory().getUncDeg(handle);
+ if (deg == null) {
+ this.sink.propagateAssertTuple( leftTuple,
+ handle,
+ context,
+ workingMemory );
+ } else {
+ this.sink.propagateAssertTuple( leftTuple,
+ handle,
+ deg,
+ context,
+ workingMemory );
+ }
}
}
@@ -156,7 +168,40 @@
}
this.constraints.resetFactHandle();
}
+
+
+ public void assertObject(InternalFactHandle handle,
+ IUncertainDegree degree,
+ PropagationContext context,
+ InternalWorkingMemory workingMemory) {
+ final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
+ memory.getFactHandleMemory().add( handle );
+ memory.getFactHandleMemory().setUncDeg(handle, degree);
+
+ if ( ! this.tupleMemoryEnabled ) {
+ // do nothing here, as we know there are no left tuples at this stage in sequential mode.
+ return;
+ }
+
+ final Iterator it = memory.getTupleMemory().iterator( handle );
+ this.constraints.updateFromFactHandle( workingMemory,
+ handle );
+ for ( ReteTuple tuple = (ReteTuple) it.next(); tuple != null; tuple = (ReteTuple) it.next() ) {
+ if ( this.constraints.isAllowedCachedRight( tuple ) ) {
+ this.sink.propagateAssertTuple( tuple,
+ handle,
+ degree,
+ context,
+ workingMemory );
+ }
+ }
+ this.constraints.resetFactHandle();
+
+
+ }
+
+
/**
* Retract a FactHandleImpl. Iterates the referenced TupleMatches stored in
* the handle's ObjectMatches retracting joined tuples.
@@ -264,4 +309,6 @@
return "[JoinNode - " + ((ObjectTypeNode) source).getObjectType() + "]";
}
+
+
}
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -28,6 +28,8 @@
import org.drools.util.FactHashTable;
import org.drools.util.Iterator;
+import uncertainty.truthvals.IUncertainDegree;
+
/**
* All asserting Facts must propagated into the right <code>ObjectSink</code> side of a BetaNode, if this is the first Pattern
* then there are no BetaNodes to propagate to. <code>LeftInputAdapter</code> is used to adapt an ObjectSink propagation into a
@@ -126,7 +128,31 @@
workingMemory.addLIANodePropagation( new LIANodePropagation(this, handle, context) );
}
}
+
+ public void assertObject(InternalFactHandle handle,
+ IUncertainDegree degree, PropagationContext context,
+ InternalWorkingMemory workingMemory) {
+
+ if ( !workingMemory.isSequential() ) {
+ this.sink.createAndPropagateAssertTuple( handle,
+ degree,
+ context,
+ workingMemory );
+ if ( this.objectMemoryEnabled ) {
+ final FactHashTable memory = (FactHashTable) workingMemory.getNodeMemory( this );
+ memory.add( handle,
+ false );
+ }
+ } else {
+ workingMemory.addLIANodePropagation( new LIANodePropagation(this, handle, context) );
+ }
+
+ }
+
+
+
+
/**
* Retract an existing <code>FactHandleImpl</code> by placing it in a new <code>ReteTuple</code> before
* proagating to the <code>TupleSinks</code>
@@ -279,6 +305,17 @@
context,
workingMemory );
}
+
+
+ public void assertObject(final InternalFactHandle handle,
+ IUncertainDegree tDegree,
+ final PropagationContext context,
+ final InternalWorkingMemory workingMemory) {
+ final UncReteTuple tuple = new UncReteTuple( handle,tDegree );
+ this.sink.assertTuple( tuple,
+ context,
+ workingMemory );
+ }
public void modifyObject(final InternalFactHandle handle,
final PropagationContext context,
@@ -301,4 +338,6 @@
}
}
+
+
}
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/NotNode.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/NotNode.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/NotNode.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -25,6 +25,8 @@
import org.drools.util.FactEntry;
import org.drools.util.Iterator;
+import uncertainty.truthvals.IUncertainDegree;
+
/**
* <code>NotNode</code> extends <code>BetaNode</code> to perform tests for
* the non existence of a Fact plus one or more conditions. Where none existence
@@ -264,4 +266,11 @@
return "[NotNode - " + ((ObjectTypeNode) source).getObjectType() + "]";
}
+
+ public void assertObject(InternalFactHandle handle,
+ IUncertainDegree degree, PropagationContext context,
+ InternalWorkingMemory workingMemory) {
+ // TODO Auto-generated method stub
+
+ }
}
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ObjectSink.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ObjectSink.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ObjectSink.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -20,6 +20,8 @@
import org.drools.common.InternalWorkingMemory;
import org.drools.spi.PropagationContext;
+import uncertainty.truthvals.*;
+
/**
* Receiver of propagated <code>FactHandleImpl</code>s from a
* <code>ObjectSource</code>.
@@ -48,7 +50,27 @@
PropagationContext context,
InternalWorkingMemory workingMemory);
+
/**
+ * Assert a new <code>FactHandleImpl</code>.
+ * This fact is annotated by a truth degree
+ * @author Sotty
+ *
+ * @param handle
+ * The asserted <code>FactHandle/code>.
+ * @param tDegree
+ * The actual truth degree, in any implementation of <code>IUncertainDegree</code>
+ * @param context
+ * The <code>PropagationContext</code> of the <code>WorkingMemory<code> action.
+ * @param workingMemory
+ * the <code>WorkingMemory</code> session.
+ */
+ void assertObject(InternalFactHandle handle,
+ IUncertainDegree tDegree,
+ PropagationContext context,
+ InternalWorkingMemory workingMemory);
+
+ /**
* Retract an existing <code>FactHandleImpl</code>.
*
* @param handle
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ObjectSinkPropagator.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ObjectSinkPropagator.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ObjectSinkPropagator.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -6,12 +6,19 @@
import org.drools.common.InternalWorkingMemory;
import org.drools.spi.PropagationContext;
+import uncertainty.truthvals.IUncertainDegree;
+
public interface ObjectSinkPropagator
extends
Serializable {
public void propagateAssertObject(InternalFactHandle handle,
PropagationContext context,
InternalWorkingMemory workingMemory);
+
+ public void propagateAssertObject(InternalFactHandle handle,
+ IUncertainDegree tDeg,
+ PropagationContext context,
+ InternalWorkingMemory workingMemory);
public void propagateRetractObject(InternalFactHandle handle,
PropagationContext context,
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -34,6 +34,9 @@
import org.drools.util.FactHashTable;
import org.drools.util.Iterator;
+import uncertainty.truthvals.Degree;
+import uncertainty.truthvals.IUncertainDegree;
+
/**
* <code>ObjectTypeNodes<code> are responsible for filtering and propagating the matching
* fact assertions propagated from the <code>Rete</code> node using <code>ObjectType</code> interface.
@@ -114,7 +117,7 @@
* @return
* boolean value indicating whether the <code>ObjectTypeNode</code> can receive the object.
*/
- public boolean matches(final Object object) {
+ public boolean matches(final Object object) {
return this.objectType.matches( object );
}
@@ -123,20 +126,47 @@
}
/**
+ * Uncertain Class Matching.
+ * @author Sotty
+ *
+ * @param object The actual object whose class is to be evaluated
+ * @return
+ */
+ public IUncertainDegree isCompatibleWith(final Object object) {
+ return this.objectType.isCompatibleWith(object);
+ }
+
+
+ /**
* Propagate the <code>FactHandleimpl</code> through the <code>Rete</code> network. All
* <code>FactHandleImpl</code> should be remembered in the node memory, so that later runtime rule attachmnents
* can have the matched facts propagated to them.
*
+ * Under uncertainty, this method receives an object which can pass
+ * through this node, but only in some degree. Moreover, the caller
+ * entrypoint may have an initial "confidence" degree which must be taken into account
+ *
+ * @author Sotty
+ *
* @param handle
* The fact handle.
+ * @param tDegree
+ * The incoming truth degree
* @param object
* The object to assert.
* @param workingMemory
* The working memory session.
*/
public void assertObject(final InternalFactHandle handle,
+ IUncertainDegree tDegree,
final PropagationContext context,
final InternalWorkingMemory workingMemory) {
+
+ System.out.println("UNCERTAIN ObjectTypeNode: received object");
+ //TODO: Here the node has been extracted from a cache
+ // of TypeNodes filters which are known to let the object pass
+ // In case of partial filter, the degree should be extracted
+
if ( context.getType() == PropagationContext.MODIFICATION && this.skipOnModify && context.getDormantActivations() == 0 ) {
// we do this after the shadowproxy update, just so that its up to date for the future
return;
@@ -147,12 +177,55 @@
memory.add( handle,
false );
}
+
+ IUncertainDegree tMatch = isCompatibleWith(handle.getObject());
this.sink.propagateAssertObject( handle,
+ ObjectTypeNode.combineDegrees(tDegree,tMatch),
context,
workingMemory );
}
+
+
+
+
+ /**
+ * Propagate the <code>FactHandleimpl</code> through the <code>Rete</code> network. All
+ * <code>FactHandleImpl</code> should be remembered in the node memory, so that later runtime rule attachmnents
+ * can have the matched facts propagated to them.
+ *
+ * @param handle
+ * The fact handle.
+ * @param object
+ * The object to assert.
+ * @param workingMemory
+ * The working memory session.
+ */
+ public void assertObject(final InternalFactHandle handle,
+ final PropagationContext context,
+ final InternalWorkingMemory workingMemory) {
+
+ System.out.println("ObjectTypeNode: received object");
+ //TODO: Here the node has been extracted from a cache
+ // of TypeNodes filters which are known to let the object pass
+ // In case of partial filter, the degree should be extracted
+
+ if ( context.getType() == PropagationContext.MODIFICATION && this.skipOnModify && context.getDormantActivations() == 0 ) {
+ // we do this after the shadowproxy update, just so that its up to date for the future
+ return;
+ }
+ if ( this.objectMemoryEnabled ) {
+ final FactHashTable memory = (FactHashTable) workingMemory.getNodeMemory( this );
+ memory.add( handle,
+ false );
+ }
+
+ this.sink.propagateAssertObject( handle,
+ context,
+ workingMemory );
+ }
+
/**
* Retract the <code>FactHandleimpl</code> from the <code>Rete</code> network. Also remove the
* <code>FactHandleImpl</code> from the node memory.
@@ -349,4 +422,21 @@
public EntryPoint getEntryPoint() {
return ((EntryPointNode)this.objectSource).getEntryPoint();
}
+
+
+
+ /**
+ * Degree combining strategy
+ * This method combines the initial degree with the ontologic compatibility
+ * of the actual class. *
+ * TODO : Parametrize by operator, extend to more general truth values
+ *
+ * @param degree The degree so far
+ * @param matchDeg The degree up to which the object satisfies the node's constraint
+ * @return degree*constrDeg (product and over real valued degrees)
+ */
+ public static IUncertainDegree combineDegrees(final IUncertainDegree degree,
+ final IUncertainDegree matchDeg) {
+ return new Degree(matchDeg.getDegree().getValue()*degree.getDegree().getValue());
+ }
}
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/PropagationQueuingNode.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/PropagationQueuingNode.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/PropagationQueuingNode.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -29,6 +29,8 @@
import org.drools.reteoo.builder.BuildContext;
import org.drools.spi.PropagationContext;
+import uncertainty.truthvals.IUncertainDegree;
+
/**
* A node that will add the propagation to the working memory actions queue,
* in order to allow multiple threads to concurrently assert objects to multiple
@@ -354,4 +356,11 @@
this.node.propagateActions( workingMemory );
}
}
+
+ public void assertObject(InternalFactHandle handle,
+ IUncertainDegree degree, PropagationContext context,
+ InternalWorkingMemory workingMemory) {
+ // TODO Auto-generated method stub
+
+ }
}
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/Rete.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/Rete.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/Rete.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -37,6 +37,8 @@
import org.drools.util.FactHashTable;
import org.drools.util.Iterator;
+import uncertainty.truthvals.IUncertainDegree;
+
/**
* The Rete-OO network.
*
@@ -113,6 +115,39 @@
context,
workingMemory );
}
+
+
+ /**
+ * This is the entry point into the network for all asserted Facts. Iterates a cache
+ * of matching <code>ObjectTypdeNode</code>s asserting the Fact. If the cache does not
+ * exist it first iteraes and builds the cache.
+ * @author Sotty
+ *
+ * @param handle
+ * The FactHandle of the fact to assert
+ * @param tDegree
+ * The uncertain Degree
+ * @param context
+ * The <code>PropagationContext</code> of the <code>WorkingMemory</code> action
+ * @param workingMemory
+ * The working memory session.
+ */
+ public void assertObject(final InternalFactHandle handle,
+ IUncertainDegree tDegree,
+ final PropagationContext context,
+ final InternalWorkingMemory workingMemory) {
+ EntryPointNode node = this.entryPoints.get( context.getEntryPoint() );
+ node.assertObject( handle,
+ tDegree,
+ context,
+ workingMemory );
+ }
+
+
+
+
+
+
/**
* Retract a fact object from this <code>RuleBase</code> and the specified
@@ -166,7 +201,7 @@
removeObjectSink( entryPointNode );
}
- public EntryPointNode getEntryPointNode( final EntryPoint entryPoint ) {
+ public EntryPointNode getEntryPointNode( final EntryPoint entryPoint ) {
return this.entryPoints.get( entryPoint );
}
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ReteTuple.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ReteTuple.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ReteTuple.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -109,6 +109,10 @@
return this.recency;
}
+
+ public ReteTuple getParent() {
+ return parent;
+ }
public InternalFactHandle getMatch() {
return match;
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -47,6 +47,8 @@
import org.drools.spi.FactHandleFactory;
import org.drools.spi.PropagationContext;
+import uncertainty.truthvals.IUncertainDegree;
+
/**
* Implementation of <code>RuleBase</code>.
*
@@ -209,7 +211,21 @@
context,
workingMemory );
}
+
+ public void assertObject(final FactHandle handle,
+ final Object object,
+ IUncertainDegree tDegree,
+ final PropagationContext context,
+ final InternalWorkingMemory workingMemory) throws FactException {
+
+ getRete().assertObject( (DefaultFactHandle) handle,
+ tDegree,
+ context,
+ workingMemory );
+ }
+
+
/**
* Retract a fact object.
*
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -38,6 +38,8 @@
import org.drools.spi.Activation;
import org.drools.spi.PropagationContext;
+import uncertainty.truthvals.IUncertainDegree;
+
/**
* Implementation of <code>WorkingMemory</code>.
*
@@ -69,12 +71,25 @@
public void doInsert(final InternalFactHandle handle,
final Object object,
final PropagationContext propagationContext) throws FactException {
+
this.ruleBase.assertObject( handle,
object,
propagationContext,
this );
}
+
+ public void doInsert(final InternalFactHandle handle,
+ final Object object,
+ IUncertainDegree tDegree,
+ final PropagationContext propagationContext) throws FactException {
+ this.ruleBase.assertObject( handle,
+ object,
+ tDegree,
+ propagationContext,
+ this );
+ }
+
public void doRetract(final InternalFactHandle handle,
final PropagationContext propagationContext) {
this.ruleBase.retractObject( handle,
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -45,6 +45,9 @@
import org.drools.util.LinkedList;
import org.drools.util.TupleHashTable;
+import uncertainty.truthvals.Degree;
+import uncertainty.truthvals.IUncertainDegree;
+
/**
* Leaf Rete-OO node responsible for enacting <code>Action</code> s on a
* matched <code>Rule</code>.
@@ -155,12 +158,16 @@
final PropagationContext context,
final InternalWorkingMemory workingMemory,
final boolean fireActivationCreated) {
-
+
//check if the rule is effective
if ( !this.rule.isEffective(workingMemory.getTimeMachine()) ) {
return;
}
+ IUncertainDegree ansDeg = evaluateOperator(tuple);
+
+ System.out.println("RuleTerminalNode for " +this.rule + " : Received joined tuple "+tuple+ " with degree "+ansDeg);
+
// if the current Rule is no-loop and the origin rule is the same and its the same set of facts (tuple) then return
if ( context.getType() == PropagationContext.MODIFICATION ) {
if ( this.rule.isNoLoop() && this.rule.equals( context.getRuleOrigin() ) && context.getActivationOrigin().getTuple().equals( tuple ) ) {
@@ -333,9 +340,13 @@
}
}
+ //TODO: Here the premise's truth value should have been calculated
+ System.out.println("RuleTerminalNode: A rule has been fired and added to the agenda\n\n");
agenda.increaseActiveActivations();
}
+
+
private void copyLogicalDependencies(final PropagationContext context,
final InternalWorkingMemory workingMemory,
final AgendaItem item,
@@ -531,6 +542,29 @@
final RuleTerminalNode other = (RuleTerminalNode) object;
return this.rule.equals( other.rule );
}
+
+
+
+
+ private IUncertainDegree evaluateOperator(ReteTuple tuple) {
+ Degree ans = new Degree(1);
+
+ ReteTuple tup = tuple;
+ while (tup != null) {
+ if (tup instanceof UncReteTuple) {
+ UncReteTuple ut = (UncReteTuple) tup;
+ Degree deg = (Degree) ut.getDegree();
+ ans.setValue(ans.getValue()*deg.getValue());
+ }
+ tup = tup.getParent();
+ }
+
+ return ans;
+ }
+
+
+
+
class TerminalNodeMemory
implements
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/SingleObjectSinkAdapter.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/SingleObjectSinkAdapter.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/SingleObjectSinkAdapter.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -4,6 +4,8 @@
import org.drools.common.InternalWorkingMemory;
import org.drools.spi.PropagationContext;
+import uncertainty.truthvals.IUncertainDegree;
+
public class SingleObjectSinkAdapter
implements
ObjectSinkPropagator {
@@ -24,7 +26,19 @@
workingMemory );
}
+
+
+ public void propagateAssertObject(final InternalFactHandle handle,
+ IUncertainDegree tDegree,
+ final PropagationContext context,
+ final InternalWorkingMemory workingMemory) {
+ this.sink.assertObject( handle,
+ tDegree,
+ context,
+ workingMemory );
+ }
+
public void propagateRetractObject(final InternalFactHandle handle,
final PropagationContext context,
final InternalWorkingMemory workingMemory,
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/SingleTupleSinkAdapter.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/SingleTupleSinkAdapter.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/SingleTupleSinkAdapter.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -4,6 +4,8 @@
import org.drools.common.InternalWorkingMemory;
import org.drools.spi.PropagationContext;
+import uncertainty.truthvals.IUncertainDegree;
+
public class SingleTupleSinkAdapter
implements
TupleSinkPropagator {
@@ -22,6 +24,17 @@
context,
workingMemory );
}
+
+ public void propagateAssertTuple(final ReteTuple tuple,
+ final InternalFactHandle handle,
+ IUncertainDegree tDegree,
+ final PropagationContext context,
+ final InternalWorkingMemory workingMemory) {
+ this.sink.assertTuple( new UncReteTuple( tuple,
+ handle, tDegree ),
+ context,
+ workingMemory );
+ }
public void propagateAssertTuple(final ReteTuple tuple,
final PropagationContext context,
@@ -52,10 +65,23 @@
public void createAndPropagateAssertTuple(final InternalFactHandle handle,
final PropagationContext context,
final InternalWorkingMemory workingMemory) {
+ System.out.println("SingleTupleSinkAdapter : create initial tuple from handle "+handle);
this.sink.assertTuple( new ReteTuple( handle ),
context,
workingMemory );
}
+
+
+ public void createAndPropagateAssertTuple(final InternalFactHandle handle,
+ IUncertainDegree tDegree,
+ final PropagationContext context,
+ final InternalWorkingMemory workingMemory) {
+
+ System.out.println("Uncertain SingleTupleSinkAdapter : create initial tuple from handle "+handle);
+ this.sink.assertTuple( new UncReteTuple( handle, tDegree ),
+ context,
+ workingMemory );
+ }
public void createAndPropagateRetractTuple(final InternalFactHandle handle,
final PropagationContext context,
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/TupleMemory.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/TupleMemory.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/TupleMemory.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -9,7 +9,7 @@
public Iterator iterator(InternalFactHandle handle);
- public void add(ReteTuple tuple);
+ public void add(ReteTuple tuple);
public ReteTuple remove(ReteTuple tuple);
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/TupleSinkPropagator.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/TupleSinkPropagator.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/TupleSinkPropagator.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -6,6 +6,8 @@
import org.drools.common.InternalWorkingMemory;
import org.drools.spi.PropagationContext;
+import uncertainty.truthvals.IUncertainDegree;
+
public interface TupleSinkPropagator
extends
Serializable {
@@ -13,6 +15,13 @@
InternalFactHandle handle,
PropagationContext context,
InternalWorkingMemory workingMemory);
+
+
+ public void propagateAssertTuple(ReteTuple tuple,
+ InternalFactHandle handle,
+ IUncertainDegree tDegree,
+ PropagationContext context,
+ InternalWorkingMemory workingMemory);
public void propagateAssertTuple(ReteTuple tuple,
PropagationContext context,
@@ -30,6 +39,11 @@
public void createAndPropagateAssertTuple(InternalFactHandle handle,
PropagationContext context,
InternalWorkingMemory workingMemory);
+
+ public void createAndPropagateAssertTuple(InternalFactHandle handle,
+ IUncertainDegree tDegree,
+ PropagationContext context,
+ InternalWorkingMemory workingMemory);
public void createAndPropagateRetractTuple(InternalFactHandle handle,
PropagationContext context,
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/AndConstraint.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/AndConstraint.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/AndConstraint.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -26,6 +26,9 @@
import org.drools.spi.BetaNodeFieldConstraint;
import org.drools.util.ArrayUtils;
+import uncertainty.truthvals.Degree;
+import uncertainty.truthvals.IUncertainDegree;
+
/**
* AND composite constraint, so the user can do things like:
*
@@ -129,6 +132,17 @@
return clone;
}
+
+ public IUncertainDegree matches(InternalFactHandle handle,
+ InternalWorkingMemory workingMemory) {
+ double eps = 1;
+ if ( this.alphaConstraints.length > 0 ) {
+ for ( int i = 0; i < this.alphaConstraints.length; i++ ) {
+ eps *= ((Degree) this.alphaConstraints[i].matches(handle, workingMemory)).getValue();
+ }
+ }
+ return new Degree(eps);
+ }
}
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/LiteralConstraint.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/LiteralConstraint.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/LiteralConstraint.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -23,6 +23,8 @@
import org.drools.spi.FieldExtractor;
import org.drools.spi.FieldValue;
+import uncertainty.truthvals.IUncertainDegree;
+
public class LiteralConstraint
implements
AlphaNodeFieldConstraint {
@@ -114,4 +116,11 @@
this.getEvaluator(),
this.getField() );
}
+
+ public IUncertainDegree matches(InternalFactHandle handle,
+ InternalWorkingMemory workingMemory) {
+ return this.restriction.matches( this.extractor,
+ handle,
+ workingMemory );
+ }
}
\ No newline at end of file
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -25,6 +25,8 @@
import org.drools.spi.FieldValue;
import org.drools.spi.Restriction;
+import uncertainty.truthvals.IUncertainDegree;
+
public class LiteralRestriction
implements
Restriction {
@@ -175,4 +177,12 @@
}
+ public IUncertainDegree matches(FieldExtractor extractor,
+ InternalFactHandle handle, InternalWorkingMemory workingMemory) {
+ return this.evaluator.evaluateUnc( null,
+ extractor,
+ handle.getObject(),
+ this.field );
+ }
+
}
\ No newline at end of file
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/MultiRestrictionFieldConstraint.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/MultiRestrictionFieldConstraint.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/MultiRestrictionFieldConstraint.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -8,6 +8,8 @@
import org.drools.spi.FieldExtractor;
import org.drools.spi.Restriction;
+import uncertainty.truthvals.IUncertainDegree;
+
public class MultiRestrictionFieldConstraint
implements
AlphaNodeFieldConstraint,
@@ -94,4 +96,9 @@
(Restriction) this.restrictions.clone() );
}
+ public IUncertainDegree matches(InternalFactHandle handle,
+ InternalWorkingMemory workingMemory) {
+ throw new UnsupportedOperationException("To be done...");
+ }
+
}
\ No newline at end of file
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/OrConstraint.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/OrConstraint.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/OrConstraint.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -25,6 +25,9 @@
import org.drools.spi.BetaNodeFieldConstraint;
import org.drools.util.ArrayUtils;
+import uncertainty.truthvals.Degree;
+import uncertainty.truthvals.IUncertainDegree;
+
/**
* A class to implement Multi-Field OR constraints, so user can do:
*
@@ -134,4 +137,20 @@
return clone;
}
+
+ public IUncertainDegree matches(InternalFactHandle handle,
+ InternalWorkingMemory workingMemory) {
+ if ( this.alphaConstraints.length > 0 ) {
+ double eps = 0;
+ for ( int i = 0; i < this.alphaConstraints.length; i++ ) {
+ double ei = ((Degree) this.alphaConstraints[i].matches( handle,
+ workingMemory )).getValue();
+ eps = eps + ei - eps*ei;
+ }
+ return new Degree(eps);
+ }
+ return new Degree(1);
+ }
+
+
}
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/PredicateConstraint.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/PredicateConstraint.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/PredicateConstraint.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -28,6 +28,8 @@
import org.drools.spi.PredicateExpression;
import org.drools.spi.Restriction;
+import uncertainty.truthvals.IUncertainDegree;
+
/**
* A predicate can be written as a top level constraint or be nested
* inside inside a field constraint (and as so, must implement the
@@ -325,4 +327,11 @@
}
}
+ public IUncertainDegree matches(InternalFactHandle handle,
+ InternalWorkingMemory workingMemory) {
+ throw new UnsupportedOperationException("Method not supported. Please contact development team.");
+ }
+
+
+
}
\ No newline at end of file
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/ReturnValueConstraint.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/ReturnValueConstraint.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/ReturnValueConstraint.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -27,6 +27,8 @@
import org.drools.spi.FieldExtractor;
import org.drools.spi.ReturnValueExpression;
+import uncertainty.truthvals.IUncertainDegree;
+
public class ReturnValueConstraint
implements
BetaNodeFieldConstraint,
@@ -143,4 +145,16 @@
return new ReturnValueConstraint( this.fieldExtractor, (ReturnValueRestriction) this.restriction.clone() );
}
+ public IUncertainDegree matches(final InternalFactHandle handle,
+ final InternalWorkingMemory workingMemory) {
+ try {
+ return this.restriction.matches( this.fieldExtractor,
+ handle,
+ null,
+ workingMemory );
+ } catch ( final Exception e ) {
+ throw new RuntimeDroolsException( "Exception executing ReturnValue constraint " + this.restriction + " : " + e.getMessage(),
+ e );
+ }
+}
}
\ No newline at end of file
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/ReturnValueRestriction.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/ReturnValueRestriction.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/ReturnValueRestriction.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -30,6 +30,8 @@
import org.drools.spi.ReturnValueExpression;
import org.drools.spi.Tuple;
+import uncertainty.truthvals.IUncertainDegree;
+
public class ReturnValueRestriction
implements
Restriction {
@@ -368,4 +370,10 @@
}
}
+ public IUncertainDegree matches(FieldExtractor fieldExtractor,
+ InternalFactHandle handle, Object object,
+ InternalWorkingMemory workingMemory) {
+ throw new UnsupportedOperationException( "does not support method call isAllowed(Object object, InternalWorkingMemory workingMemoiry)" );
+ }
+
}
\ No newline at end of file
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/VariableConstraint.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/VariableConstraint.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/VariableConstraint.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -24,6 +24,8 @@
import org.drools.spi.Evaluator;
import org.drools.spi.FieldExtractor;
+import uncertainty.truthvals.IUncertainDegree;
+
public class VariableConstraint
implements
AlphaNodeFieldConstraint,
@@ -120,5 +122,13 @@
return new VariableConstraint( this.fieldExtractor,
(VariableRestriction) this.restriction.clone() );
}
+
+
+ public IUncertainDegree matches(final InternalFactHandle handle,
+ final InternalWorkingMemory workingMemory) {
+ return this.restriction.matches( this.fieldExtractor,
+ handle,
+ workingMemory );
+ }
}
\ No newline at end of file
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/VariableRestriction.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/VariableRestriction.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/VariableRestriction.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -27,6 +27,8 @@
import org.drools.spi.FieldExtractor;
import org.drools.spi.Restriction;
+import uncertainty.truthvals.IUncertainDegree;
+
public class VariableRestriction
implements
Restriction {
@@ -449,4 +451,17 @@
}
}
}
+
+
+
+ public IUncertainDegree matches(final Extractor extractor,
+ final InternalFactHandle handle,
+ final InternalWorkingMemory workingMemory) {
+ return this.evaluator.evaluateUnc( workingMemory,
+ this.contextEntry.extractor,
+ this.evaluator.prepareObject( handle ),
+ this.contextEntry.declaration.getExtractor(),
+ this.evaluator.prepareObject( handle ) );
+ }
+
}
\ No newline at end of file
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/spi/AlphaNodeFieldConstraint.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/spi/AlphaNodeFieldConstraint.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/spi/AlphaNodeFieldConstraint.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -19,10 +19,15 @@
import org.drools.common.InternalFactHandle;
import org.drools.common.InternalWorkingMemory;
+import uncertainty.truthvals.IUncertainDegree;
+
public interface AlphaNodeFieldConstraint
extends
Constraint {
public boolean isAllowed(InternalFactHandle handle,
InternalWorkingMemory workingMemory);
+
+ public IUncertainDegree matches(InternalFactHandle handle,
+ InternalWorkingMemory workingMemory);
}
\ No newline at end of file
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/spi/Evaluator.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/spi/Evaluator.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/spi/Evaluator.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -24,6 +24,8 @@
import org.drools.common.InternalWorkingMemory;
import org.drools.rule.VariableRestriction.VariableContextEntry;
+import uncertainty.truthvals.IUncertainDegree;
+
/**
* A public interface to be implemented by all evaluators
*/
@@ -101,4 +103,25 @@
VariableContextEntry context,
Object object2);
+
+ public IUncertainDegree evaluateUnc(InternalWorkingMemory workingMemory,
+ Extractor extractor,
+ Object object1,
+ FieldValue value);
+
+ public IUncertainDegree evaluateUnc(InternalWorkingMemory workingMemory,
+ Extractor leftExtractor,
+ Object left,
+ Extractor rightExtractor,
+ Object right);
+
+ public IUncertainDegree evaluateCachedLeftUnc(InternalWorkingMemory workingMemory,
+ VariableContextEntry context,
+ Object object1);
+
+ public IUncertainDegree evaluateCachedRightUnc(InternalWorkingMemory workingMemory,
+ VariableContextEntry context,
+ Object object2);
+
+
}
\ No newline at end of file
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/spi/ObjectType.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/spi/ObjectType.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/spi/ObjectType.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -20,6 +20,8 @@
import org.drools.base.ValueType;
+import uncertainty.truthvals.IUncertainDegree;
+
/**
* Semantic object type differentiator.
*
@@ -46,7 +48,18 @@
boolean isAssignableFrom(ObjectType objectType);
+
/**
+ * The method tests for (onto)logical compatibility
+ * between a given type and this type.
+ * @author Sotty
+ *
+ *
+ */
+ IUncertainDegree isCompatibleWith(Object object);
+
+
+ /**
* Returns true if the object type represented by this object
* is an event object type. False otherwise.
* @return
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/spi/Restriction.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/spi/Restriction.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/spi/Restriction.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -8,6 +8,8 @@
import org.drools.rule.ContextEntry;
import org.drools.rule.Declaration;
+import uncertainty.truthvals.IUncertainDegree;
+
public interface Restriction
extends
Serializable,
@@ -38,4 +40,6 @@
public Object clone();
+
+
}
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/util/AbstractHashTable.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/util/AbstractHashTable.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/util/AbstractHashTable.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -11,6 +11,8 @@
import org.drools.spi.Evaluator;
import org.drools.spi.FieldExtractor;
+import uncertainty.truthvals.IUncertainDegree;
+
public abstract class AbstractHashTable
implements
Serializable {
@@ -358,6 +360,8 @@
public int hashCode;
public Entry next;
+
+ protected IUncertainDegree degree;
// private LinkedList list;
@@ -377,6 +381,14 @@
public InternalFactHandle getFactHandle() {
return this.handle;
}
+
+ public IUncertainDegree getDegree() {
+ return degree;
+ }
+
+ public void setDegree(IUncertainDegree deg) {
+ degree = deg;
+ }
public Entry getNext() {
return this.next;
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/util/FactHandleIndexHashTable.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/util/FactHandleIndexHashTable.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/util/FactHandleIndexHashTable.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -8,6 +8,8 @@
import org.drools.reteoo.ReteTuple;
import org.drools.util.TupleIndexHashTable.FieldIndexEntry;
+import uncertainty.truthvals.IUncertainDegree;
+
public class FactHandleIndexHashTable extends AbstractHashTable
implements
FactHandleMemory {
@@ -363,4 +365,45 @@
return "FieldIndexEntry( hashCode=" + this.hashCode + " first=" + this.first + " )";
}
}
+
+ public IUncertainDegree getUncDeg(InternalFactHandle handle) {
+ final Object object = handle.getObject();
+ //this.index.setCachedValue( object );
+
+ final int hashCode = this.index.hashCodeOf( object );
+
+ final int index = indexOf( hashCode,
+ this.table.length );
+
+ FieldIndexEntry current = (FieldIndexEntry) this.table[index];
+ while ( current != null ) {
+ if ( current.matches( object,
+ hashCode ) ) {
+ return current.first.getDegree();
+ }
+ current = (FieldIndexEntry) current.next;
+ }
+ return null;
+ }
+
+ public void setUncDeg(InternalFactHandle handle, IUncertainDegree degree) {
+ final Object object = handle.getObject();
+ //this.index.setCachedValue( object );
+
+ final int hashCode = this.index.hashCodeOf( object );
+
+ final int index = indexOf( hashCode,
+ this.table.length );
+
+ FieldIndexEntry current = (FieldIndexEntry) this.table[index];
+ while ( current != null ) {
+ if ( current.matches( object,
+ hashCode ) ) {
+ current.first.setDegree(degree);
+ return;
+ }
+ current = (FieldIndexEntry) current.next;
+ }
+
+ }
}
\ No newline at end of file
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/util/FactHashTable.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/util/FactHashTable.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/util/FactHashTable.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -7,6 +7,8 @@
import org.drools.reteoo.FactHandleMemory;
import org.drools.reteoo.ReteTuple;
+import uncertainty.truthvals.IUncertainDegree;
+
public class FactHashTable extends AbstractHashTable
implements
FactHandleMemory {
@@ -112,4 +114,35 @@
public boolean isIndexed() {
return false;
}
+
+ public IUncertainDegree getUncDeg(InternalFactHandle handle) {
+ final int hashCode = this.comparator.hashCodeOf( handle );
+ final int index = indexOf( hashCode,
+ this.table.length );
+
+ FactEntryImpl current = (FactEntryImpl) this.table[index];
+ while ( current != null ) {
+ if ( hashCode == current.hashCode && handle.getId() == current.handle.getId() ) {
+ return current.getDegree();
+ }
+ current = (FactEntryImpl) current.getNext();
+ }
+ return null;
+ }
+
+ public void setUncDeg(InternalFactHandle handle, IUncertainDegree degree) {
+ final int hashCode = this.comparator.hashCodeOf( handle );
+ final int index = indexOf( hashCode,
+ this.table.length );
+
+ FactEntryImpl current = (FactEntryImpl) this.table[index];
+ while ( current != null ) {
+ if ( hashCode == current.hashCode && handle.getId() == current.handle.getId() ) {
+ current.setDegree(degree);
+ return;
+ }
+ current = (FactEntryImpl) current.getNext();
+ }
+
+ }
}
\ No newline at end of file
Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/util/FactList.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/util/FactList.java 2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/util/FactList.java 2008-02-29 00:12:56 UTC (rev 18625)
@@ -9,6 +9,8 @@
import org.drools.reteoo.FactHandleMemory;
import org.drools.reteoo.ReteTuple;
+import uncertainty.truthvals.IUncertainDegree;
+
public class FactList
implements
FactHandleMemory {
@@ -56,6 +58,37 @@
return false;
}
+ public IUncertainDegree getUncDeg(InternalFactHandle handle) {
+ Iterator it = this.list.iterator();
+ for ( Object object = it.next(); object != null; object = it.next() ) {
+ if (object instanceof FactEntryImpl) {
+ FactEntryImpl fei = (FactEntryImpl) object;
+ if (handle.equals(fei.getObject())) {
+ return fei.getDegree();
+ }
+ }
+ }
+ return null;
+ }
+
+
+
+ public void setUncDeg(InternalFactHandle handle, IUncertainDegree degree) {
+ Iterator it = this.list.iterator();
+ for ( Object object = it.next(); object != null; object = it.next() ) {
+ if (object instanceof FactEntryImpl) {
+ FactEntryImpl fei = (FactEntryImpl) object;
+ if (handle.equals(fei.getObject())) {
+ fei.setDegree(degree);
+ }
+ }
+ }
+ }
+
+
+
+
+
public Iterator iterator() {
return this.list.iterator();
}
@@ -68,7 +101,17 @@
return false;
}
- public static class FactEntryImpl extends LinkedListEntry implements FactEntry, Serializable {
+
+
+
+ public static class FactEntryImpl extends LinkedListEntry implements FactEntry, Serializable {
+
+ IUncertainDegree degree;
+
+ public IUncertainDegree getDegree() { return degree; }
+
+ public void setDegree(IUncertainDegree deg) { degree = deg; }
+
public FactEntryImpl(InternalFactHandle handle) {
super(handle);
}
@@ -78,4 +121,9 @@
}
}
+
+
+
+
+
}
\ No newline at end of file
More information about the jboss-svn-commits
mailing list