[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