package aima.core.learning.inductive; import java.util.ArrayList; import java.util.Hashtable; import java.util.List; import aima.core.learning.framework.Example; /** * @author Ravi Mohan * */ public class DecisionList { private String positive, negative; private List<DLTest> tests; private Hashtable<DLTest, String> testOutcomes; public DecisionList(String positive, String negative) { this.positive = positive; this.negative = negative; this.tests = new ArrayList<DLTest>(); testOutcomes = new Hashtable<DLTest, String>(); } public String predict(Example example) { if (tests.size() == 0) { return negative; } for (DLTest test : tests) { if (test.matches(example)) { return testOutcomes.get(test); } } return negative; } public void add(DLTest test, String outcome) { tests.add(test); testOutcomes.put(test, outcome); } public DecisionList mergeWith(DecisionList dlist2) { DecisionList merged = new DecisionList(positive, negative); for (DLTest test : tests) { merged.add(test, testOutcomes.get(test)); } for (DLTest test : dlist2.tests) { merged.add(test, dlist2.testOutcomes.get(test)); } return merged; } @Override public String toString() { StringBuffer buf = new StringBuffer(); for (DLTest test : tests) { buf.append(test.toString() + " => " + testOutcomes.get(test) + " ELSE \n"); } buf.append("END"); return buf.toString(); } }