private static DecisionTree createActualRestaurantDecisionTree()
{
// from AIMA 2nd ED
// Fig 18.2
// raining node
DecisionTree raining = new DecisionTree("raining");
raining.addLeaf(Util.YES, Util.YES);
raining.addLeaf(Util.NO, Util.NO);
// bar node
DecisionTree bar = new DecisionTree("bar");
bar.addLeaf(Util.YES, Util.YES);
bar.addLeaf(Util.NO, Util.NO);
// friday saturday node
DecisionTree frisat = new DecisionTree("fri/sat");
frisat.addLeaf(Util.YES, Util.YES);
frisat.addLeaf(Util.NO, Util.NO);
// second alternate node to the right of the diagram below hungry
DecisionTree alternate2 = new DecisionTree("alternate");
alternate2.addNode(Util.YES, raining);
alternate2.addLeaf(Util.NO, Util.YES);
// reservation node
DecisionTree reservation = new DecisionTree("reservation");
frisat.addNode(Util.NO, bar);
frisat.addLeaf(Util.YES, Util.YES);
// first alternate node to the left of the diagram below waitestimate
DecisionTree alternate1 = new DecisionTree("alternate");
alternate1.addNode(Util.NO, reservation);
alternate1.addNode(Util.YES, frisat);
// hungry node
DecisionTree hungry = new DecisionTree("hungry");
hungry.addLeaf(Util.NO, Util.YES);
hungry.addNode(Util.YES, alternate2);
// wait estimate node
DecisionTree waitEstimate = new DecisionTree("wait_estimate");
waitEstimate.addLeaf(">60", Util.NO);
waitEstimate.addNode("30-60", alternate1);
waitEstimate.addNode("10-30", hungry);
waitEstimate.addLeaf("0-10", Util.YES);
// patrons node
DecisionTree patrons = new DecisionTree("patrons");
patrons.addLeaf("None", Util.NO);
patrons.addLeaf("Some", Util.YES);
patrons.addNode("Full", waitEstimate);
return patrons;
}