[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