[jboss-svn-commits] JBL Code SVN: r26894 - in labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools: common and 10 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Jun 10 02:48:39 EDT 2009
Author: dsotty
Date: 2009-06-10 02:48:39 -0400 (Wed, 10 Jun 2009)
New Revision: 26894
Added:
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/AbstractOperator.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/bayesian/
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/bayesian/BayesianAlternativeOr.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/bayesian/BayesianAnd.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/bayesian/BayesianDiscounter.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/bayesian/BayesianDotAnd.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/bayesian/BayesianMergeStrategy.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/bayesian/BayesianModusPonensOperator.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/bayesian/BayesianNullHandlingStragy.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/Droobservable.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/RecordHackerNode.java
Modified:
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/bayesian/BooleanDomain.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/ImperfectAgendaGroup.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/ImperfectFactHandle.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/ProbabilityDistributionDegree.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/BayesianDegreeFactory.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/IDegreeFactory.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/IntervalDegreeFactory.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/SimpleDegreeFactory.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/IDegreeCombiner.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/NegationOperator.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/DefaultIntervalMergeStrategy.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalDiscountOperator.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalDoubleMPOperator.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalEquivOperator.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalExistsOperator.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalForAnyOperator.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalForallOperator.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalIntersectionOperator.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalLukasAndOperator.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalLukasImplicationOperator.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalLukasOrOperator.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalMaxOrOperator.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalMinAndOperator.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalModusPonensOperator.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalNegationOperator.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalXorOperator.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleAverage.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleDiscountOperator.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleDotAnd.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleDoubleMPOperator.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleEquiv.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleIdentityOperator.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleLukasAnd.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleLukasImplication.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleLukasOr.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMaxMergeStrategy.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMaxOr.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMinAnd.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMinMergeStrategy.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleProbSumOr.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleVeryModifier.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleXor.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/fuzzy/evaluators/RandomEvaluator.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/AlphaNode.java
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/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/ModusPonensNode.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ObservableRightTupleMemoryWrapper.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/OperandSet.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/builder/BuildUtils.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/builder/PatternBuilder.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/AbstractCompositeConstraint.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/AndConstraint.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/OrConstraint.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/Pattern.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/Rule.java
Log:
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/bayesian/BooleanDomain.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/bayesian/BooleanDomain.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/bayesian/BooleanDomain.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -36,4 +36,14 @@
}
+
+ public boolean equals(Object object) {
+ if (object == null)
+ return false;
+ return object instanceof BooleanDomain;
+ }
+
+ public int hashCode() {
+ return -52643423;
+ }
}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -1980,6 +1980,7 @@
// Add new degree to evaluation
//TODO: 1 should be confidence!
eval.addDegree(ruleName, degree,1,killer,true);
+ System.out.println();
//Notification is implicit in the record...
} else if (node == null) {
System.out.println("Warning - injected USELESS eval");
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/ImperfectAgendaGroup.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/ImperfectAgendaGroup.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/ImperfectAgendaGroup.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -99,7 +99,7 @@
store.remove(activ);
- System.out.println("Afer getting next");
+ System.out.println("\nAfer getting next");
System.out.println(this.getStatus());
System.out.println();
return activ;
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/ImperfectFactHandle.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/ImperfectFactHandle.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/ImperfectFactHandle.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -17,7 +17,12 @@
}
public void addPropertyDegree(Evaluation eval) {
- properties.put(eval.getKey(),eval);
+ Evaluation existing = properties.get(eval.getKey());
+ if (existing == null) {
+ properties.put(eval.getKey(),eval);
+ } else {
+ existing.merge(eval);
+ }
}
public void addPropertyDegrees(Collection<Evaluation> storedEvals) {
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/ProbabilityDistributionDegree.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/ProbabilityDistributionDegree.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/ProbabilityDistributionDegree.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -29,21 +29,46 @@
setDomain(domain);
setN(domain.getN());
setDistribution(new Matrix(getN(), 1, 1.0/getN()));
+
+ if (getDistribution().getRowDimension() != N && getDistribution().getColumnDimension() != 1)
+ throw new RuntimeException("X-ED ");
}
- public ProbabilityDistributionDegree(double[] distrib, boolean check) {
+ public ProbabilityDistributionDegree(IDomain domain, Matrix distribution) {
+ setDomain(domain);
+ setN(domain.getN());
+
+
+ double[][] data = distribution.getArray();
+ Matrix mat = new Matrix(data);
+ normalize(mat);
+
+
+ setDistribution(mat);
+
+ if (getDistribution().getRowDimension() != N && getDistribution().getColumnDimension() != 1)
+ throw new RuntimeException("X-ED 2");
+ }
+
+
+
+ public ProbabilityDistributionDegree(double[] distrib) {
+ setDomain(new BooleanDomain());
setN(distrib.length);
- if (check) {
+
double acc = 0;
for (int j = 0; j < getN(); j++)
acc += distrib[j];
- if (acc - 1 > tHold) {
- throw new RuntimeException("Invalid Probability Distribution");
- }
- }
+ if (Math.abs(acc - 1) > tHold) {
+ for (int j = 0; j < getN(); j++)
+ distrib[j] = acc == 0 ? 1.0/getN() : (distrib[j] / acc);
+ }
- setDistribution(new Matrix(distrib,1));
+ setDistribution(new Matrix(distrib,getN()));
+
+ if (getDistribution().getRowDimension() != N && getDistribution().getColumnDimension() != 1)
+ throw new RuntimeException("X-ED 3");
}
@@ -99,14 +124,149 @@
}
public String toString() {
- StringBuilder sb = new StringBuilder("<");
- for (int j = 0; j < getN(); j++) {
- sb.append(""+distribution.get(j,0));
+ if (distribution.getColumnDimension() == 1) {
+ StringBuilder sb = new StringBuilder("<");
+ for (int j = 0; j < distribution.getRowDimension(); j++) {
+ sb.append(" "+distribution.get(j,0));
+ if (j != getN() - 1)
+ sb.append(",");
+ }
+ sb.append(">");
+ return sb.toString();
+ } else {
+ StringBuilder sb = new StringBuilder("[");
+
+
+ for (int j = 0; j < distribution.getRowDimension(); j++) {
+ for (int k = 0; k < distribution.getColumnDimension(); k++) {
+ sb.append(" "+distribution.get(j,k));
if (j != getN() - 1)
- sb.append(",");
- }
- sb.append(">");
+ sb.append(" ");
+ }
+ sb.append(" ; ");
+ }
+
+ sb.append("]");
return sb.toString();
+ }
}
+
+
+ public ProbabilityDistributionDegree copy() {
+ ProbabilityDistributionDegree ans = new ProbabilityDistributionDegree(this.domain, this.distribution.copy());
+ return ans;
+ }
+
+
+ public void arrayTimesEquals(
+ ProbabilityDistributionDegree probabilityDistributionDegree) {
+ Matrix m1 = this.distribution;
+ Matrix m2 = probabilityDistributionDegree.getDistribution();
+ Matrix ans = null;
+
+ if (m1.getColumnDimension() == m2.getColumnDimension()
+ && m2.getRowDimension() == m1.getRowDimension()) {
+ ans = m1.arrayTimes(m2);
+ } else if (m2.getRowDimension() == m1.getRowDimension()
+ && m2.getColumnDimension() != m1.getColumnDimension()) {
+
+ if (m1.getColumnDimension() < m2.getColumnDimension()) {
+ this.distribution = expand(m1,m2.getColumnDimension());
+ } else {
+ m2 = expand(m2,m1.getColumnDimension());
+ }
+ ans = this.distribution.arrayTimes(m2);
+
+ } else if (m2.getRowDimension() != m1.getRowDimension()
+ && m2.getColumnDimension() == m1.getColumnDimension()) {
+
+ if (m1.getRowDimension() < m2.getRowDimension()) {
+ this.distribution = expandRow(m1,m2.getRowDimension());
+ } else {
+ m2 = expandRow(m2,m1.getRowDimension());
+ }
+ ans = this.distribution.arrayTimes(m2);
+
+
+ } else {
+ throw new RuntimeException("Mismatched matrix size, no way to convert");
+ }
+
+
+ normalize(ans);
+ setDistribution(ans);
+
+ }
+
+ private void normalize(Matrix mat) {
+ double[][] data = mat.getArray();
+ int C = mat.getColumnDimension();
+ int R = mat.getRowDimension();
+
+ double acc = 0;
+ for (int j = 0; j < R; j++)
+ for (int k = 0; k < C; k++)
+ acc += data[j][k];
+
+ if (acc != 0 && Math.abs(acc - 1) > tHold) {
+ for (int j = 0; j < R; j++)
+ for (int k = 0; k < C; k++)
+ data[j][k] /= acc;
+ }
+
+ }
+
+
+ private Matrix expand(Matrix m, int cols) {
+ // m should be 1-col
+ // need to be cols-col
+ Matrix k = new Matrix(1,cols,1.0);
+ Matrix ans = m.times(k).times(1.0/cols);
+ return ans;
+ }
+
+
+ private Matrix expandRow(Matrix m, int row) {
+ // m should be k-row
+ // need to be row-col
+ int numBlocks = row / m.getRowDimension();
+ double[][] core = m.getArray();
+ double[][] ans = new double[row][1];
+
+ for (int j = 0; j < numBlocks; j++)
+ for (int k = 0; k < m.getRowDimension(); k++)
+ ans[j*m.getRowDimension()+k][0] = (1.0/numBlocks)*core[k][0];
+
+ return new Matrix(ans);
+ }
+
+ public int hashCode() {
+ return distribution.hashCode();
+ }
+
+ public boolean equals(Object object) {
+ if (object == null)
+ return false;
+ else if (object == this)
+ return true;
+ else if (object instanceof ProbabilityDistributionDegree) {
+ ProbabilityDistributionDegree other = (ProbabilityDistributionDegree) object;
+
+ Matrix m1 = this.distribution;
+ Matrix m2 = other.distribution;
+
+ if (m1.getRowDimension() != m2.getRowDimension() || m1.getColumnDimension() != m2.getColumnDimension())
+ return false;
+
+ for (int j = 0; j < m1.getRowDimension(); j++)
+ for (int k = 0; k < m2.getColumnDimension(); k++)
+ if (Math.abs(m1.get(j,k)-m2.get(j, k)) > tHold)
+ return false;
+
+ return true;
+ } else
+ return false;
+ }
+
}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/BayesianDegreeFactory.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/BayesianDegreeFactory.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/BayesianDegreeFactory.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -1,75 +1,113 @@
package org.drools.degrees.factory;
+import java.util.StringTokenizer;
+
+import org.drools.bayesian.BooleanDomain;
import org.drools.degrees.IDegree;
+import org.drools.degrees.ProbabilityDistributionDegree;
import org.drools.degrees.operators.IDegreeCombiner;
import org.drools.degrees.operators.IDiscountOperator;
import org.drools.degrees.operators.IDiscountStrategy;
import org.drools.degrees.operators.IMergeStrategy;
import org.drools.degrees.operators.INullHandlingStrategy;
+import org.drools.degrees.operators.bayesian.BayesianAlternativeOr;
+import org.drools.degrees.operators.bayesian.BayesianAnd;
+import org.drools.degrees.operators.bayesian.BayesianDiscounter;
+import org.drools.degrees.operators.bayesian.BayesianMergeStrategy;
+import org.drools.degrees.operators.bayesian.BayesianModusPonensOperator;
+import org.drools.degrees.operators.bayesian.BayesianNullHandlingStragy;
+
+import org.drools.reteoo.filters.AlwaysPassFilterStrategy;
import org.drools.reteoo.filters.IFilterStrategy;
+import Jama.Matrix;
+
public class BayesianDegreeFactory implements IDegreeFactory {
boolean cwa = false;
- public IDegree False() {
- // TODO Auto-generated method stub
- return null;
+ public IDegree False() {
+ return new ProbabilityDistributionDegree(new double[] {1,0});
}
public IDegree Random() {
- // TODO Auto-generated method stub
- return null;
+ double r = Math.random();
+// return new ProbabilityDistributionDegree(new double[] {r,1-r});
+ return new ProbabilityDistributionDegree(new double[] {0.3,0.7});
}
public IDegree True() {
- // TODO Auto-generated method stub
- return null;
+ return new ProbabilityDistributionDegree(new double[] {0,1});
}
public IDegree Unknown() {
- // TODO Auto-generated method stub
- return null;
+ return new ProbabilityDistributionDegree(new double[] {0.5,0.5});
}
- public IDegree buildDegree(float val) {
- // TODO Auto-generated method stub
- return null;
+
+
+
+
+
+
+ public IDegree buildDegree(double val) {
+ return new ProbabilityDistributionDegree(new double[] {val,1-val});
}
+
+
public IDegree buildDegree(String priorStr) {
- // TODO Auto-generated method stub
- return null;
+ String valueS = priorStr.trim();
+ valueS = valueS.substring(1,valueS.length()-1);
+
+ StringTokenizer tok = new StringTokenizer(valueS,";");
+ int rows = tok.countTokens();
+
+ String row = tok.nextToken();
+ StringTokenizer tokRow = new StringTokenizer(row,", ");
+ int cols = tokRow.countTokens();
+
+ double[][] core = new double[rows][cols];
+ for (int r = 0; r < rows; r++) {
+ for (int k = 0; k < cols; k++) {
+ core[r][k] = Double.parseDouble(tokRow.nextToken());
+ }
+ if (r != rows-1) {
+ row = tok.nextToken();
+ tokRow = new StringTokenizer(row,", ");
+ }
+ }
+
+ return new ProbabilityDistributionDegree(new BooleanDomain(),new Matrix(core));
}
+
+
public IDegree fromBoolean(boolean b) {
- // TODO Auto-generated method stub
- return null;
+ return b ? True() : False();
}
+
+
public IDegreeCombiner getAggregator() {
// TODO Auto-generated method stub
return null;
}
public IDegreeCombiner getAndOperator() {
- // TODO Auto-generated method stub
- return null;
+ return new BayesianAnd();
}
public IDegreeCombiner getAndOperator(String params) {
- // TODO Auto-generated method stub
- return null;
+ return new BayesianAnd();
}
public IFilterStrategy getDefaultStrategy() {
- // TODO Auto-generated method stub
- return null;
+ return new AlwaysPassFilterStrategy();
}
public IDiscountOperator getDiscountOperator() {
- // TODO Auto-generated method stub
- return null;
+ return new BayesianDiscounter();
}
public IDegreeCombiner getDiscountOperator(String params) {
@@ -143,8 +181,7 @@
}
public IMergeStrategy getMergeStrategy() {
- // TODO Auto-generated method stub
- return null;
+ return new BayesianMergeStrategy();
}
public IDegreeCombiner getMinAndOperator() {
@@ -158,8 +195,7 @@
}
public IDegreeCombiner getModusPonensOperator(String params) {
- // TODO Auto-generated method stub
- return null;
+ return new BayesianModusPonensOperator();
}
public IDegreeCombiner getNegationOperator() {
@@ -168,18 +204,15 @@
}
public INullHandlingStrategy getNullHandlingStrategy() {
- // TODO Auto-generated method stub
- return null;
+ return new BayesianNullHandlingStragy();
}
public IDegreeCombiner getOrOperator() {
- // TODO Auto-generated method stub
- return null;
+ return new BayesianAlternativeOr();
}
public IDegreeCombiner getOrOperator(String params) {
- // TODO Auto-generated method stub
- return null;
+ return new BayesianAlternativeOr(params);
}
public IDegreeCombiner getXorOperator() {
@@ -192,14 +225,15 @@
return null;
}
- public boolean isClosedWorldAssumption() {
- // TODO Auto-generated method stub
+
+
+ public boolean isClosedWorldAssumption() {
return false;
}
public void setClosedWorldAssumption(boolean cwa) {
- // TODO Auto-generated method stub
-
+ // do nothing
+ this.cwa = false;
}
}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/IDegreeFactory.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/IDegreeFactory.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/IDegreeFactory.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -17,7 +17,7 @@
public boolean isClosedWorldAssumption();
- public IDegree buildDegree(float val);
+ public IDegree buildDegree(double val);
public IDegree True();
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/IntervalDegreeFactory.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/IntervalDegreeFactory.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/IntervalDegreeFactory.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -59,7 +59,7 @@
return new IntervalDegree(low,upp);
}
- public IDegree buildDegree(float val) {
+ public IDegree buildDegree(double val) {
return new IntervalDegree(val,val);
}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/SimpleDegreeFactory.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/SimpleDegreeFactory.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/SimpleDegreeFactory.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -66,7 +66,7 @@
return new SimpleDegree((float) Math.random());
}
- public IDegree buildDegree(float val) {
+ public IDegree buildDegree(double val) {
return new SimpleDegree(val);
}
@@ -184,11 +184,11 @@
public IDegreeCombiner getAndOperator(String params) {
if (params == null)
return getAndOperator();
- if (params.equals("Lukas"))
+ if (params.equals("kind:Lukas"))
return new SimpleLukasAnd();
- else if (params.equals("Prod"))
+ else if (params.equals("kind:Prod"))
return new SimpleDotAnd();
- else if (params.equals("Min"))
+ else if (params.equals("kind:Min"))
return new SimpleMinAnd();
else return getAndOperator();
}
@@ -209,11 +209,11 @@
if (params == null)
return getOrOperator();
- if (params.equals("Lukas"))
+ if (params.equals("kind:Lukas"))
return new SimpleLukasOr();
- else if (params.equals("Plus"))
+ else if (params.equals("kind:Plus"))
return new SimpleProbSumOr();
- else if (params.equals("Max"))
+ else if (params.equals("kind:Max"))
return new SimpleMaxOr();
else return getOrOperator();
}
@@ -248,13 +248,9 @@
if (params == null)
return getModusPonensOp();
- if (params.equals("implication")) {
- return getModusPonensOp();
- } else if (params.equals("equivalence")) {
- return getDoubleMPOperator();
- } else
- return getModusPonensOp();
+ return getAndOperator(params);
+
}
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/AbstractOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/AbstractOperator.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/AbstractOperator.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -0,0 +1,53 @@
+package org.drools.degrees.operators;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.factory.IDegreeFactory;
+import org.drools.reteoo.CompositeEvaluation;
+import org.drools.reteoo.Evaluation;
+
+public abstract class AbstractOperator implements IDegreeCombiner {
+
+
+
+ public IDegree eval(Collection<? extends IDegree> args,
+ IDegreeFactory factory) {
+ IDegree[] argz = new IDegree[args.size()];
+ Iterator<? extends IDegree> iter = args.iterator();
+ for (int j = 0; j < args.size(); j++)
+ argz[j] = iter.next();
+ return eval(argz,factory);
+ }
+
+
+ public IDegree eval(Evaluation evaluation, IDegreeFactory factory) {
+ IDegree[] args;
+ if (evaluation instanceof CompositeEvaluation) {
+ CompositeEvaluation combo = (CompositeEvaluation) evaluation;
+ args = null;
+
+ if (combo.getOperands() != null) {
+ int N = combo.getOperands().size();
+ args = new IDegree[N];
+
+ int j = 0;
+ for (Evaluation eval : combo.getOperands()) {
+ args[j++] = eval == null ? factory.getNullHandlingStrategy().convertNull(factory) : eval.getDegree();
+ }
+ }
+
+
+ } else {
+ args = new IDegree[] {evaluation.getDegree()};
+ }
+
+ return eval(args,factory);
+ }
+
+ public boolean isTruthFunctional() {
+ return true;
+ }
+
+}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/IDegreeCombiner.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/IDegreeCombiner.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/IDegreeCombiner.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -8,6 +8,8 @@
import org.drools.degrees.IDegree;
import org.drools.degrees.factory.IDegreeFactory;
+import org.drools.reteoo.CompositeEvaluation;
+import org.drools.reteoo.Evaluation;
/**
@@ -33,4 +35,8 @@
public String getName();
+ public boolean isTruthFunctional();
+
+ public IDegree eval(Evaluation eval, IDegreeFactory factory);
+
}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/NegationOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/NegationOperator.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/NegationOperator.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -5,7 +5,7 @@
import org.drools.degrees.IDegree;
import org.drools.degrees.factory.IDegreeFactory;
-public abstract class NegationOperator implements IDegreeCombiner {
+public abstract class NegationOperator extends AbstractOperator implements IDegreeCombiner {
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/bayesian/BayesianAlternativeOr.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/bayesian/BayesianAlternativeOr.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/bayesian/BayesianAlternativeOr.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -0,0 +1,224 @@
+package org.drools.degrees.operators.bayesian;
+
+import java.util.Iterator;
+import java.util.StringTokenizer;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.ProbabilityDistributionDegree;
+import org.drools.degrees.factory.IDegreeFactory;
+import org.drools.degrees.operators.AbstractOperator;
+import org.drools.reteoo.CompositeEvaluation;
+import org.drools.reteoo.EvalRecord;
+import org.drools.reteoo.Evaluation;
+
+import Jama.Matrix;
+
+public class BayesianAlternativeOr extends AbstractOperator {
+
+ private boolean isLambda = false;
+
+ private String linkSource = null;
+
+ private int skip = -1;
+
+ public BayesianAlternativeOr() {
+
+ }
+
+ public BayesianAlternativeOr(String params) {
+ StringTokenizer tok = new StringTokenizer(params,",");
+ while (tok.hasMoreTokens()) {
+ String param = tok.nextToken();
+ if (param.startsWith("args:")) {
+
+ param = param.substring(5);
+ if (param.startsWith("lambda"))
+ setLambda(true);
+
+ if (param.startsWith("lambda") || param.startsWith("pi")) {
+ setLinkSource(revert(param));;
+ }
+
+ int ix = param.lastIndexOf('_');
+ if (isLambda() && ix >= 0)
+ setSkip(Integer.parseInt(param.substring(ix+1).trim()));
+ }
+
+
+ }
+ }
+
+
+
+
+
+ public IDegree eval(IDegree[] args, IDegreeFactory factory) {
+ if (args.length == 0)
+ return factory.Unknown();
+
+ int n = args.length;
+ int N = (int) Math.pow(2,args.length);
+ int M = getSkip() >= 0 ? 2 : 1;
+ double[][] core = new double[N/M][M];
+
+
+ for (int j = 0; j < N; j++) {
+ double x = 1;
+
+ for (int k = 0; k < n; k++) {
+ int pow = (int) Math.pow(2,k);
+ int bit = (j & pow) > 0 ? 1 : 0;
+
+ x *= ((ProbabilityDistributionDegree) args[k]).getDistribution().get(bit,0);
+ }
+
+ core[j][0] = x;
+ }
+
+ System.out.println();
+
+
+ return new ProbabilityDistributionDegree(((ProbabilityDistributionDegree) args[0]).getDomain(),new Matrix(core));
+ }
+
+
+
+
+
+ public IDegree eval(Evaluation evaluation, IDegreeFactory factory) {
+ CompositeEvaluation combo = (CompositeEvaluation) evaluation;
+
+ IDegree[] args = new IDegree[combo.getOperands().size()];
+ // Need to clean the operands from the lambda inv contribution
+
+ Iterator<Evaluation> iter = combo.getOperands().iterator();
+ int j = 0;
+ while (iter.hasNext()) {
+
+ Evaluation operand = iter.next();
+
+ Evaluation sub = lookForBit(operand,getLinkSource());
+ if (sub != null) {
+ operand = sub;
+
+
+ IDegree[] bits = new IDegree[operand.getDegreeBitSources().size()-1];
+ int k = 0;
+ for (String source : operand.getDegreeBitSources()) {
+ if (! matches(source,(getLinkSource())))
+ bits[k++] = operand.getDegreeBit(source);
+ }
+ ProbabilityDistributionDegree msg = (ProbabilityDistributionDegree) factory.getMergeStrategy().eval(bits, factory);
+
+ args[j++] = msg;
+
+ } else {
+
+ args[j++] = operand.getDegree();
+ }
+// ProbabilityDistributionDegree msg = (ProbabilityDistributionDegree) factory.getMergeStrategy().eval(args, factory);
+
+ //ProbabilityDistributionDegree distr = (ProbabilityDistributionDegree) operand.getDegree();
+ //Matrix belief = distr.getDistribution();
+//
+// Evaluation combo = (ruleId.indexOf("->") > -1) ? lookForBit(premise,target) : null;
+// if (combo != null) {
+// exclude = true;
+// premise = combo;
+//
+// IDegree[] args = new IDegree[premise.getDegreeBitSources().size()-1];
+// int j = 0;
+// for (String source : premise.getDegreeBitSources()) {
+// if (! source.equals(target))
+// args[j++] = premise.getDegreeBit(source);
+// }
+//
+// ProbabilityDistributionDegree msg = (ProbabilityDistributionDegree) factory.getMergeStrategy().eval(args, factory);
+// belief = msg.getDistribution();
+//
+// }
+
+
+ }
+
+
+
+ return eval(args,factory);
+ }
+
+
+
+ private Evaluation lookForBit(Evaluation operand, String key) {
+ for (String bit : operand.getDegreeBitSources())
+ if (matches(bit,key))
+ return operand;
+ if (operand instanceof CompositeEvaluation) {
+ CompositeEvaluation combo = (CompositeEvaluation) operand;
+ for (Evaluation eval : combo.getOperands()) {
+ Evaluation ans = lookForBit(eval,key);
+ if (ans != null)
+ return ans;
+ }
+ }
+ return null;
+ }
+
+ private boolean matches(String bit, String key) {
+ int ix1 = bit.lastIndexOf('_');
+ int ix2 = key.lastIndexOf('_');
+
+ String test1 = (ix1 >= 0 && bit.startsWith("lambda")) ? bit.substring(0,ix1) : bit;
+ String test2 = (ix2 >= 0 && key.startsWith("lambda")) ? key.substring(0,ix2) : key;
+ return (test1.equals(test2));
+ }
+
+ private String revert(String ruleId) {
+ int idx = ruleId.indexOf(':');
+ String type = ruleId.substring(0,idx);
+
+ String rule = ruleId.substring(idx+1);
+ int idx2 = rule.lastIndexOf('_');
+ if (type.equals("lambda") && idx2 >= 0)
+ rule = rule.substring(0,idx2);
+
+ String ntype = type.equals("lambda") ? "pi" : "lambda";
+
+ return ntype + ":" + rule;
+
+ }
+
+
+ public boolean isTruthFunctional() {
+ return false;
+ }
+
+
+ public String getName() {
+ return "B_vel";
+ }
+
+ public void setLinkSource(String linkSource) {
+ this.linkSource = linkSource;
+ }
+
+ public String getLinkSource() {
+ return linkSource;
+ }
+
+ public void setLambda(boolean isLambda) {
+ this.isLambda = isLambda;
+ }
+
+ public boolean isLambda() {
+ return isLambda;
+ }
+
+ public void setSkip(int skip) {
+ this.skip = skip;
+ }
+
+ public int getSkip() {
+ return skip;
+ }
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/bayesian/BayesianAnd.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/bayesian/BayesianAnd.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/bayesian/BayesianAnd.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -0,0 +1,59 @@
+package org.drools.degrees.operators.bayesian;
+
+import java.lang.reflect.Array;
+import java.util.Collection;
+import java.util.Iterator;
+
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.ProbabilityDistributionDegree;
+import org.drools.degrees.factory.IDegreeFactory;
+import org.drools.degrees.operators.AbstractOperator;
+import org.drools.degrees.operators.IDegreeCombiner;
+import org.drools.util.ArrayUtils;
+
+import Jama.Matrix;
+
+public class BayesianAnd extends AbstractOperator implements IDegreeCombiner {
+
+ public IDegree eval(IDegree[] args, IDegreeFactory factory) {
+ if (args.length == 0)
+ return factory.Unknown();
+
+
+ ProbabilityDistributionDegree p0 = (ProbabilityDistributionDegree) args[0];
+ double[][] core = p0.getDistribution().getArrayCopy();
+
+ for (int j = 1 ; j < args.length; j++) {
+ double[][] more = ((ProbabilityDistributionDegree) args[j]).getDistribution().getArray();
+ core[1][0] = core[1][0]*more[1][0];
+ core[0][0] = 1-core[1][0];
+ }
+
+ return new ProbabilityDistributionDegree(p0.getDomain(),new Matrix(core));
+
+ }
+
+ public IDegree eval(Collection<? extends IDegree> args,
+ IDegreeFactory factory) {
+ if (args.size() == 0)
+ return factory.Unknown();
+
+ Iterator<? extends IDegree> iter = args.iterator();
+ ProbabilityDistributionDegree p0 = (ProbabilityDistributionDegree) iter.next();
+ double[][] core = p0.getDistribution().getArrayCopy();
+
+ while (iter.hasNext()) {
+ double[][] more = ((ProbabilityDistributionDegree) iter.next()).getDistribution().getArray();
+ core[1][0] = core[1][0]*more[1][0];
+ core[0][0] = 1-core[1][0];
+ }
+
+ return new ProbabilityDistributionDegree(p0.getDomain(),new Matrix(core));
+ }
+
+ public String getName() {
+ return "B_and";
+ }
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/bayesian/BayesianDiscounter.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/bayesian/BayesianDiscounter.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/bayesian/BayesianDiscounter.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -0,0 +1,39 @@
+package org.drools.degrees.operators.bayesian;
+
+import java.util.Collection;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.ProbabilityDistributionDegree;
+import org.drools.degrees.factory.IDegreeFactory;
+import org.drools.degrees.operators.AbstractOperator;
+import org.drools.degrees.operators.IDiscountOperator;
+
+import Jama.Matrix;
+
+public class BayesianDiscounter extends AbstractOperator implements IDiscountOperator {
+
+ public IDegree discount(IDegree arg, double strength) {
+ ProbabilityDistributionDegree p = (ProbabilityDistributionDegree) arg;
+ Matrix m = p.getDistribution();
+ int N = m.getRowDimension();
+ double[] distr = new double[N];
+ for (int j = 0; j < N; j++)
+ distr[j] = m.get(j,1)*strength + (1.0-strength)/N;
+ Matrix discountedDistr = new Matrix(distr,1);
+ return new ProbabilityDistributionDegree(p.getDomain(),discountedDistr);
+ }
+
+ public IDegree eval(IDegree[] args, IDegreeFactory factory) {
+ return args[0];
+ }
+
+ public IDegree eval(Collection<? extends IDegree> args,
+ IDegreeFactory factory) {
+ return args.iterator().next();
+ }
+
+ public String getName() {
+ return "B_disc";
+ }
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/bayesian/BayesianDotAnd.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/bayesian/BayesianDotAnd.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/bayesian/BayesianDotAnd.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -0,0 +1,62 @@
+package org.drools.degrees.operators.bayesian;
+
+import java.lang.reflect.Array;
+import java.util.Collection;
+import java.util.Iterator;
+
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.ProbabilityDistributionDegree;
+import org.drools.degrees.factory.IDegreeFactory;
+import org.drools.degrees.operators.AbstractOperator;
+import org.drools.degrees.operators.IDegreeCombiner;
+import org.drools.util.ArrayUtils;
+
+import Jama.Matrix;
+
+public class BayesianDotAnd extends AbstractOperator implements IDegreeCombiner {
+
+ public IDegree eval(IDegree[] args, IDegreeFactory factory) {
+ if (args.length == 0)
+ return factory.Unknown();
+
+
+ ProbabilityDistributionDegree p0 = ((ProbabilityDistributionDegree) args[0]).copy();
+ //Matrix core = p0.getDistribution().copy();
+
+
+ for (int j = 1 ; j < args.length; j++) {
+ //Matrix more = ((ProbabilityDistributionDegree) args[j]).getDistribution();
+ //core.arrayTimesEquals(more);
+ p0.arrayTimesEquals(((ProbabilityDistributionDegree) args[j]));
+ }
+
+ //return new ProbabilityDistributionDegree(p0.getDomain(),core);
+ return p0;
+ }
+
+ public IDegree eval(Collection<? extends IDegree> args,
+ IDegreeFactory factory) {
+ if (args.size() == 0)
+ return factory.Unknown();
+
+ Iterator<? extends IDegree> iter = args.iterator();
+ ProbabilityDistributionDegree p0 = ((ProbabilityDistributionDegree) iter.next()).copy();
+ //Matrix core = p0.getDistribution().copy();
+
+
+ while (iter.hasNext()) {
+ //Matrix more = ((ProbabilityDistributionDegree) args[j]).getDistribution();
+ //core.arrayTimesEquals(more);
+ p0.arrayTimesEquals(((ProbabilityDistributionDegree) iter.next()));
+ }
+
+ //return new ProbabilityDistributionDegree(p0.getDomain(),core);
+ return p0;
+ }
+
+ public String getName() {
+ return "B_.*";
+ }
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/bayesian/BayesianMergeStrategy.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/bayesian/BayesianMergeStrategy.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/bayesian/BayesianMergeStrategy.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -0,0 +1,57 @@
+package org.drools.degrees.operators.bayesian;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.ProbabilityDistributionDegree;
+import org.drools.degrees.factory.IDegreeFactory;
+import org.drools.degrees.operators.AbstractOperator;
+import org.drools.degrees.operators.IDiscountStrategy;
+import org.drools.degrees.operators.IMergeStrategy;
+import org.drools.degrees.operators.INullHandlingStrategy;
+import org.drools.degrees.operators.intervals.IntervalIntersectionOperator;
+
+import Jama.Matrix;
+
+public class BayesianMergeStrategy extends AbstractOperator implements IMergeStrategy {
+
+ private BayesianDotAnd op = new BayesianDotAnd();
+
+
+ public IDegree eval(IDegree[] degrees, boolean[] killerFlags,
+ INullHandlingStrategy nullStrat, IDegreeFactory factory) {
+
+ IDegree[] args = new IDegree[degrees.length];
+
+ for (int j = 0; j < degrees.length; j++) {
+ args[j] = degrees[j] != null ? degrees[j] : nullStrat.convertNull(factory);
+ }
+
+ if (killerFlags != null) {
+ IDiscountStrategy discountStrat = factory.getDiscountStrategy();
+ return op.eval(discountStrat.discount(args, killerFlags,factory), factory);
+ } else {
+ return op.eval(args, factory);
+ }
+
+ }
+
+ public IDegree eval(IDegree[] args, IDegreeFactory factory) {
+ return eval(args, null, factory.getNullHandlingStrategy(),factory);
+ }
+
+ public IDegree eval(Collection<? extends IDegree> args,
+ IDegreeFactory factory) {
+ Iterator<? extends IDegree> iter = args.iterator();
+ IDegree[] argArray = new IDegree[args.size()];
+ for (int j = 0; j < argArray.length; j++)
+ argArray[j] = iter.next();
+ return eval(argArray, null, factory.getNullHandlingStrategy(),factory);
+ }
+
+ public String getName() {
+ return "B_merge";
+ }
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/bayesian/BayesianModusPonensOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/bayesian/BayesianModusPonensOperator.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/bayesian/BayesianModusPonensOperator.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -0,0 +1,168 @@
+package org.drools.degrees.operators.bayesian;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.ProbabilityDistributionDegree;
+import org.drools.degrees.factory.IDegreeFactory;
+import org.drools.degrees.operators.AbstractOperator;
+import org.drools.degrees.operators.IDegreeCombiner;
+import org.drools.reteoo.CompositeEvaluation;
+import org.drools.reteoo.EvalRecord;
+import org.drools.reteoo.Evaluation;
+
+import Jama.Matrix;
+
+public class BayesianModusPonensOperator extends AbstractOperator implements IDegreeCombiner {
+
+ public IDegree eval(IDegree[] args, IDegreeFactory factory) {
+// if (args.length < 2)
+// return factory.Unknown();
+//
+// ProbabilityDistributionDegree prem = (ProbabilityDistributionDegree) args[0];
+// ProbabilityDistributionDegree impl = (ProbabilityDistributionDegree) args[1];
+//
+// Matrix conclDistr = impl.getDistribution().times(prem.getDistribution());
+//
+// return new ProbabilityDistributionDegree(impl.getDomain(),conclDistr);
+ throw new UnsupportedOperationException("Should not be here...., Bayes MP is not t-functional");
+ }
+
+
+
+
+
+
+ public IDegree eval(Evaluation evaluation, IDegreeFactory factory) {
+ boolean exclude = false;
+
+
+ EvalRecord record = (EvalRecord) evaluation;
+ if (record.getOperands().size() < 2)
+ return factory.Unknown();
+
+ Iterator<Evaluation> iter = record.getOperands().iterator();
+
+ String ruleId = record.getRuleId();
+//
+//
+//
+// String target = revertLinkId(ruleId);
+//
+ Evaluation premise = iter.next();
+ ProbabilityDistributionDegree premDistr = (ProbabilityDistributionDegree) premise.getDegree();
+ Matrix belief = premDistr.getDistribution();
+//
+// Evaluation combo = (ruleId.indexOf("->") > -1) ? lookForBit(premise,target) : null;
+// if (combo != null) {
+// exclude = true;
+// premise = combo;
+//
+// IDegree[] args = new IDegree[premise.getDegreeBitSources().size()-1];
+// int j = 0;
+// for (String source : premise.getDegreeBitSources()) {
+// if (! source.equals(target))
+// args[j++] = premise.getDegreeBit(source);
+// }
+//
+// ProbabilityDistributionDegree msg = (ProbabilityDistributionDegree) factory.getMergeStrategy().eval(args, factory);
+// belief = msg.getDistribution();
+//
+// }
+//
+
+ ProbabilityDistributionDegree condTable = (ProbabilityDistributionDegree) iter.next().getDegree();
+
+ Matrix conclDistr = null;
+ if (isLambda(ruleId)) {
+ conclDistr = (belief.transpose().times(condTable.getDistribution())).transpose();
+ } else {
+ conclDistr = condTable.getDistribution().times(belief);
+ }
+
+ return new ProbabilityDistributionDegree(premDistr.getDomain(), conclDistr );
+ }
+
+
+
+
+ /*
+ public IDegree eval(Evaluation evaluation, IDegreeFactory factory) {
+ boolean exclude = false;
+
+
+ EvalRecord record = (EvalRecord) evaluation;
+ if (record.getOperands().size() < 2)
+ return factory.Unknown();
+
+ Iterator<Evaluation> iter = record.getOperands().iterator();
+
+ String ruleId = record.getRuleId();
+
+
+
+ String target = revertLinkId(ruleId);
+
+ Evaluation premise = iter.next();
+ ProbabilityDistributionDegree premDistr = (ProbabilityDistributionDegree) premise.getDegree();
+ Matrix belief = premDistr.getDistribution();
+
+ Evaluation combo = (ruleId.indexOf("->") > -1) ? lookForBit(premise,target) : null;
+ if (combo != null) {
+ exclude = true;
+ premise = combo;
+
+ IDegree[] args = new IDegree[premise.getDegreeBitSources().size()-1];
+ int j = 0;
+ for (String source : premise.getDegreeBitSources()) {
+ if (! source.equals(target))
+ args[j++] = premise.getDegreeBit(source);
+ }
+
+ ProbabilityDistributionDegree msg = (ProbabilityDistributionDegree) factory.getMergeStrategy().eval(args, factory);
+ belief = msg.getDistribution();
+
+ }
+
+
+ ProbabilityDistributionDegree condTable = (ProbabilityDistributionDegree) iter.next().getDegree();
+
+ Matrix conclDistr = null;
+ if (isLambda(ruleId)) {
+ conclDistr = (belief.transpose().times(condTable.getDistribution())).transpose();
+ } else {
+ conclDistr = condTable.getDistribution().times(belief);
+ }
+
+ return new ProbabilityDistributionDegree(premDistr.getDomain(), conclDistr );
+ }
+
+ */
+
+
+// private String revertLinkId(String ruleId) {
+// if (isLambda(ruleId))
+// return ruleId.substring(4);
+// else
+// return "Inv:"+ruleId;
+// }
+
+ private boolean isLambda(String ruleId) {
+ return ruleId.startsWith("lambda");
+ }
+
+
+
+
+
+ public boolean isTruthFunctional() {
+ return false;
+ }
+
+ public String getName() {
+ return "B_m|p";
+ }
+
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/bayesian/BayesianNullHandlingStragy.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/bayesian/BayesianNullHandlingStragy.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/bayesian/BayesianNullHandlingStragy.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -0,0 +1,13 @@
+package org.drools.degrees.operators.bayesian;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.factory.IDegreeFactory;
+import org.drools.degrees.operators.INullHandlingStrategy;
+
+public class BayesianNullHandlingStragy implements INullHandlingStrategy {
+
+ public IDegree convertNull(IDegreeFactory factory) {
+ return factory.Unknown();
+ }
+
+}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/DefaultIntervalMergeStrategy.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/DefaultIntervalMergeStrategy.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/DefaultIntervalMergeStrategy.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -6,12 +6,13 @@
import org.drools.degrees.IDegree;
import org.drools.degrees.IntervalDegree;
import org.drools.degrees.factory.IDegreeFactory;
+import org.drools.degrees.operators.AbstractOperator;
import org.drools.degrees.operators.IDiscountStrategy;
import org.drools.degrees.operators.IMergeStrategy;
import org.drools.degrees.operators.INullHandlingStrategy;
import org.drools.reteoo.DiscountOperatorInstaller;
-public class DefaultIntervalMergeStrategy implements IMergeStrategy {
+public class DefaultIntervalMergeStrategy extends AbstractOperator implements IMergeStrategy {
private IntervalIntersectionOperator op = new IntervalIntersectionOperator();
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalDiscountOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalDiscountOperator.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalDiscountOperator.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -9,10 +9,11 @@
import org.drools.degrees.factory.IDegreeFactory;
import org.drools.degrees.factory.IntervalDegreeFactory;
import org.drools.degrees.factory.SimpleDegreeFactory;
+import org.drools.degrees.operators.AbstractOperator;
import org.drools.degrees.operators.IDegreeCombiner;
import org.drools.degrees.operators.IDiscountOperator;
-public class IntervalDiscountOperator implements IDiscountOperator {
+public class IntervalDiscountOperator extends AbstractOperator implements IDiscountOperator {
public IDegree discount(IDegree arg, double strength) {
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalDoubleMPOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalDoubleMPOperator.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalDoubleMPOperator.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -9,10 +9,11 @@
import org.drools.degrees.factory.IDegreeFactory;
import org.drools.degrees.factory.IntervalDegreeFactory;
import org.drools.degrees.factory.SimpleDegreeFactory;
+import org.drools.degrees.operators.AbstractOperator;
import org.drools.degrees.operators.IDegreeCombiner;
import org.drools.time.Interval;
-public class IntervalDoubleMPOperator implements IDegreeCombiner {
+public class IntervalDoubleMPOperator extends AbstractOperator implements IDegreeCombiner {
public IDegree eval(IDegree[] args, IDegreeFactory factory) {
if (args == null || args.length < 2)
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalEquivOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalEquivOperator.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalEquivOperator.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -7,9 +7,10 @@
import org.drools.degrees.IntervalDegree;
import org.drools.degrees.factory.IDegreeFactory;
import org.drools.degrees.factory.IntervalDegreeFactory;
+import org.drools.degrees.operators.AbstractOperator;
import org.drools.degrees.operators.IDegreeCombiner;
-public class IntervalEquivOperator implements IDegreeCombiner {
+public class IntervalEquivOperator extends AbstractOperator implements IDegreeCombiner {
public IDegree eval(IDegree[] args, IDegreeFactory factory) {
if (args == null || args.length < 2)
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalExistsOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalExistsOperator.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalExistsOperator.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -6,9 +6,10 @@
import org.drools.degrees.IntervalDegree;
import org.drools.degrees.factory.IDegreeFactory;
import org.drools.degrees.factory.IntervalDegreeFactory;
+import org.drools.degrees.operators.AbstractOperator;
import org.drools.degrees.operators.IDegreeCombiner;
-public class IntervalExistsOperator implements IDegreeCombiner {
+public class IntervalExistsOperator extends AbstractOperator implements IDegreeCombiner {
public IDegree eval(IDegree[] args, IDegreeFactory factory) {
if (args == null || args.length == 0)
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalForAnyOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalForAnyOperator.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalForAnyOperator.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -6,9 +6,10 @@
import org.drools.degrees.IntervalDegree;
import org.drools.degrees.factory.IDegreeFactory;
import org.drools.degrees.factory.IntervalDegreeFactory;
+import org.drools.degrees.operators.AbstractOperator;
import org.drools.degrees.operators.IDegreeCombiner;
-public class IntervalForAnyOperator implements IDegreeCombiner {
+public class IntervalForAnyOperator extends AbstractOperator implements IDegreeCombiner {
public IDegree eval(IDegree[] args, IDegreeFactory factory) {
if (args == null || args.length == 0)
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalForallOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalForallOperator.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalForallOperator.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -6,9 +6,10 @@
import org.drools.degrees.IntervalDegree;
import org.drools.degrees.factory.IDegreeFactory;
import org.drools.degrees.factory.IntervalDegreeFactory;
+import org.drools.degrees.operators.AbstractOperator;
import org.drools.degrees.operators.IDegreeCombiner;
-public class IntervalForallOperator implements IDegreeCombiner {
+public class IntervalForallOperator extends AbstractOperator implements IDegreeCombiner {
public IDegree eval(IDegree[] args, IDegreeFactory factory) {
if (args == null || args.length == 0)
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalIntersectionOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalIntersectionOperator.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalIntersectionOperator.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -6,9 +6,10 @@
import org.drools.degrees.IntervalDegree;
import org.drools.degrees.factory.IDegreeFactory;
import org.drools.degrees.factory.IntervalDegreeFactory;
+import org.drools.degrees.operators.AbstractOperator;
import org.drools.degrees.operators.IDegreeCombiner;
-public class IntervalIntersectionOperator implements IDegreeCombiner {
+public class IntervalIntersectionOperator extends AbstractOperator implements IDegreeCombiner {
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalLukasAndOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalLukasAndOperator.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalLukasAndOperator.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -6,9 +6,10 @@
import org.drools.degrees.IntervalDegree;
import org.drools.degrees.factory.IDegreeFactory;
import org.drools.degrees.factory.IntervalDegreeFactory;
+import org.drools.degrees.operators.AbstractOperator;
import org.drools.degrees.operators.IDegreeCombiner;
-public class IntervalLukasAndOperator implements IDegreeCombiner {
+public class IntervalLukasAndOperator extends AbstractOperator implements IDegreeCombiner {
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalLukasImplicationOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalLukasImplicationOperator.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalLukasImplicationOperator.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -7,9 +7,10 @@
import org.drools.degrees.IntervalDegree;
import org.drools.degrees.factory.IDegreeFactory;
import org.drools.degrees.factory.IntervalDegreeFactory;
+import org.drools.degrees.operators.AbstractOperator;
import org.drools.degrees.operators.IDegreeCombiner;
-public class IntervalLukasImplicationOperator implements IDegreeCombiner {
+public class IntervalLukasImplicationOperator extends AbstractOperator implements IDegreeCombiner {
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalLukasOrOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalLukasOrOperator.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalLukasOrOperator.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -6,9 +6,10 @@
import org.drools.degrees.IntervalDegree;
import org.drools.degrees.factory.IDegreeFactory;
import org.drools.degrees.factory.IntervalDegreeFactory;
+import org.drools.degrees.operators.AbstractOperator;
import org.drools.degrees.operators.IDegreeCombiner;
-public class IntervalLukasOrOperator implements IDegreeCombiner {
+public class IntervalLukasOrOperator extends AbstractOperator implements IDegreeCombiner {
public IDegree eval(IDegree[] args, IDegreeFactory factory) {
if (args == null || args.length == 0)
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalMaxOrOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalMaxOrOperator.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalMaxOrOperator.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -6,9 +6,10 @@
import org.drools.degrees.IntervalDegree;
import org.drools.degrees.factory.IDegreeFactory;
import org.drools.degrees.factory.IntervalDegreeFactory;
+import org.drools.degrees.operators.AbstractOperator;
import org.drools.degrees.operators.IDegreeCombiner;
-public class IntervalMaxOrOperator implements IDegreeCombiner {
+public class IntervalMaxOrOperator extends AbstractOperator implements IDegreeCombiner {
public IDegree eval(IDegree[] args, IDegreeFactory factory) {
if (args == null || args.length == 0)
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalMinAndOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalMinAndOperator.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalMinAndOperator.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -6,9 +6,10 @@
import org.drools.degrees.IntervalDegree;
import org.drools.degrees.factory.IDegreeFactory;
import org.drools.degrees.factory.IntervalDegreeFactory;
+import org.drools.degrees.operators.AbstractOperator;
import org.drools.degrees.operators.IDegreeCombiner;
-public class IntervalMinAndOperator implements IDegreeCombiner {
+public class IntervalMinAndOperator extends AbstractOperator implements IDegreeCombiner {
public IDegree eval(IDegree[] args, IDegreeFactory factory) {
if (args == null || args.length == 0)
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalModusPonensOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalModusPonensOperator.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalModusPonensOperator.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -7,9 +7,10 @@
import org.drools.degrees.IntervalDegree;
import org.drools.degrees.factory.IDegreeFactory;
import org.drools.degrees.factory.IntervalDegreeFactory;
+import org.drools.degrees.operators.AbstractOperator;
import org.drools.degrees.operators.IDegreeCombiner;
-public class IntervalModusPonensOperator implements IDegreeCombiner {
+public class IntervalModusPonensOperator extends AbstractOperator implements IDegreeCombiner {
public IDegree eval(IDegree[] args, IDegreeFactory factory) {
if (args == null || args.length < 2)
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalNegationOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalNegationOperator.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalNegationOperator.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -5,6 +5,7 @@
import org.drools.degrees.IDegree;
import org.drools.degrees.IntervalDegree;
import org.drools.degrees.factory.IntervalDegreeFactory;
+import org.drools.degrees.operators.AbstractOperator;
import org.drools.degrees.operators.IDegreeCombiner;
import org.drools.degrees.operators.NegationOperator;
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalXorOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalXorOperator.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalXorOperator.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -7,9 +7,10 @@
import org.drools.degrees.IntervalDegree;
import org.drools.degrees.factory.IDegreeFactory;
import org.drools.degrees.factory.IntervalDegreeFactory;
+import org.drools.degrees.operators.AbstractOperator;
import org.drools.degrees.operators.IDegreeCombiner;
-public class IntervalXorOperator implements IDegreeCombiner {
+public class IntervalXorOperator extends AbstractOperator implements IDegreeCombiner {
public IDegree eval(IDegree[] args, IDegreeFactory factory) {
if (args == null || args.length < 2)
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleAverage.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleAverage.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleAverage.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -6,9 +6,10 @@
import org.drools.degrees.SimpleDegree;
import org.drools.degrees.factory.IDegreeFactory;
import org.drools.degrees.factory.SimpleDegreeFactory;
+import org.drools.degrees.operators.AbstractOperator;
import org.drools.degrees.operators.IDegreeCombiner;
-public final class SimpleAverage implements IDegreeCombiner {
+public final class SimpleAverage extends AbstractOperator implements IDegreeCombiner {
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleDiscountOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleDiscountOperator.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleDiscountOperator.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -6,9 +6,10 @@
import org.drools.degrees.IDegree;
import org.drools.degrees.SimpleDegree;
import org.drools.degrees.factory.IDegreeFactory;
+import org.drools.degrees.operators.AbstractOperator;
import org.drools.degrees.operators.IDiscountOperator;
-public class SimpleDiscountOperator implements IDiscountOperator {
+public class SimpleDiscountOperator extends AbstractOperator implements IDiscountOperator {
private SimpleDegree unk;
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleDotAnd.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleDotAnd.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleDotAnd.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -6,10 +6,11 @@
import org.drools.degrees.SimpleDegree;
import org.drools.degrees.factory.IDegreeFactory;
import org.drools.degrees.factory.SimpleDegreeFactory;
+import org.drools.degrees.operators.AbstractOperator;
import org.drools.degrees.operators.IDegreeCombiner;
-public class SimpleDotAnd implements IDegreeCombiner {
+public class SimpleDotAnd extends AbstractOperator implements IDegreeCombiner {
public IDegree eval(IDegree[] args, IDegreeFactory factory) {
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleDoubleMPOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleDoubleMPOperator.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleDoubleMPOperator.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -7,9 +7,10 @@
import org.drools.degrees.SimpleDegree;
import org.drools.degrees.factory.IDegreeFactory;
import org.drools.degrees.factory.SimpleDegreeFactory;
+import org.drools.degrees.operators.AbstractOperator;
import org.drools.degrees.operators.IDegreeCombiner;
-public class SimpleDoubleMPOperator implements IDegreeCombiner {
+public class SimpleDoubleMPOperator extends AbstractOperator implements IDegreeCombiner {
public IDegree eval(IDegree[] args, IDegreeFactory factory) {
if (args == null || args.length < 2)
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleEquiv.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleEquiv.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleEquiv.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -9,9 +9,10 @@
import org.drools.degrees.factory.IDegreeFactory;
import org.drools.degrees.factory.IntervalDegreeFactory;
import org.drools.degrees.factory.SimpleDegreeFactory;
+import org.drools.degrees.operators.AbstractOperator;
import org.drools.degrees.operators.IDegreeCombiner;
-public class SimpleEquiv implements IDegreeCombiner {
+public class SimpleEquiv extends AbstractOperator implements IDegreeCombiner {
public IDegree eval(IDegree[] args, IDegreeFactory factory) {
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleIdentityOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleIdentityOperator.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleIdentityOperator.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -6,9 +6,10 @@
import org.drools.degrees.SimpleDegree;
import org.drools.degrees.factory.IDegreeFactory;
import org.drools.degrees.factory.SimpleDegreeFactory;
+import org.drools.degrees.operators.AbstractOperator;
import org.drools.degrees.operators.IDegreeCombiner;
-public final class SimpleIdentityOperator implements IDegreeCombiner {
+public final class SimpleIdentityOperator extends AbstractOperator implements IDegreeCombiner {
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleLukasAnd.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleLukasAnd.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleLukasAnd.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -6,10 +6,11 @@
import org.drools.degrees.SimpleDegree;
import org.drools.degrees.factory.IDegreeFactory;
import org.drools.degrees.factory.SimpleDegreeFactory;
+import org.drools.degrees.operators.AbstractOperator;
import org.drools.degrees.operators.IDegreeCombiner;
-public class SimpleLukasAnd implements IDegreeCombiner {
+public class SimpleLukasAnd extends AbstractOperator implements IDegreeCombiner {
public IDegree eval(IDegree[] args, IDegreeFactory factory) {
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleLukasImplication.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleLukasImplication.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleLukasImplication.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -7,10 +7,11 @@
import org.drools.degrees.SimpleDegree;
import org.drools.degrees.factory.IDegreeFactory;
import org.drools.degrees.factory.SimpleDegreeFactory;
+import org.drools.degrees.operators.AbstractOperator;
import org.drools.degrees.operators.IDegreeCombiner;
-public class SimpleLukasImplication implements IDegreeCombiner {
+public class SimpleLukasImplication extends AbstractOperator implements IDegreeCombiner {
public IDegree eval(IDegree[] args, IDegreeFactory factory) {
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleLukasOr.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleLukasOr.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleLukasOr.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -6,10 +6,11 @@
import org.drools.degrees.SimpleDegree;
import org.drools.degrees.factory.IDegreeFactory;
import org.drools.degrees.factory.SimpleDegreeFactory;
+import org.drools.degrees.operators.AbstractOperator;
import org.drools.degrees.operators.IDegreeCombiner;
-public class SimpleLukasOr implements IDegreeCombiner {
+public class SimpleLukasOr extends AbstractOperator implements IDegreeCombiner {
public IDegree eval(IDegree[] args, IDegreeFactory factory) {
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMaxMergeStrategy.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMaxMergeStrategy.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMaxMergeStrategy.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -6,11 +6,12 @@
import org.drools.degrees.SimpleDegree;
import org.drools.degrees.factory.IDegreeFactory;
import org.drools.degrees.factory.SimpleDegreeFactory;
+import org.drools.degrees.operators.AbstractOperator;
import org.drools.degrees.operators.IDiscountStrategy;
import org.drools.degrees.operators.IMergeStrategy;
import org.drools.degrees.operators.INullHandlingStrategy;
-public class SimpleMaxMergeStrategy implements IMergeStrategy {
+public class SimpleMaxMergeStrategy extends AbstractOperator implements IMergeStrategy {
public IDegree eval(IDegree[] degrees, boolean[] kFlags, INullHandlingStrategy nullStrat, IDegreeFactory factory) {
IDegree[] args = new IDegree[degrees.length];
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMaxOr.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMaxOr.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMaxOr.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -6,10 +6,11 @@
import org.drools.degrees.SimpleDegree;
import org.drools.degrees.factory.IDegreeFactory;
import org.drools.degrees.factory.SimpleDegreeFactory;
+import org.drools.degrees.operators.AbstractOperator;
import org.drools.degrees.operators.IDegreeCombiner;
-public class SimpleMaxOr implements IDegreeCombiner {
+public class SimpleMaxOr extends AbstractOperator implements IDegreeCombiner {
public IDegree eval(IDegree[] args, IDegreeFactory factory) {
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMinAnd.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMinAnd.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMinAnd.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -6,9 +6,10 @@
import org.drools.degrees.SimpleDegree;
import org.drools.degrees.factory.IDegreeFactory;
import org.drools.degrees.factory.SimpleDegreeFactory;
+import org.drools.degrees.operators.AbstractOperator;
import org.drools.degrees.operators.IDegreeCombiner;
-public class SimpleMinAnd implements IDegreeCombiner {
+public class SimpleMinAnd extends AbstractOperator implements IDegreeCombiner {
public IDegree eval(IDegree[] args, IDegreeFactory factory) {
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMinMergeStrategy.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMinMergeStrategy.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMinMergeStrategy.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -6,11 +6,13 @@
import org.drools.degrees.SimpleDegree;
import org.drools.degrees.factory.IDegreeFactory;
import org.drools.degrees.factory.SimpleDegreeFactory;
+import org.drools.degrees.operators.AbstractOperator;
import org.drools.degrees.operators.IDiscountStrategy;
import org.drools.degrees.operators.IMergeStrategy;
import org.drools.degrees.operators.INullHandlingStrategy;
-public class SimpleMinMergeStrategy implements IMergeStrategy {
+public class SimpleMinMergeStrategy extends AbstractOperator
+implements IMergeStrategy {
public IDegree eval(IDegree[] degrees, boolean[] kFlags, INullHandlingStrategy nullStrat, IDegreeFactory factory) {
IDegree[] args = new IDegree[degrees.length];
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleProbSumOr.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleProbSumOr.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleProbSumOr.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -6,10 +6,11 @@
import org.drools.degrees.SimpleDegree;
import org.drools.degrees.factory.IDegreeFactory;
import org.drools.degrees.factory.SimpleDegreeFactory;
+import org.drools.degrees.operators.AbstractOperator;
import org.drools.degrees.operators.IDegreeCombiner;
-public class SimpleProbSumOr implements IDegreeCombiner {
+public class SimpleProbSumOr extends AbstractOperator implements IDegreeCombiner {
public IDegree eval(IDegree[] args, IDegreeFactory factory) {
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleVeryModifier.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleVeryModifier.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleVeryModifier.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -6,10 +6,11 @@
import org.drools.degrees.SimpleDegree;
import org.drools.degrees.factory.IDegreeFactory;
import org.drools.degrees.factory.SimpleDegreeFactory;
+import org.drools.degrees.operators.AbstractOperator;
import org.drools.degrees.operators.IDegreeCombiner;
-public class SimpleVeryModifier implements IDegreeCombiner {
+public class SimpleVeryModifier extends AbstractOperator implements IDegreeCombiner {
public IDegree eval(IDegree[] args, IDegreeFactory factory) {
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleXor.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleXor.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleXor.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -7,9 +7,10 @@
import org.drools.degrees.SimpleDegree;
import org.drools.degrees.factory.IDegreeFactory;
import org.drools.degrees.factory.SimpleDegreeFactory;
+import org.drools.degrees.operators.AbstractOperator;
import org.drools.degrees.operators.IDegreeCombiner;
-public class SimpleXor implements IDegreeCombiner {
+public class SimpleXor extends AbstractOperator implements IDegreeCombiner {
public IDegree eval(IDegree[] args, IDegreeFactory factory) {
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/fuzzy/evaluators/RandomEvaluator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/fuzzy/evaluators/RandomEvaluator.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/fuzzy/evaluators/RandomEvaluator.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -24,7 +24,8 @@
@Override
public IDegree eval(Object left, Object right, IDegreeFactory factory) {
- return factory.buildDegree((float) Math.random());
+ //return factory.buildDegree((float) Math.random());
+ return factory.Random();
}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/AlphaNode.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/AlphaNode.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/AlphaNode.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -312,7 +312,7 @@
case PASS :
//go on
- record.deleteObserver(this);
+ record.deleteObserver(this);
//throw new RuntimeException("Awakened objeect");
//TODO
this.sink.propagateAssertObject(record.getFactHandle(),
Modified: 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 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/CompositeEvaluation.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -90,24 +90,34 @@
protected boolean combine() {
- IDegree[] args = null;
+ IDegree opDeg = null;
+ if (operator.isTruthFunctional()) {
+ IDegree[] args = null;
+
+ if (getOperands() != null) {
+ int N = getOperands().size();
+ args = new IDegree[N];
+
+ int j = 0;
+ for (Evaluation eval : getOperands()) {
+ args[j++] = eval == null ? this.getNullHandlingStrat().convertNull(getFactory()) : eval.getDegree();
+ }
+ }
+ opDeg = this.operator.eval(args,getFactory());
+ } else {
+ opDeg = this.operator.eval(this,getFactory());
+ }
- if (getOperands() != null) {
- int N = getOperands().size();
- args = new IDegree[N];
- int j = 0;
- for (Evaluation eval : getOperands()) {
- args[j++] = eval == null ? this.getNullHandlingStrat().convertNull(getFactory()) : eval.getDegree();
- }
- }
-
-
- IDegree opDeg = this.operator.eval(args,getFactory());
updateOpRate();
boolean newContrib = this.addDegree(Evaluation.EVAL, opDeg, getOpRate(),true);
+// if (this instanceof EvalRecord && ! this.getOperator().isTruthFunctional() && ((EvalRecord)this).getRuleId() != null) {
+// String ruleId = ((EvalRecord)this).getRuleId();
+// if (ruleId.equals("Bay1"))
+// System.out.println();
+// }
return newContrib;
}
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/Droobservable.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/Droobservable.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/Droobservable.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -0,0 +1,54 @@
+package org.drools.reteoo;
+
+import java.util.HashSet;
+import java.util.Observable;
+import java.util.Observer;
+import java.util.Vector;
+
+
+public class Droobservable extends Observable {
+
+ private boolean changd;
+
+ private Vector<Observer> observers = new Vector<Observer>();
+
+ public void deleteObserver(Observer o) {
+ if (o == null)
+ return;
+ for (int j = 0; j < observers.size(); j++)
+ if (observers.get(j) == o) {
+ observers.remove(j);
+ return;
+ }
+ }
+
+ public void deleteObservers() {
+ this.observers.clear();
+ }
+
+ public void addObserver(Observer o) {
+ this.observers.add(o);
+ }
+
+ public int countObservers() {
+ return observers.size();
+ }
+
+ public void notifyObservers(Object arg) {
+ if (isChanged()) {
+ this.changd = false;
+ for (Observer o : observers)
+ o.update(this, arg);
+
+ }
+ }
+
+ public void setChanged() {
+ this.changd = true;
+ }
+
+ public boolean isChanged() {
+ return changd;
+ }
+
+}
Modified: 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 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/EvalRecord.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -46,6 +46,7 @@
private ImperfectRightTuple rightTuple;
private PropagationContext propagationContext;
private InternalWorkingMemory workingMemory;
+ private String ruleId;
//private IDegreeFactory factory;
@@ -141,6 +142,8 @@
}
+
+
addedEval.deleteObserver(this);
addedEval.addObserver(this);
@@ -186,8 +189,14 @@
public EvalRecord clone() {
EvalRecord ans = new EvalRecord(this.getNodeId(),this.getOperator(),this.getMergeStrat(),this.getNullHandlingStrat(), this.getFactory(), (ArgList) this.getArgs().clone());
+
+
+ ans.merge(this);
+
ans.addEvaluations(this);
+
+
return ans;
}
@@ -379,6 +388,19 @@
}
+ public void setOperator(IDegreeCombiner newOp) {
+ super.setOperator(newOp);
+
+ ((DynamicConstraintKey) this.getKey()).replaceOp(newOp.getName());
+ }
+
+ public void setRuleId(String ruleId) {
+ this.ruleId = ruleId;
+ }
+
+ public String getRuleId() {
+ return ruleId;
+ }
Modified: 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 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/Evaluation.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -16,7 +16,7 @@
import org.drools.degrees.operators.INullHandlingStrategy;
-public class Evaluation extends Observable {
+public class Evaluation extends Droobservable {
public static final String EVAL = "EVAL";
@@ -29,7 +29,7 @@
private Map<String,IDegree> degrees;
private int totDegrees;
- private Map<String,Float> confidence;
+ private Map<String,Double> confidence;
private Map<String,Boolean> killer;
private IDegree aggDegree;
@@ -53,14 +53,14 @@
deps = Collections.emptySet();
this.nodeId = id;
this.degrees = new HashMap<String,IDegree>();
- this.confidence = new HashMap<String,Float>();
+ this.confidence = new HashMap<String,Double>();
this.killer = new HashMap<String,Boolean>();
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));
+ confidence.put(s,new Double(0));
killer.put(s,false);
}
totDegrees = 2+deps.size();
@@ -111,7 +111,7 @@
this.addDegrees(other.degrees, other.confidence, other.killer);
}
- private void addDegrees(Map<String, IDegree> moreDegrees, Map<String, Float> conf, Map<String, Boolean> killer) {
+ private void addDegrees(Map<String, IDegree> moreDegrees, Map<String, Double> conf, Map<String, Boolean> killer) {
boolean newContrib = false;
for (String source : moreDegrees.keySet()) {
@@ -152,14 +152,14 @@
}
- public boolean addDegree(String source, IDegree evalDeg, float wgt, boolean immediateUpdate) {
+ public boolean addDegree(String source, IDegree evalDeg, double wgt, boolean immediateUpdate) {
return addDegree(source, evalDeg, wgt, false, immediateUpdate);
}
- public boolean addDegree(String source, IDegree evalDeg, float wgt, boolean isKiller, boolean immediateUpdate) {
+ public boolean addDegree(String source, IDegree evalDeg, double wgt, boolean isKiller, boolean immediateUpdate) {
boolean newContrib = false;
boolean rateIncr = false;
- Float prevConf;
+ Double prevConf;
if (evalDeg == null) {
/*
@@ -172,7 +172,7 @@
prevConf = confidence.get(source);
System.out.println(prevConf);
confidence.put(source, wgt);
- rateIncr = prevConf == null ? true : prevConf.floatValue() < wgt;
+ rateIncr = prevConf == null ? true : prevConf.doubleValue() < wgt;
IDegree oldVal = getDegreeBit(source);
@@ -224,8 +224,8 @@
}
- protected void setInfoRate(String source, float delta) {
- confidence.put(source,new Float(delta));
+ protected void setInfoRate(String source, double delta) {
+ confidence.put(source,new Double(delta));
}
@@ -259,6 +259,11 @@
return degrees.get(source);
}
+ public Collection<String> getDegreeBitSources() {
+ return this.degrees.keySet();
+ }
+
+
protected IDegree mergeDegrees() {
IDegree[] bits = new IDegree[this.totDegrees];
boolean[] killerFlags = new boolean[this.totDegrees];
@@ -284,7 +289,7 @@
public String toString() {
- return "("+this.args.hashCode()+"@"+this.nodeId + ") : " + this.aggDegree + " " + this.key +" "+ this.getBitS();
+ return "("+this.args.hashCode()+"@"+this.nodeId + ") : " + this.aggDegree +"/"+ this.getInfoRate() + " " + this.key +" "+ this.getBitS();
}
public String expand() {
@@ -340,9 +345,9 @@
/**
* @return the infoRate
*/
- public float getInfoRate() {
+ public double getInfoRate() {
//Prior injection can't be controlled!
- float info = 0;
+ double info = 0;
for (String s : confidence.keySet())
info += confidence.get(s);
@@ -357,6 +362,8 @@
for (String s : degrees.keySet()) {
if (degrees.get(s) != null)
sb.append(s+" " + this.degrees.get(s) +",");
+ else
+ sb.append(s+" " + "o" + ",");
}
return sb.append("]").toString();
}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ModusPonensNode.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ModusPonensNode.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ModusPonensNode.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -4,6 +4,7 @@
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.util.Collection;
+import java.util.Iterator;
import java.util.Map;
import java.util.Observable;
@@ -63,9 +64,20 @@
} catch (Exception e) {
throw new RuntimeDroolsException(e);
}
-
- setMPOperator(factory.getModusPonensOperator(rule.getEntailMode()));
+ String mode = rule.getEntailMode();
+ String kind = rule.getModusPonensKind();
+ IDegreeCombiner mpOperator = null;
+ if (mode == null || mode.equals("implication")) {
+ mpOperator = (kind == null) ?
+ factory.getModusPonensOp() : factory.getModusPonensOperator(kind);
+ } else if (mode.equals("equivalence")) {
+ mpOperator = (kind == null) ?
+ factory.getDoubleMPOperator() : factory.getDoubleMPOperator(kind);
+ }
+
+ setMPOperator(mpOperator);
+
}
public void attach() {
@@ -118,6 +130,11 @@
EvalRecord mpRecord = new EvalRecord(this.id,getMPOperator(),factory.getMergeStrategy(),factory.getNullHandlingStrategy(),factory,new ArgList());
+
+ Iterator ruleIter = this.getRules().iterator();
+ String rule = (String) ruleIter.next();
+ mpRecord.setRuleId(rule);
+
Evaluation core = premiseRecord.getOperands().iterator().next();
core.deleteObserver(premiseRecord);
mpRecord.addEvaluation(core);
@@ -259,6 +276,11 @@
}
+ public String toString() {
+ Iterator ruleIter = this.getRules().iterator();
+ String rule = (String) ruleIter.next();
+ return "MP Node for rule "+rule;
+ }
@@ -266,6 +288,8 @@
+
+
public void networkUpdated() {
//this.rightInput.networkUpdated();
this.leftInput.networkUpdated();
@@ -329,6 +353,8 @@
}
+
+
}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -40,6 +40,7 @@
import org.drools.common.InternalWorkingMemory;
import org.drools.common.NodeMemory;
import org.drools.common.PropagationContextImpl;
+import org.drools.degrees.IDegree;
import org.drools.degrees.factory.IDegreeFactory;
import org.drools.reteoo.ReteooWorkingMemory.WorkingMemoryReteExpireAction;
import org.drools.reteoo.builder.BuildContext;
@@ -111,13 +112,17 @@
private GammaMemory gamma;
- private String label;
+
private IFilterStrategy filterStrat;
private ConstraintKey singletonKey;
+ private String label;
+
+////
+
public ObjectTypeNode() {
}
@@ -421,7 +426,12 @@
* Uses he hashCode() of the underlying ObjectType implementation.
*/
public int hashCode() {
- return this.objectType.hashCode() ^ this.source.hashCode();
+ int code = this.objectType.hashCode() ^ this.source.hashCode();
+// if (this.getParams() != null)
+// code ^= this.getParams().hashCode();
+// if (this.getPrior() != null)
+// code ^= this.getPrior().hashCode();
+ return code;
}
public boolean equals(final Object object) {
@@ -435,9 +445,14 @@
final ObjectTypeNode other = (ObjectTypeNode) object;
- return this.objectType.equals( other.objectType ) && this.source.equals( other.source );
+ return this.objectType.equals( other.objectType )
+ && this.source.equals( other.source );
+
+// && (compareConfig(this.getParams(),other.getParams()))
+// && (compareConfig(this.getPrior(),other.getPrior()));
}
+
/**
* @inheritDoc
*/
@@ -604,8 +619,8 @@
PropagationContext context,
InternalWorkingMemory workingMemory, IDegreeFactory factory,
EvalRecord record) {
+
-
if ( context.getType() == PropagationContext.MODIFICATION && this.skipOnModify && context.getDormantActivations() == 0 ) {
// we do this after the shadowproxy update, just so that its up to date for the future
return;
@@ -711,6 +726,25 @@
+// private EvalRecord buildRecordOnTheFly(IDegreeFactory factory) {
+// EvalRecord record = new EvalRecord(
+// this.getId(),
+// factory.getAndOperator(this.getParams()),
+// factory.getMergeStrategy(),
+// factory.getNullHandlingStrategy(),
+// factory,
+// new ArgList());
+// if (getPrior() != null) {
+// IDegree priorDeg = factory.buildDegree(getPrior());
+// if (priorDeg != null)
+// record.addDegree(Evaluation.PRIOR, priorDeg, 1.0, false);
+// }
+//
+//
+//
+// return record;
+// }
+
public void update(Observable watcher, Object arg) {
EvalRecord record = (EvalRecord) watcher;
System.out.println("**************************************************************UPDATE @ALPHA NODE");
@@ -796,7 +830,31 @@
public String getLabel() {
return label;
}
+
+// public void setParams(String params) {
+// this.params = params;
+// }
+//
+// public String getParams() {
+// return params;
+// }
+//
+// public void setCutter(boolean isCutter) {
+// this.isCutter = isCutter;
+// }
+//
+// public boolean isCutter() {
+// return isCutter;
+// }
+//
+// public void setPrior(String prior) {
+// this.prior = prior;
+// }
+//
+// public String getPrior() {
+// return prior;
+// }
+//
-
}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ObservableRightTupleMemoryWrapper.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ObservableRightTupleMemoryWrapper.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ObservableRightTupleMemoryWrapper.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -10,7 +10,7 @@
import org.drools.spi.PropagationContext;
import org.drools.util.Iterator;
-public class ObservableRightTupleMemoryWrapper extends Observable
+public class ObservableRightTupleMemoryWrapper extends Droobservable
implements RightTupleMemory {
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/OperandSet.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/OperandSet.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/OperandSet.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -17,7 +17,7 @@
import org.drools.spi.PropagationContext;
-public class OperandSet extends Observable implements Observer {
+public class OperandSet extends Droobservable implements Observer {
private ObservableRightTupleMemoryWrapper memory;
private ContextEntry context[];
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/RecordHackerNode.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/RecordHackerNode.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/RecordHackerNode.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -0,0 +1,212 @@
+package org.drools.reteoo;
+
+import org.drools.common.BaseNode;
+import org.drools.common.ImperfectFactHandle;
+import org.drools.common.InternalFactHandle;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.common.PropagationContextImpl;
+import org.drools.degrees.IDegree;
+import org.drools.degrees.factory.IDegreeFactory;
+import org.drools.degrees.operators.IDegreeCombiner;
+import org.drools.reteoo.builder.BuildContext;
+import org.drools.spi.PropagationContext;
+
+public class RecordHackerNode extends ObjectSource
+ implements ObjectSinkNode {
+
+
+ private String priorStr;
+ private String operatorStr;
+
+ private boolean isCutter = false;
+
+ private IDegree prior = null;
+ private IDegreeCombiner operator = null;
+
+ private ObjectSinkNode previousRightTupleSinkNode;
+ private ObjectSinkNode nextRightTupleSinkNode;
+
+
+
+ public RecordHackerNode(BuildContext context, String priorStr, String operatorStr, boolean isCutter ) {
+
+ super( context.getNextId(),
+ context.getPartitionId(),
+ context.getRuleBase().getConfiguration().isMultithreadEvaluation(),
+ context.getObjectSource(),
+ context.getRuleBase().getConfiguration().getAlphaNodeHashingThreshold() );
+
+
+ this.priorStr = priorStr;
+ this.operatorStr = operatorStr;
+ this.isCutter = isCutter;
+ }
+
+ public ConstraintKey getConstraintKey() {
+ return null;
+ }
+
+ public void attach() {
+ this.source.addObjectSink( this );
+ }
+
+ public void attach(final InternalWorkingMemory[] workingMemories) {
+ attach();
+ for ( int i = 0, length = workingMemories.length; i < length; i++ ) {
+ final InternalWorkingMemory workingMemory = workingMemories[i];
+ final PropagationContext propagationContext = new PropagationContextImpl( workingMemory.getNextPropagationIdCounter(),
+ PropagationContext.RULE_ADDITION,
+
+ null,
+ null,
+ null );
+ this.source.updateSink( this,
+ propagationContext,
+ workingMemory );
+ }
+ }
+
+
+ protected void doRemove(final RuleRemovalContext context,
+ final ReteooBuilder builder,
+ final BaseNode node,
+ final InternalWorkingMemory[] workingMemories) {
+ if ( !node.isInUse() ) {
+ removeObjectSink( (ObjectSink) node );
+ }
+ this.source.remove( context,
+ builder,
+ this,
+ workingMemories );
+ }
+
+ public void updateSink(final ObjectSink sink,
+ final PropagationContext context,
+ final InternalWorkingMemory workingMemory) {
+
+ this.source.updateSink( sink,
+ context,
+ workingMemory );
+ }
+
+
+
+
+
+ /**
+ * Returns the next node
+ * @return
+ * The next ObjectSinkNode
+ */
+ public ObjectSinkNode getNextObjectSinkNode() {
+ return this.nextRightTupleSinkNode;
+ }
+
+ /**
+ * Sets the next node
+ * @param next
+ * The next ObjectSinkNode
+ */
+ public void setNextObjectSinkNode(final ObjectSinkNode next) {
+ this.nextRightTupleSinkNode = next;
+ }
+
+ /**
+ * Returns the previous node
+ * @return
+ * The previous ObjectSinkNode
+ */
+ public ObjectSinkNode getPreviousObjectSinkNode() {
+ return this.previousRightTupleSinkNode;
+ }
+
+ /**
+ * Sets the previous node
+ * @param previous
+ * The previous ObjectSinkNode
+ */
+ public void setPreviousObjectSinkNode(final ObjectSinkNode previous) {
+ this.previousRightTupleSinkNode = previous;
+ }
+
+
+
+
+
+
+ public void assertObject(InternalFactHandle factHandle,
+ PropagationContext propagationContext,
+ InternalWorkingMemory workingMemory) {
+ this.sink.propagateAssertObject(factHandle, propagationContext, workingMemory);
+ }
+
+
+
+ public void assertObject(ImperfectFactHandle factHandle,
+ PropagationContext propagationContext,
+ InternalWorkingMemory workingMemory, IDegreeFactory factory,
+ EvalRecord record) {
+
+ if (prior == null && priorStr != null)
+ prior = factory.buildDegree(this.priorStr);
+ if (operator == null && operatorStr != null)
+ operator = factory.getAndOperator(operatorStr);
+
+ if (operator != null)
+ record.setOperator(operator);
+ if (prior != null)
+ record.addDegree(Evaluation.PRIOR, prior, 1, true);
+
+ if (isCutter && record.getDegree().equals(factory.False()) ) {
+ // DROP...
+ } else {
+ this.sink.propagateAssertObject(factHandle, propagationContext,workingMemory,factory,record);
+ }
+ }
+
+
+
+
+
+ public int hashCode() {
+ return this.source.hashCode() * 17
+ + ((this.priorStr != null) ? this.priorStr.hashCode() : 0)
+ + ((this.operatorStr != null) ? this.operatorStr.hashCode() : 0)
+ + (isCutter ? 1 : -1);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ public boolean equals(final Object object) {
+ if ( this == object ) {
+ return true;
+ }
+
+ if ( object == null || !(object instanceof RecordHackerNode) ) {
+ return false;
+ }
+
+ final RecordHackerNode other = (RecordHackerNode) object;
+
+ return this.source.equals( other.source ) &&
+ compareConfig(this.operatorStr, other.operatorStr) &&
+ compareConfig(this.priorStr, other.priorStr) &&
+ this.isCutter == other.isCutter;
+ }
+
+
+
+ boolean compareConfig(String a, String b) {
+ if (a == null && b == null) return true;
+ if (a != null)
+ return a.equals(b);
+ return false;
+ }
+
+
+
+
+}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/builder/BuildUtils.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/builder/BuildUtils.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/builder/BuildUtils.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -113,6 +113,8 @@
Map<ObjectType, ObjectTypeNode> map = context.getRuleBase().getRete().getObjectTypeNodes( context.getCurrentEntryPoint() );
if ( map != null ) {
otn = map.get( otn.getObjectType() );
+ //TODO: improve...
+
if ( otn != null ) {
// adjusting expiration offset
otn.setExpirationOffset( Math.max( otn.getExpirationOffset(),
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/builder/PatternBuilder.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/builder/PatternBuilder.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/builder/PatternBuilder.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -34,6 +34,7 @@
import org.drools.reteoo.ObjectTypeNode;
import org.drools.reteoo.PatternNegator;
import org.drools.reteoo.PropagationQueuingNode;
+import org.drools.reteoo.RecordHackerNode;
import org.drools.rule.Behavior;
import org.drools.rule.CompositeMaxDuration;
import org.drools.rule.Declaration;
@@ -296,17 +297,43 @@
}
}
+
+
+
+
ObjectTypeNode returnedOtn = (ObjectTypeNode) utils.attachNode( context, otn );
context.setObjectSource( returnedOtn );
- //Notice that == is called on purpose
- if (returnedOtn == otn) {
- if (pattern.getLabel() != null)
- otn.setLabel(pattern.getLabel());
+ //Notice that == is called deliberately
+ if (returnedOtn == otn) {
+ //this is the first time that a specific OTN is required, so it must be configured.
otn.setImperfectStructures(context);
}
+ if (pattern.getPrior() != null || pattern.getParams() != null) {
+
+ RecordHackerNode recordHacker = new RecordHackerNode(context, pattern.getPrior(),pattern.getParams(), pattern.isCutter());
+
+ context.setObjectSource( (ObjectSource) utils.attachNode( context,
+ recordHacker) );
+ }
+//
+//
+// if (pattern.getLabel() != null)
+// otn.setLabel(pattern.getLabel());
+//
+// if (pattern.getPrior() != null)
+// otn.setPrior(pattern.getPrior());
+//
+// if (pattern.getParams() != null)
+// otn.setParams(pattern.getParams());
+//
+// otn.setCutter(pattern.isCutter());
+
+
+
+
for ( final Iterator<Constraint> it = alphaConstraints.iterator(); it.hasNext(); ) {
final AlphaNodeFieldConstraint constraint = (AlphaNodeFieldConstraint) it.next();
@@ -340,6 +367,9 @@
context.setAlphaNodeMemoryAllowed( alphaMemory );
}
+
+
+
/**
* @param context
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/AbstractCompositeConstraint.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/AbstractCompositeConstraint.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/AbstractCompositeConstraint.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -368,6 +368,9 @@
public EvaluationTemplate getEvalTemplate(ConstraintKey key) {
+ if (key.equals(this.getTemplate().getConstraintKey()))
+ return this.getTemplate();
+ else
return ((CompositeEvaluationTemplate) this.getTemplate()).getTemplate(key);
}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/AndConstraint.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/AndConstraint.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/AndConstraint.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -264,7 +264,13 @@
public EvaluationTemplate buildEvaluationTemplate(int id, Map<ConstraintKey, Set<String>> dependencies, IDegreeFactory factory) {
- //BUILD A COMPOSITE TEMPLATE
+ int Na = this.alphaConstraints.length;
+ int Nb = this.betaConstraints.length;
+
+ for (int j = 0; j < Na; j++)
+ alphaConstraints[j].buildEvaluationTemplate(id, dependencies, factory);
+
+ //BUILD A COMPOSITE TEMPLATE
int N = this.getAlphaConstraints().length + this.getBetaConstraints().length;
this.setOperator(factory.getAndOperator(this.getParams()));
CompositeEvaluationTemplate temp = new CompositeEvaluationTemplate(
@@ -277,11 +283,10 @@
factory.getNullHandlingStrategy(),
factory);
- int Na = this.alphaConstraints.length;
- int Nb = this.betaConstraints.length;
+
for (int j = 0; j < Na; j++)
- temp.addChild(alphaConstraints[j].buildEvaluationTemplate(id, dependencies, factory));
+ temp.addChild(alphaConstraints[j].getEvalTemplate(alphaConstraints[j].getConstraintKey()));
//for (int j = 0; j < Nb; j++)
// temp.addChild(betaConstraints[j].build);
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/OrConstraint.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/OrConstraint.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/OrConstraint.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -58,6 +58,12 @@
//BUILD A COMPOSITE TEMPLATE
int N = this.getAlphaConstraints().length + this.getBetaConstraints().length;
+ int Na = this.alphaConstraints.length;
+ int Nb = this.betaConstraints.length;
+
+ for (int j = 0; j < Na; j++)
+ alphaConstraints[j].buildEvaluationTemplate(id, dependencies, factory);
+
setOperator(factory.getOrOperator(this.getParams()));
CompositeEvaluationTemplate temp = new CompositeEvaluationTemplate(id,
this.getConstraintKey(),
@@ -68,11 +74,9 @@
factory.getNullHandlingStrategy(),
factory);
- int Na = this.alphaConstraints.length;
- int Nb = this.betaConstraints.length;
-
+
for (int j = 0; j < Na; j++)
- temp.addChild(alphaConstraints[j].buildEvaluationTemplate(id, dependencies, factory));
+ temp.addChild(alphaConstraints[j].getEvalTemplate(alphaConstraints[j].getConstraintKey()));
//for (int j = 0; j < Nb; j++)
// temp.addChild(betaConstraints[j].build);
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/Pattern.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/Pattern.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/Pattern.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -57,6 +57,8 @@
// this is the offset of the related fact inside a tuple. i.e:
// the position of the related fact inside the tuple;
private int offset;
+ private String params = null;
+ private String prior = null;
public Pattern() {
this( 0,
@@ -408,4 +410,21 @@
public String getLabel() {
return label;
}
+
+ public String getParams() {
+ return params;
+ }
+
+ public void setParams(String params) {
+ this.params = params;
+
+ }
+
+ public String getPrior() {
+ return prior;
+ }
+
+ public void setPrior(String prior) {
+ this.prior = prior;
+ }
}
\ No newline at end of file
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/Rule.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/Rule.java 2009-06-10 06:47:23 UTC (rev 26893)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/Rule.java 2009-06-10 06:48:39 UTC (rev 26894)
@@ -131,10 +131,13 @@
private String priorDescription;
private String filterStrategy;
-
+ private String mpKind = null;
+
private Map<ConstraintKey, Set<String>> dependencies;
+
+
public void writeExternal(ObjectOutput out) throws IOException {
out.writeObject(pkg);
out.writeObject(name);
@@ -765,4 +768,12 @@
public String getFilterStrategy() {
return filterStrategy;
}
+
+ public void setModusPonensKind(String value) {
+ this.mpKind = "kind:"+value;
+ }
+
+ public String getModusPonensKind() {
+ return this.mpKind;
+ }
}
More information about the jboss-svn-commits
mailing list