[jboss-svn-commits] JBL Code SVN: r22366 - Test/src/evaluators and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Sep 3 21:57:21 EDT 2008


Author: dsotty
Date: 2008-09-03 21:57:21 -0400 (Wed, 03 Sep 2008)
New Revision: 22366

Added:
   labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/evaluators/IDynamicEvaluable.java
   labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/evaluators/LateDenEvaluator.java
   labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/evaluators/LateDenEvaluatorDefinition.java
Modified:
   labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/evaluators/FuzzyNumericEvaluator.java
   labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/evaluators/SeemsEvaluator.java
Log:
New branch for uncertainty support in 5.x

Modified: labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/evaluators/FuzzyNumericEvaluator.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/evaluators/FuzzyNumericEvaluator.java	2008-09-04 01:56:53 UTC (rev 22365)
+++ labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/evaluators/FuzzyNumericEvaluator.java	2008-09-04 01:57:21 UTC (rev 22366)
@@ -77,11 +77,13 @@
     }
     
     
+    public String toString() {
+    	return "FuzzyNumericEvaluator - " + getOperator().getOperatorString(); 
+    }
     
     
     
     
-    
     public IUncertainDegree evaluateUncertain(WorkingMemory workingMemory,
 			InternalReadAccessor extractor, Object object1, FieldValue value) {
 		

Added: labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/evaluators/IDynamicEvaluable.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/evaluators/IDynamicEvaluable.java	                        (rev 0)
+++ labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/evaluators/IDynamicEvaluable.java	2008-09-04 01:57:21 UTC (rev 22366)
@@ -0,0 +1,9 @@
+package evaluators;
+
+import org.drools.spi.Evaluator;
+
+public interface IDynamicEvaluable {
+	
+	public Evaluator getPred(String opId);
+
+}

Added: labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/evaluators/LateDenEvaluator.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/evaluators/LateDenEvaluator.java	                        (rev 0)
+++ labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/evaluators/LateDenEvaluator.java	2008-09-04 01:57:21 UTC (rev 22366)
@@ -0,0 +1,240 @@
+package evaluators;
+
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.lang.reflect.InvocationTargetException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.StringTokenizer;
+
+
+import org.drools.IUncertainRuleBase;
+import org.drools.RuntimeDroolsException;
+import org.drools.WorkingMemory;
+import org.drools.base.BaseUncertainEvaluator;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.Operator;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.rule.VariableRestriction.VariableContextEntry;
+import org.drools.spi.FieldValue;
+import org.drools.spi.IUncertainEvaluator;
+import org.drools.spi.InternalReadAccessor;
+
+import data.Sample2;
+
+import evaluators.membership.IMembershipFunction;
+import evaluators.membership.INumericSetMembershipFunction;
+import evaluators.membership.Radial2DMembershipFunction;
+import evaluators.membership.TriangleMembership;
+
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.Essence;
+import uncertainty.truthvals.IUncertainDegree;
+
+
+
+
+public class LateDenEvaluator extends BaseUncertainEvaluator implements IUncertainEvaluator {
+	
+
+	
+	private Map<Double,Double> mu = new HashMap<Double, Double>();
+	private Map<Double,Double> sigma = new HashMap<Double, Double>();
+	
+	private boolean isNegated;
+
+
+	public LateDenEvaluator(Operator op, final ValueType type,
+            				final boolean isNegated,
+            				final String parameters) {
+			super( type , op);
+			this.isNegated = isNegated;
+			
+          
+            try {
+				BufferedReader rdr = new BufferedReader(new FileReader("src/fuzzy/tDenPredictor.csv"));
+				String line = rdr.readLine();
+				while (line != null) {
+					StringTokenizer tok = new StringTokenizer(line,", ");
+					
+					Double time = Double.parseDouble(tok.nextToken()) / 90;
+					tok.nextToken();
+					Double avg = Double.parseDouble(tok.nextToken()) / 90;
+					tok.nextToken();
+					Double sig = Double.parseDouble(tok.nextToken()) / 90;
+					
+					mu.put(time,avg);
+					sigma.put(time,sig);
+					
+					line = rdr.readLine();
+				}
+			} catch (FileNotFoundException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			} catch (IOException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+            
+            
+	}
+	
+	
+	
+	public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        super.readExternal(in);   
+       
+        isNegated = in.readBoolean();
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+        super.writeExternal(out);
+      
+        out.writeBoolean(isNegated);
+    }
+	
+	
+   
+    protected IUncertainDegree eval(Sample2 samp, int klass, WorkingMemory workingMemory) {
+    	if (! (workingMemory.getRuleBase() instanceof IUncertainRuleBase)) {
+			throw new RuntimeDroolsException("Fuzzy Evaluator : Uncertainty has not been enabled in the current Rule Base");
+		}
+		IDegreeFactory factory = ((IUncertainRuleBase) workingMemory.getRuleBase()).getTruthFactory();
+		
+		
+		System.out.println("trying to get for time" + samp.getX());
+		
+		Double timeKey = samp.getX();
+		Double avg = mu.get(timeKey / 90);
+		Double sig = sigma.get(timeKey / 90);
+		
+		if (avg == null || sig == null) 
+			return factory.Unknown();
+		
+		int tau = Math.min(Essence.DEF_N-1,(int) Math.round(10*(avg -2*sig)));
+		int eps = Math.min(Essence.DEF_N-1,(int) Math.round(10*(avg)));
+		int fi = Math.min(Essence.DEF_N-1,(int) Math.round(10*(avg +2*sig)));
+		
+		double[] obs = new double[Essence.DEF_N];
+		double[] prior = new double[Essence.DEF_N];
+
+		double acc = 0;		
+		int ext = fi - tau +1;
+		double slope = 2.0 / ext;
+
+		for (int j = tau; j <= fi; j++) {
+			int d = (int) Math.abs(j - eps);
+			obs[j] = 1 - d*slope;
+			acc += obs[j];
+		}
+		
+		for (int j =  0; j < Essence.DEF_N; j++) {
+			obs[j] /=  acc;			
+			prior[j] = 1.0/Essence.DEF_N;
+		}
+		
+		
+//		System.out.println("In bounds "+ tau+ " "+ fi);
+		
+		
+		
+		return new Essence(1e-6,prior,obs,Double.POSITIVE_INFINITY,Essence.L20_BOUNDS);
+		
+		
+    }
+    
+    
+    
+    
+    
+    
+    
+    public IUncertainDegree evaluateUncertain(WorkingMemory workingMemory,
+			InternalReadAccessor extractor, Object object1, FieldValue value) {
+				    	    
+    	return eval((Sample2) object1, value.getIntValue(), workingMemory);
+    	
+		
+	}
+    
+	public boolean evaluate(InternalWorkingMemory workingMemory,
+			InternalReadAccessor extractor, Object object1, FieldValue value) {			
+		return evaluateUncertain(workingMemory, extractor, object1, value).toBoolean();
+	}
+
+	
+	public IUncertainDegree evaluateUncertain(WorkingMemory workingMemory,
+			InternalReadAccessor leftExtractor, Object left,
+			InternalReadAccessor rightExtractor, Object right) {
+		throw new RuntimeDroolsException("Fuzzy Numeric Evaluator : Unary op ");
+	}
+	
+	public boolean evaluate(InternalWorkingMemory workingMemory,
+			InternalReadAccessor leftExtractor, Object left,
+			InternalReadAccessor rightExtractor, Object right) {
+		throw new RuntimeDroolsException("Fuzzy Numeric Evaluator : Unary op ");
+	}
+
+	
+	public IUncertainDegree evaluateUncertainCachedLeft(WorkingMemory workingMemory,
+			VariableContextEntry context, Object object1) {
+		throw new RuntimeDroolsException("Fuzzy Numeric Evaluator : Unary op ");	
+	}
+	public boolean evaluateCachedLeft(InternalWorkingMemory workingMemory,
+			VariableContextEntry context, Object object1) {
+		return evaluateUncertainCachedLeft(workingMemory,context,object1).toBoolean();
+	}
+
+	
+	public IUncertainDegree evaluateUncertainCachedRight(WorkingMemory workingMemory,
+			VariableContextEntry context, Object class1object2) {
+		throw new RuntimeDroolsException("Fuzzy Numeric Evaluator : Unary op ");
+	}
+	public boolean evaluateCachedRight(InternalWorkingMemory workingMemory,
+			VariableContextEntry context, Object object2) {
+		return evaluateUncertainCachedRight(workingMemory, context, object2).toBoolean();
+	}
+	
+	
+	
+	
+	
+	@Override
+    public int hashCode() {
+        final int PRIME = 37;
+        int result = PRIME * super.hashCode();                    
+        return result;
+    }
+	
+	
+    /* (non-Javadoc)
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
+    @Override
+    public boolean equals(Object obj) {
+        if ( this == obj ) return true;
+        if ( !super.equals( obj ) ) return false;
+        if ( getClass() != obj.getClass() ) return false;  
+        return true;
+    }
+
+    /**
+     * This methods tries to parse the string of parameters to customize
+     * the evaluator.
+     *
+     * @param parameters
+     */
+    private void parseParameters(String parameters) {
+    	
+        
+    }
+
+}
+	
+	
\ No newline at end of file

Added: labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/evaluators/LateDenEvaluatorDefinition.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/evaluators/LateDenEvaluatorDefinition.java	                        (rev 0)
+++ labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/evaluators/LateDenEvaluatorDefinition.java	2008-09-04 01:57:21 UTC (rev 22366)
@@ -0,0 +1,90 @@
+package evaluators;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.IUncertainUnaryEvaluatorDefinition;
+import org.drools.base.evaluators.Operator;
+import org.drools.spi.Evaluator;
+
+import fuzzy.domains.HumidityDomain;
+import fuzzy.domains.IDomainPartition;
+
+public class LateDenEvaluatorDefinition implements
+		IUncertainUnaryEvaluatorDefinition {
+
+	
+	
+	public static final String LATEDEN = "lateDen";
+			
+	public static final Operator   lateDenOp     = Operator.addOperatorToRegistry( LATEDEN,false );
+	
+	
+	protected static String[]  SUPPORTED_IDS	= { lateDenOp.getOperatorString()								 													 
+													};
+	
+	
+	
+	
+			
+	public Evaluator getEvaluator(ValueType type, String operatorId,
+			boolean isNegated, String parameterText) {
+		return new LateDenEvaluator(lateDenOp, type, isNegated, parameterText);
+						       
+	}
+
+	
+	
+	public Evaluator getEvaluator(ValueType type, Operator operator,
+			String parameterText) {
+		return getEvaluator(type,operator.getOperatorString(),false,parameterText);
+	}
+
+	public Evaluator getEvaluator(ValueType type, Operator operator) {
+		return getEvaluator(type,operator.getOperatorString(),false,"");
+	}
+	
+	
+	
+	
+	
+
+	public String[] getEvaluatorIds() {
+		return SUPPORTED_IDS;
+	}
+	
+
+	
+	public boolean isNegatable() {
+		return false;
+	}
+
+	@Override
+	public boolean operatesOnFactHandles() {
+		return false;
+	}
+
+	
+	
+	public boolean supportsType(ValueType type) {
+		return false;
+	}
+
+
+
+	@Override
+	public void readExternal(ObjectInput in) throws IOException,
+			ClassNotFoundException {				
+	}
+
+
+
+	@Override
+	public void writeExternal(ObjectOutput out) throws IOException {				
+	}
+
+	
+
+}

Modified: labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/evaluators/SeemsEvaluator.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/evaluators/SeemsEvaluator.java	2008-09-04 01:56:53 UTC (rev 22365)
+++ labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/evaluators/SeemsEvaluator.java	2008-09-04 01:57:21 UTC (rev 22366)
@@ -101,7 +101,9 @@
 		
 		
 		Object set = rightExtractor.getValue(right);
-		
+			if (set == null) {
+				return ((IUncertainRuleBase) workingMemory.getRuleBase()).getTruthFactory().Unknown();
+			}
 		return ((IUncertainEvaluator) set).evaluateUncertain(workingMemory, leftExtractor, left, new LongFieldImpl(1));
 								
 	}




More information about the jboss-svn-commits mailing list