[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