[jboss-svn-commits] JBL Code SVN: r22242 - in labs/jbossrules/branches/uncDrools5x/Fuzzy Test: bin/data and 9 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Aug 29 14:04:09 EDT 2008
Author: dsotty
Date: 2008-08-29 14:04:09 -0400 (Fri, 29 Aug 2008)
New Revision: 22242
Added:
labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/data/Oven.java
labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/evaluators/SeemsEvaluator.java
labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/evaluators/SeemsEvaluatorDefinition.java
labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/evaluators/membership/SkepticNumericMembershipFunction.java
Modified:
labs/jbossrules/branches/uncDrools5x/Fuzzy Test/bin/data/Fan.class
labs/jbossrules/branches/uncDrools5x/Fuzzy Test/bin/data/Room.class
labs/jbossrules/branches/uncDrools5x/Fuzzy Test/bin/evaluators/FuzzyNumericEvaluator.class
labs/jbossrules/branches/uncDrools5x/Fuzzy Test/bin/fuzzy.packagebuilder.conf
labs/jbossrules/branches/uncDrools5x/Fuzzy Test/bin/fuzzy/FuzzyTest.class
labs/jbossrules/branches/uncDrools5x/Fuzzy Test/bin/fuzzy/domains/DomainPartition.class
labs/jbossrules/branches/uncDrools5x/Fuzzy Test/bin/fuzzy/domains/IDomainPartition.class
labs/jbossrules/branches/uncDrools5x/Fuzzy Test/bin/fuzzy/domains/TemperatureDomain.class
labs/jbossrules/branches/uncDrools5x/Fuzzy Test/bin/fuzzy/domains/TypedNumberField.class
labs/jbossrules/branches/uncDrools5x/Fuzzy Test/bin/fuzzy/fuzzy.drl
labs/jbossrules/branches/uncDrools5x/Fuzzy Test/bin/fuzzy/oldFaithful.drl
labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/data/Fan.java
labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/data/Room.java
labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/evaluators/FuzzyNumericEvaluator.java
labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/fuzzy.packagebuilder.conf
labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/fuzzy/FuzzyTest.java
labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/fuzzy/domains/DomainPartition.java
labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/fuzzy/domains/IDomainPartition.java
labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/fuzzy/domains/TemperatureDomain.java
labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/fuzzy/domains/TypedNumberField.java
labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/fuzzy/fuzzy.drl
labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/fuzzy/oldFaithful.drl
Log:
New branch for uncertainty support in 5.x
Modified: labs/jbossrules/branches/uncDrools5x/Fuzzy Test/bin/data/Fan.class
===================================================================
(Binary files differ)
Modified: labs/jbossrules/branches/uncDrools5x/Fuzzy Test/bin/data/Room.class
===================================================================
(Binary files differ)
Modified: labs/jbossrules/branches/uncDrools5x/Fuzzy Test/bin/evaluators/FuzzyNumericEvaluator.class
===================================================================
(Binary files differ)
Modified: labs/jbossrules/branches/uncDrools5x/Fuzzy Test/bin/fuzzy/FuzzyTest.class
===================================================================
(Binary files differ)
Modified: labs/jbossrules/branches/uncDrools5x/Fuzzy Test/bin/fuzzy/domains/DomainPartition.class
===================================================================
(Binary files differ)
Modified: labs/jbossrules/branches/uncDrools5x/Fuzzy Test/bin/fuzzy/domains/IDomainPartition.class
===================================================================
(Binary files differ)
Modified: labs/jbossrules/branches/uncDrools5x/Fuzzy Test/bin/fuzzy/domains/TemperatureDomain.class
===================================================================
(Binary files differ)
Modified: labs/jbossrules/branches/uncDrools5x/Fuzzy Test/bin/fuzzy/domains/TypedNumberField.class
===================================================================
(Binary files differ)
Modified: labs/jbossrules/branches/uncDrools5x/Fuzzy Test/bin/fuzzy/fuzzy.drl
===================================================================
--- labs/jbossrules/branches/uncDrools5x/Fuzzy Test/bin/fuzzy/fuzzy.drl 2008-08-29 16:59:40 UTC (rev 22241)
+++ labs/jbossrules/branches/uncDrools5x/Fuzzy Test/bin/fuzzy/fuzzy.drl 2008-08-29 18:04:09 UTC (rev 22242)
@@ -12,6 +12,8 @@
import data.Room;
import data.Fan;
import data.Act;
+import data.Oven;
+import fuzzy.domains.*;
#declare any global variables here
@@ -20,32 +22,163 @@
+
+rule "Init"
+
+ salience 1000
+
+ when
+ eval(true)
+ then
+
+ System.out.println("Setting initializers ");
+
+
+ Room.setFieldEvaluator("temperature",
+ fuzzy.domains.TemperatureDomain.coldOp.getOperatorString(),
+ false,
+ "evaluators.membership.TriangleMembership, 0, 10"
+ );
+ Room.setFieldEvaluator("temperature",
+ fuzzy.domains.TemperatureDomain.coolOp.getOperatorString(),
+ false,
+ "evaluators.membership.TriangleMembership, 10, 10"
+ );
+ Room.setFieldEvaluator("temperature",
+ fuzzy.domains.TemperatureDomain.warmOp.getOperatorString(),
+ false,
+ "evaluators.membership.TriangleMembership, 20, 10"
+ );
+ Room.setFieldEvaluator("temperature",
+ fuzzy.domains.TemperatureDomain.hotOp.getOperatorString(),
+ false,
+ "evaluators.membership.TriangleMembership, 30, 10"
+ );
+
+
+ Oven.setFieldEvaluator("temperature",
+ fuzzy.domains.TemperatureDomain.coldOp.getOperatorString(),
+ false,
+ "evaluators.membership.TriangleMembership, 25, 10"
+ );
+ Oven.setFieldEvaluator("temperature",
+ fuzzy.domains.TemperatureDomain.coolOp.getOperatorString(),
+ false,
+ "evaluators.membership.TriangleMembership, 35, 10"
+ );
+ Oven.setFieldEvaluator("temperature",
+ fuzzy.domains.TemperatureDomain.warmOp.getOperatorString(),
+ false,
+ "evaluators.membership.TriangleMembership, 100, 60"
+ );
+ Oven.setFieldEvaluator("temperature",
+ fuzzy.domains.TemperatureDomain.hotOp.getOperatorString(),
+ false,
+ "evaluators.membership.TriangleMembership, 200, 100"
+ );
+
+ Room.setFieldEvaluator("humidity",
+ fuzzy.domains.HumidityDomain.lowOp.getOperatorString(),
+ false,
+ "evaluators.membership.TriangleMembership, 0, 0.5"
+ );
+ Room.setFieldEvaluator("humidity",
+ fuzzy.domains.HumidityDomain.mediumOp.getOperatorString(),
+ false,
+ "evaluators.membership.TriangleMembership, 0.5, 0.5"
+ );
+ Room.setFieldEvaluator("humidity",
+ fuzzy.domains.HumidityDomain.highOp.getOperatorString(),
+ false,
+ "evaluators.membership.TriangleMembership, 1, 0.5"
+ );
+
+ Fan.setFieldEvaluator("speed",
+ fuzzy.domains.SpeedDomain.stopOp.getOperatorString(),
+ false,
+ "evaluators.membership.TriangleMembership, 0, 10"
+ );
+ Fan.setFieldEvaluator("speed",
+ fuzzy.domains.SpeedDomain.slowOp.getOperatorString(),
+ false,
+ "evaluators.membership.TriangleMembership, 10, 10"
+ );
+ Fan.setFieldEvaluator("speed",
+ fuzzy.domains.SpeedDomain.fastOp.getOperatorString(),
+ false,
+ "evaluators.membership.TriangleMembership, 20, 10"
+ );
+
+
+end
+
+
+
+
+
+
+
+rule "DoubleHot"
+ when
+ $r : Room( temperature `seems[] hot )
+ $o : Oven( temperature `seems[] hot )
+ then
+ System.out.println("Heat with different meanings " + drools.getActivationDegree());
+
+end
+
+
+rule "Hot_generic"
+ when
+ $r : Room( temperature `hot[evaluators.membership.TriangleMembership, 30, 10] 1)
+ then
+ System.out.println("Hot works as op itself " + drools.getActivationDegree());
+end
+
+
+rule "Hot"
+ when
+ $r: Room( temperature `seems[] hot ,
+ humidity `seems[] medium )
+ then
+ System.out.println("Room is hot at degree " + drools.getActivationDegree());
+
+ Hashtable<ConstraintSignature,IUncertainDegree> priors = new Hashtable<ConstraintSignature, IUncertainDegree>();
+ priors.put(new ConstraintSignature("speed","seems","fast"), drools.getActivationDegree());
+
+ insertLogical(new Fan(),priors);
+
+end
+
+
+/*
rule "Cold"
when
$r: Room(
- temperature `cold[evaluators.membership.TriangleMembership, 0, 10] 1 ,
- humidity `low[evaluators.membership.TriangleMembership, 0, 0.5] 1
+ temperature `seems[] cold ,
+ humidity `seems[] low
)
then
System.out.println("Room is cold at degree " + drools.getActivationDegree());
Hashtable<ConstraintSignature,IUncertainDegree> priors = new Hashtable<ConstraintSignature, IUncertainDegree>();
- priors.put(new ConstraintSignature("speed","stop","1"), drools.getActivationDegree());
+ priors.put(new ConstraintSignature("speed","seems","stop"), drools.getActivationDegree());
insertLogical(new Fan(),priors);
end
+
rule "Cool"
when
- $r: Room( temperature `cool[evaluators.membership.TriangleMembership, 10, 10] 1 ,
- humidity `medium[evaluators.membership.TriangleMembership, 0.5, 0.5] 1 )
+ $r: Room( temperature `seems[] cool ,
+ humidity `seems[] medium )
then
System.out.println("Room is cool at degree " + drools.getActivationDegree());
Hashtable<ConstraintSignature,IUncertainDegree> priors = new Hashtable<ConstraintSignature, IUncertainDegree>();
- priors.put(new ConstraintSignature("speed","stop","1"), drools.getActivationDegree());
+ priors.put(new ConstraintSignature("speed","seems","stop"), drools.getActivationDegree());
insertLogical(new Fan(),priors);
@@ -54,29 +187,31 @@
rule "Warm"
when
- $r: Room( temperature `warm[evaluators.membership.TriangleMembership, 20, 10] 1 ,
- humidity `medium[evaluators.membership.TriangleMembership, 1, 0.5] 1 )
+ $r: Room( temperature `seems[] warm ,
+ humidity `seems[] medium )
then
System.out.println("Room is warm at degree " + drools.getActivationDegree());
Hashtable<ConstraintSignature,IUncertainDegree> priors = new Hashtable<ConstraintSignature, IUncertainDegree>();
- priors.put(new ConstraintSignature("speed","slow","1"), drools.getActivationDegree());
+ priors.put(new ConstraintSignature("speed","seems","slow"), drools.getActivationDegree());
insertLogical(new Fan(),priors);
end
+
+
-rule "Hot"
+rule "Hotter"
when
- $r: Room( temperature `hot[evaluators.membership.TriangleMembership, 30, 10] 1 ,
- humidity `high[evaluators.membership.TriangleMembership, 1, 0.5] 1 )
+ $r: Room( temperature `seems[] hot ,
+ humidity `seems[] high )
then
- System.out.println("Room is hot at degree " + drools.getActivationDegree());
+ System.out.println("Room is hotter at degree " + drools.getActivationDegree());
Hashtable<ConstraintSignature,IUncertainDegree> priors = new Hashtable<ConstraintSignature, IUncertainDegree>();
- priors.put(new ConstraintSignature("speed","fast","1"), drools.getActivationDegree());
+ priors.put(new ConstraintSignature("speed","seems","fast"), drools.getActivationDegree());
insertLogical(new Fan(),priors);
@@ -88,27 +223,30 @@
rule "Fan Stop"
when
- $f : Fan( speed `stop[evaluators.membership.TriangleMembership, 0, 10] 1)
+ $f : Fan( speed `seems[] stop)
then
System.out.println("Stop fan" + drools.getActivationDegree());
- $f.setSpeedInfo("stop","evaluators.membership.TriangleMembership, 0, 10",drools.getActivationDegree());
+ $f.setSpeedInfo("stop",drools.getActivationDegree());
end
rule "Fan Slow"
when
- $f : Fan( speed `slow[evaluators.membership.TriangleMembership, 10, 10] 1)
+ $f : Fan( speed `seems[] slow)
then
System.out.println("Slow fan" + drools.getActivationDegree());
- $f.setSpeedInfo("slow","evaluators.membership.TriangleMembership, 10, 10",drools.getActivationDegree());
+ $f.setSpeedInfo("slow",drools.getActivationDegree());
+
end
+
+
rule "Fan Fast"
when
- $f : Fan( speed `fast[evaluators.membership.TriangleMembership, 20, 10] 1)
+ $f : Fan( speed `seems[] fast)
then
- System.out.println("Fast fan" + drools.getActivationDegree());
- $f.setSpeedInfo("fast","evaluators.membership.TriangleMembership, 20, 10",drools.getActivationDegree());
+ System.out.println("Fast fan" + drools.getActivationDegree());
+ $f.setSpeedInfo("fast",drools.getActivationDegree());
end
@@ -116,9 +254,9 @@
rule "Act"
- when
- Act()
+ when
$f : Fan()
then
System.out.println("Fan activated at speed " + $f.getSpeed());
end
+*/
\ No newline at end of file
Modified: labs/jbossrules/branches/uncDrools5x/Fuzzy Test/bin/fuzzy/oldFaithful.drl
===================================================================
--- labs/jbossrules/branches/uncDrools5x/Fuzzy Test/bin/fuzzy/oldFaithful.drl 2008-08-29 16:59:40 UTC (rev 22241)
+++ labs/jbossrules/branches/uncDrools5x/Fuzzy Test/bin/fuzzy/oldFaithful.drl 2008-08-29 18:04:09 UTC (rev 22242)
@@ -35,9 +35,9 @@
//System.out.println("Rule 2 fired for " + $s + " at deg " + drools.getActivationDegree());
$s.setEpsilon2(drools.getActivationDegree().getDegree().getValue());
end
+
*/
-
rule "Class1_clust"
when
$s : Sample2 ( this `classify[] 0 )
Modified: labs/jbossrules/branches/uncDrools5x/Fuzzy Test/bin/fuzzy.packagebuilder.conf
===================================================================
--- labs/jbossrules/branches/uncDrools5x/Fuzzy Test/bin/fuzzy.packagebuilder.conf 2008-08-29 16:59:40 UTC (rev 22241)
+++ labs/jbossrules/branches/uncDrools5x/Fuzzy Test/bin/fuzzy.packagebuilder.conf 2008-08-29 18:04:09 UTC (rev 22242)
@@ -31,20 +31,13 @@
drools.evaluator.matches = org.drools.base.evaluators.MatchesEvaluatorsDefinition
drools.evaluator.soundslike = org.drools.base.evaluators.SoundslikeEvaluatorsDefinition
-drools.evaluator.cold = evaluators.TemperatureEvaluatorDefinition
-drools.evaluator.cool = evaluators.TemperatureEvaluatorDefinition
-drools.evaluator.warm = evaluators.TemperatureEvaluatorDefinition
-drools.evaluator.hot = evaluators.TemperatureEvaluatorDefinition
-drools.evaluator.low = evaluators.HumidityEvaluatorDefinition
-drools.evaluator.medium = evaluators.HumidityEvaluatorDefinition
-drools.evaluator.high = evaluators.HumidityEvaluatorDefinition
-drools.evaluator.slow = evaluators.SpeedEvaluatorDefinition
-drools.evaluator.stop = evaluators.SpeedEvaluatorDefinition
-drools.evaluator.fast = evaluators.SpeedEvaluatorDefinition
-
drools.evaluator.classify = evaluators.FakeSubSymbEvaluatorDefinition
+drools.evaluator.seems = evaluators.SeemsEvaluatorDefinition
+drools.evaluator.hot = evaluators.TemperatureEvaluatorDefinition
+
+
Modified: labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/data/Fan.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/data/Fan.java 2008-08-29 16:59:40 UTC (rev 22241)
+++ labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/data/Fan.java 2008-08-29 18:04:09 UTC (rev 22242)
@@ -1,7 +1,12 @@
package data;
+import org.drools.base.ValueType;
+import org.drools.spi.Evaluator;
+
import uncertainty.truthvals.IUncertainDegree;
+import fuzzy.domains.HumidityDomain;
import fuzzy.domains.SpeedDomain;
+import fuzzy.domains.TemperatureDomain;
import fuzzy.domains.TypedNumberField;
public class Fan {
@@ -9,15 +14,25 @@
private TypedNumberField speed = new TypedNumberField(SpeedDomain.getInstance());;
+ public static void setFieldEvaluator(String field, String operatorId, boolean isNegated, String parameterText) {
+
+// operatorId += Fan.class.getName();
+
+ if (field.equals("speed")) {
+ SpeedDomain.getInstance().addEvaluator(Fan.class,ValueType.DOUBLE_TYPE, operatorId, isNegated, parameterText);
+ }
+
+ }
+
public void setSpeed(Double speed) {
this.speed.setValue(speed);
}
- public void setSpeedInfo(String op, String parm, IUncertainDegree deg) {
- this.speed.setInfo(op, parm, deg);
+ public void setSpeedInfo(String op, IUncertainDegree deg) {
+ this.speed.setInfo(Fan.class,op, "", deg);
}
public Double getSpeed() {
@@ -28,6 +43,19 @@
}
+
+ public Evaluator getSlow() {
+ return SpeedDomain.getInstance().getEvaluator(SpeedDomain.SLOW, Fan.class);
+ }
+ public Evaluator getStop() {
+ return SpeedDomain.getInstance().getEvaluator(SpeedDomain.STOP, Fan.class);
+ }
+ public Evaluator getFast() {
+ return SpeedDomain.getInstance().getEvaluator(SpeedDomain.FAST, Fan.class);
+ }
+
+
+
public boolean equals(Object other) {
if (other == null) return false;
if (other.getClass() != this.getClass()) return false;
Added: labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/data/Oven.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/data/Oven.java (rev 0)
+++ labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/data/Oven.java 2008-08-29 18:04:09 UTC (rev 22242)
@@ -0,0 +1,61 @@
+package data;
+
+import org.drools.base.ValueType;
+import org.drools.spi.Evaluator;
+
+import fuzzy.domains.DomainPartition;
+import fuzzy.domains.HumidityDomain;
+import fuzzy.domains.TemperatureDomain;
+import fuzzy.domains.TypedNumberField;
+
+public class Oven {
+
+
+
+ public static void setFieldEvaluator(String field, String operatorId, boolean isNegated, String parameterText) {
+
+// operatorId = DomainPartition.buildContextualId(Oven.class, operatorId);
+
+ if (field.equals("temperature")) {
+ TemperatureDomain.getInstance().addEvaluator(Oven.class,ValueType.DOUBLE_TYPE, operatorId, isNegated, parameterText);
+ }
+
+ }
+
+
+ public Evaluator getCold() {
+ return TemperatureDomain.getInstance().getEvaluator(TemperatureDomain.COLD, Oven.class);
+ }
+
+ public Evaluator getWarm() {
+ return TemperatureDomain.getInstance().getEvaluator(TemperatureDomain.WARM, Oven.class);
+ }
+
+ public Evaluator getCool() {
+ return TemperatureDomain.getInstance().getEvaluator(TemperatureDomain.COOL, Oven.class);
+ }
+
+ public Evaluator getHot() {
+ return TemperatureDomain.getInstance().getEvaluator(TemperatureDomain.HOT, Oven.class);
+ }
+
+
+ private TypedNumberField temperature = new TypedNumberField(TemperatureDomain.getInstance());
+
+
+ public void setTemperature(Double temperature) {
+ this.temperature.setValue(temperature);
+ }
+
+ public Double getTemperature() {
+ Number n = temperature.getValue();
+ if (n != null)
+ return n.doubleValue();
+ return null;
+ }
+
+
+
+
+
+}
Modified: labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/data/Room.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/data/Room.java 2008-08-29 16:59:40 UTC (rev 22241)
+++ labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/data/Room.java 2008-08-29 18:04:09 UTC (rev 22242)
@@ -1,5 +1,9 @@
package data;
+import org.drools.base.ValueType;
+import org.drools.spi.Evaluator;
+
+import fuzzy.domains.DomainPartition;
import fuzzy.domains.HumidityDomain;
import fuzzy.domains.TemperatureDomain;
import fuzzy.domains.TypedNumberField;
@@ -8,10 +12,43 @@
+ public static void setFieldEvaluator(String field, String operatorId, boolean isNegated, String parameterText) {
+
+// operatorId = DomainPartition.buildContextualId(Room.class,operatorId);
+
+ if (field.equals("temperature")) {
+ TemperatureDomain.getInstance().addEvaluator(Room.class,ValueType.DOUBLE_TYPE, operatorId, isNegated, parameterText);
+ }
+ else if (field.equals("humidity")) {
+ HumidityDomain.getInstance().addEvaluator(Room.class,ValueType.DOUBLE_TYPE, operatorId, isNegated, parameterText);
+ }
+
+ }
+
+
private TypedNumberField temperature = new TypedNumberField(TemperatureDomain.getInstance());
+ public Evaluator getCold() {
+ return TemperatureDomain.getInstance().getEvaluator(TemperatureDomain.COLD, Room.class);
+ }
+ public Evaluator getWarm() {
+ return TemperatureDomain.getInstance().getEvaluator(TemperatureDomain.WARM, Room.class);
+ }
+
+ public Evaluator getCool() {
+ return TemperatureDomain.getInstance().getEvaluator(TemperatureDomain.COOL, Room.class);
+ }
+
+ public Evaluator getHot() {
+ return TemperatureDomain.getInstance().getEvaluator(TemperatureDomain.HOT, Room.class);
+ }
+
+
+
+
+
public void setTemperature(Double temperature) {
this.temperature.setValue(temperature);
@@ -39,11 +76,22 @@
return null;
}
+ public Evaluator getLow() {
+ return HumidityDomain.getInstance().getEvaluator(HumidityDomain.LOW, Room.class);
+ }
+ public Evaluator getMedium() {
+ return HumidityDomain.getInstance().getEvaluator(HumidityDomain.MEDIUM, Room.class);
+ }
+ public Evaluator getHigh() {
+ return HumidityDomain.getInstance().getEvaluator(HumidityDomain.HIGH, Room.class);
+ }
+
+
}
Modified: labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/evaluators/FuzzyNumericEvaluator.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/evaluators/FuzzyNumericEvaluator.java 2008-08-29 16:59:40 UTC (rev 22241)
+++ labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/evaluators/FuzzyNumericEvaluator.java 2008-08-29 18:04:09 UTC (rev 22242)
@@ -6,6 +6,7 @@
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.lang.reflect.InvocationTargetException;
+import java.rmi.server.Skeleton;
import java.util.StringTokenizer;
@@ -22,6 +23,7 @@
import org.drools.spi.InternalReadAccessor;
import evaluators.membership.INumericSetMembershipFunction;
+import evaluators.membership.SkepticNumericMembershipFunction;
import evaluators.membership.TriangleMembership;
import uncertainty.factory.IDegreeFactory;
@@ -41,7 +43,7 @@
public FuzzyNumericEvaluator(Operator op, final ValueType type,
final boolean isNegated,
final String parameters) {
- super( type , op);
+ super( type , op );
this.isNegated = isNegated;
this.mu = this.parseParameters( parameters );
@@ -167,7 +169,10 @@
*/
private INumericSetMembershipFunction parseParameters(String parameters) {
- StringTokenizer tok = new StringTokenizer(parameters," ,");
+ StringTokenizer tok = new StringTokenizer(parameters," ,");
+ if (tok.countTokens() == 0)
+ return new SkepticNumericMembershipFunction();
+
String className = tok.nextToken();
int numParm = tok.countTokens();
Added: labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/evaluators/SeemsEvaluator.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/evaluators/SeemsEvaluator.java (rev 0)
+++ labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/evaluators/SeemsEvaluator.java 2008-08-29 18:04:09 UTC (rev 22242)
@@ -0,0 +1,167 @@
+package evaluators;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+
+import org.drools.IUncertainRuleBase;
+import org.drools.RuntimeDroolsException;
+import org.drools.WorkingMemory;
+import org.drools.base.BaseUncertainEvaluator;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.Operator;
+import org.drools.base.field.LongFieldImpl;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.rule.VariableRestriction.VariableContextEntry;
+import org.drools.spi.Evaluator;
+import org.drools.spi.FieldValue;
+import org.drools.spi.IUncertainEvaluator;
+import org.drools.spi.InternalReadAccessor;
+
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
+
+
+
+public class SeemsEvaluator extends BaseUncertainEvaluator implements IUncertainEvaluator {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ public SeemsEvaluator() {
+ this(ValueType.OBJECT_TYPE,false,"");
+ }
+
+
+ public SeemsEvaluator(final ValueType type,
+ final boolean isNegated,
+ final String parameters) {
+ super( type,
+ SeemsEvaluatorDefinition.SEEMS);
+ }
+
+
+
+
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ super.readExternal(in);
+
+
+ }
+
+ public void writeExternal(ObjectOutput out) throws IOException {
+ super.writeExternal(out);
+
+
+ }
+
+
+
+ protected IUncertainDegree eval(WorkingMemory workingMemory) {
+ if (! (workingMemory.getRuleBase() instanceof IUncertainRuleBase)) {
+ throw new RuntimeDroolsException("Seems Evaluator : Uncertainty has not been enabled in the current Rule Base");
+ }
+ IDegreeFactory factory = ((IUncertainRuleBase) workingMemory.getRuleBase()).getTruthFactory();
+
+ return factory.Unknown();
+ }
+
+ public IUncertainDegree evaluateUncertain(WorkingMemory workingMemory,
+ InternalReadAccessor extractor, Object object1, FieldValue value) {
+
+ return eval(workingMemory);
+
+ }
+
+ public boolean evaluate(InternalWorkingMemory workingMemory,
+ InternalReadAccessor extractor, Object object1, FieldValue value) {
+ return eval(workingMemory).toBoolean();
+ }
+
+
+ public IUncertainDegree evaluateUncertain(WorkingMemory workingMemory,
+ InternalReadAccessor leftExtractor, Object left,
+ InternalReadAccessor rightExtractor, Object right) {
+
+
+ Object set = rightExtractor.getValue(right);
+
+ return ((IUncertainEvaluator) set).evaluateUncertain(workingMemory, leftExtractor, left, new LongFieldImpl(1));
+
+ }
+
+ public boolean evaluate(InternalWorkingMemory workingMemory,
+ InternalReadAccessor leftExtractor, Object left,
+ InternalReadAccessor rightExtractor, Object right) {
+ return eval(workingMemory).toBoolean();
+ }
+
+
+ public IUncertainDegree evaluateUncertainCachedLeft(WorkingMemory workingMemory,
+ VariableContextEntry context, Object object1) {
+ return eval(workingMemory);
+ }
+ public boolean evaluateCachedLeft(InternalWorkingMemory workingMemory,
+ VariableContextEntry context, Object object1) {
+ return eval(workingMemory).toBoolean();
+ }
+
+
+ public IUncertainDegree evaluateUncertainCachedRight(WorkingMemory workingMemory,
+ VariableContextEntry context, Object object2) {
+ return eval(workingMemory);
+ }
+ public boolean evaluateCachedRight(InternalWorkingMemory workingMemory,
+ VariableContextEntry context, Object object2) {
+ return eval(workingMemory).toBoolean();
+ }
+
+
+
+
+ @Override
+ public int hashCode() {
+ final int PRIME = 37;
+ int result = PRIME * super.hashCode();
+ return result;
+ }
+
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(Object obj) {
+ if ( this == obj ) return true;
+ if ( !super.equals( obj ) ) return false;
+ if ( getClass() != obj.getClass() ) return false;
+ return true;
+ }
+
+ /**
+ * This methods tries to parse the string of parameters to customize
+ * the evaluator.
+ *
+ * @param parameters
+ */
+ private void parseParameters(String parameters) {
+
+ }
+
+
+
+}
+
+
\ No newline at end of file
Added: labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/evaluators/SeemsEvaluatorDefinition.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/evaluators/SeemsEvaluatorDefinition.java (rev 0)
+++ labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/evaluators/SeemsEvaluatorDefinition.java 2008-08-29 18:04:09 UTC (rev 22242)
@@ -0,0 +1,197 @@
+package evaluators;
+
+import uncertainty.factory.IDegreeFactory;
+
+
+import java.awt.geom.Point2D;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.drools.IUncertainRuleBase;
+import org.drools.RuntimeDroolsException;
+import org.drools.WorkingMemory;
+import org.drools.base.BaseEvaluator;
+import org.drools.base.BaseUncertainEvaluator;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.IUncertainBinaryEvaluatorDefinition;
+import org.drools.base.evaluators.Operator;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.rule.VariableRestriction.ObjectVariableContextEntry;
+import org.drools.rule.VariableRestriction.VariableContextEntry;
+import org.drools.spi.Evaluator;
+import org.drools.spi.FieldValue;
+import org.drools.spi.IUncertainEvaluator;
+import org.drools.spi.InternalReadAccessor;
+
+
+import uncertainty.truthvals.IUncertainDegree;
+
+
+
+
+/**
+ *
+ * @author sotty
+
+ *
+ */
+public class SeemsEvaluatorDefinition implements IUncertainBinaryEvaluatorDefinition {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ public static final Operator SEEMS = Operator.addOperatorToRegistry( "seems",
+ false );
+
+ private static final String[] SUPPORTED_IDS = {SEEMS.getOperatorString()};
+
+ private Map<String, Evaluator> cache = Collections.emptyMap();
+
+
+
+
+
+
+ public Evaluator getEvaluator(ValueType type, String operatorId,
+ boolean isNegated, String parameterText) {
+
+
+ if ( this.cache == Collections.EMPTY_MAP ) {
+ this.cache = new HashMap<String, Evaluator>();
+ }
+ String key = isNegated + ":" + parameterText;
+ Evaluator eval = this.cache.get( key );
+ if ( eval == null ) {
+ eval = new SeemsEvaluator( type,
+ isNegated,
+ parameterText );
+ this.cache.put( key,
+ eval );
+ }
+ return eval;
+
+
+
+ }
+
+ public Evaluator getEvaluator(ValueType type, Operator operator,
+ String parameterText) {
+ return getEvaluator(type,operator.getOperatorString(),false,parameterText);
+ }
+
+ public Evaluator getEvaluator(ValueType type, Operator operator) {
+ return getEvaluator(type,operator.getOperatorString(),false,"");
+ }
+
+
+
+
+
+ /**
+ * Operator is known as "far"
+ */
+ public String[] getEvaluatorIds() {
+ return SUPPORTED_IDS;
+ }
+
+
+
+
+
+
+
+ /**
+ *
+ *
+ */
+ public boolean isNegatable() {
+ return true;
+ }
+
+
+
+ /**
+ * This evaluator operates on fact properties (i.e. age)
+ * and not on factHandles.
+ * So this returns false
+ */
+ public boolean operatesOnFactHandles() {
+ return false;
+ }
+
+
+
+
+
+ /**
+ *
+ */
+ public boolean supportsType(ValueType type) {
+ return type.isNumber();
+ }
+
+
+
+
+
+
+
+ /*
+ * TODO: Try and understand what this means. Copied from AfterEvalDef.
+ */
+
+
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ cache = (Map<String, Evaluator>) in.readObject();
+ }
+
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeObject(cache);
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
Added: labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/evaluators/membership/SkepticNumericMembershipFunction.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/evaluators/membership/SkepticNumericMembershipFunction.java (rev 0)
+++ labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/evaluators/membership/SkepticNumericMembershipFunction.java 2008-08-29 18:04:09 UTC (rev 22242)
@@ -0,0 +1,29 @@
+package evaluators.membership;
+
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
+public class SkepticNumericMembershipFunction implements
+ INumericSetMembershipFunction {
+
+ @Override
+ public IUncertainDegree eval(Number number, IDegreeFactory factory) {
+ return factory.Unknown();
+ }
+
+ @Override
+ public Number getCenter() {
+ return 0;
+ }
+
+ @Override
+ public void init(String[] args) {
+
+ }
+
+ @Override
+ public IUncertainDegree eval(Object object, IDegreeFactory factory) {
+ return factory.Unknown();
+ }
+
+}
Modified: labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/fuzzy/FuzzyTest.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/fuzzy/FuzzyTest.java 2008-08-29 16:59:40 UTC (rev 22241)
+++ labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/fuzzy/FuzzyTest.java 2008-08-29 18:04:09 UTC (rev 22242)
@@ -27,6 +27,7 @@
import org.drools.rule.Package;
import data.Act;
+import data.Oven;
import data.Room;
import evaluators.membership.TriangleMembership;
@@ -112,8 +113,8 @@
- session.addEventListener( new DebugAgendaEventListener() );
- session.addEventListener( new DebugWorkingMemoryEventListener() );
+// session.addEventListener( new DebugAgendaEventListener() );
+// session.addEventListener( new DebugWorkingMemoryEventListener() );
session.setGlobal("factory", factory);
@@ -142,11 +143,18 @@
private void testRules() {
Room room = new Room();
- room.setTemperature(22.5);
+ room.setTemperature(28.5);
room.setHumidity(0.45);
- session.insert(room,null);
+ Oven oven = new Oven();
+ oven.setTemperature(180.0);
+
+
session.fireAllRules();
+
+ session.insert(room,null);
+ session.insert(oven,null);
+ session.fireAllRules();
session.insert(new Act(), null);
Modified: labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/fuzzy/domains/DomainPartition.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/fuzzy/domains/DomainPartition.java 2008-08-29 16:59:40 UTC (rev 22241)
+++ labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/fuzzy/domains/DomainPartition.java 2008-08-29 18:04:09 UTC (rev 22242)
@@ -8,6 +8,8 @@
import org.drools.base.evaluators.Operator;
import org.drools.spi.Evaluator;
+import data.Oven;
+
import uncertainty.truthvals.IUncertainDegree;
import evaluators.FuzzyNumericEvaluator;
@@ -18,66 +20,100 @@
private Map<String, Evaluator> cache = Collections.emptyMap();
- protected Map<Evaluator, IUncertainDegree> degs = new HashMap<Evaluator, IUncertainDegree>();
+
protected static String[] SUPPORTED_IDS;
+ public Evaluator getEvaluator(String opId, Class clazz) {
+ return cache.get(buildContextualId(clazz, opId));
+ }
+
+
+
+
+
+ protected String buildKey(String className, String operatorId, boolean isNegated, String parameterText) {
+ return className + ":" + operatorId + ":" + isNegated; //+ ":" + parameterText;
+ }
+
+ protected String buildContextualId(Class clazz, String operatorId) {
+ //return clazz.getName() + " : " + operatorId;
+ return buildKey(clazz.getName(),operatorId,false,"");
+ }
+
+
+ public Evaluator addEvaluator(Class clazz, ValueType type, String operatorId,
+ boolean isNegated, String parameterText) {
+
+ System.out.println("Called addEvaluator " + operatorId + " : " + parameterText + ";");
+
+
+ if ( this.cache == Collections.EMPTY_MAP ) {
+ this.cache = new HashMap<String, Evaluator>();
+ }
+
+
+ Evaluator eval = new FuzzyNumericEvaluator( map.get(operatorId), type,
+ isNegated,
+ parameterText );
+
+ String key = buildKey(clazz.getName(), operatorId, isNegated, parameterText);
+
+ if (this.cache.get(key) != null)
+ System.out.println("WARNING : eval already present " + key);
+
+ this.cache.put( key , eval );
+ return eval;
+ }
+
+
+
public Evaluator getEvaluator(ValueType type, String operatorId,
boolean isNegated, String parameterText) {
-
+ return getEvaluator("", type, operatorId, isNegated, parameterText);
+ }
+
+ public Evaluator getEvaluator(String className, ValueType type, String operatorId,
+ boolean isNegated, String parameterText) {
+ System.out.println("Called getEvaluator " + operatorId + " : " + parameterText + ";");
if ( this.cache == Collections.EMPTY_MAP ) {
this.cache = new HashMap<String, Evaluator>();
}
- String key = operatorId + ":" + isNegated + ":" + parameterText;
+ String key = buildKey(className,operatorId, isNegated, parameterText);
Evaluator eval = this.cache.get( key );
if ( eval == null ) {
- eval = new FuzzyNumericEvaluator( map.get(operatorId), type,
- isNegated,
- parameterText );
- this.cache.put( key,
- eval );
+ eval = addEvaluator(Object.class,type, operatorId, isNegated, parameterText);
}
+
return eval;
}
-
- public void setInfo(String op, String parm, IUncertainDegree deg) {
- Evaluator ev = cache.get(op + ":false:" + parm);
+ /*
+ public void setInfo(String className, String op, String parm, IUncertainDegree deg) {
+ Evaluator ev = cache.get(buildKey(className,op, false, ""));
if (ev != null) {
this.degs.put(ev, deg);
}
}
+ */
- /**
- *
- * Should be strategy-configurable
- * @deprecated
- */
- public Number defuzzify() {
-
- double acc = 0;
-
- for (Evaluator ev : degs.keySet()) {
-
- FuzzyNumericEvaluator fuzzyEv = (FuzzyNumericEvaluator) ev;
- acc += fuzzyEv.getCenter().doubleValue() * degs.get(ev).getDegree().getValue();
- System.out.println("General defuzzification : "+ev + " at " + degs.get(ev));
- }
-
- return acc;
- }
- public abstract String[] getEvaluatorIds();
+ public abstract String[] getEvaluatorIds();
+
+
+
+
+
}
Modified: labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/fuzzy/domains/IDomainPartition.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/fuzzy/domains/IDomainPartition.java 2008-08-29 16:59:40 UTC (rev 22241)
+++ labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/fuzzy/domains/IDomainPartition.java 2008-08-29 18:04:09 UTC (rev 22242)
@@ -8,12 +8,18 @@
public interface IDomainPartition {
String[] getEvaluatorIds();
+
+ Evaluator addEvaluator(Class clazz, ValueType type, String operatorId,
+ boolean isNegated, String parameterText);
Evaluator getEvaluator(ValueType type, String operatorId,
boolean isNegated, String parameterText);
+
+ Evaluator getEvaluator(String className, ValueType type, String operatorId,
+ boolean isNegated, String parameterText);
- void setInfo(String op, String parm, IUncertainDegree deg);
+ //void setInfo(String op, String parm, IUncertainDegree deg);
- Number defuzzify();
+ //Number defuzzify();
}
Modified: labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/fuzzy/domains/TemperatureDomain.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/fuzzy/domains/TemperatureDomain.java 2008-08-29 16:59:40 UTC (rev 22241)
+++ labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/fuzzy/domains/TemperatureDomain.java 2008-08-29 18:04:09 UTC (rev 22242)
@@ -36,6 +36,8 @@
+
+
public static final Operator coldOp = Operator.addOperatorToRegistry( TemperatureDomain.COLD,false );
public static final Operator notColdOp = Operator.addOperatorToRegistry( TemperatureDomain.COLD,true );
Modified: labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/fuzzy/domains/TypedNumberField.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/fuzzy/domains/TypedNumberField.java 2008-08-29 16:59:40 UTC (rev 22241)
+++ labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/fuzzy/domains/TypedNumberField.java 2008-08-29 18:04:09 UTC (rev 22242)
@@ -1,13 +1,28 @@
package fuzzy.domains;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.drools.base.ValueType;
+import org.drools.spi.Evaluator;
+
+import evaluators.FuzzyNumericEvaluator;
+
import uncertainty.truthvals.IUncertainDegree;
public class TypedNumberField {
protected IDomainPartition domain;
+ protected Map<Evaluator, IUncertainDegree> degs = new HashMap<Evaluator, IUncertainDegree>();
+ public void setFuzzySet(Class clazz, String op, boolean isNegated, String parameterText) {
+ domain.addEvaluator(clazz, ValueType.DOUBLE_TYPE, op, isNegated, parameterText);
+ }
+
+
+
public TypedNumberField(IDomainPartition domain) {
this.domain = domain;
}
@@ -24,12 +39,34 @@
return value;
}
- public void setInfo(String op, String parm, IUncertainDegree deg) {
- domain.setInfo(op, parm, deg);
- this.setValue(domain.defuzzify());
- System.out.println("Trying to update speed " + op + " at deg " + deg);
+ public void setInfo(Class clazz,String op, String parm, IUncertainDegree deg) {
+ Evaluator eval = domain.getEvaluator(clazz.getName(),ValueType.DOUBLE_TYPE, op, false, "");
+
+ degs.put(eval, deg);
+ this.setValue(defuzzify());
}
+
+ /**
+ *
+ * Should be strategy-configurable
+ * @deprecated
+ */
+ public Number defuzzify() {
+
+ double acc = 0;
+
+ for (Evaluator ev : degs.keySet()) {
+
+ FuzzyNumericEvaluator fuzzyEv = (FuzzyNumericEvaluator) ev;
+ acc += fuzzyEv.getCenter().doubleValue() * degs.get(ev).getDegree().getValue();
+// System.out.println("General defuzzification : "+ev + " at " + degs.get(ev));
+ }
+
+ return acc;
+ }
+
+
}
Modified: labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/fuzzy/fuzzy.drl
===================================================================
--- labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/fuzzy/fuzzy.drl 2008-08-29 16:59:40 UTC (rev 22241)
+++ labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/fuzzy/fuzzy.drl 2008-08-29 18:04:09 UTC (rev 22242)
@@ -12,6 +12,8 @@
import data.Room;
import data.Fan;
import data.Act;
+import data.Oven;
+import fuzzy.domains.*;
#declare any global variables here
@@ -20,32 +22,163 @@
+
+rule "Init"
+
+ salience 1000
+
+ when
+ eval(true)
+ then
+
+ System.out.println("Setting initializers ");
+
+
+ Room.setFieldEvaluator("temperature",
+ fuzzy.domains.TemperatureDomain.coldOp.getOperatorString(),
+ false,
+ "evaluators.membership.TriangleMembership, 0, 10"
+ );
+ Room.setFieldEvaluator("temperature",
+ fuzzy.domains.TemperatureDomain.coolOp.getOperatorString(),
+ false,
+ "evaluators.membership.TriangleMembership, 10, 10"
+ );
+ Room.setFieldEvaluator("temperature",
+ fuzzy.domains.TemperatureDomain.warmOp.getOperatorString(),
+ false,
+ "evaluators.membership.TriangleMembership, 20, 10"
+ );
+ Room.setFieldEvaluator("temperature",
+ fuzzy.domains.TemperatureDomain.hotOp.getOperatorString(),
+ false,
+ "evaluators.membership.TriangleMembership, 30, 10"
+ );
+
+
+ Oven.setFieldEvaluator("temperature",
+ fuzzy.domains.TemperatureDomain.coldOp.getOperatorString(),
+ false,
+ "evaluators.membership.TriangleMembership, 25, 10"
+ );
+ Oven.setFieldEvaluator("temperature",
+ fuzzy.domains.TemperatureDomain.coolOp.getOperatorString(),
+ false,
+ "evaluators.membership.TriangleMembership, 35, 10"
+ );
+ Oven.setFieldEvaluator("temperature",
+ fuzzy.domains.TemperatureDomain.warmOp.getOperatorString(),
+ false,
+ "evaluators.membership.TriangleMembership, 100, 60"
+ );
+ Oven.setFieldEvaluator("temperature",
+ fuzzy.domains.TemperatureDomain.hotOp.getOperatorString(),
+ false,
+ "evaluators.membership.TriangleMembership, 200, 100"
+ );
+
+ Room.setFieldEvaluator("humidity",
+ fuzzy.domains.HumidityDomain.lowOp.getOperatorString(),
+ false,
+ "evaluators.membership.TriangleMembership, 0, 0.5"
+ );
+ Room.setFieldEvaluator("humidity",
+ fuzzy.domains.HumidityDomain.mediumOp.getOperatorString(),
+ false,
+ "evaluators.membership.TriangleMembership, 0.5, 0.5"
+ );
+ Room.setFieldEvaluator("humidity",
+ fuzzy.domains.HumidityDomain.highOp.getOperatorString(),
+ false,
+ "evaluators.membership.TriangleMembership, 1, 0.5"
+ );
+
+ Fan.setFieldEvaluator("speed",
+ fuzzy.domains.SpeedDomain.stopOp.getOperatorString(),
+ false,
+ "evaluators.membership.TriangleMembership, 0, 10"
+ );
+ Fan.setFieldEvaluator("speed",
+ fuzzy.domains.SpeedDomain.slowOp.getOperatorString(),
+ false,
+ "evaluators.membership.TriangleMembership, 10, 10"
+ );
+ Fan.setFieldEvaluator("speed",
+ fuzzy.domains.SpeedDomain.fastOp.getOperatorString(),
+ false,
+ "evaluators.membership.TriangleMembership, 20, 10"
+ );
+
+
+end
+
+
+
+
+
+
+
+rule "DoubleHot"
+ when
+ $r : Room( temperature `seems[] hot )
+ $o : Oven( temperature `seems[] hot )
+ then
+ System.out.println("Heat with different meanings " + drools.getActivationDegree());
+
+end
+
+
+rule "Hot_generic"
+ when
+ $r : Room( temperature `hot[evaluators.membership.TriangleMembership, 30, 10] 1)
+ then
+ System.out.println("Hot works as op itself " + drools.getActivationDegree());
+end
+
+
+rule "Hot"
+ when
+ $r: Room( temperature `seems[] hot ,
+ humidity `seems[] medium )
+ then
+ System.out.println("Room is hot at degree " + drools.getActivationDegree());
+
+ Hashtable<ConstraintSignature,IUncertainDegree> priors = new Hashtable<ConstraintSignature, IUncertainDegree>();
+ priors.put(new ConstraintSignature("speed","seems","fast"), drools.getActivationDegree());
+
+ insertLogical(new Fan(),priors);
+
+end
+
+
+/*
rule "Cold"
when
$r: Room(
- temperature `cold[evaluators.membership.TriangleMembership, 0, 10] 1 ,
- humidity `low[evaluators.membership.TriangleMembership, 0, 0.5] 1
+ temperature `seems[] cold ,
+ humidity `seems[] low
)
then
System.out.println("Room is cold at degree " + drools.getActivationDegree());
Hashtable<ConstraintSignature,IUncertainDegree> priors = new Hashtable<ConstraintSignature, IUncertainDegree>();
- priors.put(new ConstraintSignature("speed","stop","1"), drools.getActivationDegree());
+ priors.put(new ConstraintSignature("speed","seems","stop"), drools.getActivationDegree());
insertLogical(new Fan(),priors);
end
+
rule "Cool"
when
- $r: Room( temperature `cool[evaluators.membership.TriangleMembership, 10, 10] 1 ,
- humidity `medium[evaluators.membership.TriangleMembership, 0.5, 0.5] 1 )
+ $r: Room( temperature `seems[] cool ,
+ humidity `seems[] medium )
then
System.out.println("Room is cool at degree " + drools.getActivationDegree());
Hashtable<ConstraintSignature,IUncertainDegree> priors = new Hashtable<ConstraintSignature, IUncertainDegree>();
- priors.put(new ConstraintSignature("speed","stop","1"), drools.getActivationDegree());
+ priors.put(new ConstraintSignature("speed","seems","stop"), drools.getActivationDegree());
insertLogical(new Fan(),priors);
@@ -54,29 +187,31 @@
rule "Warm"
when
- $r: Room( temperature `warm[evaluators.membership.TriangleMembership, 20, 10] 1 ,
- humidity `medium[evaluators.membership.TriangleMembership, 1, 0.5] 1 )
+ $r: Room( temperature `seems[] warm ,
+ humidity `seems[] medium )
then
System.out.println("Room is warm at degree " + drools.getActivationDegree());
Hashtable<ConstraintSignature,IUncertainDegree> priors = new Hashtable<ConstraintSignature, IUncertainDegree>();
- priors.put(new ConstraintSignature("speed","slow","1"), drools.getActivationDegree());
+ priors.put(new ConstraintSignature("speed","seems","slow"), drools.getActivationDegree());
insertLogical(new Fan(),priors);
end
+
+
-rule "Hot"
+rule "Hotter"
when
- $r: Room( temperature `hot[evaluators.membership.TriangleMembership, 30, 10] 1 ,
- humidity `high[evaluators.membership.TriangleMembership, 1, 0.5] 1 )
+ $r: Room( temperature `seems[] hot ,
+ humidity `seems[] high )
then
- System.out.println("Room is hot at degree " + drools.getActivationDegree());
+ System.out.println("Room is hotter at degree " + drools.getActivationDegree());
Hashtable<ConstraintSignature,IUncertainDegree> priors = new Hashtable<ConstraintSignature, IUncertainDegree>();
- priors.put(new ConstraintSignature("speed","fast","1"), drools.getActivationDegree());
+ priors.put(new ConstraintSignature("speed","seems","fast"), drools.getActivationDegree());
insertLogical(new Fan(),priors);
@@ -88,27 +223,30 @@
rule "Fan Stop"
when
- $f : Fan( speed `stop[evaluators.membership.TriangleMembership, 0, 10] 1)
+ $f : Fan( speed `seems[] stop)
then
System.out.println("Stop fan" + drools.getActivationDegree());
- $f.setSpeedInfo("stop","evaluators.membership.TriangleMembership, 0, 10",drools.getActivationDegree());
+ $f.setSpeedInfo("stop",drools.getActivationDegree());
end
rule "Fan Slow"
when
- $f : Fan( speed `slow[evaluators.membership.TriangleMembership, 10, 10] 1)
+ $f : Fan( speed `seems[] slow)
then
System.out.println("Slow fan" + drools.getActivationDegree());
- $f.setSpeedInfo("slow","evaluators.membership.TriangleMembership, 10, 10",drools.getActivationDegree());
+ $f.setSpeedInfo("slow",drools.getActivationDegree());
+
end
+
+
rule "Fan Fast"
when
- $f : Fan( speed `fast[evaluators.membership.TriangleMembership, 20, 10] 1)
+ $f : Fan( speed `seems[] fast)
then
- System.out.println("Fast fan" + drools.getActivationDegree());
- $f.setSpeedInfo("fast","evaluators.membership.TriangleMembership, 20, 10",drools.getActivationDegree());
+ System.out.println("Fast fan" + drools.getActivationDegree());
+ $f.setSpeedInfo("fast",drools.getActivationDegree());
end
@@ -116,9 +254,9 @@
rule "Act"
- when
- Act()
+ when
$f : Fan()
then
System.out.println("Fan activated at speed " + $f.getSpeed());
end
+*/
\ No newline at end of file
Modified: labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/fuzzy/oldFaithful.drl
===================================================================
--- labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/fuzzy/oldFaithful.drl 2008-08-29 16:59:40 UTC (rev 22241)
+++ labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/fuzzy/oldFaithful.drl 2008-08-29 18:04:09 UTC (rev 22242)
@@ -35,9 +35,9 @@
//System.out.println("Rule 2 fired for " + $s + " at deg " + drools.getActivationDegree());
$s.setEpsilon2(drools.getActivationDegree().getDegree().getValue());
end
+
*/
-
rule "Class1_clust"
when
$s : Sample2 ( this `classify[] 0 )
Modified: labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/fuzzy.packagebuilder.conf
===================================================================
--- labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/fuzzy.packagebuilder.conf 2008-08-29 16:59:40 UTC (rev 22241)
+++ labs/jbossrules/branches/uncDrools5x/Fuzzy Test/src/fuzzy.packagebuilder.conf 2008-08-29 18:04:09 UTC (rev 22242)
@@ -31,20 +31,13 @@
drools.evaluator.matches = org.drools.base.evaluators.MatchesEvaluatorsDefinition
drools.evaluator.soundslike = org.drools.base.evaluators.SoundslikeEvaluatorsDefinition
-drools.evaluator.cold = evaluators.TemperatureEvaluatorDefinition
-drools.evaluator.cool = evaluators.TemperatureEvaluatorDefinition
-drools.evaluator.warm = evaluators.TemperatureEvaluatorDefinition
-drools.evaluator.hot = evaluators.TemperatureEvaluatorDefinition
-drools.evaluator.low = evaluators.HumidityEvaluatorDefinition
-drools.evaluator.medium = evaluators.HumidityEvaluatorDefinition
-drools.evaluator.high = evaluators.HumidityEvaluatorDefinition
-drools.evaluator.slow = evaluators.SpeedEvaluatorDefinition
-drools.evaluator.stop = evaluators.SpeedEvaluatorDefinition
-drools.evaluator.fast = evaluators.SpeedEvaluatorDefinition
-
drools.evaluator.classify = evaluators.FakeSubSymbEvaluatorDefinition
+drools.evaluator.seems = evaluators.SeemsEvaluatorDefinition
+drools.evaluator.hot = evaluators.TemperatureEvaluatorDefinition
+
+
More information about the jboss-svn-commits
mailing list