[jboss-svn-commits] JBL Code SVN: r26690 - in labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl: src and 14 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri May 22 07:04:31 EDT 2009


Author: dsotty
Date: 2009-05-22 07:04:30 -0400 (Fri, 22 May 2009)
New Revision: 26690

Added:
   labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/
   labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/
   labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/
   labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/
   labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/
   labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/
   labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/AbstractChanceTest.java
   labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/BaseTest.java
   labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/ComplexFormulaTest.java
   labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/NullPrintStream.java
   labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/RuleMLTest.java
   labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/fuzzyTest/
   labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/fuzzyTest/Fan.java
   labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/fuzzyTest/FuzzyTest0.java
   labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/fuzzyTest/FuzzyTest1.java
   labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/fuzzyTest/Room.java
   labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/fuzzyTest/SpeedDomain.java
   labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/fuzzyTest/TemperatureDomain.java
   labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/impliesTest/
   labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/impliesTest/ImpliesTest0.java
   labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/impliesTest/ImpliesTest1.java
   labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/rules/
   labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/rules/org/
   labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/rules/org/drools/
   labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/rules/org/drools/chance/
   labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/rules/org/drools/chance/BaseTest.drl
   labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/rules/org/drools/chance/ComplexFormulaTest.drl
   labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/rules/org/drools/chance/RuleMLTest.drl
   labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/rules/org/drools/chance/fuzzy/
   labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/rules/org/drools/chance/fuzzy/FuzzyTest0.drl
   labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/rules/org/drools/chance/fuzzy/FuzzyTest1.drl
   labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/rules/org/drools/chance/impl/
   labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/rules/org/drools/chance/impl/ImpliesTest0.drl
   labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/rules/org/drools/chance/impl/ImpliesTest1.drl
   labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/test/
   labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/test/java/
   labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/test/resources/
Log:
Major update

Added: labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/AbstractChanceTest.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/AbstractChanceTest.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/AbstractChanceTest.java	2009-05-22 11:04:30 UTC (rev 26690)
@@ -0,0 +1,431 @@
+package org.drools.chance;
+
+
+import java.io.FileNotFoundException;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Collection;
+
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.RuleBaseConfiguration;
+import org.drools.RuleBaseConfiguration.AssertBehaviour;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderConfiguration;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceType;
+import org.drools.compiler.DrlParser;
+import org.drools.compiler.PackageBuilderConfiguration;
+import org.drools.definition.KnowledgePackage;
+import org.drools.definition.type.FactType;
+import org.drools.io.ResourceFactory;
+import org.drools.lang.descr.PackageDescr;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.xml.RuleMLDumper;
+
+
+public abstract class AbstractChanceTest {
+	
+	
+	
+	public static final String SIMPLE_FACTORY = "org.drools.degrees.factory.SimpleDegreeFactory"; 
+	public static final String FUZZY_FACTORY = "org.drools.degrees.factory.SimpleFuzzyDegreeFactory";
+	public static final String INTERVAL_FACTORY = "org.drools.degrees.factory.IntervalDegreeFactory";
+
+	private String ruleFileName = null;
+	
+	private String factoryName = SIMPLE_FACTORY;
+	
+	private KnowledgeBuilderConfiguration kBuilderConf = new PackageBuilderConfiguration();
+	
+	private RuleBaseConfiguration ruleBaseConf = new RuleBaseConfiguration();
+			
+	private FileWriter logger;
+	
+	private StatefulKnowledgeSession session;
+	
+	private boolean isDumpable = true;
+	
+	private RuleMLDumper dumper = new RuleMLDumper();
+	
+	private boolean isSilent = false;
+	
+	private boolean cwa = true;
+	
+		
+	public AbstractChanceTest() {
+				
+		try {
+			logger = new FileWriter("log/"+this.getClass().getSimpleName()+".log");
+		} catch (Exception e) {
+			e.printStackTrace();
+			System.err.println("Unable to log");
+		}
+	}
+	
+	
+	
+		
+	
+	public void initDrools() {
+					
+		configKnowledgeBuilder();
+		
+		Collection<KnowledgePackage> pks = compilePackages();
+		
+		configRuleBase();
+		
+		initSession(pks);
+		
+		getSession().setGlobal("writer",getLogger());
+		
+	}
+	
+	
+	public void run() {
+		try {
+		if (isSilent) 
+			System.setOut(new NullPrintStream("out.txt"));
+		} catch (FileNotFoundException fnfe) {
+			fnfe.printStackTrace();
+		}
+		
+		initDrools();
+		
+		if (isDumpable) {
+			try {
+				InputStream drl = ResourceFactory.newClassPathResource(getRuleFileName(),
+						this.getClass()).getInputStream();	    		
+				DrlParser parser = new DrlParser();
+	    		PackageDescr pkD = parser.parse(drl);
+				
+				System.out.println(getDumper().dump(pkD,"xml/"+this.getClass().getSimpleName()+".ruleml.xml"));
+			} catch (Exception e) {
+				e.printStackTrace();
+				throw new RuntimeException("XML Dumping failed");
+			}
+		}
+		
+		try {
+			act();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		
+		terminate();
+	}
+	
+	
+	
+	public void configKnowledgeBuilder() {
+		
+		getKBuilderConf().setProperty("drools.evaluator.hot", "org.drools.chance.fuzzyTest.TemperatureDomain");
+		getKBuilderConf().setProperty("drools.evaluator.warm", "org.drools.chance.fuzzyTest.TemperatureDomain");
+		getKBuilderConf().setProperty("drools.evaluator.cool", "org.drools.chance.fuzzyTest.TemperatureDomain");
+		getKBuilderConf().setProperty("drools.evaluator.cold", "org.drools.chance.fuzzyTest.TemperatureDomain");
+		
+		getKBuilderConf().setProperty("drools.evaluator.fast", "org.drools.chance.fuzzyTest.SpeedDomain");
+		getKBuilderConf().setProperty("drools.evaluator.slow", "org.drools.chance.fuzzyTest.SpeedDomain");
+		getKBuilderConf().setProperty("drools.evaluator.stop", "org.drools.chance.fuzzyTest.SpeedDomain");
+		
+		getKBuilderConf().setProperty("drools.evaluator.seems", "org.drools.fuzzy.evaluators.SeemsEvaluatorDefinition");
+		
+		getKBuilderConf().setProperty("drools.evaluator.random", "org.drools.fuzzy.evaluators.RandomEvaluatorDefinition");
+		
+		getKBuilderConf().setProperty("drools.evaluator.equals", "org.drools.fuzzy.evaluators.EqualsEvaluatorDefinition");
+		
+	}
+	
+	
+	public Collection<KnowledgePackage> compilePackages() {	
+	
+		String fileName = getRuleFileName();
+										
+		final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory
+				.newKnowledgeBuilder(getKBuilderConf());
+			
+		kbuilder.add(ResourceFactory.newClassPathResource(fileName,
+				this.getClass()), ResourceType.DRL );
+			
+		// Check the builder for errors
+		if (kbuilder.hasErrors()) {
+			System.out.println(kbuilder.getErrors().toString());
+			throw new RuntimeException("Unable to compile " + fileName);
+		}
+							
+		// get the compiled packages (which are serializable)
+		return kbuilder.getKnowledgePackages();
+	}
+	
+	
+	
+	public void configRuleBase() {
+		getRuleBaseConf().setProperty("org.drools.chance.enable" , "true");
+		
+
+		
+		getRuleBaseConf().setProperty("org.drools.chance.factory", getFactoryName());
+			getRuleBaseConf().setAssertBehaviour(AssertBehaviour.EQUALITY);
+			getRuleBaseConf().setIndexLeftBetaMemory(false);
+			getRuleBaseConf().setIndexRightBetaMemory(false);
+			getRuleBaseConf().setAlphaNodeHashingThreshold(0);
+			
+		getRuleBaseConf().setProperty("org.drools.chance.cwa" , cwa ? "true" : "false");	
+		
+	}
+	
+	
+	public void initSession(Collection<KnowledgePackage> pkgs) {
+		
+		
+		final KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(getRuleBaseConf());
+		kbase.addKnowledgePackages(pkgs);
+						 		
+		setSession(kbase.newStatefulKnowledgeSession());
+		
+		
+
+	}
+	
+	
+	
+	public void terminate() {
+		try {
+			getLogger().flush();
+			getLogger().close();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		if (getSession() != null)
+			getSession().dispose();			
+	}
+	
+	
+	public abstract void act() throws InstantiationException, IllegalAccessException;
+
+	public boolean log(String s) {
+		try {
+			getLogger().write(s);
+			return true;
+		} catch (IOException ioe) {
+			ioe.printStackTrace();
+			return false;
+		}
+
+	}
+	
+	/**
+	 * @param ruleFileName the ruleFileName to set
+	 */
+	public void setRuleFileName(String ruleFileName) {
+		this.ruleFileName = ruleFileName;
+	}
+
+
+	/**
+	 * @return the ruleFileName
+	 */
+	public String getRuleFileName() {
+		return ruleFileName;
+	}
+
+
+	/**
+	 * @param kBuilderConf the kBuilderConf to set
+	 */
+	public void setKBuilderConf(KnowledgeBuilderConfiguration kBuilderConf) {
+		this.kBuilderConf = kBuilderConf;
+	}
+
+
+	/**
+	 * @return the kBuilderConf
+	 */
+	public KnowledgeBuilderConfiguration getKBuilderConf() {
+		return kBuilderConf;
+	}
+
+
+	/**
+	 * @param ruleBaseConf the ruleBaseConf to set
+	 */
+	public void setRuleBaseConf(RuleBaseConfiguration ruleBaseConf) {
+		this.ruleBaseConf = ruleBaseConf;
+	}
+
+
+	/**
+	 * @return the ruleBaseConf
+	 */
+	public RuleBaseConfiguration getRuleBaseConf() {
+		return ruleBaseConf;
+	}
+
+
+
+
+	/**
+	 * @param factoryName the factoryName to set
+	 */
+	public void setFactoryName(String factoryName) {
+		this.factoryName = factoryName;
+	}
+
+
+
+
+	/**
+	 * @return the factoryName
+	 */
+	public String getFactoryName() {
+		return factoryName;
+	}
+
+
+
+
+
+	/**
+	 * @param logger the logger to set
+	 */
+	public void setLogger(FileWriter logger) {
+		this.logger = logger;
+	}
+
+	public void setFileLogger(String logName) {
+		try {
+			setLogger(new FileWriter("log/"+logName+".log"));
+		} catch (Exception e) {
+			e.printStackTrace();
+			System.err.println("Unable to log");
+		}
+	}
+
+
+
+	/**
+	 * @return the logger
+	 */
+	public FileWriter getLogger() {
+		return logger;
+	}
+
+
+
+
+
+	/**
+	 * @param session the session to set
+	 */
+	public void setSession(StatefulKnowledgeSession session) {
+		this.session = session;
+	}
+
+
+
+
+
+	/**
+	 * @return the session
+	 */
+	public StatefulKnowledgeSession getSession() {
+		return session;
+	}
+
+
+
+
+
+	/**
+	 * @param isDumpable the isDumpable to set
+	 */
+	public void setDumpable(boolean isDumpable) {
+		this.isDumpable = isDumpable;
+	}
+
+
+
+
+
+	/**
+	 * @return the isDumpable
+	 */
+	public boolean isDumpable() {
+		return isDumpable;
+	}
+
+
+
+
+
+	/**
+	 * @param dumper the dumper to set
+	 */
+	public void setDumper(RuleMLDumper dumper) {
+		this.dumper = dumper;
+	}
+
+
+
+
+
+	/**
+	 * @return the dumper
+	 */
+	public RuleMLDumper getDumper() {
+		return dumper;
+	}
+
+
+
+
+
+	/**
+	 * @param isSilent the isSilent to set
+	 */
+	public void setSilent(boolean isSilent) {
+		this.isSilent = isSilent;
+	}
+
+
+
+
+
+	/**
+	 * @return the isSilent
+	 */
+	public boolean isSilent() {
+		return isSilent;
+	}
+
+
+	
+	
+
+	public FactType getFactType(String typeName) {
+		return getSession().getKnowledgeBase().getFactType(this.getClass().getPackage().getName(), typeName);
+	}
+	
+	
+	
+	public void setClosedWorldAssumption() {
+		cwa = true;
+	}
+	
+	public void setOpenWorldAssumption() {
+		cwa = false;
+	}
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+}

Added: labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/BaseTest.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/BaseTest.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/BaseTest.java	2009-05-22 11:04:30 UTC (rev 26690)
@@ -0,0 +1,373 @@
+package org.drools.chance;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileWriter;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import org.drools.FactHandle;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseConfiguration;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.RuleBaseConfiguration;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderConfiguration;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceType;
+import org.drools.chance.fuzzyTest.FuzzyTest0;
+import org.drools.chance.fuzzyTest.Room;
+import org.drools.compiler.PackageBuilderConfiguration;
+import org.drools.definition.KnowledgePackage;
+import org.drools.definition.type.FactType;
+import org.drools.event.rule.DebugAgendaEventListener;
+import org.drools.event.rule.DebugWorkingMemoryEventListener;
+import org.drools.io.ResourceFactory;
+import org.drools.logger.KnowledgeRuntimeLogger;
+import org.drools.logger.KnowledgeRuntimeLoggerFactory;
+import org.drools.runtime.StatefulKnowledgeSession;
+
+
+public class BaseTest extends AbstractChanceTest {
+
+	
+
+	
+
+	
+	
+	public static final void main(final String[] args) throws Exception {
+		
+		BaseTest test = new BaseTest();
+			test.setRuleFileName("BaseTest.drl");
+						
+			test.run();
+			
+	}
+	
+
+	public void act() {
+		try {
+			FactType MessageType = getFactType("Message");
+				Object msg = MessageType.newInstance();
+				MessageType.set(msg, "status", 0);
+			
+			getSession().insert(msg);
+			
+			
+			FactType PersonType = getFactType("Person");
+				Object p = PersonType.newInstance();
+				PersonType.set(p, "name", "davide");
+				PersonType.set(p, "age", 27);
+			
+			FactType BookType = getFactType("Book");
+				Object b = BookType.newInstance();
+				BookType.set(b, "title", "Drools Manual");
+				
+			getSession().insert(p);
+			getSession().insert(b);
+			getSession().fireAllRules();
+			
+			
+			FactType ExType = getFactType("Exercise");
+				Object e1 = ExType.newInstance();
+				ExType.set(e1, "topic", "Algebra");
+							
+				Object e2 = ExType.newInstance();
+				ExType.set(e2, "topic", "Norse Grammar");
+				
+				Object e3 = ExType.newInstance();
+				ExType.set(e3, "topic", "Rule Programming");
+				
+			getSession().insert(e1);
+			getSession().insert(e2);
+			getSession().insert(e3);
+			getSession().fireAllRules();
+
+				
+		} catch (Exception e ) {
+			e.printStackTrace();
+		}
+		
+		getSession().fireAllRules();
+	}
+
+	
+
+
+//		
+//		//Start the session
+//		// Will say something about next message
+//		ksession.insert(new Trigger());
+//		
+//		// Message is empty, only has status
+//		// Message content comes from previous rule
+//		final Message message = new Message();		
+//		message.setStatus(Message.HELLO);
+//		
+//		ksession.insert(message);							
+//		ksession.fireAllRules();
+//
+//		// book has no a-priori known owner
+//		// Info on BETA constraint comes from previous rule
+//		Person pers = new Person("davide",27);
+//		Book book = new Book("Drools Manual",null);
+//					
+//		ksession.insert(pers);
+//		ksession.insert(book);				
+//		ksession.fireAllRules();
+////	
+//		
+//		//NO WAY to do these exercises
+//		Exercise x1 = new Exercise("Maths");
+//		ksession.insert(x1);
+//		ksession.fireAllRules();
+//		
+//		Exercise x2 = new Exercise("Geometry");
+//		ksession.insert(x2);
+//		ksession.fireAllRules();
+//		
+//		// THIS one is an EXCEPTION
+//		Exercise x3 = new Exercise("Rule Programming");
+//		ksession.insert(x3);
+//		ksession.fireAllRules();
+//		
+//		
+//		writer.close();
+//		
+		
+		
+		
+		
+		
+		
+		
+		
+	
+//		
+//	
+//
+//	public static class Message {
+//		public static final int HELLO = 0;
+//		public static final int GOODBYE = 1;
+//		public static final int IDK = 3;
+//
+//		public String message = "";
+//
+//		private int status;
+//
+//		public Message() {
+//
+//		}
+//		
+//		public Message(int status) {
+//			this.status = status;
+//		}
+//
+//		public String getMessage() {
+//			return this.message;
+//		}
+//
+//		public void setMessage(final String message) {
+//			this.message = message;
+//		}
+//
+//		public int getStatus() {
+//			return this.status;
+//		}
+//
+//		public void setStatus(final int status) {
+//			this.status = status;
+//		}
+//
+//		public static Message doSomething(Message message) {
+//			return message;
+//		}
+//
+//		public boolean isSomething(String msg, List<Object> list) {
+//			list.add(this);
+//			return this.message.equals(msg);
+//		}
+//		
+//		public boolean equals(Object other) {
+//			if (other == null) return false;
+//			if (other instanceof Message) {
+//				Message o = (Message) other;
+//				//return o.message.equals(this.message) && o.status == this.status;
+//				return o.status == this.status;
+//			}
+//			return false;
+//		
+//		}
+//		
+//		public int hashCode() {
+//			//return this.message.hashCode()+this.status;
+//			return this.status;
+//		}
+//	}
+//
+//	
+//	
+//	
+//	
+//	
+//	
+//	
+//	
+//	
+//	public static class Person {
+//
+//		private String name;
+//		private int age;
+//		/**
+//		 * @param name the name to set
+//		 */
+//		public void setName(String name) {
+//			this.name = name;
+//		}
+//		/**
+//		 * @return the name
+//		 */
+//		public String getName() {
+//			return name;
+//		}
+//		/**
+//		 * @param age the age to set
+//		 */
+//		public void setAge(int age) {
+//			this.age = age;
+//		}
+//		/**
+//		 * @return the age
+//		 */
+//		public int getAge() {
+//			return age;
+//		}
+//		
+//		public Person(String name, int age) {
+//			this.name = name;
+//			this.age = age;
+//		}
+//		
+//		public boolean equals(Object other) {
+//			if (other == null) return false;
+//			if (! (other instanceof Person))
+//				return false;
+//			Person p = (Person) other;
+//			if (p == null) return false;
+//			return this.name.equals(p.name);
+//		}
+//		
+//		public int hashCode() {
+//			return name.hashCode();
+//		}
+//	
+//	
+//		
+//	}
+//	
+//	
+//	
+//	public static class Book {
+//		
+//		private String title;
+//		private Person owner;
+//	
+//		
+//		public Book() {
+//		}
+//		
+//		
+//		public Book(String t, Person p) {
+//			setTitle(t);
+//			setOwner(p);
+//		}
+//
+//		/**
+//		 * @param title the title to set
+//		 */
+//		public void setTitle(String title) {
+//			this.title = title;
+//		}
+//
+//		/**
+//		 * @return the title
+//		 */
+//		public String getTitle() {
+//			return title;
+//		}
+//
+//		/**
+//		 * @param owner the owner to set
+//		 */
+//		public void setOwner(Person owner) {
+//			this.owner = owner;
+//		}
+//
+//		/**
+//		 * @return the owner
+//		 */
+//		public Person getOwner() {
+//			return owner;
+//		}
+//		
+//		
+//		public boolean equals(Object other) {
+//			if (other == null) return false;
+//			if (! (other instanceof Book)) return false;
+//			Book b = (Book) other;
+//			if (b == null) return false;
+//			return this.title.equals(b.title);
+//		}
+//		
+//		public int hashCode() {
+//			return title.hashCode();
+//		}
+//
+//		
+//
+//		
+//		
+//	}
+//	
+//	public static class Trigger {
+//		
+//	}
+//	
+//	
+//	public static class Exercise {
+//		
+//		private String topic;
+//		public String getTopic() {
+//			return topic;
+//		}
+//		
+//		public Exercise(String top) {
+//			topic = top;
+//		}
+//		
+//		public int hashCode() {
+//			return topic.hashCode();
+//			
+//		}
+//		
+//		
+//		
+//		public boolean equals(Object other) {
+//			if (other == null) return false;
+//			if (other == this) return true;
+//			
+//			
+//			if (other instanceof Exercise)
+//				return getTopic().equals(((Exercise) other).getTopic()); 
+//			else 
+//				return false;
+//		}
+//		
+//	}
+	
+}

Added: labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/ComplexFormulaTest.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/ComplexFormulaTest.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/ComplexFormulaTest.java	2009-05-22 11:04:30 UTC (rev 26690)
@@ -0,0 +1,36 @@
+package org.drools.chance;
+
+import org.drools.definition.type.FactType;
+
+
+
+public class ComplexFormulaTest extends AbstractChanceTest {
+	
+	
+	
+
+	public static final void main(final String[] args) throws Exception {
+		
+		ComplexFormulaTest test = new ComplexFormulaTest();
+			test.setRuleFileName("ComplexFormulaTest.drl");
+			
+			test.setFactoryName(FUZZY_FACTORY);
+				
+		test.run();
+
+	}
+
+	@Override
+	public void act() throws InstantiationException, IllegalAccessException {
+		
+		FactType msgType = getFactType("Message");
+			Object msg = msgType.newInstance();
+			msgType.set(msg,"status",0);
+			
+		getSession().insert(msg);
+		
+		getSession().fireAllRules();
+	}
+
+	
+}

Added: labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/NullPrintStream.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/NullPrintStream.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/NullPrintStream.java	2009-05-22 11:04:30 UTC (rev 26690)
@@ -0,0 +1,18 @@
+package org.drools.chance;
+
+import java.io.FileNotFoundException;
+import java.io.OutputStream;
+import java.io.PrintStream;
+
+public class NullPrintStream extends PrintStream {
+
+	public NullPrintStream(String fileName) throws FileNotFoundException {
+		super(fileName);
+		// TODO Auto-generated constructor stub
+	}
+	
+	public void println(String s) {
+		
+	}
+
+}

Added: labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/RuleMLTest.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/RuleMLTest.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/RuleMLTest.java	2009-05-22 11:04:30 UTC (rev 26690)
@@ -0,0 +1,64 @@
+package org.drools.chance;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileWriter;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import org.drools.FactHandle;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseConfiguration;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.RuleBaseConfiguration;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderConfiguration;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceType;
+import org.drools.chance.fuzzyTest.FuzzyTest0;
+import org.drools.chance.fuzzyTest.Room;
+import org.drools.compiler.PackageBuilderConfiguration;
+import org.drools.definition.KnowledgePackage;
+import org.drools.definition.type.FactType;
+import org.drools.event.rule.DebugAgendaEventListener;
+import org.drools.event.rule.DebugWorkingMemoryEventListener;
+import org.drools.io.ResourceFactory;
+import org.drools.logger.KnowledgeRuntimeLogger;
+import org.drools.logger.KnowledgeRuntimeLoggerFactory;
+import org.drools.runtime.StatefulKnowledgeSession;
+
+
+public class RuleMLTest extends AbstractChanceTest {
+
+	
+
+	public void initDrools() {
+		
+		configKnowledgeBuilder();				
+		
+	}
+
+	
+	
+	public static final void main(final String[] args) throws Exception {
+		
+		RuleMLTest test = new RuleMLTest();
+			test.setRuleFileName("RuleMLTest.drl");
+			test.setSilent(true);			
+			test.run();
+			
+	}
+	
+
+	public void act() {
+		
+	}
+
+	
+
+	
+}

Added: labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/fuzzyTest/Fan.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/fuzzyTest/Fan.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/fuzzyTest/Fan.java	2009-05-22 11:04:30 UTC (rev 26690)
@@ -0,0 +1,65 @@
+package org.drools.chance.fuzzyTest;
+
+import org.drools.degrees.IDegree;
+import org.drools.fuzzy.evaluators.IDynamicEvaluable;
+import org.drools.spi.Evaluator;
+
+
+public class Fan implements IDynamicEvaluable {
+	
+	private SpeedDomain speed = new SpeedDomain();
+	
+	private float price = 100.0f;
+	
+	public float getPrice() {
+		return price;
+	}
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	public boolean equals(Object other) {
+		return (other != null && other instanceof Fan);
+	}
+		
+	public int hashCode() {
+		return 37;
+	}
+	
+	
+	public Fan() {
+		
+	}
+
+	/**
+	 * @param speed the speed to set
+	 */
+	public void setSpeed(Double speed) {
+		this.speed.setValue(speed);
+	}
+	
+	public void setSpeed(String set, IDegree deg) {
+		this.speed.setValue(set,deg);
+	}
+	
+	
+	/**
+	 * @return the speed
+	 */
+	public Double getSpeed() {
+		return speed.getValue();
+	}
+
+	
+	public Evaluator getPred(String opId) {
+		return speed.getEvaluator(opId);
+	}
+	
+	
+}
\ No newline at end of file

Added: labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/fuzzyTest/FuzzyTest0.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/fuzzyTest/FuzzyTest0.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/fuzzyTest/FuzzyTest0.java	2009-05-22 11:04:30 UTC (rev 26690)
@@ -0,0 +1,37 @@
+package org.drools.chance.fuzzyTest;
+
+import org.drools.chance.AbstractChanceTest;
+
+
+public class FuzzyTest0 extends AbstractChanceTest {
+
+	 
+	
+	
+	public void act() {
+		Room r = new Room(27.5f);
+
+		getSession().insert(r);				
+		getSession().fireAllRules();
+	}
+
+	
+	
+	public static final void main(final String[] args) throws Exception {
+		
+		FuzzyTest0 test = new FuzzyTest0();
+			test.setRuleFileName("FuzzyTest0.drl");
+			test.setFactoryName(FUZZY_FACTORY);
+			test.setDumpable(true);
+			test.setSilent(false);
+			
+			test.run();
+			
+
+	}
+
+
+
+	
+	
+}

Added: labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/fuzzyTest/FuzzyTest1.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/fuzzyTest/FuzzyTest1.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/fuzzyTest/FuzzyTest1.java	2009-05-22 11:04:30 UTC (rev 26690)
@@ -0,0 +1,74 @@
+package org.drools.chance.fuzzyTest;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileWriter;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import org.drools.FactHandle;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseConfiguration;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.RuleBaseConfiguration;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderConfiguration;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceConfiguration;
+import org.drools.builder.ResourceType;
+import org.drools.chance.AbstractChanceTest;
+import org.drools.compiler.PackageBuilderConfiguration;
+import org.drools.definition.KnowledgePackage;
+import org.drools.event.rule.DebugAgendaEventListener;
+import org.drools.event.rule.DebugWorkingMemoryEventListener;
+import org.drools.io.ResourceFactory;
+import org.drools.logger.KnowledgeRuntimeLogger;
+import org.drools.logger.KnowledgeRuntimeLoggerFactory;
+import org.drools.runtime.StatefulKnowledgeSession;
+
+
+public class FuzzyTest1 extends AbstractChanceTest {
+
+	
+	public void act() {
+		
+		Room r = new Room(22.5f);
+		Fan f = new Fan();
+		
+		getSession().insert(f);
+		getSession().insert(r);				
+		getSession().fireAllRules();
+				
+		log("\n\n\n\nULTIMATE ANSWER : FAN speed is "+f.getSpeed()+"\n\n");
+
+	}
+	
+	public static final void main(final String[] args) throws Exception {
+		
+		FuzzyTest1 test = new FuzzyTest1();
+		test.setRuleFileName("FuzzyTest1.drl");
+		test.setFactoryName(FUZZY_FACTORY);
+		test.setDumpable(true);
+		test.setSilent(false);
+		
+		test.run();
+
+	}
+	
+	
+	
+	
+	
+		
+		
+			
+			
+		
+
+	
+	
+}

Added: labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/fuzzyTest/Room.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/fuzzyTest/Room.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/fuzzyTest/Room.java	2009-05-22 11:04:30 UTC (rev 26690)
@@ -0,0 +1,50 @@
+package org.drools.chance.fuzzyTest;
+
+import org.drools.fuzzy.RealDomain;
+import org.drools.fuzzy.evaluators.IDynamicEvaluable;
+import org.drools.spi.Evaluator;
+
+
+public class Room implements IDynamicEvaluable{
+	
+		private TemperatureDomain temperature = new TemperatureDomain();
+
+		
+		
+		public Room(double temp) {
+			this.setTemperature(temp);
+		}
+		
+
+		/**
+		 * @param temperature the temperature to set
+		 */
+		public void setTemperature(Double temperature) {
+			this.temperature.setValue(temperature);
+		}
+
+		/**
+		 * @return the temperature
+		 */
+		public Double getTemperature() {
+			return temperature.getValue();
+		}
+		
+		
+		public Evaluator getHot() {
+			return temperature.getEvaluator(TemperatureDomain.HOT);
+		}
+
+
+		
+		public Evaluator getPred(String opId) {
+			return temperature.getEvaluator(opId);
+		}
+		
+		
+		public int hashCode() {
+			return 47;
+		}
+
+
+}

Added: labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/fuzzyTest/SpeedDomain.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/fuzzyTest/SpeedDomain.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/fuzzyTest/SpeedDomain.java	2009-05-22 11:04:30 UTC (rev 26690)
@@ -0,0 +1,95 @@
+package org.drools.chance.fuzzyTest;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.EvaluatorDefinition;
+import org.drools.base.evaluators.Operator;
+import org.drools.fuzzy.FuzzySet;
+import org.drools.fuzzy.NumericDomainFuzzySet;
+import org.drools.fuzzy.RealDomain;
+import org.drools.fuzzy.evaluators.FuzzyNumericEvaluator;
+import org.drools.fuzzy.evaluators.membership.TriangleMembership;
+import org.drools.spi.Evaluator;
+
+
+public class SpeedDomain extends RealDomain {
+	
+	
+	public static final String STOP = "stop";
+	public static final String SLOW = "slow";
+	public static final String FAST = "fast";
+	
+		
+	
+			
+	public static final Operator   stopOp         = Operator.addOperatorToRegistry( SpeedDomain.STOP,false );
+	public static final Operator   notStopOp      = Operator.addOperatorToRegistry( SpeedDomain.STOP,true );
+	
+	public static final Operator   slowOp         = Operator.addOperatorToRegistry( SpeedDomain.SLOW,false );
+	public static final Operator   notSlowOp      = Operator.addOperatorToRegistry( SpeedDomain.SLOW,true );
+	
+	public static final Operator   fastOp         = Operator.addOperatorToRegistry( SpeedDomain.FAST,false );
+	public static final Operator   notFastOp      = Operator.addOperatorToRegistry( SpeedDomain.FAST,true );
+	
+	protected static String[]  SUPPORTED_IDS	= { stopOp.getOperatorString(),
+													 slowOp.getOperatorString(),
+													 fastOp.getOperatorString(),
+
+		};
+
+	
+	public SpeedDomain() {		
+		this.addGranule(new NumericDomainFuzzySet(STOP,
+				new FuzzyNumericEvaluator(
+						stopOp,
+						ValueType.DOUBLE_TYPE,
+						false,
+						"org.drools.fuzzy.evaluators.membership.TriangleMembership, 0, 50"
+						)
+			));
+		this.addGranule(new NumericDomainFuzzySet(SLOW,
+				new FuzzyNumericEvaluator(
+						slowOp,
+						ValueType.DOUBLE_TYPE,
+						false,
+						"org.drools.fuzzy.evaluators.membership.TriangleMembership, 50, 50"
+						)
+			));
+		this.addGranule(new NumericDomainFuzzySet(FAST,
+				new FuzzyNumericEvaluator(
+						fastOp,
+						ValueType.DOUBLE_TYPE,
+						false,
+						"org.drools.fuzzy.evaluators.membership.TriangleMembership, 100, 50"
+						)
+			));	
+	}
+	
+	
+	public String[] getEvaluatorIds() {
+		return SUPPORTED_IDS;
+	}
+
+
+	
+
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+
+}

Added: labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/fuzzyTest/TemperatureDomain.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/fuzzyTest/TemperatureDomain.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/fuzzyTest/TemperatureDomain.java	2009-05-22 11:04:30 UTC (rev 26690)
@@ -0,0 +1,107 @@
+package org.drools.chance.fuzzyTest;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.EvaluatorDefinition;
+import org.drools.base.evaluators.Operator;
+import org.drools.fuzzy.FuzzySet;
+import org.drools.fuzzy.NumericDomainFuzzySet;
+import org.drools.fuzzy.RealDomain;
+import org.drools.fuzzy.evaluators.FuzzyNumericEvaluator;
+import org.drools.fuzzy.evaluators.membership.TriangleMembership;
+import org.drools.spi.Evaluator;
+
+
+public class TemperatureDomain extends RealDomain {
+	
+	
+	public static final String COLD = "cold";
+	public static final String COOL = "cool";
+	public static final String WARM = "warm";
+	public static final String HOT = "hot";
+		
+	
+			
+	public static final Operator   coldOp         = Operator.addOperatorToRegistry( TemperatureDomain.COLD,false );
+	public static final Operator   notColdOp      = Operator.addOperatorToRegistry( TemperatureDomain.COLD,true );
+	
+	public static final Operator   coolOp         = Operator.addOperatorToRegistry( TemperatureDomain.COOL,false );
+	public static final Operator   notCoolOp      = Operator.addOperatorToRegistry( TemperatureDomain.COOL,true );
+	
+	public static final Operator   warmOp         = Operator.addOperatorToRegistry( TemperatureDomain.WARM,false );
+	public static final Operator   notWarmOp      = Operator.addOperatorToRegistry( TemperatureDomain.WARM,true );
+	
+	public static final Operator   hotOp         = Operator.addOperatorToRegistry( TemperatureDomain.HOT,false );
+	public static final Operator   notHotOp      = Operator.addOperatorToRegistry( TemperatureDomain.HOT,true );
+
+	protected static String[]  SUPPORTED_IDS	= { coldOp.getOperatorString(),
+													 coolOp.getOperatorString(),
+													 warmOp.getOperatorString(),
+													 hotOp.getOperatorString(),
+		};
+
+	
+	public TemperatureDomain() {		
+		this.addGranule(new NumericDomainFuzzySet(COLD,
+				new FuzzyNumericEvaluator(
+						coldOp,
+						ValueType.DOUBLE_TYPE,
+						false,
+						"org.drools.fuzzy.evaluators.membership.TriangleMembership, 0, 10"
+						)
+			));
+		this.addGranule(new NumericDomainFuzzySet(COOL,
+				new FuzzyNumericEvaluator(
+						coolOp,
+						ValueType.DOUBLE_TYPE,
+						false,
+						"org.drools.fuzzy.evaluators.membership.TriangleMembership, 10, 10"
+						)
+			));
+		this.addGranule(new NumericDomainFuzzySet(WARM,
+				new FuzzyNumericEvaluator(
+						warmOp,
+						ValueType.DOUBLE_TYPE,
+						false,
+						"org.drools.fuzzy.evaluators.membership.TriangleMembership, 20, 10"
+						)
+			));
+		this.addGranule(new NumericDomainFuzzySet(HOT,
+				new FuzzyNumericEvaluator(
+						hotOp,
+						ValueType.DOUBLE_TYPE,
+						false,
+						"org.drools.fuzzy.evaluators.membership.TriangleMembership, 30, 10"
+						)
+			));
+		
+	}
+	
+	
+	public String[] getEvaluatorIds() {
+		return SUPPORTED_IDS;
+	}
+
+
+	
+
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+
+}

Added: labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/impliesTest/ImpliesTest0.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/impliesTest/ImpliesTest0.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/impliesTest/ImpliesTest0.java	2009-05-22 11:04:30 UTC (rev 26690)
@@ -0,0 +1,43 @@
+package org.drools.chance.impliesTest;
+
+import org.drools.chance.AbstractChanceTest;
+import org.drools.chance.fuzzyTest.FuzzyTest1;
+import org.drools.definition.type.FactType;
+
+public class ImpliesTest0 extends AbstractChanceTest {
+
+	/**
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		ImpliesTest0 test = new ImpliesTest0();
+		test.setRuleFileName("ImpliesTest0.drl");
+		test.setFactoryName("org.drools.degrees.factory.SimpleFuzzyDegreeFactory");
+		test.setDumpable(true);
+		test.setSilent(false);
+		
+		test.run();
+
+	}
+
+	
+	public void act() {
+		String packS = this.getClass().getPackage().getName();
+		FactType foo1Type = getSession().getKnowledgeBase().getFactType(packS,"Foo1");
+		FactType foo2Type = getSession().getKnowledgeBase().getFactType(packS,"Foo2");
+		
+		try {
+			Object foo1 = foo1Type.newInstance();
+			Object foo2 = foo2Type.newInstance();
+			
+			getSession().insert(foo1);
+			getSession().insert(foo2);
+			
+			getSession().fireAllRules();
+		}  catch (Exception e) {
+			e.printStackTrace();		
+		}
+		
+	}
+
+}

Added: labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/impliesTest/ImpliesTest1.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/impliesTest/ImpliesTest1.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/chance/impliesTest/ImpliesTest1.java	2009-05-22 11:04:30 UTC (rev 26690)
@@ -0,0 +1,223 @@
+package org.drools.chance.impliesTest;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+
+import org.drools.RuntimeDroolsException;
+import org.drools.base.BaseImperfectEvaluator;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.EvaluatorDefinition;
+import org.drools.base.evaluators.ImperfectAbstractEvaluatorDefinition;
+import org.drools.base.evaluators.ImperfectEvaluatorDefinition;
+import org.drools.base.evaluators.Operator;
+import org.drools.chance.AbstractChanceTest;
+import org.drools.chance.fuzzyTest.FuzzyTest1;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.definition.type.FactType;
+import org.drools.degrees.IDegree;
+import org.drools.degrees.factory.IDegreeFactory;
+import org.drools.rule.VariableRestriction.VariableContextEntry;
+import org.drools.spi.Evaluator;
+import org.drools.spi.FieldValue;
+import org.drools.spi.InternalReadAccessor;
+
+public class ImpliesTest1 
+	extends AbstractChanceTest {
+
+	/**
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		ImpliesTest1 test = new ImpliesTest1();
+		
+		test.setRuleFileName("ImpliesTest1.drl");
+		
+		test.setFactoryName("org.drools.degrees.factory.IntervalDegreeFactory");
+		test.setOpenWorldAssumption();
+		
+		test.setDumpable(false);
+		test.setSilent(false);
+		
+		test.run();
+
+	}
+	
+	
+	public void configKnowledgeBuilder() {
+		super.configKnowledgeBuilder();
+		getKBuilderConf().setProperty("drools.evaluator.flies", "org.drools.chance.impliesTest.ImpliesTest1$FliesEvaluatorDefinition");		
+	}
+
+	
+	public void act() {
+		
+		try {
+	
+			Bird b1 = new Bird();
+				b1.setId(1);
+				b1.setIsFlier(true);
+				b1.setIsPenguin(false);
+			
+			Bird b2 = new Bird();
+				b2.setId(2);
+				b2.setIsFlier(true);
+				b2.setIsPenguin(false);
+				
+			Bird b3 = new Bird();
+				b3.setId(3);
+				b3.setIsFlier(false);
+				b3.setIsPenguin(true);
+				
+			Bird b4 = new Bird();
+				b4.setId(4);
+				b4.setIsFlier(true);
+				b4.setIsPenguin(false);
+				
+			Bird bird = new Bird();
+				bird.setId(99);
+				bird.setIsFlier(null);
+				bird.setIsPenguin(false);	
+	
+			Bird penguin = new Bird();
+				penguin.setId(-10);
+				penguin.setIsFlier(null);
+				penguin.setIsPenguin(true);			
+			
+			Bird flyBird = new Bird();
+				flyBird.setId(1000);
+				flyBird.setIsFlier(true);
+				flyBird.setIsPenguin(false);
+			
+			Bird bird2 = new Bird();
+				bird2.setId(100);
+				bird2.setIsFlier(null);
+				bird2.setIsPenguin(false);	
+			
+			getSession().insert(b1);
+			getSession().insert(b2);
+			getSession().insert(b3);
+			getSession().insert(b4);
+			
+									
+			getSession().fireAllRules();
+			
+			getLogger().write("\n*************************************************************************************\n");
+			
+			getSession().insert(bird);						
+			getSession().fireAllRules();
+			
+			getLogger().write("\n*************************************************************************************\n");
+			
+			getSession().insert(penguin);
+			getSession().fireAllRules();
+
+			getLogger().write("\n*************************************************************************************\n");
+			
+			getSession().insert(flyBird);
+			getSession().fireAllRules();
+
+			getLogger().write("\n*************************************************************************************\n");
+			
+			getSession().insert(bird2);						
+			getSession().fireAllRules();
+			
+			getLogger().write("\n*************************************************************************************\n");
+			
+		}  catch (Exception e) {
+			e.printStackTrace();		
+		}
+		
+		
+	}
+
+
+	
+	public static class FliesEvaluatorDefinition extends ImperfectAbstractEvaluatorDefinition {
+		
+
+		public static final Operator FLIES = Operator.addOperatorToRegistry( "flies", false );
+		
+		private static final String[]  SUPPORTED_IDS = {FLIES.getOperatorString()};
+		
+		private Evaluator flyEvaluator = new BaseImperfectEvaluator(ValueType.BOOLEAN_TYPE, FLIES, "") {
+
+			@Override
+			protected IDegree eval(Object left, Object right, IDegreeFactory factory) {
+				if (left instanceof Bird) {
+					Boolean b = ((Bird) left).getIsFlier();
+					if (b == null)
+						return factory.Unknown();
+					return factory.fromBoolean(b);
+				}
+				
+				throw new RuntimeDroolsException("Birds only!!");
+				
+			}						
+		};
+		
+		
+		public Evaluator getEvaluator(ValueType type, String operatorId,
+				boolean isNegated, String parameterText, Target leftTarget,
+				Target rightTarget) {
+			return flyEvaluator;
+		}
+
+
+		public String[] getEvaluatorIds() {
+			return SUPPORTED_IDS;
+		}								
+		
+	}
+	
+	
+	
+	
+	
+	public static class Bird {
+		public Bird() {
+			
+		}
+		
+		public Integer getId() {
+			return id;
+		}
+		public void setId(Integer id) {
+			this.id = id;
+		}
+		public Boolean getIsFlier() {
+			return isFlier;
+		}
+		public void setIsFlier(Boolean isFlier) {
+			this.isFlier = isFlier;
+		}
+		public Boolean getIsPenguin() {
+			return isPenguin;
+		}
+		public void setIsPenguin(Boolean isPenguin) {
+			this.isPenguin = isPenguin;
+		}
+
+		private Integer id;
+		private Boolean isFlier;
+		private Boolean isPenguin;
+		
+		public int hashCode() {
+			return 31+id;
+		}
+		
+		public boolean equals(Object other) {
+			if (other == null)
+				return false;
+			if (this == other)
+				return true;
+			if (other instanceof Bird) {
+				return this.id == ((Bird) other).getId();
+			} else 
+				return false;
+		}
+	}
+	
+	
+	
+}

Added: labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/rules/org/drools/chance/BaseTest.drl
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/rules/org/drools/chance/BaseTest.drl	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/rules/org/drools/chance/BaseTest.drl	2009-05-22 11:04:30 UTC (rev 26690)
@@ -0,0 +1,117 @@
+package org.drools.chance;
+
+/*
+import org.drools.chance.Test.Trigger;
+import org.drools.chance.Test.Exercise;
+import org.drools.chance.Test.Person;
+import org.drools.chance.Test.Book;
+*/
+import java.io.FileWriter;
+
+
+global FileWriter writer;
+
+
+declare Message
+	status	: int	@key
+	message : String
+end
+
+declare Person
+	name	: String @key
+	age		: int
+end
+
+declare Book
+	title	: String @key
+	owner	: Person 
+end
+
+declare Exercise
+	topic	: String @key
+end
+
+rule "Trigger"
+	when
+		eval(true || false);		
+	then
+		writer.write("\n A Message with status = 0 will hold the message Hello!");
+			Message m = new Message();
+				m.setStatus(0);
+		
+		drools.inject(m,"org.drools.chance.Message.message","equals","Hello!",true);
+end
+
+
+
+
+rule "Synch"
+	when
+		$msgRef : Message( message ~equals "Hello!" ) @( id="MsgId")
+	then
+		writer.write("\n\nSynched rule fires at "+drools.getConsequenceDegree());
+		writer.write("\nDeclared message is "+$msgRef.getMessage()+ " but is thought to be Hello!");
+		writer.write("\n"+drools.getEvaluation().expand()+"\n\n");
+		
+		
+		Person p = new Person();
+			p.setName("davide");
+			//p.setAge(27);
+		
+		
+		Book b = new Book();
+			b.setTitle("Drools Manual");
+			//b.setOwner(p);				
+		writer.write("\n Now stating Davide owns a Drools Manual");
+		
+		//FIXME Until lexical analysis is done properly, args must be defined in two steps
+		Object[] args = new Object[] { p , b }; 
+		drools.inject(args,"org.drools.chance.Book.owner","equals","$p");
+		
+end
+
+
+
+
+
+
+rule "BetaSynch"
+	when		
+		$p : Person( $n : name == "davide" , $a : age > 25 || < 18)			
+		$b : Book(  owner ~equals $p )	
+	then
+		writer.write("\n\n\nBook has no a-priori known owner\n");
+		writer.write("Book.owner = "+$b.getOwner()+"\n");
+		writer.write("but is ack'd as being "+$n+"("+$a+")\n");
+		writer.write("Info comes from rule, evaluation is "+drools.getConsequenceDegree()+"\n");
+		writer.write("\n"+drools.getEvaluation().expand()+"\n");
+		
+		
+		
+		writer.write("\n\nSo, an exceptional exercise will be done\n\n");
+		Exercise e = new Exercise();
+			e.setTopic("Rule Programming");
+		drools.inject(e,"Exceptional");
+end
+
+
+
+
+//This is a rule with false implication, meaning that all conclusions are undetermined
+
+rule "Exceptional"
+
+	prior (0)
+	
+		//default : MP could wait for all injections
+		//this ensures that non-injected objects are passed
+		//should rename in something more readable
+	filter_str "org.drools.reteoo.filters.AlwaysPassFilterStrategy"	
+	
+	when
+		$e : Exercise( $t : topic )		
+	then
+		writer.write("\nEx "+ $t +" can be done? Answer is " + drools.getConsequenceDegree());	
+		writer.write(drools.getEvaluation().expand());
+end
+

Added: labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/rules/org/drools/chance/ComplexFormulaTest.drl
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/rules/org/drools/chance/ComplexFormulaTest.drl	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/rules/org/drools/chance/ComplexFormulaTest.drl	2009-05-22 11:04:30 UTC (rev 26690)
@@ -0,0 +1,41 @@
+package org.drools.chance
+ 
+
+import java.io.FileWriter;
+
+
+declare Message
+	status : int
+end
+
+global FileWriter writer;
+
+rule "TestOpDegs"	
+
+	
+
+	when
+		
+		(Message( status == 0 && status == 1 )
+		or 
+		Message(status not ~random 2))
+		
+		
+		not (Message(status ~random 3)
+			and
+			Message(status ~random 4)
+			)
+				
+		Message(status ~random 5)
+		
+									
+	then
+	
+		System.out.println("Degrees test " + drools.getEvaluation().expand());		
+		
+		writer.write("Degrees test " + drools.getEvaluation().expand());
+		
+		System.out.println("Final output " + drools.getConsequenceDegree());
+end
+
+

Added: labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/rules/org/drools/chance/RuleMLTest.drl
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/rules/org/drools/chance/RuleMLTest.drl	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/rules/org/drools/chance/RuleMLTest.drl	2009-05-22 11:04:30 UTC (rev 26690)
@@ -0,0 +1,25 @@
+package org.drools.chance;
+
+import java.io.FileWriter;
+
+
+global FileWriter writer;
+
+
+declare Message
+	status	: int	@key
+	message : String
+end
+
+
+rule "Simple"
+
+	prior ( 0.7 )
+
+	when
+		$m : Message( $s : status == 0 || message == "Hello" ) @(id="MsgId")		
+	then
+		System.out.println();
+end
+
+

Added: labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/rules/org/drools/chance/fuzzy/FuzzyTest0.drl
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/rules/org/drools/chance/fuzzy/FuzzyTest0.drl	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/rules/org/drools/chance/fuzzy/FuzzyTest0.drl	2009-05-22 11:04:30 UTC (rev 26690)
@@ -0,0 +1,39 @@
+package org.drools.examples.chance.fuzzyTest
+ 
+ 
+ 
+import org.drools.chance.fuzzyTest.Room;
+import java.io.FileWriter;
+
+
+global FileWriter writer;
+
+rule "Hot v1"
+	when 
+		$r : Room( temperature ~hot )		
+	then
+		
+		writer.write("\n\n");
+		writer.write("Room is hot in degree "+drools.getConsequenceDegree()+"\n");
+		writer.write("Evaluator is called directly\n");
+end
+
+rule "Hot v2"
+	when 
+		$r : Room( temperature ~seems hot )		
+	then
+		
+		writer.write("\n\n");			             
+		writer.write("Room is hot in degree "+drools.getConsequenceDegree()+"\n");
+		writer.write("Evaluator from temp domain, requires a method in Room\n");
+end
+
+rule "Hot v3"
+	when 
+		$r : Room( temperature ~seems "warm" )		
+	then
+		
+		writer.write("\n\n");
+		writer.write("Room is warm in degree "+drools.getConsequenceDegree()+"\n");
+		writer.write("Evaluator from temp domain, runtime call (no method in room)\n");
+end

Added: labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/rules/org/drools/chance/fuzzy/FuzzyTest1.drl
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/rules/org/drools/chance/fuzzy/FuzzyTest1.drl	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/rules/org/drools/chance/fuzzy/FuzzyTest1.drl	2009-05-22 11:04:30 UTC (rev 26690)
@@ -0,0 +1,70 @@
+package org.drools.examples.chance
+ 
+import org.drools.chance.fuzzyTest.Room;
+import org.drools.chance.fuzzyTest.Fan;
+import java.io.FileWriter;
+
+
+global FileWriter writer;
+
+
+
+
+rule "Cold"
+	when 
+		$r : Room( temperature ~cold )		
+	then
+		drools.inject(new Fan(),"org.drools.chance.fuzzyTest.Fan.speed","seems","stop");	              
+end
+
+rule "Warm"
+	when
+		$r : Room( temperature ~warm )
+	then
+		drools.inject(new Fan(),"org.drools.chance.fuzzyTest.Fan.speed","seems","slow");
+end
+
+
+
+rule "Hot"
+	when
+		$r : Room( temperature ~hot)
+	then
+		drools.inject(new Fan(),"org.drools.chance.fuzzyTest.Fan.speed","seems","fast");
+end
+
+
+
+
+
+
+
+
+
+rule "Fan1" 
+	when 
+		$f : Fan( speed ~seems "fast")
+	then
+		$f.setSpeed("fast",drools.getConsequenceDegree());
+		writer.write("\n\n ********** Set speed to fast ****** \n\n" + drools.getConsequenceDegree());
+end
+
+
+rule "Fan2" 
+	when 
+		$f : Fan( speed ~seems "slow")
+	then
+		$f.setSpeed("slow",drools.getConsequenceDegree());
+		writer.write("\n\n ********** Set speed to slow ****** \n\n" + drools.getConsequenceDegree());
+end
+
+
+
+rule "Fan3" 
+	when 
+		$f : Fan( speed ~seems "stop")
+	then
+		$f.setSpeed("stop",drools.getConsequenceDegree());
+		writer.write("\n\n ********** Set speed to stop ****** \n\n" + drools.getConsequenceDegree());	
+end
+

Added: labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/rules/org/drools/chance/impl/ImpliesTest0.drl
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/rules/org/drools/chance/impl/ImpliesTest0.drl	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/rules/org/drools/chance/impl/ImpliesTest0.drl	2009-05-22 11:04:30 UTC (rev 26690)
@@ -0,0 +1,29 @@
+package org.drools.chance.impliesTest
+ 
+ 
+
+import java.io.FileWriter;
+
+global FileWriter writer;
+
+
+
+
+declare Foo1
+end
+
+declare Foo2
+end 
+
+
+rule "TestImplication"
+	when
+		(implies
+			Foo1( this ~random )
+			Foo2( this ~random )
+		) 
+				
+	then
+		writer.write("Implication "+drools.getEvaluation().expand()+"\n");
+		
+end

Added: labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/rules/org/drools/chance/impl/ImpliesTest1.drl
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/rules/org/drools/chance/impl/ImpliesTest1.drl	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/rules/org/drools/chance/impl/ImpliesTest1.drl	2009-05-22 11:04:30 UTC (rev 26690)
@@ -0,0 +1,159 @@
+package org.drools.chance.impliesTest
+ 
+ 
+
+import java.io.FileWriter;
+import org.drools.reteoo.Jolly;
+
+import org.drools.chance.impliesTest.ImpliesTest1.Bird;
+
+global FileWriter writer;
+
+
+/*
+Classes are defined in main 
+
+declare Bird
+	id    : Integer @key
+	isflier	  : Boolean
+	isPenguin : Boolean			
+end
+
+*/
+
+
+/***************************************************
+	 This example shows two features:
+	 
+	 	- Induction of implications
+	 		
+	 	
+	 	- Exceptions
+	 		
+	
+Propagation Policy is : wait for all injecting
+						rules to fire											
+***************************************************/
+
+
+
+/*
+	This rule learns the implication Bird -> Fly
+	Using an induction operator
+*/
+rule "Induct_BirdsFly"	
+				
+	entail_mode "equivalence"
+	
+	when
+		
+		// bird1 : flies == true
+		// bird2 : flies == true
+		// bird3 : flies == false		//actually a Penguin
+		// bird4 : flies == true
+		
+		
+		// So, it is possible / probable / likely / ...
+		// (depends on the semantics of the degrees)
+		// that any chosen bird flies in degree 3/4				
+		forany (
+					(implies
+						$b : Bird()
+						Bird( this == @(cut="true") $b , isFlier == true)
+					)	
+														
+			weight		Bird( id == @(cut="true") $b.id , isFlier != @(cut= "true") null ) 	
+		)	
+		
+		 
+				
+	then
+		writer.write("Induct_BirdsFly "+drools.getEvaluation().expand()+"\n\n");
+		
+		// "*" means that the information will be valid for ANY individual bird 
+		Jolly star = new Jolly();
+		drools.inject(star,"Deduct_BirdsFly");
+end
+
+
+/*
+	This rules USES the implication Bird -> Fly	
+	which is unknown a priori, but will be set by induction
+*/
+rule "Deduct_BirdsFly"
+		
+	prior ("unknown")	
+	entail_mode "implication"
+				
+	when		
+		$b : Bird( $id : id )							 			
+	then
+		writer.write("Contrib from Implication B->F for bird " + $id + " : degree " + drools.getConsequenceDegree() +"\n\n\n");
+		//debug purpose
+		if ($id < 0 || $id > 10)
+			writer.write(drools.getEvaluation().expand()+"\n\n");
+		
+		//The rule entails information on the evaluation of the "isFlier" property for $b
+								 
+		drools.injectId($b,"idFlier");
+				
+end
+
+
+/*
+	This is an exception: penguins do not fly
+	When the exception is false, it will reject with "unknown", effectively doing nothing
+	
+	Notice that you can remove this rule without altering the other rules
+	(not just "enable false" as the #### dependency analysis wouldn't notice it)
+*/
+rule "Exception_BirdsFly"	
+	
+	entail_mode "implication"			//Essential to handle non-exceptional cases normally
+	
+	when		
+		$b : Bird( $id : id, isPenguin == true )							 					
+	then
+		writer.write("Penguinity exception test for "+$id+" : " + drools.getConsequenceDegree() + "\n");
+		
+		// boolean "killer": when true, the more "certain" the degree (whatever it means) 
+		// the more it will override other evaluations
+		
+		// Undercutting defeater :  P => not (B -> F)
+		// This alone will prevent the contrib of 3/4 to flow from B to F in case P is true
+		drools.reject($b,"Deduct_BirdsFly",true);
+		writer.write("Implication B-> will be killed by the negated of " + drools.getConsequenceDegree() + "\n");
+				
+		// Rebutting defeater : P => not F
+		// This will set the conclusion F to false for penguins 				
+		drools.rejectId($b,"idFlier",true);
+		writer.write("Consequence F will be set to the negated of " + drools.getConsequenceDegree() + "\n\n\n\n");		
+				
+end
+
+
+/*
+	This rule uses the consequence F.
+	Bird 99 is a bird	   (isFlier == null)				-> F 3/4
+	Bird -10 is a penguin  (isFlier == null | false)		-> F 0
+	Bird 1031 is a bird    (isFlier == true)				-> F 3/4	(1 with 3-valued degrees and up)
+		last one will also update the degree of B->F to 4/5
+	Bird 100 is a bird	   (isFlier == null)				-> F 4/5	!!
+	
+	Known Issues 
+		- using simple degrees it is not possible to 
+		  model lower bounds
+		- to avoid deadlocks, an evaluator has to be used  
+*/
+
+rule "BirdsFly" 
+	 
+	
+	entail_mode "equivalence"
+	
+	when		
+		$b : Bird( $id : id , this ~flies @( id="idFlier" ) )
+	then
+		writer.write("Bird " +$id+  " : FLIES at degree " + drools.getConsequenceDegree() +"\n");
+		writer.write("++++CONCLUSION : " +drools.getEvaluation().expand()+"\n\n");
+end




More information about the jboss-svn-commits mailing list