[jboss-svn-commits] JBL Code SVN: r21941 - in labs/jbossrules/branches/uncDrools5x/LogicSOM/src: data and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Aug 27 18:03:51 EDT 2008


Author: dsotty
Date: 2008-08-27 18:03:51 -0400 (Wed, 27 Aug 2008)
New Revision: 21941

Added:
   labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/Charge.java
   labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/HotSpot.java
   labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/Lure.java
   labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/Recall.java
   labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/Train.java
   labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/Update.java
   labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/Winner.java
   labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/Young.java
   labs/jbossrules/branches/uncDrools5x/LogicSOM/src/evaluators/FarEvaluatorDefinition.java
   labs/jbossrules/branches/uncDrools5x/LogicSOM/src/evaluators/YoungEvaluatorDefinition.java
Modified:
   labs/jbossrules/branches/uncDrools5x/LogicSOM/src/DroolSOM.java
   labs/jbossrules/branches/uncDrools5x/LogicSOM/src/LogicSOM08.java
   labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/Acknowledge.java
   labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/Neuron.java
   labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/Sample.java
   labs/jbossrules/branches/uncDrools5x/LogicSOM/src/som.packagebuilder.conf
Log:
New branch for uncertainty support in 5.x

Modified: labs/jbossrules/branches/uncDrools5x/LogicSOM/src/DroolSOM.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/LogicSOM/src/DroolSOM.java	2008-08-27 22:03:20 UTC (rev 21940)
+++ labs/jbossrules/branches/uncDrools5x/LogicSOM/src/DroolSOM.java	2008-08-27 22:03:51 UTC (rev 21941)
@@ -5,11 +5,15 @@
 import java.awt.event.KeyEvent;
 import java.awt.event.WindowAdapter;
 import java.awt.event.WindowEvent;
+import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
 import java.io.FileWriter;
 import java.io.IOException;
 import java.io.InputStreamReader;
+import java.io.PrintStream;
 import java.io.PrintWriter;
 import java.io.Reader;
 import java.util.ArrayList;
@@ -17,6 +21,7 @@
 import java.util.Iterator;
 import java.util.Properties;
 import java.util.Vector;
+import java.util.logging.Logger;
 
 import javax.swing.JFrame;
 import javax.swing.JPanel;
@@ -52,9 +57,12 @@
 import org.drools.spi.Constraint;
 import org.drools.spi.FalseAgendaFilter;
 
+import data.Charge;
 import data.Neuron;
 import data.Point2Dim;
 import data.Sample;
+import data.Train;
+import data.Update;
 
 import uncertainty.factory.IDegreeFactory;
 import uncertainty.truthvals.Essence;
@@ -121,6 +129,13 @@
 	    public DroolSOM() {
 	    	
 	    	try {
+				System.setOut(new PrintStream("logStream.txt"));
+			} catch (FileNotFoundException e1) {
+				// TODO Auto-generated catch block
+				e1.printStackTrace();
+			}
+	    	
+	    	try {
 	    		initDrools();
 	    	} catch (Exception e) {
 	    		System.out.println("Unable to start the rule engine : " + e.toString());
@@ -164,6 +179,7 @@
 	                public void windowClosing(WindowEvent e) {
 	                	m.logger.flush();
 	                	m.logger.close();
+	                	m.analyzeLogger();	                	
 	                	System.exit(0); 
 	                	}
 	            });
@@ -182,7 +198,12 @@
 
 	    }
 	    
-	    public void display() {                        
+	    
+
+
+
+
+		public void display() {                        
 	        setSize(800,800);                        
 	        setVisible(true);
 	        repaint();
@@ -289,18 +310,28 @@
 		 * @param t			epoch
 		 */
 		private void train(int x, int t) {
-			Point2Dim trainPoint = new Sample(data[0][x],data[1][x]);
+			Point2Dim trainPoint = new Sample(data[0][x],data[1][x],t);
 				System.out.println("Chosen "+trainPoint);
 			FactHandle trainPointHandle = session.insert(trainPoint, null);
 			
 			
-			session.fireAllRules(new FalseAgendaFilter());
+//			session.fireAllRules(new FalseAgendaFilter());
+			session.fireAllRules();
 			
 			
-			FactHandle trainToken = session.insert(new Train(), null);
-			session.fireAllRules(new FalseAgendaFilter());
+			FactHandle chargeToken = session.insert(new Charge(), null);
+//			session.fireAllRules(new FalseAgendaFilter());
+			session.fireAllRules();
 			
+			
+				FactHandle trainToken = session.insert(new Train(), null);
+			session.fireAllRules();
+			
+			
+			
+		
 			session.retract(trainToken);
+			session.retract(chargeToken);
 			session.retract(trainPointHandle);
 			
 			
@@ -402,12 +433,48 @@
 	}
 	
 	
+	protected void analyzeLogger() {
+		try {
+			BufferedReader reader = new BufferedReader(new FileReader("logSOM.txt"));
+			int actC = 0;
+			int missC = 0;
+			int hotC = 0;
+			String msg;
+			
+			String line = reader.readLine();
+			while (line != null) {
+				if (line.startsWith("HotSpot" )) {
+					hotC++;
+				}
+				
+				if (line.startsWith("Activation")) {
+					actC++;
+					msg = line;
+					line = reader.readLine();
+					if (! line.startsWith("Neuron")) {
+						missC++;
+						System.err.println(msg);
+					}
+				} else {				
+					line = reader.readLine();
+				}
+			}
+			
+			reader.close();
+			
+			System.err.println(actC);
+			System.err.println(hotC);
+			System.err.println(missC);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		
+	}
 	
 	
 	
 	
 	
-	
 
 
 }

Modified: labs/jbossrules/branches/uncDrools5x/LogicSOM/src/LogicSOM08.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/LogicSOM/src/LogicSOM08.java	2008-08-27 22:03:20 UTC (rev 21940)
+++ labs/jbossrules/branches/uncDrools5x/LogicSOM/src/LogicSOM08.java	2008-08-27 22:03:51 UTC (rev 21941)
@@ -23,11 +23,11 @@
 import uncertainty.predicates.IUncertainPredicate;
 import uncertainty.truthvals.Essence;
 import uncertainty.truthvals.IUncertainDegree;
-import uncertainty.truthvals.operators.ModusPonensOp;
 import uncertainty.truthvals.operators.NegOp;
 import uncertainty.truthvals.operators.Lukas.DotAnd;
 import uncertainty.truthvals.operators.Lukas.Equiv;
 import uncertainty.truthvals.operators.Lukas.LukasAnd;
+import uncertainty.truthvals.operators.Lukas.LukasModusPonensOp;
 import uncertainty.truthvals.operators.Lukas.LukasNeg;
 import uncertainty.truthvals.operators.Lukas.LukasOr;
 import uncertainty.truthvals.operators.Lukas.MaxOr;
@@ -44,7 +44,7 @@
     public final int S = 250;
     public final int N = 10;
     public final double T = 0.025;
-    public final int rounds = 10;
+    public final int rounds = 1;
     
     int x, winIdx;
     
@@ -207,7 +207,7 @@
                 args[0] = prem;
                 args[1] = conc;
             BRPLOperator implic = new BRPLOperator("testMP",args,filter);
-                ModusPonensOp mop = new ModusPonensOp(implic,new TauPignisticStrategy(),new DempsterShaferAggStrat());         
+                LukasModusPonensOp mop = new LukasModusPonensOp(implic,new TauPignisticStrategy(),new DempsterShaferAggStrat());         
                 mop.updateConclusion();
                 
                 posit[j] = (Essence) conc.getDegree();
@@ -215,7 +215,7 @@
                 args[0] = nprem;
                 args[1] = nconc;
             implic = new BRPLOperator("testMP",args,filter);
-                mop = new ModusPonensOp(implic,new TauPignisticStrategy(),new DempsterShaferAggStrat());         
+                mop = new LukasModusPonensOp(implic,new TauPignisticStrategy(),new DempsterShaferAggStrat());         
                 mop.updateConclusion();
                                 
                 posit2[j] = (Essence) nconc.getDegree();

Modified: labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/Acknowledge.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/Acknowledge.java	2008-08-27 22:03:20 UTC (rev 21940)
+++ labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/Acknowledge.java	2008-08-27 22:03:51 UTC (rev 21941)
@@ -2,32 +2,8 @@
 
 public class Acknowledge {
 	
-	
-	private Neuron n;
-	
-	private Sample s;
-
-	public void setNeuron(Neuron n) {
-		this.n = n;
+	public Acknowledge() {
+		
 	}
 
-	public Neuron getNeuron() {
-		return n;
-	}
-
-	public void setSample(Sample s) {
-		this.s = s;
-	}
-
-	public Sample getSample() {
-		return s;
-	}
-	
-	public Acknowledge(Neuron n, Sample s) {
-		this.n = n;
-		this.s = s;
-	}
-	
-	
-
 }

Added: labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/Charge.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/Charge.java	                        (rev 0)
+++ labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/Charge.java	2008-08-27 22:03:51 UTC (rev 21941)
@@ -0,0 +1,5 @@
+package data;
+
+public class Charge {
+
+}

Added: labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/HotSpot.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/HotSpot.java	                        (rev 0)
+++ labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/HotSpot.java	2008-08-27 22:03:51 UTC (rev 21941)
@@ -0,0 +1,13 @@
+package data;
+
+public class HotSpot {
+	
+	
+	protected Double position = null;
+	
+	public Double getPosition() {
+		return position;
+	}
+		
+
+}

Added: labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/Lure.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/Lure.java	                        (rev 0)
+++ labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/Lure.java	2008-08-27 22:03:51 UTC (rev 21941)
@@ -0,0 +1,18 @@
+package data;
+
+public class Lure {
+
+	private Neuron n;
+	
+	public Neuron getNeuron() { return n; }
+	
+	public Lure(Neuron n) {
+		this.n = n;
+	}
+	
+	public int getId() {
+		return n.getId();
+	}
+	
+	
+}

Modified: labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/Neuron.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/Neuron.java	2008-08-27 22:03:20 UTC (rev 21940)
+++ labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/Neuron.java	2008-08-27 22:03:51 UTC (rev 21941)
@@ -10,6 +10,7 @@
 public class Neuron extends Point2Dim {
 
 	private int id;
+	private double eta = 1;
 
 
 	/**
@@ -23,8 +24,8 @@
 	}
 	
 	public void moveTo(Point2Dim tgt, double alfa) {
-		setX(this.getX() + alfa*(tgt.getX()-this.getX()));
-		setY(this.getY() + alfa*(tgt.getY()-this.getY()));
+		setX(this.getX() + eta *alfa*(tgt.getX()-this.getX()));
+		setY(this.getY() + eta*alfa*(tgt.getY()-this.getY()));
 	}
 	
 	

Added: labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/Recall.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/Recall.java	                        (rev 0)
+++ labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/Recall.java	2008-08-27 22:03:51 UTC (rev 21941)
@@ -0,0 +1,55 @@
+package data;
+
+import uncertainty.predicates.IInducible;
+import uncertainty.truthvals.IUncertainDegree;
+
+public class Recall implements IInducible 
+{
+	
+	
+	private Neuron n;
+	
+	private Sample s;
+
+	public void setNeuron(Neuron n) {
+		this.n = n;
+	}
+
+	public Neuron getNeuron() {
+		return n;
+	}
+
+	public void setSample(Sample s) {
+		this.s = s;
+	}
+
+	public Sample getSample() {
+		return s;
+	}
+	
+	public Recall(Neuron n, Sample s) {
+		this.n = n;
+		this.s = s;
+	}
+	
+	public Recall(Neuron n, Sample s, IUncertainDegree weight) {
+		this.n = n;
+		this.s = s;
+		this.weight = weight;
+	}
+
+	
+	private IUncertainDegree weight;
+	
+	public void setWeight(IUncertainDegree w) {
+		weight = w;
+	}
+	
+	@Override
+	public IUncertainDegree getWeight() {
+		return weight;
+	}
+	
+	
+
+}

Modified: labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/Sample.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/Sample.java	2008-08-27 22:03:20 UTC (rev 21940)
+++ labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/Sample.java	2008-08-27 22:03:51 UTC (rev 21941)
@@ -8,14 +8,26 @@
  *
  */
 public class Sample extends Point2Dim {
+	
+	private Integer epoch;
 
 	/**
 	 * @param x
 	 * @param y
 	 */
-	public Sample(Double x, Double y) {
+	public Sample(Double x, Double y, int t) {
 		super(x, y);
-		// TODO Auto-generated constructor stub
+		
+		setEpoch(t);
+		
 	}
 
+	public void setEpoch(int epoch) {
+		this.epoch = epoch;
+	}
+
+	public Integer getEpoch() {
+		return epoch;
+	}
+
 }

Added: labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/Train.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/Train.java	                        (rev 0)
+++ labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/Train.java	2008-08-27 22:03:51 UTC (rev 21941)
@@ -0,0 +1,11 @@
+package data;
+
+import uncertainty.predicates.IInducible;
+import uncertainty.predicates.IInductor;
+
+public class Train implements IInductor 
+{
+
+	
+	
+}

Added: labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/Update.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/Update.java	                        (rev 0)
+++ labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/Update.java	2008-08-27 22:03:51 UTC (rev 21941)
@@ -0,0 +1,10 @@
+package data;
+
+import uncertainty.predicates.IInducible;
+
+public class Update //implements IInducible 
+{
+
+	
+	
+}

Added: labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/Winner.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/Winner.java	                        (rev 0)
+++ labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/Winner.java	2008-08-27 22:03:51 UTC (rev 21941)
@@ -0,0 +1,47 @@
+package data;
+
+import uncertainty.predicates.IInducible;
+import uncertainty.truthvals.IUncertainDegree;
+
+public class Winner implements IInducible 
+{
+	
+	private IUncertainDegree w;
+	
+	public IUncertainDegree getWeight() {
+		return w;
+	}
+	
+	public void setWeight(IUncertainDegree w) {
+		this.w = w;
+	}
+	
+	
+	
+	private Neuron n;
+	
+	public void setNeuron(Neuron n) {
+		this.n = n;
+	}
+
+	public Neuron getNeuron() {
+		return n;
+	}
+
+		
+	public Winner(Neuron n) {
+		this.n = n;		
+	}
+	
+	public Winner(Neuron n, IUncertainDegree weight) {
+		this.n = n;		
+		this.w = weight;		
+	}
+	
+	public Integer getId() {
+		return n.getId();
+	}
+	
+	
+
+}

Added: labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/Young.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/Young.java	                        (rev 0)
+++ labs/jbossrules/branches/uncDrools5x/LogicSOM/src/data/Young.java	2008-08-27 22:03:51 UTC (rev 21941)
@@ -0,0 +1,5 @@
+package data;
+
+public class Young {
+
+}

Added: labs/jbossrules/branches/uncDrools5x/LogicSOM/src/evaluators/FarEvaluatorDefinition.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/LogicSOM/src/evaluators/FarEvaluatorDefinition.java	                        (rev 0)
+++ labs/jbossrules/branches/uncDrools5x/LogicSOM/src/evaluators/FarEvaluatorDefinition.java	2008-08-27 22:03:51 UTC (rev 21941)
@@ -0,0 +1,435 @@
+package evaluators;
+
+import uncertainty.factory.IDegreeFactory;
+
+
+import java.awt.geom.Point2D;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.drools.IUncertainRuleBase;
+import org.drools.RuntimeDroolsException;
+import org.drools.WorkingMemory;
+import org.drools.base.BaseEvaluator;
+import org.drools.base.BaseUncertainEvaluator;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.IUncertainBinaryEvaluatorDefinition;
+import org.drools.base.evaluators.Operator;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.rule.VariableRestriction.ObjectVariableContextEntry;
+import org.drools.rule.VariableRestriction.VariableContextEntry;
+import org.drools.spi.Evaluator;
+import org.drools.spi.FieldValue;
+import org.drools.spi.IUncertainEvaluator;
+import org.drools.spi.InternalReadAccessor;
+
+import data.Point2Dim;
+
+import uncertainty.truthvals.IUncertainDegree;
+
+
+
+
+/**
+ * 
+ * @author sotty
+
+ *
+ */
+public class FarEvaluatorDefinition implements IUncertainBinaryEvaluatorDefinition {
+	
+	
+	
+	public class FarEvaluator extends BaseUncertainEvaluator implements IUncertainEvaluator {
+		
+		private Double              range;
+
+	
+		public FarEvaluator(final ValueType type,
+                				final boolean isNegated,
+                				final String parameters) {
+				super( type,
+	                   isNegated ? NOT_FAR : FAR );
+	            this.parseParameters( parameters );	        
+		}
+		
+		public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+            super.readExternal(in);
+
+            range = in.readDouble();
+        }
+
+        public void writeExternal(ObjectOutput out) throws IOException {
+            super.writeExternal(out);
+            out.writeDouble(range);
+        }
+		
+		
+        /**
+         * Evaluator membership function definition 
+         * 
+         * @param age	
+         * @return (age - min) / (max - min) clamped between 0 and 1.
+         */
+        protected IUncertainDegree eval(Double pos, IDegreeFactory factory) {
+        	return evalMu(pos, range, factory);
+        }
+        
+        
+        
+        
+        protected IUncertainDegree evalMu(Double pos, Double range, IDegreeFactory factory) {
+        	        	        
+        	return factory.buildDegree(pos/range);
+        }
+        
+        
+        
+        
+        
+        
+        public IUncertainDegree evaluateUncertain(WorkingMemory workingMemory,
+				InternalReadAccessor extractor, Object object1, FieldValue value) {
+			
+        	
+			if (! (workingMemory.getRuleBase() instanceof IUncertainRuleBase)) {
+				throw new RuntimeDroolsException("Far Evaluator : Uncertainty has not been enabled in the current Rule Base");
+			}
+			
+			
+			
+			IDegreeFactory factory = ((IUncertainRuleBase) workingMemory.getRuleBase()).getTruthFactory();
+			
+			
+			Object field = extractor.getValue(object1);
+    		if (field == null)
+    			return factory.Unknown();
+    		
+    		    										
+			return evalMu(((Number) field).doubleValue(), range, factory);
+			
+			
+			
+			
+		}
+        
+        
+        
+		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) {
+			
+			if (! (workingMemory.getRuleBase() instanceof IUncertainRuleBase)) {
+				throw new RuntimeDroolsException("Far Evaluator : Uncertainty has not been enabled in the current Rule Base");
+			}
+								
+			IDegreeFactory factory = ((IUncertainRuleBase) workingMemory.getRuleBase()).getTruthFactory();
+			
+			
+			Object field1 = leftExtractor.getValue(left);
+    		if (field1 == null)
+    			return factory.Unknown();    		    		
+    		
+    		
+    		
+    		Object field2 = rightExtractor.getValue(right);
+    		if (field2 == null)
+    			return factory.Unknown();    		    		
+    		
+		
+						
+			return evalMu(((Number) field1).doubleValue(),((Number) field2).doubleValue(),factory);
+			
+		}
+		
+		public boolean evaluate(InternalWorkingMemory workingMemory,
+				InternalReadAccessor leftExtractor, Object left,
+				InternalReadAccessor rightExtractor, Object right) {
+			return evaluateUncertain(workingMemory, leftExtractor, left, rightExtractor, right).toBoolean();
+		}
+
+		
+		public IUncertainDegree evaluateUncertainCachedLeft(WorkingMemory workingMemory,
+				VariableContextEntry context, Object object1) {
+			
+			if (! (workingMemory.getRuleBase() instanceof IUncertainRuleBase)) {
+				throw new RuntimeDroolsException("Far Evaluator : Uncertainty has not been enabled in the current Rule Base");
+			}							
+			IDegreeFactory factory = ((IUncertainRuleBase) workingMemory.getRuleBase()).getTruthFactory();
+			
+			Double v1 = (Double) ((ObjectVariableContextEntry) context).left;
+			Double v2 = (Double) object1;
+			
+			return evalMu(v1,v2,factory);
+		}
+		public boolean evaluateCachedLeft(InternalWorkingMemory workingMemory,
+				VariableContextEntry context, Object object1) {
+			return this.evaluateUncertainCachedLeft((WorkingMemory)workingMemory, context, object1).toBoolean();
+		}
+
+		
+		public IUncertainDegree evaluateUncertainCachedRight(WorkingMemory workingMemory,
+				VariableContextEntry context, Object object2) {
+			
+			if (! (workingMemory.getRuleBase() instanceof IUncertainRuleBase)) {
+				throw new RuntimeDroolsException("Far Evaluator : Uncertainty has not been enabled in the current Rule Base");
+			}
+								
+			IDegreeFactory factory = ((IUncertainRuleBase) workingMemory.getRuleBase()).getTruthFactory();
+			
+			Double v1 = (Double) object2;
+			Double v2 = (Double) ((ObjectVariableContextEntry) context).right;			
+			
+			return evalMu(v1,v2,factory);						
+						
+//			Object field1 = leftExtractor.getValue(left);
+//    		if (field1 == null)
+//    			return factory.Unknown();    		    		
+//    		
+//    		
+//    		
+//    		Object field2 = rightExtractor.getValue(right);
+//    		if (field2 == null)
+//    			return factory.Unknown();    		    		
+//    		
+//		
+//						
+//			return evalMu((Double[]) field1,(Double[]) field2,factory);
+//			
+		
+		}
+		public boolean evaluateCachedRight(InternalWorkingMemory workingMemory,
+				VariableContextEntry context, Object object2) {
+			return evaluateUncertainCachedRight(workingMemory, context, object2).toBoolean();
+		}
+		
+		
+		
+		
+		
+		
+		
+		
+		@Override
+        public int hashCode() {
+            final int PRIME = 31;
+            int result = super.hashCode();
+            result = PRIME * result + (int) (range.longValue() ^ (range.longValue() >>> 32));            
+            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;
+            final FarEvaluator other = (FarEvaluator) obj;
+            return range == other.range;
+        }
+
+        /**
+         * This methods tries to parse the string of parameters to customize
+         * the evaluator.
+         *
+         * @param parameters
+         */
+        private void parseParameters(String parameters) {
+            if ( parameters == null || parameters.trim().length() == 0 ) {
+                // open bounded range
+                this.range = new Double(1);                
+                return;
+            }
+
+            try {
+               
+               this.range = Double.parseDouble( parameters );                    
+               
+            } catch ( NumberFormatException e ) {
+                throw new RuntimeDroolsException( "[Far Evaluator]: Not possible to parse parameters: '" + parameters + "'",
+                                                  e );
+            }
+        }
+
+    }
+		
+		
+
+	
+
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	public static final Operator   FAR         = Operator.addOperatorToRegistry( "far",
+            										false );
+	
+	public static final Operator   NOT_FAR     = Operator.addOperatorToRegistry( "far",
+													true );
+
+	private static final String[]  SUPPORTED_IDS = {FAR.getOperatorString()};
+
+	private Map<String, Evaluator> cache         = Collections.emptyMap();
+
+	
+	
+	
+	
+	
+	public Evaluator getEvaluator(ValueType type, String operatorId,
+			boolean isNegated, String parameterText) {
+		
+		
+		if ( this.cache == Collections.EMPTY_MAP ) {
+            this.cache = new HashMap<String, Evaluator>();
+        }
+        String key = isNegated + ":" + parameterText;
+        Evaluator eval = this.cache.get( key );
+        if ( eval == null ) {
+            eval = new FarEvaluator( type,
+                                       isNegated,
+                                       parameterText );
+            this.cache.put( key,
+                            eval );
+        }
+        return eval;
+        
+        
+        
+	}
+
+	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,"");
+	}
+
+	
+	
+	
+	
+	/**
+	 * Operator is known as "far"
+	 */
+	public String[] getEvaluatorIds() {
+		return SUPPORTED_IDS;
+	}
+
+	
+	
+	
+	
+	
+	
+	/** 
+	 * 
+	 * 
+	 */
+	public boolean isNegatable() {
+		return true;
+	}
+
+	
+	
+	/**
+	 * This evaluator operates on fact properties (i.e. age) 
+	 * and not on factHandles. 
+	 * So this returns false
+	 */
+	public boolean operatesOnFactHandles() {
+		return false;
+	}
+
+	
+	
+	
+	
+	/**
+	 * 
+	 */
+	public boolean supportsType(ValueType type) {
+		return type.isNumber();
+	}
+
+	
+	
+	
+	
+	
+	
+	/*
+	 * TODO: Try and understand what this means. Copied from AfterEvalDef.
+	 */
+	
+	
+	public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+		cache = (Map<String, Evaluator>) in.readObject();
+	}
+
+	public void writeExternal(ObjectOutput out) throws IOException {
+		out.writeObject(cache);
+	}
+
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+}

Added: labs/jbossrules/branches/uncDrools5x/LogicSOM/src/evaluators/YoungEvaluatorDefinition.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/LogicSOM/src/evaluators/YoungEvaluatorDefinition.java	                        (rev 0)
+++ labs/jbossrules/branches/uncDrools5x/LogicSOM/src/evaluators/YoungEvaluatorDefinition.java	2008-08-27 22:03:51 UTC (rev 21941)
@@ -0,0 +1,369 @@
+package evaluators;
+
+import uncertainty.factory.IDegreeFactory;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.drools.IUncertainRuleBase;
+import org.drools.RuntimeDroolsException;
+import org.drools.WorkingMemory;
+import org.drools.base.BaseEvaluator;
+import org.drools.base.BaseUncertainEvaluator;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.IUncertainBinaryEvaluatorDefinition;
+import org.drools.base.evaluators.Operator;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.rule.VariableRestriction.VariableContextEntry;
+import org.drools.spi.Evaluator;
+import org.drools.spi.FieldValue;
+import org.drools.spi.IUncertainEvaluator;
+import org.drools.spi.InternalReadAccessor;
+
+import uncertainty.truthvals.IUncertainDegree;
+
+
+
+
+/**
+ * 
+ * @author sotty
+
+ *
+ */
+public class YoungEvaluatorDefinition implements IUncertainBinaryEvaluatorDefinition {
+	
+	
+	
+	public class YoungEvaluator extends BaseUncertainEvaluator implements IUncertainEvaluator {
+		
+
+        private Double              tau;
+
+	
+		public YoungEvaluator(final ValueType type,
+                				final boolean isNegated,
+                				final String parameters) {
+				super( type,
+	                   isNegated ? NOT_YOUNG : YOUNG );
+	            this.parseParameters( parameters );	        
+		}
+		
+		public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+            super.readExternal(in);
+            
+            tau = in.readDouble();
+        }
+
+        public void writeExternal(ObjectOutput out) throws IOException {
+            super.writeExternal(out);
+
+            out.writeDouble(tau);
+        }
+		
+		
+        /**
+         * Evaluator membership function definition 
+         * 
+         * @param age	
+         * @return (age - min) / (max - min) clamped between 0 and 1.
+         */
+        protected IUncertainDegree eval(Double age, IDegreeFactory factory) {
+        	return evalMu(age, factory);
+        }
+        
+        
+        
+        
+        protected IUncertainDegree evalMu(Double age, IDegreeFactory factory) {
+        	
+        	Double val = 1.0 / (1.0 + age*tau);
+        	
+        	return factory.buildDegree(val);
+        }
+        
+        public IUncertainDegree evaluateUncertain(WorkingMemory workingMemory,
+				InternalReadAccessor extractor, Object object1, FieldValue value) {
+			
+        	
+			if (! (workingMemory.getRuleBase() instanceof IUncertainRuleBase)) {
+				throw new RuntimeDroolsException("Young Evaluator : Uncertainty has not been enabled in the current Rule Base");
+			}
+			IDegreeFactory factory = ((IUncertainRuleBase) workingMemory.getRuleBase()).getTruthFactory();
+			
+			Object field = extractor.getValue(object1);
+    		if (field == null)
+    			return factory.Unknown();
+    		
+    		Double age = new Double((Integer) field);
+		
+						
+			return evalMu(age,factory); 
+		}
+        
+		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( "The 'young' operator is a unary predicate" );
+		}
+		
+		public boolean evaluate(InternalWorkingMemory workingMemory,
+				InternalReadAccessor leftExtractor, Object left,
+				InternalReadAccessor rightExtractor, Object right) {
+			return evaluateUncertain(workingMemory, leftExtractor, left, rightExtractor, right).toBoolean();
+		}
+
+		
+		public IUncertainDegree evaluateUncertainCachedLeft(WorkingMemory workingMemory,
+				VariableContextEntry context, Object object1) {
+			throw new RuntimeDroolsException( "The 'young' operator unimplemented method II" );
+		}
+		public boolean evaluateCachedLeft(InternalWorkingMemory workingMemory,
+				VariableContextEntry context, Object object1) {
+			return evaluateUncertainCachedLeft(workingMemory, context, object1).toBoolean();
+		}
+
+		
+		public IUncertainDegree evaluateUncertainCachedRight(WorkingMemory workingMemory,
+				VariableContextEntry context, Object object2) {
+			throw new RuntimeDroolsException( "The 'young' operator unimplemented method II" );
+		}
+		public boolean evaluateCachedRight(InternalWorkingMemory workingMemory,
+				VariableContextEntry context, Object object2) {
+			return evaluateUncertainCachedRight(workingMemory, context, object2).toBoolean();
+		}
+		
+		
+		
+		
+		@Override
+        public int hashCode() {
+            final int PRIME = 31;
+            int result = super.hashCode();
+            result = PRIME * result + (int) (tau.longValue()) ;            
+            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;
+            final YoungEvaluator other = (YoungEvaluator) obj;
+            return tau == other.tau ;
+        }
+
+        /**
+         * This methods tries to parse the string of parameters to customize
+         * the evaluator.
+         *
+         * @param parameters
+         */
+        private void parseParameters(String parameters) {
+            if ( parameters == null || parameters.trim().length() == 0 ) {
+                // open bounded range
+                
+                this.tau = new Double(100);
+                return;
+            }
+
+            try {
+                String[] ranges = parameters.split( "," );
+                if ( ranges.length == 1 ) {
+                    // deterministic point in time
+                    this.tau= Double.parseDouble( ranges[0] );
+                    
+                } else if ( ranges.length == 2 ) {
+                    // regular range
+                    this.tau = Double.parseDouble( ranges[0] );
+                    
+                } else {
+                    throw new RuntimeDroolsException( "[Young Evaluator]: Not possible to parse parameters: '" + parameters + "'" );
+                }
+            } catch ( NumberFormatException e ) {
+                throw new RuntimeDroolsException( "[Young Evaluator]: Not possible to parse parameters: '" + parameters + "'",
+                                                  e );
+            }
+        }
+
+    }
+		
+		
+
+	
+
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	public static final Operator   YOUNG         = Operator.addOperatorToRegistry( "young",
+            										false );
+	
+	public static final Operator   NOT_YOUNG     = Operator.addOperatorToRegistry( "young",
+													true );
+
+	private static final String[]  SUPPORTED_IDS = {YOUNG.getOperatorString()};
+
+	private Map<String, Evaluator> cache         = Collections.emptyMap();
+
+	
+	
+	
+	
+	
+	public Evaluator getEvaluator(ValueType type, String operatorId,
+			boolean isNegated, String parameterText) {
+		
+		
+		if ( this.cache == Collections.EMPTY_MAP ) {
+            this.cache = new HashMap<String, Evaluator>();
+        }
+        String key = isNegated + ":" + parameterText;
+        Evaluator eval = this.cache.get( key );
+        if ( eval == null ) {
+            eval = new YoungEvaluator( type,
+                                       isNegated,
+                                       parameterText );
+            this.cache.put( key,
+                            eval );
+        }
+        return eval;
+        
+        
+        
+	}
+
+	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,"");
+	}
+
+	
+	
+	
+	
+	/**
+	 * Operator is known as "young"ValueType type, Operator op
+	 */
+	public String[] getEvaluatorIds() {
+		return SUPPORTED_IDS;
+	}
+
+	
+	
+	
+	
+	
+	
+	/** 
+	 * Young can be negated
+	 * It is only by chance that "not young" coincides with the concept "old".
+	 */
+	public boolean isNegatable() {
+		return true;
+	}
+
+	
+	
+	/**
+	 * This evaluator operates on fact properties (i.e. age) 
+	 * and not on factHandles. 
+	 * So this returns false
+	 */
+	public boolean operatesOnFactHandles() {
+		return false;
+	}
+
+	
+	
+	
+	
+	/**
+	 * Young operates on numbers modelling age
+	 */
+	public boolean supportsType(ValueType type) {
+		return type.isNumber();
+	}
+
+	
+	
+	
+	
+	
+	
+	/*
+	 * TODO: Try and understand what this means. Copied from AfterEvalDef.
+	 */
+	
+	
+	public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+		cache = (Map<String, Evaluator>) in.readObject();
+	}
+
+	public void writeExternal(ObjectOutput out) throws IOException {
+		out.writeObject(cache);
+	}
+
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+}

Modified: labs/jbossrules/branches/uncDrools5x/LogicSOM/src/som.packagebuilder.conf
===================================================================
--- labs/jbossrules/branches/uncDrools5x/LogicSOM/src/som.packagebuilder.conf	2008-08-27 22:03:20 UTC (rev 21940)
+++ labs/jbossrules/branches/uncDrools5x/LogicSOM/src/som.packagebuilder.conf	2008-08-27 22:03:51 UTC (rev 21941)
@@ -31,8 +31,10 @@
 drools.evaluator.matches = org.drools.base.evaluators.MatchesEvaluatorsDefinition
 drools.evaluator.soundslike = org.drools.base.evaluators.SoundslikeEvaluatorsDefinition
 
-drools.evaluator.young = org.drools.base.evaluators.YoungEvaluatorDefinition
+
 drools.evaluator.heavy = org.drools.base.evaluators.HeavyEvaluatorDefinition
 drools.evaluator.nearly = org.drools.base.evaluators.NearlyEvaluatorDefinition
+
 drools.evaluator.near = evaluators.NearEvaluatorDefinition
-
+drools.evaluator.far = evaluators.FarEvaluatorDefinition
+drools.evaluator.young = evaluators.YoungEvaluatorDefinition




More information about the jboss-svn-commits mailing list