[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