[jboss-svn-commits] JBL Code SVN: r25958 - in labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo: filters and 1 other directory.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sun Apr 5 15:24:52 EDT 2009
Author: dsotty
Date: 2009-04-05 15:24:52 -0400 (Sun, 05 Apr 2009)
New Revision: 25958
Added:
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/CompositeEvaluation.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/CompositeEvaluationTemplate.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/EvalRecord.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/Evaluation.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/EvaluationTemplate.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/GammaMemory.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/IGammaNode.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ImperfectAgendaItem.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ImperfectFactHandleFactory.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ImperfectLeftTuple.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ImperfectRightTuple.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ImperfectRuleBase.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/SingleEvaluationTemplate.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/filters/
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/filters/FuzzyFilterStrategy.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/filters/IFilterStrategy.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/filters/IFilteringNode.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/filters/ImperfectFilterStrategy.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/filters/SimpleFilterStrategy.java
Log:
Imperfect Drools experimental
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/CompositeEvaluation.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/CompositeEvaluation.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/CompositeEvaluation.java 2009-04-05 19:24:52 UTC (rev 25958)
@@ -0,0 +1,138 @@
+package org.drools.reteoo;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Map;
+import java.util.Observable;
+import java.util.Observer;
+import java.util.Set;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.operators.IDegreeCombiner;
+import org.drools.degrees.operators.IMergeStrategy;
+import org.drools.degrees.operators.INullHandlingStrategy;
+
+public class CompositeEvaluation extends Evaluation implements Observer {
+
+ private IDegreeCombiner operator;
+ private Evaluation[] operands;
+ private float opRate;
+
+ public CompositeEvaluation(int id, ConstraintKey key, Set<String> deps,
+ Evaluation[] evalDegrees, IDegreeCombiner operator, IMergeStrategy mergeStrat, INullHandlingStrategy nullStrat) {
+ super(id,key,deps,mergeStrat,nullStrat);
+
+ this.operands = new Evaluation[evalDegrees.length];
+ for (int j = 0; j < evalDegrees.length; j++) {
+ setOperand(j,evalDegrees[j]);
+ }
+
+ this.operator = operator;
+
+ this.combine();
+ }
+
+
+
+ public CompositeEvaluation(int id, ConstraintKey key, Set<String> deps,
+ Map<ConstraintKey, EvaluationTemplate> children,
+ IDegreeCombiner operator, IMergeStrategy mergeStrat,
+ INullHandlingStrategy nullStrat) {
+
+ super(id,key,deps,mergeStrat,nullStrat);
+
+ this.operands = new Evaluation[children.size()];
+ int j = 0;
+ for (EvaluationTemplate temp : children.values()) {
+ setOperand(j++,temp.spawn());
+ }
+
+ this.operator = operator;
+
+ this.combine();
+
+ }
+
+ protected void combine() {
+ int N = operands.length;
+ IDegree[] args = new IDegree[N];
+
+
+ for (int j=0; j < N; j++) {
+ args[j] = operands[j].getDegree();
+
+ }
+
+ IDegree opDeg = this.operator.eval(args);
+ updateOpRate();
+ this.addDegree(Evaluation.EVAL, opDeg, getOpRate());
+
+ }
+
+
+ public Evaluation[] getOperands() {
+ return operands;
+ }
+
+ public void setOperand(int position, Evaluation operand) {
+
+ if (operands[position] != null && operands[position] != operand) {
+ System.out.println("SET OPERAND "+operand.getKey()+ "with " + operand.getBitS());
+ operands[position].deleteObserver(this);
+ operand.addObserver(this);
+ operands[position] = operand;
+ combine();
+ } else {
+ operand.addObserver(this);
+ operands[position] = operand;
+ }
+
+ }
+
+ public Collection<Evaluation> getEvalTree() {
+ Collection<Evaluation> ans = new ArrayList<Evaluation>(2*operands.length);
+ for (Evaluation eval : operands)
+ ans.addAll(eval.getEvalTree());
+ ans.add(this);
+
+ return ans;
+ }
+
+//
+// protected void incInfo(String source, float wgt) {
+// if (source.equals(EVAL)) {
+// float delta = 0;
+// for (Evaluation child : this.operands) {
+// delta += child.getInfoRate();
+// }
+// opRate = delta / (1.0f*this.operands.length);
+// incInfo(source,opRate);
+// } else super.incInfo(source, wgt);
+// }
+
+
+ public float getOpRate() {
+ return opRate;
+ }
+
+ protected void updateOpRate() {
+ float delta = 0;
+ for (Evaluation child : this.operands) {
+ delta += child.getInfoRate();
+ }
+ opRate = delta / (1.0f*this.operands.length);
+ }
+
+
+ public void update(Observable o, Object arg) {
+ System.out.println("UPDATE HAS BEEN CALLED ON COMBOVAL");
+ incInfo("EVAL",-opRate);
+ combine();
+ }
+
+
+
+
+
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/CompositeEvaluationTemplate.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/CompositeEvaluationTemplate.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/CompositeEvaluationTemplate.java 2009-04-05 19:24:52 UTC (rev 25958)
@@ -0,0 +1,60 @@
+package org.drools.reteoo;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.operators.IDegreeCombiner;
+import org.drools.degrees.operators.IMergeStrategy;
+import org.drools.degrees.operators.INullHandlingStrategy;
+
+public class CompositeEvaluationTemplate extends EvaluationTemplate {
+
+ private int N = 0;
+ private IDegreeCombiner operator;
+
+
+ protected Map<ConstraintKey,EvaluationTemplate> children;
+
+
+ public CompositeEvaluationTemplate(int id, ConstraintKey key, Set<String> deps, int N, IDegreeCombiner operator, IMergeStrategy mergeStrat, INullHandlingStrategy nullStrat) {
+ super(id,key,deps,mergeStrat,nullStrat);
+
+ children = new HashMap<ConstraintKey, EvaluationTemplate>();
+ this.N = N;
+ this.operator = operator;
+
+ }
+
+// public CompositeEvaluationTemplate(EvaluationTemplate master) {
+// this.master = master;
+// this.children.put(master.getConstraintKey(),master);
+// }
+
+
+ public EvaluationTemplate getTemplate(ConstraintKey key) {
+ return this.children.get(key);
+ }
+
+ public void addChild(EvaluationTemplate temp) {
+ this.children.put(temp.getConstraintKey(),temp);
+ }
+
+
+
+ public Evaluation spawn(Evaluation[] evalDegree) {
+ return new CompositeEvaluation(id,key,deps,evalDegree,operator,mergeStrat,nullStrat);
+ }
+
+ public Evaluation spawn() {
+ return new CompositeEvaluation(id,key,deps,children,operator,mergeStrat,nullStrat);
+ }
+
+
+
+
+
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/EvalRecord.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/EvalRecord.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/EvalRecord.java 2009-04-05 19:24:52 UTC (rev 25958)
@@ -0,0 +1,213 @@
+package org.drools.reteoo;
+
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.Map;
+import java.util.Observable;
+import java.util.Observer;
+
+
+import org.drools.common.ImperfectFactHandle;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.degrees.IDegree;
+import org.drools.degrees.factory.IDegreeFactory;
+import org.drools.spi.PropagationContext;
+
+public class EvalRecord extends Observable implements Observer {
+
+
+ private Map<ConstraintKey, Evaluation> evalMap;
+ private ConstraintKey mainKey;
+
+ private IDegree overallDegree;
+
+
+
+
+ private ImperfectFactHandle factHandle;
+ private PropagationContext propagationContext;
+ private InternalWorkingMemory workingMemory;
+ private IDegreeFactory factory;
+
+
+
+
+
+
+
+ public EvalRecord() {
+ mainKey = null;
+ evalMap = new HashMap<ConstraintKey, Evaluation>();
+ }
+
+ public Collection<Evaluation> getEvaluations() {
+ return evalMap.values();
+ }
+
+
+
+ protected Evaluation insert(Evaluation eval) {
+
+ //pre-order visit!
+ if (eval instanceof CompositeEvaluation) {
+ CompositeEvaluation combo = (CompositeEvaluation) eval;
+ Evaluation[] operands = combo.getOperands();
+ for (int j = 0; j < operands.length; j++) {
+ Evaluation newOp = insert(operands[j]);
+ combo.setOperand(j,newOp);
+ }
+ }
+
+ Evaluation prevEval = evalMap.get(eval.getKey());
+ if (prevEval == null) {
+ System.out.println(this.getClass()+" insert "+eval.toString());
+ evalMap.put(eval.getKey(),eval);
+ prevEval = eval;
+ eval.addObserver(this);
+ } else {
+ System.out.println(this.getClass()+" merge "+eval.toString());
+ prevEval.merge(eval);
+ }
+
+ return prevEval;
+ }
+
+ public void addEvaluation(Evaluation eval) {
+
+
+ Evaluation addedEval = insert(eval);
+
+
+ if (mainKey != null && mainKey.equals(addedEval.getKey()) /*&& ! prevEval.getDegree().equals(overallDegree)*/) {
+ mainKey = addedEval.getKey();
+ overallDegree = addedEval.getDegree();
+ this.setChanged();
+ this.notifyObservers(null);
+ } else {
+ mainKey = addedEval.getKey();
+ overallDegree = addedEval.getDegree();
+ }
+
+ }
+
+
+ public void addEvaluations(EvalRecord other) {
+ for (Evaluation eval : other.getEvaluations())
+ this.addEvaluation(eval);
+ }
+
+ public void addEvaluations(Collection<Evaluation> evals) {
+ for (Evaluation eval : evals)
+ this.addEvaluation(eval);
+ }
+
+
+ public IDegree getOverallDegree() {
+ //return getMainEval().getDegree();
+ return overallDegree;
+ }
+
+ public EvalRecord clone() {
+
+ EvalRecord ans = new EvalRecord();
+ ans.addEvaluations(this.getEvaluations());
+
+ return ans;
+ }
+
+
+ public Evaluation getMainEval() {
+ return evalMap.get(mainKey);
+ }
+
+
+
+ public void update(Observable obsEval, Object newDeg) {
+ Evaluation eval = (Evaluation) obsEval;
+ if (eval.getKey().equals(mainKey)) {
+ overallDegree = eval.getDegree();
+ this.setChanged();
+ this.notifyObservers(null);
+ }
+ }
+
+
+
+
+
+
+
+
+ public String toString() {
+ StringBuilder sb = new StringBuilder("Eval Record: \n");
+ for (Evaluation ev : getEvaluations())
+ sb.append(ev.toString()+"\n");
+ sb.append("\n");
+ return sb.toString();
+ }
+
+
+
+
+
+ /**
+ * @param factHandle the factHandle to set
+ */
+ public void setFactHandle(ImperfectFactHandle factHandle) {
+ this.factHandle = factHandle;
+ }
+
+ /**
+ * @return the factHandle
+ */
+ public ImperfectFactHandle getFactHandle() {
+ return factHandle;
+ }
+
+ /**
+ * @param propagationContext the propagationContext to set
+ */
+ public void setPropagationContext(PropagationContext propagationContext) {
+ this.propagationContext = propagationContext;
+ }
+
+ /**
+ * @return the propagationContext
+ */
+ public PropagationContext getPropagationContext() {
+ return propagationContext;
+ }
+
+ /**
+ * @param workingMemory the workingMemory to set
+ */
+ public void setWorkingMemory(InternalWorkingMemory workingMemory) {
+ this.workingMemory = workingMemory;
+ }
+
+ /**
+ * @return the workingMemory
+ */
+ public InternalWorkingMemory getWorkingMemory() {
+ return workingMemory;
+ }
+
+ /**
+ * @param factory the factory to set
+ */
+ public void setFactory(IDegreeFactory factory) {
+ this.factory = factory;
+ }
+
+ /**
+ * @return the factory
+ */
+ public IDegreeFactory getFactory() {
+ return factory;
+ }
+
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/Evaluation.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/Evaluation.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/Evaluation.java 2009-04-05 19:24:52 UTC (rev 25958)
@@ -0,0 +1,285 @@
+package org.drools.reteoo;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Observable;
+import java.util.Observer;
+import java.util.Set;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.operators.IMergeStrategy;
+import org.drools.degrees.operators.INullHandlingStrategy;
+
+
+public class Evaluation extends Observable {
+
+
+ public static final String EVAL = "EVAL";
+ public static final String PRIOR = "PRIOR";
+
+ private int nodeId;
+
+ private ConstraintKey key;
+
+
+ private Map<String,IDegree> degrees;
+ private int totDegrees;
+ private Map<String,Float> confidence;
+
+ private IDegree aggDegree;
+
+ private IMergeStrategy mergeStrat;
+ private INullHandlingStrategy nullStrat;
+
+
+
+ public Evaluation(int id, ConstraintKey key, Set<String> deps, IMergeStrategy mergeStrat, INullHandlingStrategy nullStrat) {
+ if (deps == null)
+ deps = Collections.emptySet();
+ this.nodeId = id;
+ this.degrees = new HashMap<String,IDegree>();
+ this.confidence = new HashMap<String,Float>();
+ this.degrees.put(PRIOR, null);
+ this.degrees.put(EVAL, null);
+ for (String s : deps) {
+ this.degrees.put(s, null);
+ confidence.put(s,new Float(0));
+ }
+ totDegrees = 2+deps.size();
+
+ this.key = key;
+ this.nullStrat = nullStrat;
+ this.mergeStrat = mergeStrat;
+ }
+
+ public Evaluation(int id, ConstraintKey key, Set<String> deps, IDegree evalDeg, IMergeStrategy mergeStrat, INullHandlingStrategy nullStrat) {
+ this(id,key,deps,mergeStrat,nullStrat);
+ this.addDegree(Evaluation.EVAL,evalDeg,1);
+ }
+
+ public Evaluation(int id, ConstraintKey key, Set<String> deps, IDegree evalDeg, String source, IMergeStrategy mergeStrat, INullHandlingStrategy nullStrat) {
+ this(id,key,deps,mergeStrat,nullStrat);
+ this.addDegree(source,evalDeg,1);
+ }
+
+
+ /**
+ * TODO : remove it and its dependencies
+ * @param id
+ * @param evalDeg
+ * @param key
+ *
+ * @deprecated
+ */
+ public Evaluation(int id, IDegree evalDeg, ConstraintKey key, IMergeStrategy mergeStrat, INullHandlingStrategy nullStrat) {
+ this(id,key, new HashSet<String>(),mergeStrat,nullStrat);
+
+ this.addDegree(Evaluation.EVAL,evalDeg,1);
+ }
+
+
+
+ public IDegree getDegree() {
+ return aggDegree;
+ }
+
+
+
+
+ public void merge(Evaluation other) {
+ this.addDegrees(other.degrees, other.confidence);
+ }
+
+ private void addDegrees(Map<String, IDegree> moreDegrees, Map<String, Float> conf) {
+ boolean newContrib = false;
+
+ for (String source : moreDegrees.keySet()) {
+ System.out.println("Added degrees for source "+ source + "+1");
+ IDegree evalDeg = moreDegrees.get(source);
+ if (evalDeg == null) {
+ newContrib = newContrib || clearDegree(source);
+ } else {
+
+
+ confidence.put(source, conf.get(source));
+
+ if (getDegreeBit(source) == null) {
+ this.degrees.put(source,evalDeg);
+ newContrib = true;
+ } else {
+ this.degrees.put(source,evalDeg);
+ }
+
+
+
+ }
+ }
+ update(newContrib);
+
+ }
+
+
+ public void addDegree(String source, IDegree evalDeg, float wgt) {
+
+ boolean newContrib = false;
+
+ if (evalDeg == null) {
+ newContrib = clearDegree(source);
+ } else {
+
+
+
+ confidence.put(source, wgt);
+
+ if (getDegreeBit(source) == null) {
+ System.out.println(this.key+" Added degree for source "+ source + " with wgt "+wgt);
+ this.degrees.put(source,evalDeg);
+ newContrib = true;
+ } else {
+ System.out.println(this.key+" UPDATED degree for source "+ source + " with wgt "+wgt);
+ this.degrees.put(source,evalDeg);
+ newContrib = true;
+ }
+
+// if (getDegreeBit(source) == null) {
+// System.out.println(this.key+"Added degree for source "+ source + " with wgt "+wgt);
+// this.degrees.put(source,evalDeg);
+// incInfo(source,wgt);
+// newContrib = true;
+// } else {
+// this.degrees.put(source,evalDeg);
+// }
+
+ }
+
+
+ update(newContrib);
+
+ }
+
+ protected void incInfo(String source, float delta) {
+ confidence.put(source,new Float(delta));
+ }
+
+
+
+ protected void update(boolean newContrib) {
+ IDegree newDeg = mergeDegrees();
+
+ if ((this.countObservers() > 0) && ((! newDeg.equals(aggDegree)) || newContrib)) {
+ aggDegree = newDeg;
+ this.setChanged();
+ this.notifyObservers(newDeg);
+ } else {
+ aggDegree = newDeg;
+ }
+
+ }
+
+ public boolean clearDegree(String source) {
+ boolean cleared = false;
+ if (getDegreeBit(source) != null) {
+ cleared = true;
+ incInfo(source,-1);
+ }
+ this.degrees.put(source,null);
+ return cleared;
+ }
+
+
+ public IDegree getDegreeBit(String source) {
+ return degrees.get(source);
+ }
+
+ protected IDegree mergeDegrees() {
+ IDegree[] bits = new IDegree[this.totDegrees];
+ int j = 0;
+ for (String s : degrees.keySet())
+ bits[j++] = degrees.get(s);
+
+ return this.mergeStrat.eval(bits,nullStrat);
+ }
+
+
+
+ public String toString() {
+ return "("+this.nodeId + ")" + this.key+ " : " + this.aggDegree.toString();
+ }
+
+
+
+
+ /**
+ * @param id the id to set
+ */
+ public void setNodeId(int id) {
+ this.nodeId = id;
+ }
+ /**
+ * @return the id
+ */
+ public int getNodeId() {
+ return nodeId;
+ }
+
+
+ /**
+ * @param key the key to set
+ */
+ public void setKey(ConstraintKey key) {
+ this.key = key;
+ }
+ /**
+ * @return the key
+ */
+ public ConstraintKey getKey() {
+ return key;
+ }
+
+
+
+ public Collection<Evaluation> getEvalTree() {
+ Collection<Evaluation> ans = new ArrayList<Evaluation>(1);
+ ans.add(this);
+ return ans;
+ }
+
+
+
+
+
+
+
+ /**
+ * @return the infoRate
+ */
+ public float getInfoRate() {
+ //Prior injection can't be controlled!
+ float info = 0;
+ for (String s : confidence.keySet())
+ info += confidence.get(s);
+
+ if (degrees.get(PRIOR) != null)
+ info -= confidence.get(PRIOR);
+
+ return info/(totDegrees-1);
+ }
+
+ public String getBitS() {
+ StringBuilder sb = new StringBuilder("[");
+ for (String s : degrees.keySet()) {
+ if (degrees.get(s) != null)
+ sb.append(s+",");
+ }
+ return sb.append("]").toString();
+ }
+
+
+
+
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/EvaluationTemplate.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/EvaluationTemplate.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/EvaluationTemplate.java 2009-04-05 19:24:52 UTC (rev 25958)
@@ -0,0 +1,55 @@
+package org.drools.reteoo;
+
+import java.util.Set;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.operators.IDegreeCombiner;
+import org.drools.degrees.operators.IMergeStrategy;
+import org.drools.degrees.operators.INullHandlingStrategy;
+
+public abstract class EvaluationTemplate {
+
+
+ protected int id;
+ protected ConstraintKey key;
+ protected Set<String> deps;
+
+ protected IMergeStrategy mergeStrat;
+ protected INullHandlingStrategy nullStrat;
+
+
+ public EvaluationTemplate(int id, ConstraintKey key, Set<String> deps, IMergeStrategy mergeStrat, INullHandlingStrategy nullStrat) {
+ this.id = id;
+ this.key = key;
+ this.deps = deps;
+ this.mergeStrat = mergeStrat;
+ this.nullStrat = nullStrat;
+ }
+
+
+
+
+
+ public Evaluation spawn(IDegree evalDegree) {
+ return new Evaluation(id,key,deps,evalDegree,mergeStrat,nullStrat);
+ }
+
+ public Evaluation spawn(String source, IDegree evalDegree) {
+ return new Evaluation(id,key,deps,evalDegree,source,mergeStrat,nullStrat);
+ }
+
+ public Evaluation spawn() {
+ return new Evaluation(id,key,deps,null,mergeStrat,nullStrat);
+ }
+
+
+ public ConstraintKey getConstraintKey() {
+ return this.key;
+ }
+
+ public abstract Evaluation spawn(Evaluation[] evalDegree);
+
+
+
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/GammaMemory.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/GammaMemory.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/GammaMemory.java 2009-04-05 19:24:52 UTC (rev 25958)
@@ -0,0 +1,29 @@
+package org.drools.reteoo;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.Map;
+
+public class GammaMemory {
+
+ private Map<Object, Collection<Evaluation>> store;
+
+ public GammaMemory() {
+ store = new HashMap<Object, Collection<Evaluation>>();
+ }
+
+ public Collection<Evaluation> retrieve(Object o) {
+ return this.store.remove(o);
+ }
+
+ public void store(Object o, Evaluation eval) {
+ Collection<Evaluation> coll = store.get(o);
+ if (coll == null) {
+ coll = new LinkedList<Evaluation>();
+ store.put(o,coll);
+ }
+ coll.add(eval);
+ }
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/IGammaNode.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/IGammaNode.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/IGammaNode.java 2009-04-05 19:24:52 UTC (rev 25958)
@@ -0,0 +1,14 @@
+package org.drools.reteoo;
+
+import java.util.Collection;
+
+public interface IGammaNode {
+
+ EvaluationTemplate getEvaluationTemplate(ConstraintKey key);
+
+ void storeEvaluation(Object object, Evaluation prepareEval);
+
+
+ public Collection<Evaluation> getStoredEvals(Object o);
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ImperfectAgendaItem.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ImperfectAgendaItem.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ImperfectAgendaItem.java 2009-04-05 19:24:52 UTC (rev 25958)
@@ -0,0 +1,25 @@
+package org.drools.reteoo;
+
+import org.drools.common.AgendaItem;
+import org.drools.degrees.IDegree;
+import org.drools.rule.GroupElement;
+import org.drools.rule.Rule;
+import org.drools.spi.PropagationContext;
+
+public class ImperfectAgendaItem extends AgendaItem {
+
+ private IDegree degree;
+
+ public ImperfectAgendaItem(long propagationNumber, LeftTuple cloned,
+ int value, PropagationContext context, Rule rule,
+ GroupElement subrule, IDegree degree) {
+ super(propagationNumber,cloned,value,context,rule,subrule);
+ this.degree = degree;
+ }
+
+
+ public IDegree getDegree() {
+ return degree;
+ }
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ImperfectFactHandleFactory.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ImperfectFactHandleFactory.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ImperfectFactHandleFactory.java 2009-04-05 19:24:52 UTC (rev 25958)
@@ -0,0 +1,84 @@
+package org.drools.reteoo;
+
+import org.drools.common.AbstractFactHandleFactory;
+import org.drools.common.ImperfectFactHandle;
+import org.drools.common.InternalFactHandle;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.spi.FactHandleFactory;
+
+public class ImperfectFactHandleFactory extends AbstractFactHandleFactory {
+
+
+ private static final long serialVersionUID = 500L;
+
+ public ImperfectFactHandleFactory() {
+ super();
+ }
+
+ public ImperfectFactHandleFactory(int id,
+ long counter) {
+ super( id, counter );
+ }
+
+
+
+ @Override
+ public FactHandleFactory newInstance() {
+ return new ImperfectFactHandleFactory();
+ }
+
+
+
+ public FactHandleFactory newInstance(int id, long counter) {
+ return new ImperfectFactHandleFactory(id,counter);
+ }
+
+
+ protected final InternalFactHandle newFactHandle(final int id,
+ final Object object,
+ final long recency,
+ final ObjectTypeConf conf,
+ final InternalWorkingMemory workingMemory) {
+
+ //
+ if ( conf != null && conf.isEvent() ) {
+ throw new UnsupportedOperationException(this.getClass().toString() + " does not support event handles");
+// TypeDeclaration type = conf.getTypeDeclaration();
+// long timestamp;
+// if ( type.getTimestampExtractor() != null ) {
+// if ( Date.class.isAssignableFrom( type.getTimestampExtractor().getExtractToClass() ) ) {
+// timestamp = ((Date) type.getTimestampExtractor().getValue( workingMemory,
+// object )).getTime();
+// } else {
+// timestamp = type.getTimestampExtractor().getLongValue( workingMemory,
+// object );
+// }
+// } else {
+// timestamp = workingMemory.getTimerService().getCurrentTime();
+// }
+// long duration = 0;
+// if ( type.getDurationExtractor() != null ) {
+// duration = type.getDurationExtractor().getLongValue( workingMemory,
+// object );
+// }
+//
+// return new EventFactHandle( id,
+// object,
+// recency,
+// timestamp,
+// duration );
+ } else {
+ return new ImperfectFactHandle( id,
+ object,
+ recency );
+ }
+
+ }
+
+ public Class<?> getFactHandleType() {
+ return ImperfectFactHandle.class;
+ }
+
+
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ImperfectLeftTuple.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ImperfectLeftTuple.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ImperfectLeftTuple.java 2009-04-05 19:24:52 UTC (rev 25958)
@@ -0,0 +1,58 @@
+package org.drools.reteoo;
+
+import org.drools.common.InternalFactHandle;
+
+public class ImperfectLeftTuple extends LeftTuple {
+
+ private EvalRecord record;
+
+ /**
+ * @param record the record to set
+ */
+ public void setRecord(EvalRecord record) {
+ this.record = record;
+ }
+
+ /**
+ * @return the record
+ */
+ public EvalRecord getRecord() {
+ return record;
+ }
+
+
+ public ImperfectLeftTuple(final InternalFactHandle factHandle,
+ LeftTupleSink sink,
+ boolean leftTupleMemoryEnabled,
+ EvalRecord record) {
+
+ super(factHandle,sink,leftTupleMemoryEnabled);
+ this.record = record;
+ }
+
+ public ImperfectLeftTuple(final ImperfectLeftTuple leftTuple,
+ LeftTupleSink sink,
+ boolean leftTupleMemoryEnabled,
+ EvalRecord record) {
+
+ super(leftTuple,sink,leftTupleMemoryEnabled);
+
+ this.record = record;
+
+ }
+
+ public ImperfectLeftTuple(final ImperfectLeftTuple leftTuple,
+ final ImperfectRightTuple rightTuple,
+ LeftTupleSink sink,
+ boolean leftTupleMemoryEnabled,
+ EvalRecord record
+ ) {
+
+ super(leftTuple,rightTuple,sink,leftTupleMemoryEnabled);
+
+ this.record = record;
+
+ }
+
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ImperfectRightTuple.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ImperfectRightTuple.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ImperfectRightTuple.java 2009-04-05 19:24:52 UTC (rev 25958)
@@ -0,0 +1,32 @@
+package org.drools.reteoo;
+
+import org.drools.common.InternalFactHandle;
+
+public class ImperfectRightTuple extends RightTuple {
+
+ private EvalRecord record;
+
+ /**
+ * @param record the record to set
+ */
+ public void setRecord(EvalRecord record) {
+ this.record = record;
+ }
+
+ /**
+ * @return the record
+ */
+ public EvalRecord getRecord() {
+ return record;
+ }
+
+
+ public ImperfectRightTuple(InternalFactHandle handle,
+ RightTupleSink sink,
+ EvalRecord record) {
+ super(handle,sink);
+ setRecord(record);
+ }
+
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ImperfectRuleBase.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ImperfectRuleBase.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ImperfectRuleBase.java 2009-04-05 19:24:52 UTC (rev 25958)
@@ -0,0 +1,109 @@
+package org.drools.reteoo;
+
+import org.drools.RuleBaseConfiguration;
+import org.drools.degrees.factory.IDegreeFactory;
+import org.drools.degrees.factory.SimpleDegreeFactory;
+import org.drools.degrees.factory.SimpleFuzzyDegreeFactory;
+import org.drools.spi.FactHandleFactory;
+
+public class ImperfectRuleBase extends ReteooRuleBase {
+
+
+ private IDegreeFactory degreeFactory = null;
+
+ /**
+ * Default constructor - for Externalizable. This should never be used by a user, as it
+ * will result in an invalid state for the instance.
+ */
+ public ImperfectRuleBase() {
+
+ }
+
+ /**
+ * Construct.
+ *
+ * @param id
+ * The rete network.
+ */
+ public ImperfectRuleBase(final String id) {
+ this( id,
+ null,
+ new ImperfectFactHandleFactory() );
+
+ }
+
+ /**
+ * @param factHandleFactory
+ */
+ public ImperfectRuleBase(final String id,
+ final FactHandleFactory factHandleFactory) {
+ this( id,
+ null,
+ factHandleFactory );
+ }
+
+ public ImperfectRuleBase(final String id,
+ final RuleBaseConfiguration config) {
+ this( id,
+ config,
+ new ImperfectFactHandleFactory() );
+ }
+
+ /**
+ * @param config
+ */
+ public ImperfectRuleBase(final RuleBaseConfiguration config) {
+ this( null,
+ config,
+ new ImperfectFactHandleFactory()
+ );
+ }
+
+
+ /**
+ * Construct.
+ *
+ * @param id
+ * The rete network.
+ */
+ public ImperfectRuleBase(final String id,
+ final RuleBaseConfiguration config,
+ final FactHandleFactory factHandleFactory
+ ) {
+ this( id,
+ config,
+ factHandleFactory,
+ new SimpleFuzzyDegreeFactory());
+ }
+
+ /**
+ * Construct.
+ *
+ * @param id
+ * The rete network.
+ */
+ public ImperfectRuleBase(final String id,
+ final RuleBaseConfiguration config,
+ final FactHandleFactory factHandleFactory,
+ final IDegreeFactory degreeFactory) {
+ super( id,
+ config,
+ factHandleFactory );
+ this.degreeFactory = degreeFactory;
+ }
+
+ /**
+ * @param degreeFactory the degreeFactory to set
+ */
+ public void setDegreeFactory(IDegreeFactory degreeFactory) {
+ this.degreeFactory = degreeFactory;
+ }
+
+ /**
+ * @return the degreeFactory
+ */
+ public IDegreeFactory getDegreeFactory() {
+ return degreeFactory;
+ }
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/SingleEvaluationTemplate.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/SingleEvaluationTemplate.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/SingleEvaluationTemplate.java 2009-04-05 19:24:52 UTC (rev 25958)
@@ -0,0 +1,23 @@
+package org.drools.reteoo;
+
+import java.util.Set;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.operators.IDegreeCombiner;
+import org.drools.degrees.operators.IMergeStrategy;
+import org.drools.degrees.operators.INullHandlingStrategy;
+
+public class SingleEvaluationTemplate extends EvaluationTemplate {
+
+
+ public SingleEvaluationTemplate(int id, ConstraintKey key, Set<String> deps, IMergeStrategy mergeStrat, INullHandlingStrategy nullStrat) {
+ super(id,key,deps,mergeStrat,nullStrat);
+ }
+
+ @Override
+ public Evaluation spawn(Evaluation[] evalDegree) {
+ throw new UnsupportedOperationException(this.getClass().getName()+"Try to define unary operator??");
+ }
+
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/filters/FuzzyFilterStrategy.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/filters/FuzzyFilterStrategy.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/filters/FuzzyFilterStrategy.java 2009-04-05 19:24:52 UTC (rev 25958)
@@ -0,0 +1,32 @@
+package org.drools.reteoo.filters;
+
+
+import org.drools.reteoo.Evaluation;
+
+public class FuzzyFilterStrategy extends ImperfectFilterStrategy {
+
+ private static FuzzyFilterStrategy singleton = null;
+
+ public static FuzzyFilterStrategy getInstance() {
+ if (singleton == null)
+ singleton = new FuzzyFilterStrategy();
+ return singleton;
+ }
+
+ protected FuzzyFilterStrategy() {
+
+ }
+
+ @Override
+ public int doTry(final Evaluation eval) {
+ return (eval.getInfoRate() == 1.0) ? PASS : HOLD;
+ }
+
+ @Override
+ public boolean isAllowed(final Evaluation eval) {
+ return (eval.getInfoRate() == 1.0);
+ }
+
+
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/filters/IFilterStrategy.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/filters/IFilterStrategy.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/filters/IFilterStrategy.java 2009-04-05 19:24:52 UTC (rev 25958)
@@ -0,0 +1,16 @@
+package org.drools.reteoo.filters;
+
+
+import org.drools.reteoo.Evaluation;
+
+public interface IFilterStrategy {
+
+ public static final int DROP = 0;
+ public static final int PASS = 1;
+ public static final int HOLD = -1;
+
+ public boolean isAllowed(final Evaluation eval);
+
+ public int doTry(final Evaluation eval);
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/filters/IFilteringNode.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/filters/IFilteringNode.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/filters/IFilteringNode.java 2009-04-05 19:24:52 UTC (rev 25958)
@@ -0,0 +1,11 @@
+package org.drools.reteoo.filters;
+
+
+
+public interface IFilteringNode {
+
+ public void setStrategy(IFilterStrategy newStrat);
+
+
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/filters/ImperfectFilterStrategy.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/filters/ImperfectFilterStrategy.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/filters/ImperfectFilterStrategy.java 2009-04-05 19:24:52 UTC (rev 25958)
@@ -0,0 +1,32 @@
+package org.drools.reteoo.filters;
+
+
+import org.drools.reteoo.Evaluation;
+
+public abstract class ImperfectFilterStrategy implements IFilterStrategy {
+
+
+
+
+ public abstract boolean isAllowed(final Evaluation eval);
+
+
+ public abstract int doTry(final Evaluation eval);
+
+
+ public boolean drop(final Evaluation eval) {
+ return doTry(eval) == DROP;
+ }
+
+ public boolean pass(final Evaluation eval) {
+ return doTry(eval) == PASS;
+ }
+
+ public boolean hold(final Evaluation eval) {
+ return doTry(eval) == HOLD;
+ }
+
+
+
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/filters/SimpleFilterStrategy.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/filters/SimpleFilterStrategy.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/filters/SimpleFilterStrategy.java 2009-04-05 19:24:52 UTC (rev 25958)
@@ -0,0 +1,37 @@
+package org.drools.reteoo.filters;
+
+import org.drools.reteoo.Evaluation;
+
+public class SimpleFilterStrategy extends ImperfectFilterStrategy {
+
+
+ private static SimpleFilterStrategy singleton = null;
+
+ public static SimpleFilterStrategy getInstance() {
+ if (singleton == null)
+ singleton = new SimpleFilterStrategy();
+ return singleton;
+ }
+
+
+ protected SimpleFilterStrategy() { }
+
+ @Override
+ public int doTry(Evaluation eval) {
+ //return eval.getDegree().toBoolean() ? PASS : DROP;
+ System.out.println(""+eval.getInfoRate());
+ if (eval.getDegree().toBoolean() && eval.getInfoRate() == 1.0f)
+ return PASS;
+ else if (eval.getDegree().toBoolean() && eval.getInfoRate() < 1.0f)
+ return HOLD;
+ else
+ return DROP;
+
+ }
+
+ @Override
+ public boolean isAllowed(Evaluation eval) {
+ return doTry(eval) == PASS;
+ }
+
+}
More information about the jboss-svn-commits
mailing list