[jboss-svn-commits] JBL Code SVN: r21640 - in labs/jbossrules/contrib/machinelearning/5.0: drools-core/src/main/java/org/drools/learner/builder and 9 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Aug 20 07:26:07 EDT 2008


Author: gizil
Date: 2008-08-20 07:26:07 -0400 (Wed, 20 Aug 2008)
New Revision: 21640

Added:
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/StatsPrinter.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ReteStatistics.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/StructuredCarExample.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/StructuredNurseryExample.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_car/
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_car/Car.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_car/Comfort.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_car/Price.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_car/Tech.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/Employ.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/Nursery.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/SocHealth.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/StructFinan.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/Structure.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/log/
Modified:
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/DecisionTree.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/DecisionTreePruner.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Domain.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/InstanceList.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Memory.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Stats.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/AdaBoostBuilder.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/AdaBoostKBuilder.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/BoostedTester.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/C45Learner.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/DecisionTreeBuilder.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/DecisionTreeFactory.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/ForestBuilder.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/ForestTester.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/Learner.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/SingleTreeBuilder.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/SingleTreeTester.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/Tester.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/CrossValidation.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/Entropy.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/ErrorEstimate.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/TestSample.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/stopping/EstimatedNodeSize.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/stopping/ImpurityDecrease.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/stopping/MaximumDepth.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/stopping/StoppingCriterion.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ClassVisitor.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/FieldAnnotation.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ObjectFactory.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/RulePrinter.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/Util.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/reteoo/ObjectSink.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/reteoo/Rete.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/test/java/org/drools/learner/StructuredTestFactory.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/CarExample.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/GolfC45ExampleFromDrl.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/GolfExample.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/NurseryExample.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/Poker.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/PokerExample.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/PokerExampleFromDrl.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/RestaurantExample.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/ShoppingClasses.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/ShoppingExm.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/TriangleExample.java
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/car_c45_one.drl
   labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/car_c45_one.stats
Log:
to get statistics on rete, structured java classes

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/DecisionTree.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/DecisionTree.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/DecisionTree.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -33,6 +33,8 @@
 	private double validation_error, training_error;
 
 	private int num_nonterminal_nodes;
+	private int trainingDataSize, testDataSize;
+	private InstanceList train, test;
 
 	public DecisionTree(Schema inst_schema, String _target) {
 		this.obj_schema = inst_schema; //inst_schema.getObjectClass();
@@ -229,5 +231,37 @@
 		String out = "Facts scanned " + FACTS_READ + "\n";
 		return out + root.toString();
 	}
+
+	public void setTrainingDataSize(int size) {
+		trainingDataSize = size;
+	}
 	
+	public void setTestingDataSize(int size) {
+		testDataSize = size;
+	}
+	
+	public int getTrainingDataSize() {
+		return trainingDataSize;
+	}
+	
+	public int getTestingDataSize() {
+		return testDataSize;
+	}
+	
+	public void setTrain(InstanceList x) {
+		train = x;
+	}
+	
+	public void setTest(InstanceList x) {
+		 test = x;
+	}
+
+	public InstanceList getTrain() {
+		return train;
+	}
+	
+	public InstanceList getTest() {
+		return test;
+	}
+	
 }

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/DecisionTreePruner.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/DecisionTreePruner.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/DecisionTreePruner.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -4,6 +4,7 @@
 
 import org.drools.learner.builder.SingleTreeTester;
 import org.drools.learner.eval.ErrorEstimate;
+import org.drools.learner.eval.TestSample;
 import org.drools.learner.tools.LoggerFactory;
 import org.drools.learner.tools.SimpleLogger;
 import org.drools.learner.tools.Util;
@@ -24,15 +25,26 @@
 	private double INIT_ALPHA = 0.5d;
 	private static final double EPSILON = 0.0d;//0.0000000001;
 	
+	private int best_id = 0;;
+	
 	public DecisionTreePruner(ErrorEstimate proc) {
 		procedure = proc;
 		num_trees_to_grow = procedure.getEstimatorSize();
 		//updates = new ArrayList<ArrayList<NodeUpdate>>(num_trees_to_grow);
 		
 		best_stats = new TreeStats(0.0);//proc.getAlphaEstimate());
-	} 	
+	}
 	
-	public void prun_to_estimate() {	
+	public DecisionTreePruner() {
+		procedure = null;
+		num_trees_to_grow = 1;
+		//num_trees_to_grow = procedure.getEstimatorSize();
+		//updates = new ArrayList<ArrayList<NodeUpdate>>(num_trees_to_grow);
+		procedure = new TestSample(0.2d);
+		best_stats = new TreeStats(0.0);//proc.getAlphaEstimate());
+	}
+	
+	public void prun_to_estimate(ArrayList<DecisionTree> dts) {	
 		ArrayList<ArrayList<NodeUpdate>> updates = new ArrayList<ArrayList<NodeUpdate>>(num_trees_to_grow);
 		ArrayList<ArrayList<TreeStats>> sequence_stats = new ArrayList<ArrayList<TreeStats>>(num_trees_to_grow);
 		ArrayList<MinAlphaProc> alpha_procs = new ArrayList<MinAlphaProc>(num_trees_to_grow);
@@ -42,6 +54,87 @@
 		 * 	an expected error rate on some test set (cross-validation error), 
 		 * which is done at the second stage.
 		 */
+//		double value_to_select = procedure.getErrorEstimate();
+		
+		for (int dt_i = 0; dt_i<dts.size(); dt_i++) {
+			
+			DecisionTree dt= dts.get(dt_i);
+			procedure.setTrainingDataSize(dt.getTrainingDataSize());
+			dt.setID(dt_i);
+			dt.calc_num_node_leaves(dt.getRoot());
+			
+			
+
+			// dt.getId()
+			// dt.calc_num_node_leaves(dt.getRoot()); // this is done in the estimator
+
+			double epsilon = EPSILON * numExtraMisClassIfPrun(dt.getRoot());
+			MinAlphaProc alpha_proc = new MinAlphaProc(INIT_ALPHA, epsilon);
+			TreeSequenceProc search = new TreeSequenceProc(dt, alpha_proc);//INIT_ALPHA
+
+			search.init_tree();	// alpha_1 = 0.0 
+			search.iterate_trees(1);
+
+			//updates.add(tree_sequence);
+			updates.add(search.getTreeSequence());
+			sequence_stats.add(search.getTreeSequenceStats());
+			alpha_procs.add(alpha_proc);
+
+			// sort the found candidates
+			//Collections.sort(updates.get(dt.getId()), arg1)
+			int sid = 0, best_st=0;
+			best_id = 0;
+			double best_error = 1.0; 
+			System.out.println("Tree id\t Num_leaves\t Cross-validated\t Resubstitution\t Alpha\t");
+			ArrayList<TreeStats> trees = sequence_stats.get(dt.getId());
+			for (TreeStats st: trees ){
+				if (st.getCostEstimation() <= best_error) {
+					best_error = st.getCostEstimation();
+					best_id = sid;
+					best_st = st.iteration_id;
+				}
+				System.out.println(sid+ "\t " +st.getNum_terminal_nodes()+ "\t "+ st.getCostEstimation() + "\t "+  st.getResubstitution_cost() + "\t "+ st.getAlpha() );
+				sid++;				
+			}
+			System.out.println("BEST "+best_id+ "\t " +trees.get(best_id).getNum_terminal_nodes()+ "\t "+ trees.get(best_id).getCostEstimation() + "\t "+  trees.get(best_id).getResubstitution_cost() + "\t "+ trees.get(best_id).getAlpha() );
+
+			//			System.exit(0);
+			//int N = procedure.getTestDataSize(dt_i);
+			int N = dt.getTestingDataSize();// procedure.getTestDataSize(dt_i);
+			double standart_error_estimate = Math.sqrt((trees.get(best_id).getCostEstimation() * (1- trees.get(best_id).getCostEstimation())/ (double)N));
+
+			int update_id = search.tree_sequence.size()-1;
+			int i = trees.get(trees.size()-1).iteration_id;
+			int _sid = trees.size()-1;
+			while(i > best_st-1) {
+				NodeUpdate nu =search.tree_sequence.get(update_id);
+				while (i == nu.iteration_id) {
+					search.add_back(nu.node_update, nu.old_node);
+					update_id --;
+					nu = search.tree_sequence.get(update_id);
+				}
+				_sid--;
+				TreeStats st = trees.get(_sid);
+				i = st.iteration_id;
+				System.out.println(_sid+ "\t " +st.getNum_terminal_nodes()+ "\t "+ st.getCostEstimation() + "\t "+  st.getResubstitution_cost() + "\t "+ st.getAlpha() );
+				
+			}
+//			System.exit(0);
+		}
+		
+	
+	}
+	
+	public DecisionTree prun_to_estimate() {	
+		ArrayList<ArrayList<NodeUpdate>> updates = new ArrayList<ArrayList<NodeUpdate>>(num_trees_to_grow);
+		ArrayList<ArrayList<TreeStats>> sequence_stats = new ArrayList<ArrayList<TreeStats>>(num_trees_to_grow);
+		ArrayList<MinAlphaProc> alpha_procs = new ArrayList<MinAlphaProc>(num_trees_to_grow);
+		
+		/*
+		 * The best tree is selected from this series of trees with the classification error not exceeding 
+		 * 	an expected error rate on some test set (cross-validation error), 
+		 * which is done at the second stage.
+		 */
 		double value_to_select = procedure.getErrorEstimate();
 
 		for (int dt_i = 0; dt_i<procedure.getEstimatorSize(); dt_i++) {
@@ -65,7 +158,8 @@
 			
 			// sort the found candidates
 			//Collections.sort(updates.get(dt.getId()), arg1)
-			int sid = 0, best_id = 0;
+			int sid = 0, best_st = 0;
+			best_id = 0;
 			double best_error = 1.0; 
 			System.out.println("Tree id\t Num_leaves\t Cross-validated\t Resubstitution\t Alpha\t");
 			ArrayList<TreeStats> trees = sequence_stats.get(dt.getId());
@@ -73,21 +167,116 @@
 				if (st.getCostEstimation() <= best_error) {
 					best_error = st.getCostEstimation();
 					best_id = sid;
+					best_st = st.iteration_id;
 				}
 				System.out.println(sid+ "\t " +st.getNum_terminal_nodes()+ "\t "+ st.getCostEstimation() + "\t "+  st.getResubstitution_cost() + "\t "+ st.getAlpha() );
 				sid++;				
 			}
 			System.out.println("BEST "+best_id+ "\t " +trees.get(best_id).getNum_terminal_nodes()+ "\t "+ trees.get(best_id).getCostEstimation() + "\t "+  trees.get(best_id).getResubstitution_cost() + "\t "+ trees.get(best_id).getAlpha() );
-		
+
+			//			System.exit(0);
 			int N = procedure.getTestDataSize(dt_i);
 			double standart_error_estimate = Math.sqrt((trees.get(best_id).getCostEstimation() * (1- trees.get(best_id).getCostEstimation())/ (double)N));
+			
+			int update_id = search.tree_sequence.size()-1;
+			int i = trees.get(trees.size()-1).iteration_id;
+			int _sid = trees.size()-1;
+			while(i > best_st) {
+				NodeUpdate nu =search.tree_sequence.get(update_id);
+				while (i == nu.iteration_id) {
+					search.add_back(nu.node_update, nu.old_node);
+					update_id --;
+					nu = search.tree_sequence.get(update_id);
+				}
+				_sid--;
+				TreeStats st = trees.get(_sid);
+				i = st.iteration_id;
+				System.out.println(_sid+ "\t " +st.getNum_terminal_nodes()+ "\t "+ st.getCostEstimation() + "\t "+  st.getResubstitution_cost() + "\t "+ st.getAlpha() );
+				
+			}
+//			System.exit(0);
+			
+			return dt;
 		}
+		return null;
 		
-		
 	
 	
 	}
 	
+	
+//	public DecisionTree prun_to_estimate(DecisionTree dt) {	
+//		ArrayList<ArrayList<NodeUpdate>> updates = new ArrayList<ArrayList<NodeUpdate>>(num_trees_to_grow);
+//		ArrayList<ArrayList<TreeStats>> sequence_stats = new ArrayList<ArrayList<TreeStats>>(num_trees_to_grow);
+//		ArrayList<MinAlphaProc> alpha_procs = new ArrayList<MinAlphaProc>(num_trees_to_grow);
+//		
+//		/*
+//		 * The best tree is selected from this series of trees with the classification error not exceeding 
+//		 * 	an expected error rate on some test set (cross-validation error), 
+//		 * which is done at the second stage.
+//		 */
+//		double value_to_select = procedure.getErrorEstimate();
+//
+//		for (int dt_i = 0; dt_i<procedure.getEstimatorSize(); dt_i++) {
+//			DecisionTree dt= procedure.getEstimator(dt_i);
+//			
+//			
+//			// dt.getId()
+//			// dt.calc_num_node_leaves(dt.getRoot()); // this is done in the estimator
+//			
+//			double epsilon = EPSILON * numExtraMisClassIfPrun(dt.getRoot());
+//			MinAlphaProc alpha_proc = new MinAlphaProc(INIT_ALPHA, epsilon);
+//			TreeSequenceProc search = new TreeSequenceProc(dt, alpha_proc);//INIT_ALPHA
+//			 
+//			search.init_tree();	// alpha_1 = 0.0 
+//			search.iterate_trees(1);
+//			
+//			//updates.add(tree_sequence);
+//			updates.add(search.getTreeSequence());
+//			sequence_stats.add(search.getTreeSequenceStats());
+//			alpha_procs.add(alpha_proc);
+//			
+//			// sort the found candidates
+//			//Collections.sort(updates.get(dt.getId()), arg1)
+//			int sid = 0;
+//			best_id = 0;
+//			double best_error = 1.0; 
+//			System.out.println("Tree id\t Num_leaves\t Cross-validated\t Resubstitution\t Alpha\t");
+//			ArrayList<TreeStats> trees = sequence_stats.get(dt.getId());
+//			for (TreeStats st: trees ){
+//				if (st.getCostEstimation() <= best_error) {
+//					best_error = st.getCostEstimation();
+//					best_id = sid;
+//				}
+//				System.out.println(sid+ "\t " +st.getNum_terminal_nodes()+ "\t "+ st.getCostEstimation() + "\t "+  st.getResubstitution_cost() + "\t "+ st.getAlpha() );
+//				sid++;				
+//			}
+//			System.out.println("BEST "+best_id+ "\t " +trees.get(best_id).getNum_terminal_nodes()+ "\t "+ trees.get(best_id).getCostEstimation() + "\t "+  trees.get(best_id).getResubstitution_cost() + "\t "+ trees.get(best_id).getAlpha() );
+//
+//			//			System.exit(0);
+//			int N = procedure.getTestDataSize(dt_i);
+//			double standart_error_estimate = Math.sqrt((trees.get(best_id).getCostEstimation() * (1- trees.get(best_id).getCostEstimation())/ (double)N));
+//			
+//			int update_id = search.tree_sequence.size()-1;
+//			for (int i = trees.size()-1; i>=best_id; i--){
+//				NodeUpdate nu =search.tree_sequence.get(update_id);
+//				while (i == nu.iteration_id) {
+//					search.add_back(nu.node_update, nu.old_node);
+//					update_id ++;
+//					nu = search.tree_sequence.get(update_id);
+//				}
+//				TreeStats st = trees.get(i);
+//				System.out.println(sid+ "\t " +st.getNum_terminal_nodes()+ "\t "+ st.getCostEstimation() + "\t "+  st.getResubstitution_cost() + "\t "+ st.getAlpha() );
+//				sid++;				
+//			}
+//			
+//			return dt;
+//		}
+//		return null;
+//		
+//	
+//	
+//	}
 	public void select_tree () {
 		/*
 		 * The best tree is selected from this series of trees with the classification error not exceeding 
@@ -95,6 +284,8 @@
 		 * which is done at the second stage.
 		 */
 		double value_to_select = procedure.getErrorEstimate();
+		
+
 	
 	}
 	
@@ -175,6 +366,9 @@
 			tree_sequence_stats.add(init_tree_stats);
 			
 		}
+		public DecisionTree getFocusTree() {
+			return focus_tree;
+		}
 		
 		public ArrayList<TreeStats> getTreeSequenceStats() {
 			return tree_sequence_stats;
@@ -286,6 +480,7 @@
 		}
 
 		
+		
 		private void prune_off(TreeNode candidate_node, int i) {	
 			
 			LeafNode best_clone = new LeafNode(focus_tree.getTargetDomain(), candidate_node.getLabel());
@@ -319,16 +514,34 @@
 			tree_sequence.add(update);
 			
 		}
+		public void add_back(TreeNode leaf_node, TreeNode original_node) {
+			TreeNode father = leaf_node.getFather();
+			if (father == null) {
+				focus_tree.setRoot(original_node);
+				return;
+			}
+			else
+			for(Object key: father.getChildrenKeys()) {
+				if (father.getChild(key).equals(leaf_node)) {
+					father.putNode(key, original_node);
+					break;
+				}
+			}
+		}
 		
+		
 		private void update_tree_stats(TreeStats stats, double computed_alpha, int change_in_training_error) {
-			ArrayList<InstanceList> sets = procedure.getSets(focus_tree.getId());
-			InstanceList learning_set = sets.get(0);
-			InstanceList validation_set = sets.get(1);
-			
+				//TODO put back
+		//			ArrayList<InstanceList> sets = procedure.getSets(focus_tree.getId());
+//			InstanceList learning_set = sets.get(0);
+//			InstanceList validation_set = sets.get(1);
+
+			InstanceList learning_set = focus_tree.getTrain();
+			InstanceList validation_set = focus_tree.getTest();
 			int num_error = 0;
 			SingleTreeTester t= new SingleTreeTester(focus_tree);
 			
-			System.out.println(validation_set.getSize());
+			//System.out.println(validation_set.getSize());
 			for (int index_i = 0; index_i < validation_set.getSize(); index_i++) {
 				Integer result = t.test(validation_set.getInstance(index_i));
 				if (result == Stats.INCORRECT) {

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Domain.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Domain.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Domain.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -6,7 +6,7 @@
 import org.drools.learner.tools.Util;
 
 public class Domain {
-	private boolean categorical, fixed, artificial;
+	private boolean categorical, fixed, artificial, ignore;
 	//private DataType dataType;
 	private String fName;
 	private Class<?> fType, objKlass /*the class that attribute belongs to*/; // , ownerKlass;		// not sure if necessary
@@ -19,6 +19,7 @@
 		
 		this.categorical = true;	// BY DEFAULT, it is categorical
 		this.artificial = false;	// BY DEFAULT, it is a real field, if it is artificial it means there is no field exist but there is method which computes the value
+		this.ignore = false;
 		//this.dataType = DataType.PRIMITIVE; // BY DEFAULT it is primitive
 		this.fCategories = new ArrayList<Object>(2);
 		
@@ -29,6 +30,7 @@
 		dom.categorical = this.categorical;
 		//dom.readingSeq = readingSeq;
 		dom.fCategories = this.fCategories;
+		dom.ignore = this.ignore;
 		
 		return dom;
 	}
@@ -154,7 +156,14 @@
 		}
 	
 	}
+	public boolean ignore() {
+		return ignore;
+	}
 	
+	public void ignore(boolean ignore_field) {
+		ignore = ignore_field;
+	}
+	
 	public boolean isNotJustSelected(Domain exceptDomain) {
 		if (this.objKlass.equals(exceptDomain.getObjKlass()))
 			return !this.getFName().equals(exceptDomain.getFName());

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/InstanceList.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/InstanceList.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/InstanceList.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -2,7 +2,9 @@
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
+import java.util.Random;
 
 import org.drools.WorkingMemory;
 import org.drools.learner.tools.LoggerFactory;
@@ -10,22 +12,30 @@
 public class InstanceList {
 
 	private static SimpleLogger flog = LoggerFactory.getUniqueFileLogger(InstanceList.class, SimpleLogger.WARN);
-	private static SimpleLogger slog = LoggerFactory.getSysOutLogger(InstanceList.class, SimpleLogger.DEBUG);
+	private static SimpleLogger slog = LoggerFactory.getSysOutLogger(InstanceList.class, SimpleLogger.DEFAULT_LEVEL);
 	
 	private Schema schema;
 	private ArrayList<Instance> instances;
-	private InstanceFactory factory;
+	private InstanceFactory factory = null;
 	
 	public InstanceList(Schema _schema, WorkingMemory _session) {
 		this.schema = _schema;
-		this.instances = new ArrayList<Instance>(); 
+		this.instances = new ArrayList<Instance>();
 		this.factory = new InstanceFactory(_session, _schema);
 	}
 	
-	// will be used as copy constructer
-	public InstanceList(Schema _schema, int size) {
-		this.schema = _schema;
+	// copy ctor
+	public InstanceList(InstanceList _il) {
+		this.schema = _il.schema;
+		this.instances = _il.instances;
+		this.factory = _il.factory;
+	}
+	
+	// another copy constructor
+	public InstanceList(InstanceList _il, int size) {
+		this.schema = _il.schema;
 		this.instances = new ArrayList<Instance>(size);
+		this.factory = _il.factory;
 	}
 
 	public void addStructuredInstance(Object _obj) {
@@ -43,7 +53,19 @@
 			//System.exit(0);
 		}
 	}
+
+	public void shuffle() {
+		long seed = 10101001;
+		Random rnd = new Random(seed);
+		Collections.shuffle(this.instances, rnd);
+	}
 	
+	public InstanceList subList(int from, int until) {
+		InstanceList il = new InstanceList(this);
+		il.instances = new ArrayList<Instance>(instances.subList(from, until));
+		return il;
+	}
+	
 	public void addAsInstance(Instance inst) {
 		instances.add(inst);
 	}
@@ -65,7 +87,7 @@
 			System.out.println("Exception: TOO BIG to get Memory.getClassInstancesOf");
 			return null;
 		}
-		InstanceList toReturn = new InstanceList(this.getSchema(), bag.length);
+		InstanceList toReturn = new InstanceList(this, bag.length);
 		for (int j = 0; j< bag.length ; j ++) {
 			toReturn.addAsInstance(this.getInstance(bag[j]));
 		}

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Memory.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Memory.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Memory.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -31,6 +31,8 @@
 
 		// create a instance list that can hold objects from our schema
 		mem.instances.put(clazz, new InstanceList(inst_schema, _session));
+		
+//		mem.test_instances.put(clazz, new InstanceList(inst_schema, _session));
 
 		/* 
 		 * do they create an ObjectTypeNode for each new inserted object type?
@@ -48,18 +50,59 @@
 
 		return mem;
 	}
+	
+	public static Memory createTestFromWorkingMemory(Memory old_memory, WorkingMemory _session, Class<?> clazz, DomainAlgo domain, DataType data) throws FeatureNotSupported {
+		// if mem == null
+		Memory mem = new Memory();
 
+		mem.session = _session;
 
+		mem.setClassToClassify(clazz);
+		
+		// create schema from clazz
+		Schema inst_schema = old_memory.getClassInstances().getSchema();
+//		try {
+//			inst_schema = Schema.createSchemaStructure(clazz, domain, data);
+//		} catch (Exception e) {
+//			// TODO Auto-generated catch block
+//			e.printStackTrace();
+//			System.exit(0);
+//		}
+
+		// create a instance list that can hold objects from our schema
+		mem.instances.put(clazz, new InstanceList(inst_schema, _session));
+
+		/* 
+		 * do they create an ObjectTypeNode for each new inserted object type?
+		 * even if there is no rule exists.
+		 * No probably they do not 
+		 */
+		Iterator<Object> it_object = _session.iterateObjects();	// how can i get the object type nodes
+		while (it_object.hasNext()) {
+			Object obj = it_object.next();
+			// validating in the the factory during instantiation
+			//if (clazz.isAssignableFrom(obj.getClass()))
+			mem.instances.get(clazz).addStructuredInstance(obj);
+		}
+		//dt.FACTS_READ += facts.size();
+
+		return mem;
+	}
+
+
 	// Drools memory
 	private WorkingMemory session;
 	//// class specification
 	//private Schema schema;
 	Class<?> clazzToClassify;
 	
-	// instance list
+	// instance list used to train
 	private HashMap<Class<?>,InstanceList> instances;
 	
+//	// instance list used to test
+//	private HashMap<Class<?>,InstanceList> test_instances;
 	
+	
 	private Memory() {
 		this.instances = new HashMap<Class<?>, InstanceList>();
 	}

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Stats.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Stats.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Stats.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -6,12 +6,15 @@
 import java.io.PrintWriter;
 import java.io.StringWriter;
 import java.io.Writer;
+import java.text.DecimalFormat;
 import java.util.ArrayList;
 
 public class Stats {
 	
 	public static final int INCORRECT = 0, CORRECT = 1, UNKNOWN = 2;
 	
+	DecimalFormat precision = new DecimalFormat("#.###");
+	
 	private Class<?> stat_class;
 	private ArrayList<Integer> histogram;
 	
@@ -47,7 +50,7 @@
 	 * fileSignature must contain the folder location
 	 * by default the folder = "src/main/rules/"
 	 */
-	public void print2file(String fileSignature) {
+	public void print2file(String fileSignature, boolean append) {
 		
 		//String dataFileName = "src/main/rules/"+_packageNames+"/"+ fileName; 
 		
@@ -56,7 +59,7 @@
 		System.out.println("printing stats:"+ fileSignature);
 		
 		try {
-			StatsPrinter.print(this, new FileWriter(fileSignature));
+			StatsPrinter.print(this, new FileWriter(fileSignature, append));
 		} catch (FileNotFoundException e) {
 			// TODO Auto-generated catch block
 			e.printStackTrace();
@@ -74,30 +77,30 @@
 		}
 		
 	}
+//	public String print4Latex() {
+//		
+//		double in = 100.0d *(double)getResult(Stats.INCORRECT)/(double) getTotal();
+//		double co = 100.0d *(double)getResult(Stats.CORRECT)/(double) getTotal();
+//		double un = 100.0d *(double)getResult(Stats.UNKNOWN)/(double) getTotal();
+//		return "Builder" +"\t&\t"+ getResult(Stats.INCORRECT)+ "\t&\t"+ precision.format(in) + "\t&\t"+
+//				getResult(Stats.CORRECT)+"\t&\t"+ precision.format(co)+ "\t&\t"+ getResult(Stats.UNKNOWN)+"\t&\t"+ precision.format(un)+ "\\\\";
+//	}
 	
+	public String print4Latex() {
+		
+		double in = 100.0d *(double)getResult(Stats.INCORRECT)/(double) getTotal();
+		double co = 100.0d *(double)getResult(Stats.CORRECT)/(double) getTotal();
+		double un = 100.0d *(double)getResult(Stats.UNKNOWN)/(double) getTotal();
+		double to = 100.0d;
+		return "\t&\t"+ getResult(Stats.INCORRECT)+ "\t&\t"+ precision.format(in) + "\t&\t"+
+				getResult(Stats.CORRECT)+"\t&\t"+ precision.format(co)+ "\t&\t"+ getTotal()+"\t&\t"+ precision.format(to);
+	}
+	
 	public String print2string() {
-		StringWriter swr = new StringWriter();
-		try {
-			StatsPrinter.print(this, swr);
-			return swr.toString();
-		} catch (IOException e) {
-			e.printStackTrace();
-			return "";
-		}
+		return getResult(Stats.INCORRECT)+ " "+getResult(Stats.CORRECT)+" "+getTotal();// getResult(Stats.UNKNOWN)+
 	}
+	public static String getErrors() {
+		return "INCORRECT CORRECT TOTAL\n";//UNKNOWN
+	}
 }
 
-class StatsPrinter {
-	//public static void print(Stats mystats, OutputStream os) {
-	public static void print(Stats mystats, Writer wr) throws IOException {
-		//PrintWriter pwr = new PrintWriter(os);
-		
-		// print the statistics of the results to a file	
-		wr.write("TESTING results: incorrect "+ mystats.getResult(Stats.INCORRECT)+"\n");
-		wr.write("TESTING results: correct "+ mystats.getResult(Stats.CORRECT)+"\n");
-		wr.write("TESTING results: unknown "+ mystats.getResult(Stats.UNKNOWN)+"\n");
-		wr.write("TESTING results: Total Number "+ mystats.getTotal());
-		
-		wr.flush();
-	}
-}

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/StatsPrinter.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/StatsPrinter.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/StatsPrinter.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -0,0 +1,53 @@
+package org.drools.learner;
+
+import java.io.FileNotFoundException;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.Writer;
+
+public class StatsPrinter {
+
+
+	//public static void print(Stats mystats, OutputStream os) {
+	public static void print(Stats mystats, Writer wr) throws IOException {
+		//PrintWriter pwr = new PrintWriter(os);
+		
+		// print the statistics of the results to a file	
+		wr.write("TESTING results: incorrect "+ mystats.getResult(Stats.INCORRECT)+"\n");
+		wr.write("TESTING results: correct "+ mystats.getResult(Stats.CORRECT)+"\n");
+		wr.write("TESTING results: unknown "+ mystats.getResult(Stats.UNKNOWN)+"\n");
+		wr.write("TESTING results: Total Number "+ mystats.getTotal());
+		
+		//wr.flush();
+		wr.close();
+	}
+	
+	public static void print(StringBuffer sb, Writer wr) throws IOException {
+		//PrintWriter pwr = new PrintWriter(os);
+		
+		// print the statistics of the results to a file	
+		wr.write(sb.toString()+ "\n");
+		
+		wr.close();
+	}
+	
+	public static void print2file(StringBuffer sb, String fileSignature, boolean append) {
+		
+		//String dataFileName = "src/main/rules/"+_packageNames+"/"+ fileName; 
+		
+		if (!fileSignature.endsWith(".stats"))
+			fileSignature += ".stats";
+		System.out.println("printing stats:"+ fileSignature);
+		
+		try {
+			StatsPrinter.print(sb, new FileWriter(fileSignature, append));
+		} catch (FileNotFoundException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+
+}
\ No newline at end of file


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/StatsPrinter.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/AdaBoostBuilder.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/AdaBoostBuilder.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/AdaBoostBuilder.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -6,6 +6,7 @@
 import org.drools.learner.InstanceList;
 import org.drools.learner.Memory;
 import org.drools.learner.Stats;
+import org.drools.learner.StatsPrinter;
 import org.drools.learner.tools.LoggerFactory;
 import org.drools.learner.tools.SimpleLogger;
 import org.drools.learner.tools.Util;
@@ -20,7 +21,9 @@
 	
 	private TreeAlgo algorithm = TreeAlgo.BOOST; // default bagging, TODO boosting
 	
-	private static int FOREST_SIZE = 50;
+	private double trainRatio = Util.TRAINING_RATIO, testRatio = Util.TESTING_RATIO;
+	
+	private static int FOREST_SIZE = Util.NUM_TREES;
 	private static final double TREE_SIZE_RATIO = 1.0d;
 	private static final boolean WITH_REP = false;
 	
@@ -29,10 +32,26 @@
 	
 	private DecisionTreeMerger merger;
 	
+	private DecisionTree best;
+	
+	private BoostedTester tester;
+	
+	private ArrayList<Stats> train_evaluation, test_evaluation;
+	
 	public AdaBoostBuilder() {
 		//this.trainer = _trainer;
 		merger = new DecisionTreeMerger();
+		train_evaluation = new ArrayList<Stats>(FOREST_SIZE);
+		test_evaluation = new ArrayList<Stats>(FOREST_SIZE);
 	}
+	
+	public void setTrainRatio(double ratio) {
+		trainRatio = ratio;
+	}
+	
+	public void setTestRatio(double ratio) {
+		testRatio = ratio;
+	}
 	public void build(Memory mem, Learner _trainer) {
 		
 		final InstanceList class_instances = mem.getClassInstances();
@@ -41,22 +60,35 @@
 		
 		if (class_instances.getTargets().size()>1 ) {
 			//throw new FeatureNotSupported("There is more than 1 target candidates");
-			if (flog.error() !=null)
-				flog.error().log("There is more than 1 target candidates\n");
+			if (slog.error() !=null)
+				slog.error().log("There is more than 1 target candidates\n");
 			System.exit(0);
 			// TODO put the feature not supported exception || implement it
 		} else if (_trainer.getTargetDomain().getCategoryCount() >2) {
-			if (flog.error() !=null)
-				flog.error().log("The target domain is not binary!!!\n");
+			if (slog.error() !=null)
+				slog.error().log("The target domain is not binary!!!\n");
 			System.exit(0);
 		}
+		
+		int split_idx =  (int)(trainRatio * class_instances.getSize());
+		int split_idx2 =  split_idx + (int)(testRatio * class_instances.getSize());
+		
+		InstanceList train_instances = class_instances.subList(0, split_idx);
+		InstanceList test_instances = class_instances.subList(split_idx, split_idx2);//class_instances.getSize());
+		
 	
-		int N = class_instances.getSize();
-		int NUM_DATA = (int)(TREE_SIZE_RATIO * N);	// TREE_SIZE_RATIO = 1.0, all data is used to train the trees again again
+		int N = train_instances.getSize();
+		int NUM_DATA = (int)(TREE_SIZE_RATIO * N);	// TREE_SIZE_RATIO = 1.0, all training data is used to train the trees again again
 		_trainer.setTrainingDataSizePerTree(NUM_DATA);
+		/* tree_capacity number of data fed to each tree, there are FOREST_SIZE trees*/
+		_trainer.setTrainingDataSize(NUM_DATA); 
 		
-		/* all data fed to each tree, the same data?? */
-		_trainer.setTrainingDataSize(NUM_DATA); // TODO????
+//		int N = class_instances.getSize();
+//		int NUM_DATA = (int)(TREE_SIZE_RATIO * N);	// TREE_SIZE_RATIO = 1.0, all data is used to train the trees again again
+//		_trainer.setTrainingDataSizePerTree(NUM_DATA);
+//		
+//		/* all data fed to each tree, the same data?? */
+//		_trainer.setTrainingDataSize(NUM_DATA); // TODO????
 
 		
 		forest = new ArrayList<DecisionTree> (FOREST_SIZE);
@@ -65,9 +97,10 @@
 		double [] weights = new double [NUM_DATA];
 		for (int index_i=0; index_i<NUM_DATA; index_i++) {		
 			weights[index_i] = 1.0d/(double)NUM_DATA;
-			class_instances.getInstance(index_i).setWeight(weights[index_i] * (double)NUM_DATA);
+//			class_instances.getInstance(index_i).setWeight(weights[index_i] * (double)NUM_DATA);
+			train_instances.getInstance(index_i).setWeight(weights[index_i] * (double)NUM_DATA);
 			if (slog.debug() != null)
-				slog.debug().log(index_i+" new weight:"+class_instances.getInstance(index_i).getWeight()+ "\n");
+				slog.debug().log(index_i+" new weight:"+train_instances.getInstance(index_i).getWeight()+ "\n");
 		}
 		
 		int i = 0;
@@ -78,14 +111,15 @@
 //			else
 //				bag = Util.bag_wo_rep(NUM_DATA, N);	
 			
-			InstanceList working_instances = class_instances; //.getInstances(bag);			
+			InstanceList working_instances = train_instances;//class_instances; //.getInstances(bag);			
 			DecisionTree dt = _trainer.train_tree(working_instances);
 			dt.setID(i);
 			
 			double error = 0.0, sum_weight = 0.0;
-			SingleTreeTester t= new SingleTreeTester(dt);
+			SingleTreeTester single_tester= new SingleTreeTester(dt);
 			for (int index_i = 0; index_i < NUM_DATA; index_i++) {
-				Integer result = t.test(class_instances.getInstance(index_i));
+//				Integer result = t.test(class_instances.getInstance(index_i));
+				Integer result = single_tester.test(working_instances.getInstance(index_i));
 				sum_weight += weights[index_i];
 				if (result == Stats.INCORRECT) {
 					error += weights[index_i];
@@ -105,7 +139,9 @@
 					double norm_fact= 0.0d;
 					// Boosting the missclassified instances
 					for (int index_i = 0; index_i < NUM_DATA; index_i++) {
-						Integer result = t.test(class_instances.getInstance(index_i));//TODO dont need to test two times
+//						Integer result = t.test(class_instances.getInstance(index_i));//TODO dont need to test two times
+//						Integer result = t.test(class_instances.getInstance(index_i));
+						Integer result = single_tester.test(working_instances.getInstance(index_i));
 						switch (result) {
 						case Stats.INCORRECT:
 							weights[index_i] = weights[index_i] * Util.exp(alpha);
@@ -124,7 +160,8 @@
 					// Normalization of the weights
 					for (int index_i = 0; index_i < NUM_DATA; index_i++) {
 						weights[index_i] = weights[index_i] / norm_fact;
-						class_instances.getInstance(index_i).setWeight(weights[index_i] * (double)NUM_DATA);
+						//class_instances.getInstance(index_i).setWeight(weights[index_i] * (double)NUM_DATA);
+						working_instances.getInstance(index_i).setWeight(weights[index_i] * (double)NUM_DATA);
 					}
 				} else {
 					if (slog.debug() != null)
@@ -134,10 +171,8 @@
 					FOREST_SIZE = i-1;//ignore the current tree
 					break;
 				}
-			}
-			
-			
-			else {
+				
+			} else {
 				if (slog.stat() != null) {
 					slog.stat().log("\n Boosting ends: ");
 					slog.stat().log("All instances classified correctly TERMINATE, forest size:"+i+ "\n");
@@ -148,8 +183,9 @@
 				
 				
 			}
+			train_evaluation.add(single_tester.test(train_instances));
+			test_evaluation.add(single_tester.test(test_instances));
 			
-			
 			forest.add(dt);
 			// the DecisionTreeMerger will visit the decision tree and add the paths that have not been seen yet to the list
 			merger.add(dt);	
@@ -158,12 +194,20 @@
 				slog.stat().stat(".");
 
 		}
+		
+		tester = new BoostedTester(forest, getAccuracies());
+		train_evaluation.add(tester.test(train_instances));
+		test_evaluation.add(tester.test(test_instances));
 		// TODO how to compute a best tree from the forest
-		DecisionTree best = merger.getBest();
+		int best_id = getMinTestId();
+		best = merger.getBest();
 		if (best == null)
-			best = forest.get(0);
+			best = forest.get(best_id);
 		
-		_trainer.setBestTree(forest.get(0));
+		train_evaluation.add(train_evaluation.get(best_id));
+		test_evaluation.add(test_evaluation.get(best_id));
+		
+		//_trainer.setBestTree(forest.get(0));
 		//this.c45 = dt;
 	}
 
@@ -182,4 +226,72 @@
 			forest.remove(i);
 		
 	}
+	
+	public int getMinTestId() {
+		double min = 1.0;
+		int id = -1;
+		for (int i=0; i< FOREST_SIZE; i++ ) {
+			Stats test_s=test_evaluation.get(i);
+			Stats train_s=train_evaluation.get(i);
+			double test_error = ((double)test_s.getResult(Stats.INCORRECT)/(double)test_s.getTotal());
+			double train_error = ((double)train_s.getResult(Stats.INCORRECT)/(double)train_s.getTotal());
+			if (test_error < min) {
+				min = test_error;
+				id = i;
+			} else if (test_error == min) {
+				Stats old = train_evaluation.get(id);
+				double train_old = ((double)old.getResult(Stats.INCORRECT)/(double)old.getTotal());
+				if (train_error < train_old) {
+					min = test_error;
+					id = i;
+				}
+			}
+			
+		}
+		return id;
+		
+	}
+	public DecisionTree getTree() {
+		return best;
+	}
+	
+	public void printResults(String executionSignature) {
+		StringBuffer sb = new StringBuffer();
+		sb.append("#"+ Stats.getErrors());
+		for (int i =0 ; i<FOREST_SIZE; i++) {
+			sb.append(train_evaluation.get(i).print2string() + "\n");
+		}
+		sb.append( "\n\n");
+		for (int i =0 ; i<FOREST_SIZE; i++) {
+			sb.append(test_evaluation.get(i).print2string() + "\n");
+		}
+		sb.append( "\n");
+		sb.append(train_evaluation.get(FOREST_SIZE).print2string() + "\n");
+		sb.append( "\n");
+		sb.append(test_evaluation.get(FOREST_SIZE).print2string() + "\n");
+		
+		sb.append( "\n");
+		sb.append(train_evaluation.get(FOREST_SIZE+1).print2string() + "\n");
+		sb.append( "\n");
+		sb.append(test_evaluation.get(FOREST_SIZE+1).print2string() + "\n");
+		
+		StatsPrinter.print2file(sb, Util.DRL_DIRECTORY +executionSignature, false);
+	}
+	
+	public void printLatex(String executionSignature) {
+		StringBuffer sb = new StringBuffer();
+		sb.append("#"+ Stats.getErrors());
+		for (int i =0 ; i<FOREST_SIZE; i++) {
+			sb.append(train_evaluation.get(i).print4Latex() +test_evaluation.get(i).print4Latex() + "\\\\"+"\n");
+		}
+
+		sb.append( "\n");
+		sb.append(train_evaluation.get(FOREST_SIZE).print4Latex() +test_evaluation.get(FOREST_SIZE).print4Latex() +"\\\\"+"\n");
+		
+		sb.append( "\n");
+		sb.append(train_evaluation.get(FOREST_SIZE+1).print4Latex() +test_evaluation.get(FOREST_SIZE+1).print4Latex()+"\\\\"+ "\n");
+		sb.append( "\n");
+		
+		StatsPrinter.print2file(sb, Util.DRL_DIRECTORY +executionSignature, true);
+	}
 }

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/AdaBoostKBuilder.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/AdaBoostKBuilder.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/AdaBoostKBuilder.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -19,17 +19,31 @@
 	
 	private TreeAlgo algorithm = TreeAlgo.BOOST_K; // default bagging, TODO boosting
 	
+	private double trainRatio = Util.TRAINING_RATIO, testRatio = Util.TESTING_RATIO;
+	
 	private static int FOREST_SIZE = 10;
 	private static final double TREE_SIZE_RATIO = 0.9;
 	private static final boolean WITH_REP = false;
 	
 	private ArrayList<DecisionTree> forest;
 	private ArrayList<Double> classifier_accuracy;
+	
+	private DecisionTree best;
 	//private Learner trainer;
 	
+	private DecisionTreeMerger merger;
+	
 	public AdaBoostKBuilder() {
 		//this.trainer = _trainer;
+		merger = new DecisionTreeMerger();
 	}
+	
+	public void setTrainRatio(double ratio) {
+		trainRatio = ratio;
+	}
+	public void setTestRatio(double ratio) {
+		testRatio = ratio;
+	}
 	public void build(Memory mem, Learner _trainer) {
 		
 		final InstanceList class_instances = mem.getClassInstances();
@@ -159,14 +173,19 @@
 			
 			
 			forest.add(dt);
+			
+			// the DecisionTreeMerger will visit the decision tree and add the paths that have not been seen yet to the list
+			merger.add(dt);	
 
 			if (slog.stat() !=null)
 				slog.stat().stat(".");
 
 		}
 		// TODO how to compute a best tree from the forest
-		_trainer.setBestTree(forest.get(0));
-		
+		//_trainer.setBestTree(forest.get(0));
+		best = merger.getBest();
+		if (best == null)
+			best = forest.get(0);
 		//this.c45 = dt;
 	}
 
@@ -185,4 +204,8 @@
 			forest.remove(i);
 		
 	}
+	
+	public DecisionTree getTree() {
+		return best;
+	}
 }

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/BoostedTester.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/BoostedTester.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/BoostedTester.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -85,8 +85,8 @@
 		
 	}
 	
-	public void printStats(final Stats evaluation, String executionSignature) {
-		super.printStats(evaluation, executionSignature);
+	public void printStats(final Stats evaluation, String executionSignature, boolean append) {
+		super.printStats(evaluation, executionSignature, append);
 	}
 
 }

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/C45Learner.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/C45Learner.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/C45Learner.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -19,23 +19,15 @@
 public class C45Learner extends Learner{
 	
 	private AttributeChooser chooser;
-	private ArrayList<StoppingCriterion> criteria; 
 	
+	
 	public C45Learner(Heuristic hf) {
 		super();
 		super.setDomainAlgo(DomainAlgo.QUANTITATIVE);
 		chooser = new AttributeChooser(hf);
-		criteria = null;
 	}
 	
 	
-	public C45Learner(Heuristic hf, ArrayList<StoppingCriterion> _criteria) {
-		super();
-		super.setDomainAlgo(DomainAlgo.QUANTITATIVE);
-		chooser = new AttributeChooser(hf);
-		criteria = _criteria;
-	}
-	
 	protected TreeNode train(DecisionTree dt, InstDistribution data_stats,  int depth) {//List<Instance> data) {
 		
 		if (data_stats.getSum() == 0) {
@@ -89,7 +81,7 @@
 		/* choosing the best attribute in order to branch at the current node*/
 		chooser.chooseAttribute(best_attr_eval, data_stats, attribute_domains);
 		
-		if (criteria != null & criteria.size()>0) {
+		if (super.criteria != null && criteria.size()>0) {
 			for (StoppingCriterion sc: criteria) 
 				if (sc.stop(best_attr_eval)) {
 					Object winner = data_stats.get_winner_class();

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/DecisionTreeBuilder.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/DecisionTreeBuilder.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/DecisionTreeBuilder.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -1,6 +1,7 @@
 package org.drools.learner.builder;
 
 
+import org.drools.learner.DecisionTree;
 import org.drools.learner.Memory;
 
 public interface DecisionTreeBuilder {
@@ -14,4 +15,9 @@
 	
 	public TreeAlgo getTreeAlgo();
 	
+	public DecisionTree getTree();
+	
+	public void setTrainRatio(double ratio);
+	public void setTestRatio(double ratio);
+	
 }

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/DecisionTreeFactory.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/DecisionTreeFactory.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/DecisionTreeFactory.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -16,6 +16,8 @@
 import org.drools.learner.eval.Heuristic;
 import org.drools.learner.eval.TestSample;
 import org.drools.learner.eval.stopping.EstimatedNodeSize;
+import org.drools.learner.eval.stopping.ImpurityDecrease;
+import org.drools.learner.eval.stopping.MaximumDepth;
 import org.drools.learner.eval.stopping.StoppingCriterion;
 import org.drools.learner.tools.FeatureNotSupported;
 import org.drools.learner.tools.Util;
@@ -52,12 +54,12 @@
 		Memory mem = Memory.createFromWorkingMemory(wm, obj_class, learner.getDomainAlgo(), data);
 		single_builder.build(mem, learner);//obj_class, target_attr, working_attr
 		
-		SingleTreeTester tester = new SingleTreeTester(learner.getTree());
-		tester.printStats(tester.test(mem.getClassInstances()), Util.DRL_DIRECTORY + executionSignature);
+		SingleTreeTester tester = new SingleTreeTester(single_builder.getTree());
+		tester.printStats(tester.test(mem.getClassInstances()), Util.DRL_DIRECTORY + executionSignature, false);
 		//Tester.test(c45, mem.getClassInstances());
 		
-		learner.getTree().setSignature(executionSignature);
-		return learner.getTree();
+		single_builder.getTree().setSignature(executionSignature);
+		return single_builder.getTree();
 	}
 	public static DecisionTree createSingleC45E(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
 		return createSingleC45(wm, obj_class, new Entropy());
@@ -82,12 +84,12 @@
 		Memory mem = Memory.createFromWorkingMemory(wm, obj_class, learner.getDomainAlgo(), data);
 		single_builder.build(mem, learner);//obj_class, target_attr, working_attr
 		
-		SingleTreeTester tester = new SingleTreeTester(learner.getTree());
-		tester.printStats(tester.test(mem.getClassInstances()), Util.DRL_DIRECTORY + executionSignature);
+		SingleTreeTester tester = new SingleTreeTester(single_builder.getTree());
+		tester.printStats(tester.test(mem.getClassInstances()), Util.DRL_DIRECTORY + executionSignature, false);
 		//Tester.test(c45, mem.getClassInstances());
 		
-		learner.getTree().setSignature(executionSignature);
-		return learner.getTree();
+		single_builder.getTree().setSignature(executionSignature);
+		return single_builder.getTree();
 	}
 	
 	public static DecisionTree createBagC45E(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
@@ -113,12 +115,12 @@
 		//forest.clearForest(10);
 
 		ForestTester tester = new ForestTester(forest.getTrees());
-		tester.printStats(tester.test(mem.getClassInstances()), Util.DRL_DIRECTORY + executionSignature);
+		tester.printStats(tester.test(mem.getClassInstances()), Util.DRL_DIRECTORY + executionSignature, false);
 		//forest.test(mem.getClassInstances(), Util.DRL_DIRECTORY+executionSignature);
 		
 		//Tester bla => test(c45, mem.getClassInstances());
-		learner.getTree().setSignature(executionSignature);
-		return learner.getTree();
+		forest.getTree().setSignature(executionSignature);
+		return forest.getTree();
 	}
 	
 	public static DecisionTree createBoostedC45E(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
@@ -146,88 +148,369 @@
 		//forest.clearForest(10);
 
 		BoostedTester tester = new BoostedTester(forest.getTrees(), forest.getAccuracies());
-		tester.printStats(tester.test(mem.getClassInstances()), Util.DRL_DIRECTORY + executionSignature);
+		tester.printStats(tester.test(mem.getClassInstances()), Util.DRL_DIRECTORY + executionSignature, false);
 		//forest.test(mem.getClassInstances(), Util.DRL_DIRECTORY+executionSignature);
 		
 		//Tester bla => test(c45, mem.getClassInstances());
-		learner.getTree().setSignature(executionSignature);
-		return learner.getTree();
+		forest.getTree().setSignature(executionSignature);
+		return forest.getTree();
 	}
 	
-	public static DecisionTree createSingleC45E_StoppingCriteria(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+	public static DecisionTree createSingleC45E_Stopped(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
 		return createSingleC45_Stop(wm, obj_class, new Entropy());
 	}
 	
-//	public static DecisionTree createSingleC45G(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
-//		return createSingleC45(wm, obj_class, new GainRatio());
-//	}
+	public static DecisionTree createSingleC45G_Stopped(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+		return createSingleC45(wm, obj_class, new GainRatio());
+	}
 	
 	protected static DecisionTree createSingleC45_Stop(WorkingMemory wm, Class<? extends Object> obj_class, Heuristic h) throws FeatureNotSupported {
 		DataType data = Learner.DEFAULT_DATA;
-		ArrayList<StoppingCriterion> stopping_criteria = new ArrayList<StoppingCriterion>();
-		stopping_criteria.add(new EstimatedNodeSize(0.5));
-		C45Learner learner = new C45Learner(h, stopping_criteria);
+
+		C45Learner learner = new C45Learner(h);
+		learner.addStoppingCriteria(new EstimatedNodeSize(0.5));
+		
 		SingleTreeBuilder single_builder = new SingleTreeBuilder();
 		
-//		String algo_suffices = org.drools.learner.deprecated.DecisionTreeFactory.getAlgoSuffices(learner.getDomainAlgo(), single_builder.getTreeAlgo());
-//		String executionSignature = org.drools.learner.deprecated.DecisionTreeFactory.getSignature(obj_class, "", algo_suffices);
 		String algo_suffices = DecisionTreeFactory.getAlgoSuffices(learner.getDomainAlgo(), single_builder.getTreeAlgo());
 		String executionSignature = DecisionTreeFactory.getSignature(obj_class, "", algo_suffices);
 		
 		/* create the memory */
 		Memory mem = Memory.createFromWorkingMemory(wm, obj_class, learner.getDomainAlgo(), data);
+
+		int max_depth = (int)((mem.getClassInstances().getSchema().getAttrNames().size() - 1)*0.70 );
+		learner.addStoppingCriteria(new MaximumDepth(max_depth));
+
 		single_builder.build(mem, learner);//obj_class, target_attr, working_attr
 		
-		SingleTreeTester tester = new SingleTreeTester(learner.getTree());
-		tester.printStats(tester.test(mem.getClassInstances()), Util.DRL_DIRECTORY + executionSignature);
+		SingleTreeTester tester = new SingleTreeTester(single_builder.getTree());
+		tester.printStats(tester.test(mem.getClassInstances()), Util.DRL_DIRECTORY + executionSignature, false);
+		
 		//Tester.test(c45, mem.getClassInstances());
+		tester.printStopping(learner.getStoppingCriteria(), Util.DRL_DIRECTORY +executionSignature);
+
 		
-		learner.getTree().setSignature(executionSignature);
-		return learner.getTree();
+		single_builder.getTree().setSignature(executionSignature);
+		return single_builder.getTree();
 	}
 	
-	public static DecisionTree createSingleCrossPrunnedStopC45E(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+	
+	public static DecisionTree createSingleC45E_StoppedTest(WorkingMemory wm, WorkingMemory wm_test, Class<? extends Object> obj_class) throws FeatureNotSupported {
+		return createSingleC45_StopTest(wm, wm_test, obj_class, new Entropy());
+	}
+	
+	protected static DecisionTree createSingleC45_StopTest(WorkingMemory wm, WorkingMemory wm_test, Class<? extends Object> obj_class, Heuristic h) throws FeatureNotSupported {
+		DataType data = Learner.DEFAULT_DATA;
+
+		C45Learner learner = new C45Learner(h);
+		learner.addStoppingCriteria(new EstimatedNodeSize(0.5));
 		
-		ArrayList<StoppingCriterion> stopping_criteria = new ArrayList<StoppingCriterion>();
-		stopping_criteria.add(new EstimatedNodeSize(0.05));
-		return createSinglePrunnedC45(wm, obj_class, new Entropy(), new CrossValidation(10), stopping_criteria);
+		SingleTreeBuilder single_builder = new SingleTreeBuilder();
+		
+		String algo_suffices = DecisionTreeFactory.getAlgoSuffices(learner.getDomainAlgo(), single_builder.getTreeAlgo());
+		String executionSignature = DecisionTreeFactory.getSignature(obj_class, "", algo_suffices);
+		
+		/* create the memory */
+		Memory mem = Memory.createFromWorkingMemory(wm, obj_class, learner.getDomainAlgo(), data);
+
+		int max_depth = (int)((mem.getClassInstances().getSchema().getAttrNames().size() - 1)*0.70 );
+		learner.addStoppingCriteria(new MaximumDepth(max_depth));
+
+		single_builder.build(mem, learner);//obj_class, target_attr, working_attr
+		
+		SingleTreeTester tester = new SingleTreeTester(single_builder.getTree());
+		tester.printStats(tester.test(mem.getClassInstances()), Util.DRL_DIRECTORY + executionSignature, false);
+		
+		//Tester.test(c45, mem.getClassInstances());
+		tester.printStopping(learner.getStoppingCriteria(), Util.DRL_DIRECTORY +executionSignature);
+		
+		Memory test_mem = Memory.createTestFromWorkingMemory(mem, wm_test, obj_class, learner.getDomainAlgo(), data);
+		tester.printStats(tester.test(test_mem.getClassInstances()), Util.DRL_DIRECTORY + executionSignature, true);
+		
+		single_builder.getTree().setSignature(executionSignature);
+		return single_builder.getTree();
 	}
-	public static DecisionTree createSingleCrossPrunnedStopC45G(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
-		ArrayList<StoppingCriterion> stopping_criteria = new ArrayList<StoppingCriterion>();
-		stopping_criteria.add(new EstimatedNodeSize(0.05));
-		return createSinglePrunnedC45(wm, obj_class, new GainRatio(), new CrossValidation(10), stopping_criteria);
+	
+	public static DecisionTree createSingleC45E_Test(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+		return createSingleC45_Test(wm, obj_class, new Entropy());
 	}
+	public static DecisionTree createSingleC45G_Test(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+		return createSingleC45_Test(wm, obj_class, new GainRatio());
+	}
 	
-	public static DecisionTree createSingleTestPrunnedStopC45E(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+	protected static DecisionTree createSingleC45_Test(WorkingMemory wm, Class<? extends Object> obj_class, Heuristic h) throws FeatureNotSupported {
+		DataType data = Learner.DEFAULT_DATA;
+
+		C45Learner learner = new C45Learner(h);
+		//learner.addStoppingCriteria(new EstimatedNodeSize(0.5));
 		
-		ArrayList<StoppingCriterion> stopping_criteria = new ArrayList<StoppingCriterion>();
-		stopping_criteria.add(new EstimatedNodeSize(0.05));
-		return createSinglePrunnedC45(wm, obj_class, new Entropy(), new TestSample(0.2d), stopping_criteria);
+		SingleTreeBuilder single_builder = new SingleTreeBuilder();
+		single_builder.setTrainRatio(Util.DEFAULT_TRAINING_RATIO);
+		single_builder.setTestRatio(Util.DEFAULT_TESTING_RATIO);
+		
+		String algo_suffices = DecisionTreeFactory.getAlgoSuffices(learner.getDomainAlgo(), single_builder.getTreeAlgo());
+		String executionSignature = DecisionTreeFactory.getSignature(obj_class, "", algo_suffices);
+		
+		/* create the memory */
+		Memory mem = Memory.createFromWorkingMemory(wm, obj_class, learner.getDomainAlgo(), data);
+
+		int max_depth = (int)((mem.getClassInstances().getSchema().getAttrNames().size() - 1)*0.70 );
+		//learner.addStoppingCriteria(new MaximumDepth(max_depth));
+
+		single_builder.build(mem, learner);//obj_class, target_attr, working_attr
+		single_builder.printResults(executionSignature);
+		single_builder.printLatex(executionSignature);
+		
+		SingleTreeTester.printStopping(learner.getStoppingCriteria(), Util.DRL_DIRECTORY +executionSignature);
+		
+		single_builder.getTree().setSignature(executionSignature);
+		return single_builder.getTree();
 	}
-	public static DecisionTree createSingleTestPrunnedStopC45G(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
-		ArrayList<StoppingCriterion> stopping_criteria = new ArrayList<StoppingCriterion>();
-		stopping_criteria.add(new EstimatedNodeSize(0.05));
-		return createSinglePrunnedC45(wm, obj_class, new GainRatio(), new TestSample(0.2), stopping_criteria);
+	
+	
+	public static DecisionTree createSingleC45E_StoppedTest(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+		return createSingleC45_StopTest(wm, obj_class, new Entropy());
 	}
+	public static DecisionTree createSingleC45G_StoppedTest(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+		return createSingleC45_StopTest(wm, obj_class, new GainRatio());
+	}
 	
-	public static DecisionTree createSingleCVPrunnedC45E(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+	protected static DecisionTree createSingleC45_StopTest(WorkingMemory wm, Class<? extends Object> obj_class, Heuristic h) throws FeatureNotSupported {
+		DataType data = Learner.DEFAULT_DATA;
+
+		C45Learner learner = new C45Learner(h);
+		learner.addStoppingCriteria(new EstimatedNodeSize(0.5));
+		learner.addStoppingCriteria(new ImpurityDecrease());
 		
-		ArrayList<StoppingCriterion> stopping_criteria = new ArrayList<StoppingCriterion>();
-		//stopping_criteria.add(new EstimatedNodeSize(0.05));
-		return createSinglePrunnedC45(wm, obj_class, new Entropy(), new CrossValidation(10), stopping_criteria);
+		SingleTreeBuilder single_builder = new SingleTreeBuilder();
+		single_builder.setTrainRatio(Util.DEFAULT_TRAINING_RATIO);
+		single_builder.setTestRatio(Util.DEFAULT_TESTING_RATIO);
+		
+		String algo_suffices = DecisionTreeFactory.getAlgoSuffices(learner.getDomainAlgo(), single_builder.getTreeAlgo());
+		String executionSignature = DecisionTreeFactory.getSignature(obj_class, "", algo_suffices);
+		
+		/* create the memory */
+		Memory mem = Memory.createFromWorkingMemory(wm, obj_class, learner.getDomainAlgo(), data);
+
+		int max_depth = (int)((mem.getClassInstances().getSchema().getAttrNames().size() - 1)*0.85 );
+		learner.addStoppingCriteria(new MaximumDepth(max_depth));
+
+		single_builder.build(mem, learner);//obj_class, target_attr, working_attr
+		single_builder.printResults(executionSignature);
+		single_builder.printLatex(executionSignature);
+		
+		SingleTreeTester.printStopping(learner.getStoppingCriteria(), Util.DRL_DIRECTORY +executionSignature);
+		
+		single_builder.getTree().setSignature(executionSignature);
+		return single_builder.getTree();
 	}
-	public static DecisionTree createSingleCVPrunnedC45G(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
-		ArrayList<StoppingCriterion> stopping_criteria = new ArrayList<StoppingCriterion>();
-		//stopping_criteria.add(new EstimatedNodeSize(0.05));
-		return createSinglePrunnedC45(wm, obj_class, new GainRatio(), new CrossValidation(10), stopping_criteria);
+	
+	public static DecisionTree createBaggC45E_Test(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+		return createBaggC45_Test(wm, obj_class, new Entropy());
 	}
+	public static DecisionTree createBaggC45G_Test(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+		return createBaggC45_Test(wm, obj_class, new GainRatio());
+	}
 	
-	protected static DecisionTree createSinglePrunnedC45(WorkingMemory wm, Class<? extends Object> obj_class, Heuristic h, ErrorEstimate validater, ArrayList<StoppingCriterion> stopping_criteria) throws FeatureNotSupported {
+	protected static DecisionTree createBaggC45_Test(WorkingMemory wm, Class<? extends Object> obj_class, Heuristic h) throws FeatureNotSupported {
 		DataType data = Learner.DEFAULT_DATA;
 
-		C45Learner learner = new C45Learner(h, stopping_criteria);
+		C45Learner learner = new C45Learner(h);
+		//learner.addStoppingCriteria(new EstimatedNodeSize(0.5));
 		
+		ForestBuilder forest = new ForestBuilder();
+		forest.setTrainRatio(Util.DEFAULT_TRAINING_RATIO);
+		forest.setTestRatio(Util.DEFAULT_TESTING_RATIO);
+		
+		String algo_suffices = DecisionTreeFactory.getAlgoSuffices(learner.getDomainAlgo(), forest.getTreeAlgo());
+		String executionSignature = DecisionTreeFactory.getSignature(obj_class, "", algo_suffices);
+		
+		/* create the memory */
+		Memory mem = Memory.createFromWorkingMemory(wm, obj_class, learner.getDomainAlgo(), data);
+		
+		int max_depth = (int)((mem.getClassInstances().getSchema().getAttrNames().size() - 1)*0.70 );
+		//learner.addStoppingCriteria(new MaximumDepth(max_depth));
+		
+		forest.build(mem, learner);
+		forest.printResults(executionSignature);
+		forest.printLatex(executionSignature);
+		
+		SingleTreeTester.printStopping(learner.getStoppingCriteria(), Util.DRL_DIRECTORY +executionSignature);
+		
+		forest.getTree().setSignature(executionSignature);
+		return forest.getTree();
+	}
+	
+	
+	public static DecisionTree createBaggC45E_StoppedTest(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+		return createBaggC45_StopTest(wm, obj_class, new Entropy());
+	}
+	public static DecisionTree createBaggC45G_StoppedTest(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+		return createBaggC45_StopTest(wm, obj_class, new GainRatio());
+	}
+	
+	protected static DecisionTree createBaggC45_StopTest(WorkingMemory wm, Class<? extends Object> obj_class, Heuristic h) throws FeatureNotSupported {
+		DataType data = Learner.DEFAULT_DATA;
+
+		C45Learner learner = new C45Learner(h);
+		learner.addStoppingCriteria(new EstimatedNodeSize(0.5));
+		learner.addStoppingCriteria(new ImpurityDecrease());
+		
+		ForestBuilder forest = new ForestBuilder();
+		forest.setTrainRatio(Util.DEFAULT_TRAINING_RATIO);
+		forest.setTestRatio(Util.DEFAULT_TESTING_RATIO);
+		
+		String algo_suffices = DecisionTreeFactory.getAlgoSuffices(learner.getDomainAlgo(), forest.getTreeAlgo());
+		String executionSignature = DecisionTreeFactory.getSignature(obj_class, "", algo_suffices);
+		
+		/* create the memory */
+		Memory mem = Memory.createFromWorkingMemory(wm, obj_class, learner.getDomainAlgo(), data);
+		
+		int max_depth = (int)((mem.getClassInstances().getSchema().getAttrNames().size() - 1)*0.70 );
+		learner.addStoppingCriteria(new MaximumDepth(max_depth));
+		
+		forest.build(mem, learner);
+		forest.printResults(executionSignature);	
+		forest.printLatex(executionSignature);
+		
+		SingleTreeTester.printStopping(learner.getStoppingCriteria(), Util.DRL_DIRECTORY +executionSignature);
+		
+		forest.getTree().setSignature(executionSignature);
+		return forest.getTree();
+	}
+	
+	public static DecisionTree createBoostedC45E_Test(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+		return createBoostedC45_Test(wm, obj_class, new Entropy());
+	}
+	public static DecisionTree createBoostedC45G_Test(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+		return createBoostedC45_Test(wm, obj_class, new GainRatio());
+	}
+	
+	public static DecisionTree createBoostedC45_Test(WorkingMemory wm, Class<? extends Object> obj_class, Heuristic h) throws FeatureNotSupported {
+		DataType data = Learner.DEFAULT_DATA;
+
+		C45Learner learner = new C45Learner(h);
+		//learner.addStoppingCriteria(new EstimatedNodeSize(0.5));
+		AdaBoostBuilder forest = new AdaBoostBuilder();
+		forest.setTrainRatio(Util.DEFAULT_TRAINING_RATIO);
+		forest.setTestRatio(Util.DEFAULT_TESTING_RATIO);
+		
+		String algo_suffices = DecisionTreeFactory.getAlgoSuffices(learner.getDomainAlgo(), forest.getTreeAlgo());
+		String executionSignature = DecisionTreeFactory.getSignature(obj_class, "", algo_suffices);
+
+		
+		/* create the memory */
+		Memory mem = Memory.createFromWorkingMemory(wm, obj_class, learner.getDomainAlgo(), data);
+		int max_depth = (int)((mem.getClassInstances().getSchema().getAttrNames().size() - 1)*0.70 );
+		//learner.addStoppingCriteria(new MaximumDepth(max_depth));
+		
+		forest.build(mem, learner);
+
+		forest.printResults(executionSignature);
+		forest.printLatex(executionSignature);
+		
+		SingleTreeTester.printStopping(learner.getStoppingCriteria(), Util.DRL_DIRECTORY +executionSignature);
+		
+		//Tester bla => test(c45, mem.getClassInstances());
+		forest.getTree().setSignature(executionSignature);
+		return forest.getTree();
+	}
+	
+	public static DecisionTree createBoostedC45E_StopTest(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+		return createBoostedC45_StopTest(wm, obj_class, new Entropy());
+	}
+	public static DecisionTree createBoostedC45G_StopTest(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+		return createBoostedC45_StopTest(wm, obj_class, new GainRatio());
+	}
+	
+	public static DecisionTree createBoostedC45_StopTest(WorkingMemory wm, Class<? extends Object> obj_class, Heuristic h) throws FeatureNotSupported {
+		DataType data = Learner.DEFAULT_DATA;
+
+		C45Learner learner = new C45Learner(h);
+		learner.addStoppingCriteria(new EstimatedNodeSize(0.5));
+		learner.addStoppingCriteria(new ImpurityDecrease());
+		
+		AdaBoostBuilder forest = new AdaBoostBuilder();
+		forest.setTrainRatio(Util.DEFAULT_TRAINING_RATIO);
+		forest.setTestRatio(Util.DEFAULT_TESTING_RATIO);
+		
+		String algo_suffices = DecisionTreeFactory.getAlgoSuffices(learner.getDomainAlgo(), forest.getTreeAlgo());
+		String executionSignature = DecisionTreeFactory.getSignature(obj_class, "", algo_suffices);
+
+		
+		/* create the memory */
+		Memory mem = Memory.createFromWorkingMemory(wm, obj_class, learner.getDomainAlgo(), data);
+		int max_depth = (int)((mem.getClassInstances().getSchema().getAttrNames().size() - 1)*0.70 );
+		learner.addStoppingCriteria(new MaximumDepth(max_depth));
+		
+		forest.build(mem, learner);
+
+		forest.printResults(executionSignature);
+		forest.printLatex(executionSignature);
+		
+		SingleTreeTester.printStopping(learner.getStoppingCriteria(), Util.DRL_DIRECTORY +executionSignature);
+		
+		//Tester bla => test(c45, mem.getClassInstances());
+		forest.getTree().setSignature(executionSignature);
+		return forest.getTree();
+	}
+	
+//	public static DecisionTree createSingleCrossPrunnedStopC45E(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+//		
+//		ArrayList<StoppingCriterion> stopping_criteria = new ArrayList<StoppingCriterion>();
+//		stopping_criteria.add(new EstimatedNodeSize(0.05));
+//		return createSinglePrunnedC45(wm, obj_class, new Entropy(), new CrossValidation(10), stopping_criteria);
+//	}
+//	public static DecisionTree createSingleCrossPrunnedStopC45G(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+//		ArrayList<StoppingCriterion> stopping_criteria = new ArrayList<StoppingCriterion>();
+//		stopping_criteria.add(new EstimatedNodeSize(0.05));
+//		return createSinglePrunnedC45(wm, obj_class, new GainRatio(), new CrossValidation(10), stopping_criteria);
+//	}
+//	
+//	public static DecisionTree createSingleTestPrunnedStopC45E(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+//		
+//		ArrayList<StoppingCriterion> stopping_criteria = new ArrayList<StoppingCriterion>();
+//		stopping_criteria.add(new EstimatedNodeSize(0.05));
+//		return createSinglePrunnedC45(wm, obj_class, new Entropy(), new TestSample(0.2d), stopping_criteria);
+//	}
+//	public static DecisionTree createSingleTestPrunnedStopC45G(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+//		ArrayList<StoppingCriterion> stopping_criteria = new ArrayList<StoppingCriterion>();
+//		stopping_criteria.add(new EstimatedNodeSize(0.05));
+//		return createSinglePrunnedC45(wm, obj_class, new GainRatio(), new TestSample(0.2), stopping_criteria);
+//	}
+//	
+//	public static DecisionTree createSingleCVPrunnedC45E(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+//		
+//		ArrayList<StoppingCriterion> stopping_criteria = new ArrayList<StoppingCriterion>();
+//		//stopping_criteria.add(new EstimatedNodeSize(0.05));
+//		return createSinglePrunnedC45(wm, obj_class, new Entropy(), new CrossValidation(10), stopping_criteria);
+//	}
+//	public static DecisionTree createSingleCVPrunnedC45G(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+//		ArrayList<StoppingCriterion> stopping_criteria = new ArrayList<StoppingCriterion>();
+//		//stopping_criteria.add(new EstimatedNodeSize(0.05));
+//		return createSinglePrunnedC45(wm, obj_class, new GainRatio(), new CrossValidation(10), stopping_criteria);
+//	}
+	
+	public static DecisionTree createSingleTestPrunnedC45E(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+		
+//		ArrayList<StoppingCriterion> stopping_criteria = new ArrayList<StoppingCriterion>();
+//		//stopping_criteria.add(new EstimatedNodeSize(0.05));
+		return createSinglePrunnedC45(wm, obj_class, new Entropy(), new TestSample(0.2d));
+	}
+	public static DecisionTree createSingleTestPrunnedC45G(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+//		ArrayList<StoppingCriterion> stopping_criteria = new ArrayList<StoppingCriterion>();
+//		stopping_criteria.add(new EstimatedNodeSize(0.05));
+		return createSinglePrunnedC45(wm, obj_class, new GainRatio(), new TestSample(0.2d));
+	}
+	
+	protected static DecisionTree createSinglePrunnedC45(WorkingMemory wm, Class<? extends Object> obj_class, Heuristic h, ErrorEstimate validater) throws FeatureNotSupported {
+		DataType data = Learner.DEFAULT_DATA;
+
+		C45Learner learner = new C45Learner(h);
+		learner.addStoppingCriteria(new EstimatedNodeSize(0.05));
 		SingleTreeBuilder single_builder = new SingleTreeBuilder();
+		single_builder.setTrainRatio(Util.DEFAULT_TRAINING_RATIO);
+		single_builder.setTestRatio(Util.DEFAULT_TESTING_RATIO);
 		
 //		String algo_suffices = org.drools.learner.deprecated.DecisionTreeFactory.getAlgoSuffices(learner.getDomainAlgo(), single_builder.getTreeAlgo());
 //		String executionSignature = org.drools.learner.deprecated.DecisionTreeFactory.getSignature(obj_class, "", algo_suffices);
@@ -237,25 +520,28 @@
 		/* create the memory */
 		Memory mem = Memory.createFromWorkingMemory(wm, obj_class, learner.getDomainAlgo(), data);
 		single_builder.build(mem, learner);//obj_class, target_attr, working_attr
+
+//		validater.validate(learner, mem.getClassInstances());
+//		
+//		DecisionTreePruner pruner = new DecisionTreePruner(validater);
+//		
+//		DecisionTree dt = pruner.prun_to_estimate();
 		
-		
-		validater.validate(learner, mem.getClassInstances());
-		
-		DecisionTreePruner pruner = new DecisionTreePruner(validater);
-		pruner.prun_to_estimate();
-		
 		// you should be able to get the pruned tree
 		// prun.getMinimumCostTree()
 		// prun.getOptimumCostTree()
 		
-		// test the tree
-		SingleTreeTester tester = new SingleTreeTester(learner.getTree());
-		tester.printStats(tester.test(mem.getClassInstances()), Util.DRL_DIRECTORY + executionSignature);
 		
+		single_builder.printResults(executionSignature);
+		single_builder.printLatex(executionSignature);
+		single_builder.printLatex2(executionSignature);
+		
+		SingleTreeTester.printStopping(learner.getStoppingCriteria(), Util.DRL_DIRECTORY +executionSignature);
+		
 		/* Once Talpha is found the tree that is finally suggested for use is that 
 		 * which minimises the cost-complexity using and all the data use the pruner to prun the tree
 		 */
-		pruner.prun_tree(learner.getTree());
+		//pruner.prun_tree(single_builder.getTree());
 		
 		
 		// test the tree again
@@ -263,8 +549,8 @@
 		
 		//Tester.test(c45, mem.getClassInstances());
 		
-		learner.getTree().setSignature(executionSignature);
-		return learner.getTree();
+		single_builder.getTree().setSignature(executionSignature);
+		return single_builder.getTree();
 	}
 	
 	

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/ForestBuilder.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/ForestBuilder.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/ForestBuilder.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -5,6 +5,8 @@
 import org.drools.learner.DecisionTree;
 import org.drools.learner.InstanceList;
 import org.drools.learner.Memory;
+import org.drools.learner.Stats;
+import org.drools.learner.StatsPrinter;
 import org.drools.learner.tools.LoggerFactory;
 import org.drools.learner.tools.SimpleLogger;
 import org.drools.learner.tools.Util;
@@ -12,23 +14,40 @@
 public class ForestBuilder implements DecisionTreeBuilder{
 
 	private static SimpleLogger flog = LoggerFactory.getUniqueFileLogger(ForestBuilder.class, SimpleLogger.DEFAULT_LEVEL);
-	private static SimpleLogger slog = LoggerFactory.getSysOutLogger(ForestBuilder.class, SimpleLogger.DEBUG);
+	private static SimpleLogger slog = LoggerFactory.getSysOutLogger(ForestBuilder.class, SimpleLogger.DEFAULT_LEVEL);
 	
 	private TreeAlgo algorithm = TreeAlgo.BAG; // default bagging, TODO boosting
 	
-	private static final int FOREST_SIZE = 50;
+	private double trainRatio = Util.TRAINING_RATIO, testRatio = Util.TESTING_RATIO;
+	
+	private static final int FOREST_SIZE = Util.NUM_TREES;
 	private static final double TREE_SIZE_RATIO = 0.9;
 	private static final boolean WITH_REP = true;
 	
 	private ArrayList<DecisionTree> forest;
 	//private Learner trainer;
 	
+	private DecisionTree best;
+	
 	private DecisionTreeMerger merger;
+	private ForestTester tester;
+//	private SingleTreeTester single_tester;
 	
+	private ArrayList<Stats> train_evaluation, test_evaluation;
+	
 	public ForestBuilder() {
 		//this.trainer = _trainer;
 		merger = new DecisionTreeMerger();
+		train_evaluation = new ArrayList<Stats>(FOREST_SIZE);
+		test_evaluation = new ArrayList<Stats>(FOREST_SIZE);
 	}
+	
+	public void setTrainRatio(double ratio) {
+		trainRatio = ratio;
+	}
+	public void setTestRatio(double ratio) {
+		testRatio = ratio;
+	}
 	public void build(Memory mem, Learner _trainer) {
 		
 		final InstanceList class_instances = mem.getClassInstances();
@@ -42,13 +61,26 @@
 			// TODO put the feature not supported exception || implement it
 		}
 	
-		int N = class_instances.getSize();
-		// _trainer.setTrainingDataSize(N); => wrong
+		int split_idx =  (int)(trainRatio * class_instances.getSize());
+		int split_idx2 =  split_idx + (int)(testRatio * class_instances.getSize());
+		
+		InstanceList train_instances = class_instances.subList(0, split_idx);
+		InstanceList test_instances = class_instances.subList(split_idx, split_idx2);//class_instances.getSize());
+		
+		
+		int N = train_instances.getSize();
 		int tree_capacity = (int)(TREE_SIZE_RATIO * N);
 		_trainer.setTrainingDataSizePerTree(tree_capacity);
-		
 		/* tree_capacity number of data fed to each tree, there are FOREST_SIZE trees*/
 		_trainer.setTrainingDataSize(tree_capacity * FOREST_SIZE); 
+		
+//		int N = class_instances.getSize();
+//		// _trainer.setTrainingDataSize(N); => wrong
+//		int tree_capacity = (int)(TREE_SIZE_RATIO * N);
+//		_trainer.setTrainingDataSizePerTree(tree_capacity);
+//		
+//		/* tree_capacity number of data fed to each tree, there are FOREST_SIZE trees*/
+//		_trainer.setTrainingDataSize(tree_capacity * FOREST_SIZE); 
 
 		
 		forest = new ArrayList<DecisionTree> (FOREST_SIZE);
@@ -60,11 +92,13 @@
 			else
 				bag = Util.bag_wo_rep(tree_capacity, N);
 			
-			InstanceList working_instances = class_instances.getInstances(bag);		
+			//InstanceList working_instances = class_instances.getInstances(bag);	
+			InstanceList working_instances = train_instances.getInstances(bag);	
 			
+			DecisionTree dt = _trainer.instantiate_tree();
 			if (slog.debug() != null)
 				slog.debug().log("\n"+"Training a tree"+"\n");
-			DecisionTree dt = _trainer.train_tree(working_instances);
+			_trainer.train_tree(dt, working_instances);
 			if (slog.debug() != null)
 				slog.debug().log("\n"+"the end"+ "\n");
 			dt.setID(i);
@@ -74,16 +108,28 @@
 
 			if (slog.stat() !=null)
 				slog.stat().stat(".");
+			SingleTreeTester single_tester = new SingleTreeTester(dt);
+			
+			train_evaluation.add(single_tester.test(train_instances));
+			test_evaluation.add(single_tester.test(test_instances));
 
 		}
 		
+		tester = new ForestTester(forest);
+		train_evaluation.add(tester.test(train_instances));
+		test_evaluation.add(tester.test(test_instances));
+		
 		//System.exit(0);
 		// TODO how to compute a best tree from the forest
-		DecisionTree best = merger.getBest();
+		int best_id = getMinTestId();
+		best = merger.getBest();
 		if (best == null)
-			best = forest.get(0);
-		_trainer.setBestTree(best);// forest.get(0));
+			best = forest.get(best_id);
 		
+		train_evaluation.add(train_evaluation.get(best_id));
+		test_evaluation.add(test_evaluation.get(best_id));
+		//_trainer.setBestTree(best);// forest.get(0));
+		
 		//this.c45 = dt;
 	}
 
@@ -94,6 +140,75 @@
 	public ArrayList<DecisionTree> getTrees() {
 		return forest;
 	}
+	
+	public DecisionTree getTree() {
+		return best;
+	}
+	
+	public int getMinTestId() {
+		double min = 1.0;
+		int id = -1;
+		for (int i=0; i< FOREST_SIZE; i++ ) {
+			Stats test_s=test_evaluation.get(i);
+			Stats train_s=train_evaluation.get(i);
+			double test_error = ((double)test_s.getResult(Stats.INCORRECT)/(double)test_s.getTotal());
+			double train_error = ((double)train_s.getResult(Stats.INCORRECT)/(double)train_s.getTotal());
+			if (test_error < min) {
+				min = test_error;
+				id = i;
+			} else if (test_error == min) {
+				Stats old = train_evaluation.get(id);
+				double train_old = ((double)old.getResult(Stats.INCORRECT)/(double)old.getTotal());
+				if (train_error < train_old) {
+					min = test_error;
+					id = i;
+				}
+			}
+			
+		}
+		return id;
+		
+	}
+	
+	public void printResults(String executionSignature) {
+		StringBuffer sb = new StringBuffer();
+		sb.append("#"+ Stats.getErrors());
+		for (int i =0 ; i<FOREST_SIZE; i++) {
+			sb.append(train_evaluation.get(i).print2string() + "\n");
+		}
+		sb.append( "\n\n");
+		for (int i =0 ; i<FOREST_SIZE; i++) {
+			sb.append(test_evaluation.get(i).print2string() + "\n");
+		}
+		sb.append( "\n");
+		sb.append(train_evaluation.get(FOREST_SIZE).print2string() + "\n");
+		sb.append( "\n");
+		sb.append(test_evaluation.get(FOREST_SIZE).print2string() + "\n");
+		
+		sb.append( "\n");
+		sb.append(train_evaluation.get(FOREST_SIZE+1).print2string() + "\n");
+		sb.append( "\n");
+		sb.append(test_evaluation.get(FOREST_SIZE+1).print2string() + "\n");
+		
+		StatsPrinter.print2file(sb, Util.DRL_DIRECTORY +executionSignature, false);
+	}
+	
+	public void printLatex(String executionSignature) {
+		StringBuffer sb = new StringBuffer();
+		sb.append("#"+ Stats.getErrors());
+		for (int i =0 ; i<FOREST_SIZE; i++) {
+			sb.append(train_evaluation.get(i).print4Latex() +test_evaluation.get(i).print4Latex() + "\\\\"+"\n");
+		}
+
+		sb.append( "\n");
+		sb.append(train_evaluation.get(FOREST_SIZE).print4Latex() +test_evaluation.get(FOREST_SIZE).print4Latex() +"\\\\"+"\n");
+		
+		sb.append( "\n");
+		sb.append(train_evaluation.get(FOREST_SIZE+1).print4Latex() +test_evaluation.get(FOREST_SIZE+1).print4Latex()+"\\\\"+ "\n");
+		sb.append( "\n");
+		
+		StatsPrinter.print2file(sb, Util.DRL_DIRECTORY +executionSignature, true);
+	}
 }
 
 

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/ForestTester.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/ForestTester.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/ForestTester.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -78,8 +78,8 @@
 		return winner;
 		
 	}
-	public void printStats(final Stats evaluation, String executionSignature) {
-		super.printStats(evaluation, executionSignature);
+	public void printStats(final Stats evaluation, String executionSignature, boolean append) {
+		super.printStats(evaluation, executionSignature, append);
 	}
 
 }

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/Learner.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/Learner.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/Learner.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -1,5 +1,6 @@
 package org.drools.learner.builder;
 
+import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.Iterator;
 
@@ -9,13 +10,14 @@
 import org.drools.learner.InstanceList;
 import org.drools.learner.TreeNode;
 import org.drools.learner.eval.InstDistribution;
+import org.drools.learner.eval.stopping.StoppingCriterion;
 import org.drools.learner.tools.LoggerFactory;
 import org.drools.learner.tools.SimpleLogger;
 
 public abstract class Learner {
 	
 	protected static SimpleLogger flog = LoggerFactory.getUniqueFileLogger(Learner.class, SimpleLogger.DEFAULT_LEVEL);
-	protected static SimpleLogger slog = LoggerFactory.getSysOutLogger(Learner.class, SimpleLogger.DEBUG);
+	protected static SimpleLogger slog = LoggerFactory.getSysOutLogger(Learner.class, SimpleLogger.DEFAULT_LEVEL);
 	
 	public static enum DomainAlgo { CATEGORICAL, QUANTITATIVE }
 	public static DomainAlgo DEFAULT_DOMAIN = DomainAlgo.QUANTITATIVE;
@@ -23,22 +25,48 @@
 	public static enum DataType {PRIMITIVE, STRUCTURED, COLLECTION}
 	public static DataType DEFAULT_DATA = DataType.PRIMITIVE;
 	private int data_size, data_size_per_tree;
-	private DecisionTree best_tree;
+	
+	// must be deleted, goes to builder	
+//	private DecisionTree best_tree;
 	private InstanceList input_data;
 	protected HashSet<Instance> missclassified_data;
 	
 
 	private DomainAlgo algorithm;
 	
+	protected ArrayList<StoppingCriterion> criteria; 
 	
+	
 	protected abstract TreeNode train(DecisionTree dt, InstDistribution data_stats, int depth);
 	
 	public Learner() {
 		this.data_size = 0;
 		this.data_size_per_tree = 0;
+		
+		criteria = new ArrayList<StoppingCriterion>(4);
 	}
 
 	
+	public DecisionTree instantiate_tree() {
+		String target_reference = this.getTargetDomain().getFReferenceName();
+		//System.out.println("(Learner) target   "+ target_reference);
+		DecisionTree dt = new DecisionTree(input_data.getSchema(), target_reference);
+
+		//flog.debug("Num of attributes: "+ dt.getAttrDomains().size());
+		return dt;
+	}	
+	public void train_tree(DecisionTree dt, InstanceList working_instances) {
+		InstDistribution stats_by_class = new InstDistribution(dt.getTargetDomain());
+		stats_by_class.calculateDistribution(working_instances.getInstances());
+
+		dt.FACTS_READ += working_instances.getSize();
+
+		TreeNode root = train(dt, stats_by_class, 0);
+		dt.setRoot(root);
+		//flog.debug("Result tree\n" + dt);
+//		return dt;
+	}
+	
 	public DecisionTree train_tree(InstanceList working_instances) {
 		String target_reference = this.getTargetDomain().getFReferenceName();
 		//System.out.println("(Learner) target   "+ target_reference);
@@ -85,7 +113,13 @@
 		}
 		return dt;
 	}
+	public ArrayList<StoppingCriterion> getStoppingCriteria() {
+		return criteria;
+	}
 	
+	public void addStoppingCriteria(StoppingCriterion _criteria) {
+		criteria.add(_criteria);
+	}
 	
 	public void setTrainingDataSizePerTree(int num) {
 		this.data_size_per_tree = num;
@@ -103,10 +137,10 @@
 	public int getTrainingDataSize() {
 		return this.data_size;
 	}
-	
-	public DecisionTree getTree() {
-		return best_tree;
-	}
+// must be deleted, goes to builder	
+//	public DecisionTree getTree() {
+//		return best_tree;
+//	}
 
 	public DomainAlgo getDomainAlgo() {
 		return this.algorithm;
@@ -124,8 +158,9 @@
 		return input_data;
 	}
 
-	public void setBestTree(DecisionTree dt) {
-		this.best_tree = dt;
-	}
+	// must be deleted, goes to builder	
+//	public void setBestTree(DecisionTree dt) {
+//		this.best_tree = dt;
+//	}
 
 }

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/SingleTreeBuilder.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/SingleTreeBuilder.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/SingleTreeBuilder.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -1,27 +1,48 @@
 package org.drools.learner.builder;
 
 
+import java.util.ArrayList;
+
 import org.drools.learner.DecisionTree;
+import org.drools.learner.DecisionTreePruner;
 import org.drools.learner.InstanceList;
 import org.drools.learner.Memory;
+import org.drools.learner.Stats;
+import org.drools.learner.StatsPrinter;
 import org.drools.learner.tools.LoggerFactory;
 import org.drools.learner.tools.SimpleLogger;
+import org.drools.learner.tools.Util;
 
 public class SingleTreeBuilder implements DecisionTreeBuilder{
 	
 	private static SimpleLogger flog = LoggerFactory.getUniqueFileLogger(SingleTreeBuilder.class, SimpleLogger.DEFAULT_LEVEL);
 	private static SimpleLogger slog = LoggerFactory.getSysOutLogger(SingleTreeBuilder.class, SimpleLogger.DEFAULT_LEVEL);
-
+	private boolean prune = false;
 	private TreeAlgo algorithm = TreeAlgo.SINGLE; // default bagging, TODO boosting
 	
 	private DecisionTree one_tree;
-	//private Learner trainer;
 	
+	private Stats train_evaluation, test_evaluation;
+	private Stats train_evaluation2, test_evaluation2;
+
+	private double trainRatio = Util.TRAINING_RATIO;
+	private double testRatio = Util.TESTING_RATIO;
+	
+	private SingleTreeTester tester;
+	
 	public SingleTreeBuilder() {//Learner _trainer) {
 		//this.trainer = _trainer;
 		//dom_type = trainer.getDomainType();
 	}
 	
+	public void setTrainRatio(double ratio) {
+		trainRatio = ratio;
+	}
+	
+	public void setTestRatio(double ratio) {
+		testRatio = ratio;
+	}
+	
 	/* 
 	 * the memory has the information 
 	 * the instances: the objects which the decision tree will work on
@@ -39,14 +60,87 @@
 			System.exit(0);
 			// TODO put the feature not supported exception || implement it
 		}
-		_trainer.setTrainingDataSize(class_instances.getSize());
-		_trainer.setTrainingDataSizePerTree(class_instances.getSize());
-		one_tree = _trainer.train_tree(class_instances);
-		_trainer.setBestTree(one_tree);
+		int split_idx =  (int)(trainRatio * class_instances.getSize());
+		int split_idx2 =  split_idx + (int)(testRatio * class_instances.getSize());
+		
+		InstanceList train_instances = class_instances.subList(0, split_idx);
+		InstanceList test_instances = class_instances.subList(split_idx, split_idx2);//class_instances.getSize());
+		
+		_trainer.setTrainingDataSize(train_instances.getSize());
+		_trainer.setTrainingDataSizePerTree(train_instances.getSize());
+		
+		one_tree = _trainer.instantiate_tree();
+		if (slog.debug() != null)
+			slog.debug().log("\n"+"Training a tree"+"\n");
+		_trainer.train_tree(one_tree, train_instances);
+		one_tree.setTrainingDataSize(train_instances.getSize());
+		one_tree.setTestingDataSize(test_instances.getSize());
+		one_tree.setTrain(train_instances);
+		one_tree.setTest(test_instances);
+
+		tester = new SingleTreeTester(one_tree);
+		
+		train_evaluation = tester.test(train_instances);
+		test_evaluation = tester.test(test_instances);
+		one_tree.setValidationError(Util.division(test_evaluation.getResult(Stats.INCORRECT), test_instances.getSize()));
+		one_tree.setTrainingError(Util.division(train_evaluation.getResult(Stats.INCORRECT), train_instances.getSize()));
+		
+		//if (prunner != null) {
+		if (prune) {
+			DecisionTreePruner pruner = new DecisionTreePruner();
+			ArrayList<DecisionTree> dts = new ArrayList<DecisionTree>(1);
+			dts.add(one_tree);
+			pruner.prun_to_estimate(dts);
+//			SingleTreeTester tester2 = new SingleTreeTester(one_tree);
+			
+			train_evaluation2 = tester.test(train_instances);
+			test_evaluation2 = tester.test(test_instances);
+			
+		}
+		
+
+		// must be deleted, goes to builder	
+		//_trainer.setBestTree(one_tree);
 	}
 	
+	public Stats getTrainStats() {
+		return train_evaluation;
+	}
+	
+	public Stats getTestStats() {
+		return test_evaluation;
+	}
+	
 	public TreeAlgo getTreeAlgo() {
 		return this.algorithm; // default
 	}
+	
+	public DecisionTree getTree() {
+		return one_tree;
+	}
 
+	public void printResults(String executionSignature) {
+		tester.printStats(getTrainStats(), Util.DRL_DIRECTORY + executionSignature, false);
+		tester.printStats(getTestStats(), Util.DRL_DIRECTORY + executionSignature, true);
+	}
+	
+	public void printLatex(String executionSignature) {
+		StringBuffer sb = new StringBuffer();
+		sb.append("#"+ Stats.getErrors());
+		sb.append( "\n");
+		sb.append(getTrainStats().print4Latex() +getTestStats().print4Latex()+"\\\\"+ "\n");
+		sb.append( "\n");
+		
+		StatsPrinter.print2file(sb, Util.DRL_DIRECTORY +executionSignature, true);
+	}
+
+	public void printLatex2(String executionSignature) {
+		StringBuffer sb = new StringBuffer();
+		sb.append("#"+ Stats.getErrors());
+		sb.append( "\n");
+		sb.append(train_evaluation2.print4Latex() +test_evaluation2.print4Latex()+"\\\\"+ "\n");
+		sb.append( "\n");
+		
+		StatsPrinter.print2file(sb, Util.DRL_DIRECTORY +executionSignature, true);
+	}
 }

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/SingleTreeTester.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/SingleTreeTester.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/SingleTreeTester.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -1,9 +1,12 @@
 package org.drools.learner.builder;
 
+import java.util.ArrayList;
+
 import org.drools.learner.DecisionTree;
 import org.drools.learner.Instance;
 import org.drools.learner.InstanceList;
 import org.drools.learner.Stats;
+import org.drools.learner.eval.stopping.StoppingCriterion;
 
 public class SingleTreeTester extends Tester{
 	
@@ -41,7 +44,8 @@
 		return evaluate(single_tree.getTargetDomain(), i, tree_decision);
 	}
 	
-	public void printStats(final Stats evaluation, String executionSignature) {
-		super.printStats(evaluation, executionSignature);
-	}
+//	public void printStats(Stats evaluation, String executionSignature, boolean append) {
+//		super.printStats(evaluation, executionSignature, append);
+//	}
+
 }

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/Tester.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/Tester.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/Tester.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -1,10 +1,18 @@
 package org.drools.learner.builder;
 
+import java.io.FileNotFoundException;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.Writer;
+import java.util.ArrayList;
+
 import org.drools.learner.AttributeValueComparator;
 import org.drools.learner.Domain;
 import org.drools.learner.Instance;
 import org.drools.learner.InstanceList;
 import org.drools.learner.Stats;
+import org.drools.learner.StatsPrinter;
+import org.drools.learner.eval.stopping.StoppingCriterion;
 import org.drools.learner.tools.Util;
 
 public abstract class Tester{
@@ -27,13 +35,43 @@
 		} 
 	}
 	
-	protected void printStats(final Stats evaluation, String executionSignature) {
-		if (Util.PRINT_STATS) {
-//			if (flog.debug() !=null)
-//				flog.debug().log(evaluation.print2string());
-			
-			evaluation.print2file(executionSignature);
+//	protected void printStats(final Stats evaluation, String executionSignature, boolean append) {
+//		if (Util.PRINT_STATS) {
+////			if (flog.debug() !=null)
+////				flog.debug().log(evaluation.print2string());
+//			
+//			evaluation.print2file(executionSignature, append);//correct
+//		}
+//	}
+	
+	protected void printStats(Stats evaluation, String executionSignature, boolean append) {
+		//PrintWriter pwr = new PrintWriter(os);
+		
+		// print the statistics of the results to a file	
+		StringBuffer sb = new StringBuffer();
+		sb.append("TESTING results: incorrect "+ evaluation.getResult(Stats.INCORRECT)+"\n");
+		sb.append("TESTING results: correct "+ evaluation.getResult(Stats.CORRECT)+"\n");
+		sb.append("TESTING results: unknown "+ evaluation.getResult(Stats.UNKNOWN)+"\n");
+		sb.append("TESTING results: Total Number "+ evaluation.getTotal());
+		
+		StatsPrinter.print2file(sb, executionSignature, append);
+	}
+	
+	public static void printStopping(ArrayList<StoppingCriterion> stoppingCriteria,
+			String executionSignature) {
+		StringBuffer sb = new StringBuffer();
+		for (StoppingCriterion sc:stoppingCriteria) {
+			sb.append("\n"+"\t&\t"+ sc.getClass().getSimpleName() );
 		}
+		sb.append("\n");
+		for (StoppingCriterion sc:stoppingCriteria) {
+			sb.append("\t&\t"+sc.getNumPruned() + "");
+		}
+		sb.append("\\\\\n");
+		StatsPrinter.print2file(sb, executionSignature, true);
+		
 	}
 
+	
+
 }

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/CrossValidation.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/CrossValidation.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/CrossValidation.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -147,8 +147,8 @@
 //		// the validation set divide = fold_size*i; divide < fold_size*(i+1)-1
 //		// last part divide = fold_size*(i+1); divide < N
 		int valid_fold_size = getTestDataSize(i);
-		InstanceList learning_set = new InstanceList(class_instances.getSchema(), num_instances - valid_fold_size +1);
-		InstanceList validation_set = new InstanceList(class_instances.getSchema(), valid_fold_size);
+		InstanceList learning_set = new InstanceList(class_instances, num_instances - valid_fold_size + 1);
+		InstanceList validation_set = new InstanceList(class_instances, valid_fold_size);
 		for (int divide_index = 0; divide_index < num_instances; divide_index++){
 			
 			if (slog.info() !=null)
@@ -193,4 +193,8 @@
 	public int getEstimatorSize() {
 		return k_fold;
 	}
+	public void setTrainingDataSize(int trainingDataSize) {
+		// TODO Auto-generated method stub
+		
+	}
 }

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/Entropy.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/Entropy.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/Entropy.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -23,6 +23,8 @@
 	 * used by:
 	 * c45Alternator, c45Learner, c45Iterator
 	 */
+	
+	protected static double multiplier = 1.0;
 	protected double data_eval; 
 	protected InstDistribution insts_by_target;
 	protected ArrayList<Instance> sorted_instances;
@@ -42,7 +44,7 @@
 	
 	public double getEval(Domain attr_domain) {
 		CondClassDistribution insts_by_attr = info_attr(attr_domain);	
-		return data_eval - Entropy.calc_info_attr(insts_by_attr);
+		return multiplier *(data_eval - Entropy.calc_info_attr(insts_by_attr));
 	}
 	
 	public double getEval_cont(Domain attr_domain) {
@@ -60,7 +62,7 @@
 		}
 		domain = trialDomain;
 		sorted_instances = visitor.getSortedInstances();
-		return attribute_eval;
+		return multiplier *attribute_eval;
 	}
 	
 	public double getDataEval() {
@@ -76,7 +78,7 @@
 	}
 
 	public double getWorstEval() {
-		return -1000;
+		return multiplier -1000;
 	}
 	
 	public CondClassDistribution info_attr(Domain attr_domain) {

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/ErrorEstimate.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/ErrorEstimate.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/ErrorEstimate.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -18,4 +18,6 @@
 	
 	public double getErrorEstimate();
 	public double getAlphaEstimate();
+
+	public void setTrainingDataSize(int trainingDataSize);
 }

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/TestSample.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/TestSample.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/TestSample.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -21,7 +21,7 @@
 	private InstanceList class_instances;
 	private double error_estimate, training_error_estimate, num_leaves_estimate, alpha_estimate;
 	private boolean WITH_REP = false;
-	private int num_instances;
+	private int num_instances, training_data_size;
 	private int[] crossed_set;
 	private double test_ratio;
 	
@@ -103,8 +103,8 @@
 //		// first part divide = 0; divide < fold_size*i
 //		// the validation set divide = fold_size*i; divide < fold_size*(i+1)-1
 //		// last part divide = fold_size*(i+1); divide < N
-		InstanceList learning_set = new InstanceList(class_instances.getSchema(), num_instances - TEST_SET_1 +1);
-		InstanceList validation_set = new InstanceList(class_instances.getSchema(), TEST_SET_1);
+		InstanceList learning_set = new InstanceList(class_instances, num_instances - TEST_SET_1 +1);
+		InstanceList validation_set = new InstanceList(class_instances, TEST_SET_1);
 		for (int divide_index = 0; divide_index < num_instances; divide_index++){
 			
 			if (slog.info() !=null)
@@ -143,10 +143,14 @@
 	}
 
 	public int getTrainingDataSize(int i) {
-		return num_instances - TEST_SET_1;
+		return training_data_size; //num_instances - TEST_SET_1;
 	}
 	public int getTestDataSize(int i) {
 		return TEST_SET_1;
 	}
 
+	public void setTrainingDataSize(int _trainingDataSize) {
+		training_data_size = _trainingDataSize;
+	}
+
 }

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/stopping/EstimatedNodeSize.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/stopping/EstimatedNodeSize.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/stopping/EstimatedNodeSize.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -7,11 +7,13 @@
 	private double outlier_percentage;
 	private int estimated_sum_branch;
 	private int num_times_branched;
+	private int num_prunned;
 	
 	
 	public EstimatedNodeSize(double o_p) {
 		outlier_percentage = o_p;
 		num_times_branched = 0;
+		num_prunned = 0;
 	}
 	
 
@@ -22,10 +24,16 @@
 		double estimated_branch = (double)estimated_sum_branch/(double)num_times_branched;
 		// N/(b^d)
 		double estimated_size = best_attr_eval.getTotalNumData()/Math.pow(estimated_branch, d);
-		System.out.println("EstimatedNodeSize:stop: " +best_attr_eval.getNumData() + " <= " + ( Math.ceil(estimated_size*outlier_percentage)-1) +" / "+estimated_size);
-		if (best_attr_eval.getNumData() <= Math.ceil(estimated_size*outlier_percentage)-1)
+		//System.out.println("EstimatedNodeSize:stop: " +best_attr_eval.getNumData() + " <= " + ( Math.ceil(estimated_size*outlier_percentage)-1) +" / "+estimated_size);
+		if (best_attr_eval.getNumData() <= Math.ceil(estimated_size*outlier_percentage)-1) {
+			num_prunned ++;
 			return true;
-		else 
+		} else {	
 			return false;
+		}
 	}
+	
+	public int getNumPruned(){
+		return num_prunned;
+	}
 }

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/stopping/ImpurityDecrease.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/stopping/ImpurityDecrease.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/stopping/ImpurityDecrease.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -5,16 +5,28 @@
 
 public class ImpurityDecrease implements StoppingCriterion {
 
-	private double beta = 0.1;
+	private double beta = 0.00001;
+	private int num_prunned;
 	
+	public ImpurityDecrease() {
+		num_prunned = 0;
+	}
+	
 	public ImpurityDecrease(double _beta) {
+		num_prunned = 0;
 		beta = _beta;
 	}
 	public boolean stop(InformationContainer best_attr_eval) {
-		if (best_attr_eval.attribute_eval < beta)
+		if (best_attr_eval.attribute_eval < beta) {
+			num_prunned ++;
 			return true;
-		else
+		} else
 			return false;
+	
 	}
+	
+	public int getNumPruned(){
+		return num_prunned;
+	}
 
 }

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/stopping/MaximumDepth.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/stopping/MaximumDepth.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/stopping/MaximumDepth.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -6,14 +6,21 @@
 public class MaximumDepth implements StoppingCriterion {
 
 	private int limit_depth;
+	private int num_prunned;
 	public MaximumDepth(int _depth) {
 		limit_depth = _depth;
+		num_prunned = 0;
 	}
 	public boolean stop(InformationContainer best_attr_eval) {
 		if (best_attr_eval.getDepth() <= limit_depth)
 			return false;
-		else 
+		else {
+			num_prunned++;
 			return true;
+		}
 	}
+	public int getNumPruned() {
+		return num_prunned;
+	}
 
 }

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/stopping/StoppingCriterion.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/stopping/StoppingCriterion.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/stopping/StoppingCriterion.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -5,5 +5,6 @@
 public interface StoppingCriterion {
 	
 	public boolean stop(InformationContainer best_attr_eval);
+	public int getNumPruned();
 
 }

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ClassVisitor.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ClassVisitor.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ClassVisitor.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -99,7 +99,7 @@
 		// can get the field annotation
 		// if it is ignored do not do anything
 		FieldAnnotation f_spec = Util.getFieldAnnotations(f);
-		boolean skip_by_annotation = false;
+		boolean skip = false, ignore_field = false;
 		if (f_spec != null) {
 			// the type of the fields that cannot be processed
 			if (!f_spec.ignore() && f.getType() == String.class && !f_spec.discrete()) {
@@ -107,17 +107,20 @@
 			}
 			switch (domain_type) {
 			case CATEGORICAL:	//ID3 can work only with categorical types
-				if (f_spec.ignore() || !f_spec.discrete())
-					skip_by_annotation = true;
+				if (f_spec.skip() || !f_spec.discrete())
+					skip = true;
 				break;
 			case QUANTITATIVE: // C45 can work with categorical || quantitative domain
-				if (f_spec.ignore())
-					skip_by_annotation = true;
+				if (f_spec.skip())
+					skip = true;
 				break;
 			default:
-				if (f_spec.ignore())
-					skip_by_annotation = true;
+				if (f_spec.skip())
+					skip = true;
 			}
+			ignore_field = f_spec.ignore();
+			if (ignore_field)
+				skip = ignore_field;
 			// only if the annotations are given and the flag to ignore is set true 
 			// then continue to next field	
 			
@@ -125,7 +128,7 @@
 		// if there is a getter?
 		//if (Util.isGetter(m_name) & Util.isSimpleType(returns)) {
 		
-		if (!skip_by_annotation) {
+		if (!skip) {
 			String f_name= f.getName();		
 			Class<?> _obj_klass = structure.getOwnerClass();
 			String f_refName = Util.getFReference(_obj_klass, f_name);
@@ -144,8 +147,8 @@
 						f_extractor = cache.getAccessor( _obj_klass, f_name , _obj_klass.getClassLoader() );
 					
 					class_schema.putExtractor(f_refName, f_extractor);
-				
 					
+					
 					structure.addField(f, d_type);	
 					switch (d_type) {    
 					case PRIMITIVE:		// domain will be created only for primitive types
@@ -159,6 +162,7 @@
 							}
 						}
 						Util.processDomain(fieldDomain, f.getType());
+						fieldDomain.ignore(ignore_field);
 						class_schema.putDomain(f_refName, fieldDomain);
 						for (Field parent_klass: class_relation)
 							class_schema.addParentField(f_refName, parent_klass);

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/FieldAnnotation.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/FieldAnnotation.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/FieldAnnotation.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -7,6 +7,7 @@
 public @interface FieldAnnotation {
 	    int readingSeq() default 0;
 	    boolean ignore() default false;
+	    boolean skip() default false;
 	    boolean target() default false;
 	    boolean discrete() default true;
 	    String[] values() default {"bok"};

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ObjectFactory.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ObjectFactory.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ObjectFactory.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -12,9 +12,13 @@
 import java.util.HashMap;
 import java.util.List;
 
+import org.drools.StatefulSession;
 
+
 public class ObjectFactory {
 	
+	private int MAX_NUM = 30012;
+	
 //	public static List<Object> getObjectsFromFile(Class<?> clazz, String filename, String separator) {
 //		
 //		ObjectFactory class_factory = new ObjectFactory(clazz);
@@ -33,6 +37,19 @@
 		return null;
 	}
 	
+	public static List<Object> insertStructuredObjects(Class<?> obj_class, StatefulSession session, String filename) {
+		ObjectFactory class_factory = new ObjectFactory(obj_class);
+		class_factory.wm = session;
+		try {
+			//return class_factory.fromFileAsObject("src/main/java/org/drools"+filename, ",");
+			return class_factory.fromFileAsStructuredObject(filename, ",");
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		return null;
+	}
+	private StatefulSession wm = null;
 	private Class<?> obj_clazz;
 	private ArrayList<Field> clazz_fields;
 	private HashMap<String,Integer> field_sequences;
@@ -75,18 +92,130 @@
 //		BufferedReader reader = new BufferedReader(new InputStreamReader(
 //				this.obj_clazz.getResourceAsStream(filename)));// "../data/"
 		String line;
-		while ((line = reader.readLine()) != null) {
+		int num = 0;
+		while ((line = reader.readLine()) != null && num < MAX_NUM) {
 			line = line.trim();
 			if (line.length() == 0)
 				break;
 			Object element = this.read(line, separator);
 			//System.out.println("New object "+ element);
 			obj_read.add(element);
+			num++;
 
 		}
 		return obj_read;
 	}
 	
+	public List<Object> fromFileAsStructuredObject(String filename, String separator) 
+	throws Exception {
+		List<Object> obj_read = new ArrayList<Object>();
+
+		/**/
+		File file =new File(filename);
+		if(!file.exists()){
+			System.out.println("where is the file ? "+ filename);
+			//System.exit(0);
+			
+			file =new File("src/main/java/org/drools/examples/learner/"+filename);
+			if(!file.exists()){
+				file =new File("drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/"+filename);
+				
+				System.out.println("where is still the file ? "+ file);
+				if(!file.exists()){
+					System.out.println("where is still still the file ? "+ file);
+					System.exit(0);
+				}
+			}
+		}
+		
+		BufferedReader reader = new BufferedReader(new FileReader(file));	
+		/**/
+		
+//		BufferedReader reader = new BufferedReader(new InputStreamReader(
+//				this.obj_clazz.getResourceAsStream(filename)));// "../data/"
+		String line;
+		while ((line = reader.readLine()) != null) {
+			line = line.trim();
+			if (line.length() == 0)
+				break;
+			if (line.endsWith("."))
+				line = line.substring(0, line.length() - 1);
+			List<String> fieldValues = Arrays.asList(line.split(separator));
+			Object element = this.readStructured(this.obj_clazz, fieldValues);
+			//System.out.println("New object "+ element);
+			obj_read.add(element);
+
+		}
+		return obj_read;
+	}
+	
+	
+	private Object readStructured(Class<?> _obj_clazz, List<String> fieldValues) throws Exception {
+		Object element = null;
+		ArrayList<Field> _clazz_fields = new ArrayList<Field>();
+		Util.getSuperFields(_obj_clazz, _clazz_fields); 
+		HashMap<String,Integer> _field_sequences = getFieldReadingSeqs(_obj_clazz, _clazz_fields);
+		try {
+			element = _obj_clazz.newInstance();			
+			
+			Method[] element_methods = _obj_clazz.getDeclaredMethods();
+			for (Method m : element_methods) {
+				String m_name = m.getName();
+				Class<?>[] param_type_name = m.getParameterTypes();
+				if (Util.isSetter(m_name)) {
+					Object fieldValue = null;;
+					if (Util.isSimpleMethod(param_type_name)) {
+						String basicFieldName = Util.getFieldName(m_name);
+
+						/* TODO dont use the basic field name as the real field name, there can be a capital/miniscul 
+						 * letter problem
+						 */
+						Field f = null;
+						for (Field _f: _clazz_fields) {
+							if (_f.getName().equalsIgnoreCase(basicFieldName)) {
+								f = _f;
+								break;
+							}			
+						}
+						if (f == null) {
+							throw new Exception("Field("+basicFieldName+") could not be found for the class("+_obj_clazz+")");
+						}
+						else {
+							//System.out.print("Field("+f.getName()+") for the class("+_obj_clazz+") " );
+							//System.out.print("seq="+_field_sequences.get(f.getName()) + " ");
+							String fieldString = fieldValues.get(_field_sequences.get(f.getName()));
+							//System.out.println("val="+fieldString);
+							fieldValue = readString(f, fieldString.trim());						
+						}
+					} else {
+						Class<?>[] param_classes = m.getParameterTypes();
+						fieldValue = readStructured(param_classes[0], fieldValues);
+						
+					}
+					
+					try {
+						m.invoke(element, fieldValue);
+					} catch (IllegalArgumentException e) {
+						// TODO Auto-generated catch block
+						e.printStackTrace();
+					} catch (InvocationTargetException e) {
+						System.out.println("invoking the method of the element e:"+element + " v:"+ fieldValue);
+
+						e.printStackTrace();
+					}
+				}
+			}
+			
+		} catch (InstantiationException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (IllegalAccessException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		wm.insert(element);
+		return element;
+	}
 	private Object read(String data, String separator) throws Exception {
 		Object element = null;
 		
@@ -104,7 +233,7 @@
 			for (Method m : element_methods) {
 				String m_name = m.getName();
 				Class<?>[] param_type_name = m.getParameterTypes();
-				if (Util.isSetter(m_name) & Util.isSimpleMethod(param_type_name)) {
+				if (Util.isSetter(m_name) && Util.isSimpleMethod(param_type_name)) {
 					String basicFieldName = Util.getFieldName(m_name);
 					
 					/* TODO dont use the basic field name as the real field name, there can be a capital/miniscul 
@@ -252,6 +381,11 @@
 	private static Object readDoubleFromString(String data) {
 		return Double.parseDouble(data);
 	}
+
+	public static void insert(StatefulSession session, Object r) {
+		session.insert(r);
+		
+	}
 	
 	
 

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ReteStatistics.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ReteStatistics.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ReteStatistics.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -0,0 +1,160 @@
+package org.drools.learner.tools;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+
+import org.drools.RuleBase;
+import org.drools.common.AbstractRuleBase;
+import org.drools.learner.StatsPrinter;
+import org.drools.learner.eval.stopping.StoppingCriterion;
+import org.drools.reteoo.AlphaNode;
+import org.drools.reteoo.InitialFactImpl;
+import org.drools.reteoo.JoinNode;
+import org.drools.reteoo.LeftTupleSink;
+import org.drools.reteoo.LeftTupleSource;
+import org.drools.reteoo.ObjectSink;
+import org.drools.reteoo.ObjectSource;
+import org.drools.reteoo.ObjectTypeNode;
+import org.drools.reteoo.Rete;
+import org.drools.reteoo.ReteooRuleBase;
+import org.drools.reteoo.RuleTerminalNode;
+
+public class ReteStatistics {
+	private String[] nodes = {"OBJECT_TYPE_NODE", "ALPHA_NODE", "BETA_NODE", "TERMINAL_NODE"};
+	
+	private final int OBJECT_TYPE_NODE_INDEX = 0;
+	private final int ALPHA_NODE_INDEX = 1;
+	private final int BETA_NODE_INDEX = 2;
+	private final int TERMINAL_NODE_INDEX = 3;
+	
+	private int []num_of_nodes;
+	private ReteooRuleBase reteRuleBase;
+	
+	private HashSet<Object> visitedNodes;
+	public ReteStatistics(RuleBase ruleBase) {
+		reteRuleBase = (ReteooRuleBase)ruleBase;
+		
+		num_of_nodes = new int[TERMINAL_NODE_INDEX + 1];
+		visitedNodes = new HashSet<Object>();
+	}
+	
+	public void calculateNumberOfNodes() {
+		
+//		AbstractRuleBase aruleBase = (AbstractRuleBase)ruleBase;
+//        ReteooRuleBase reteRuleBase = (ReteooRuleBase)ruleBase;
+        Rete root = reteRuleBase.getRete();   
+        //List<ObjectTypeNode> objectTypesNodes = root.getObjectTypeNodes();
+        //int num_object_type_nodes =0;
+        for (ObjectTypeNode o_type_node : root.getObjectTypeNodes()) {
+        	
+        	//ObjectSink[] objectSinks = otn.getSinkPropagator().getSinks();
+ //       	System.out.println("calculateNumberOfNodes:ObjectTypeNode "+ o_type_node);
+//        	if (o_type_node.getObjectType().matches(InitialFactImpl.class))
+//        		continue;
+        	//num_object_type_nodes ++;
+        	recurseObjectSource(o_type_node);
+        }
+        
+//        System.out.println("num_object_type_nodes "+ num_of_nodes[OBJECT_TYPE_NODE_INDEX]);
+        //num_of_nodes[OBJECT_TYPE_NODE_INDEX] = num_object_type_nodes;
+
+	}
+	
+	public void recurseObjectSource(ObjectSource o_source) {
+		
+//		System.out.println("recurseObjectSource:1stObjectSource "+o_source);
+		if (o_source.getSinkPropagator().getSinks().length != 0 && o_source instanceof ObjectTypeNode) {
+			if (!visitedNodes.contains(o_source)) {
+				visitedNodes.add(o_source);
+				num_of_nodes[OBJECT_TYPE_NODE_INDEX] ++;
+			}
+		}
+		if (o_source instanceof AlphaNode) {
+			if (!visitedNodes.contains(o_source)) {
+				visitedNodes.add(o_source);
+				num_of_nodes[ALPHA_NODE_INDEX] ++;
+			}
+			
+		}
+		
+
+		for (ObjectSink o_sink: o_source.getSinkPropagator().getSinks()) {
+//			System.out.println("recurseObjectSource:iterate:ObjectSink "+o_sink);
+    		if (o_sink instanceof ObjectSource) {
+    			ObjectSource new_os = (ObjectSource) o_sink;
+//    			System.out.println("recurseObjectSource:2ndObjectSource "+new_os);
+    			recurseObjectSource(new_os);
+    			
+    		} else if (o_sink instanceof LeftTupleSource) {
+    			LeftTupleSource new_lts = (LeftTupleSource) o_sink;
+ //   			System.out.println("recurseObjectSource:LeftTupleSource "+new_lts);
+    			recurseLeftTupleSource(new_lts);
+			} else {
+				System.out.println("System.exitrecurseObjectSource: what is it "+o_sink);
+    			System.exit(0);
+				
+			}
+    	}//
+	}
+	public void recurseLeftTupleSource(LeftTupleSource lt_source) {
+		
+		
+		for (LeftTupleSink lt_sink: lt_source.getSinkPropagator().getSinks()) {
+//			System.out.println("recurseLeftTupleSource:LeftTupleSink "+lt_sink);
+			//lt_sink.
+    		if (lt_sink instanceof RuleTerminalNode) {
+    			RuleTerminalNode new_rtn = (RuleTerminalNode) lt_sink;
+    			//num_of_nodes[TERMINAL_NODE_INDEX] ++;
+    			
+    			if (!visitedNodes.contains(lt_sink)) {
+    				visitedNodes.add(lt_sink);
+    				num_of_nodes[TERMINAL_NODE_INDEX] ++;
+    			}
+  //  			System.out.println("recurseLeftTupleSource:RuleTerminalNode "+new_rtn + " terminal");
+    			return;
+    			//recurseObjectSource(new_os);
+    			
+    		} else if (lt_sink instanceof JoinNode) {
+    			JoinNode new_join = (JoinNode) lt_sink;
+    			if (!visitedNodes.contains(lt_sink)) {
+    				visitedNodes.add(lt_sink);
+    				num_of_nodes[BETA_NODE_INDEX] ++;
+    			}
+    			//num_of_nodes[BETA_NODE_INDEX] ++;
+    			recurseLeftTupleSource(new_join);
+			} else {
+    			//LeftTupleSource new_lts = (LeftTupleSource) lt_sink;
+    			System.out.println("System.exitrecurseLeftTupleSource: what is it "+lt_sink);
+    			System.exit(0);
+    			
+			}
+    	}
+	}
+
+	public void print() {
+		for (int i: num_of_nodes)
+			System.out.print(i +"\t");
+		
+	}
+	
+	public void print(String executionSignature) {
+		StringBuffer sb = new StringBuffer();
+
+		for (int i=0; i< num_of_nodes.length; i++) {
+			int num =num_of_nodes[i];
+			sb.append("\t&\t" +nodes[i]);
+		}
+		sb.append("\n");
+		for (int i=0; i< num_of_nodes.length; i++) {
+			int num =num_of_nodes[i];
+			sb.append("\t&\t" +num + "");
+		}
+		sb.append("\\\\\n");
+
+
+		StatsPrinter.print2file(sb, executionSignature, true);
+		
+	}
+
+
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ReteStatistics.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/RulePrinter.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/RulePrinter.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/RulePrinter.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -22,7 +22,7 @@
 public class RulePrinter {
 	
 	private static SimpleLogger flog = LoggerFactory.getUniqueFileLogger(RulePrinter.class, SimpleLogger.WARN);
-	private static SimpleLogger slog = LoggerFactory.getSysOutLogger(RulePrinter.class, SimpleLogger.WARN);
+	private static SimpleLogger slog = LoggerFactory.getSysOutLogger(RulePrinter.class, SimpleLogger.DEBUG);
 	
 	public static Reader readRules(DecisionTree learned_dt) {
 		
@@ -92,11 +92,15 @@
 		this.num_instances = dt.getRoot().getNumMatch();
 		
 		visitor.visit(dt);
-		
+		rules.ensureCapacity(visitor.getNumPathsFound());
+		int id = 1;
 		for (Path p: visitor.getPathList()) {
+//			if (id == 289)
+//				System.out.println("Here the p");
 			Rule newRule = createRule(p);
-			newRule.setId(rules.size());
+			newRule.setId(id);//rules.size());
 			rules.add(newRule);
+			id++;
 		}
 		
 		if (sort)
@@ -130,7 +134,8 @@
 				}
 				if (slog.error() != null)
 					slog.error().log("\n");
-				newRule.processNodeValue(current, nodeRelations, 0, 1);	//int condition_or_action = condition = 1
+				// call with rule_decs.get(0)
+				newRule.processNodeValue(current, nodeRelations, newRule.getMainDeclaration(), 0, 1);	//int condition_or_action = condition = 1
 			}
 //			} else {			}
 		}
@@ -140,7 +145,7 @@
 			// this a direct child add to reference to the main guy 
 			newRule.addActionToMain(action_node);
 		} else {
-			newRule.processNodeValue(action_node, nodeRelations, 0, 2);	//int condition_or_action = action = 2	
+			newRule.processNodeValue(action_node, nodeRelations, newRule.getMainDeclaration(), 0, 2);	//int condition_or_action = action = 2	
 		}
 		return newRule;	
 	}
@@ -290,6 +295,9 @@
 		rule_decs.get(main_obj_id).addCondition(current);
 	}
 	
+	public Declaration getMainDeclaration(){
+		return rule_decs.get(main_obj_id);
+	}
 	public void addActionToMain(NodeValue current) {
 		AttrReference aRef = new AttrReference(current);	//D
 		rule_decs.get(main_obj_id).addActionReference(aRef);						//D
@@ -302,29 +310,29 @@
 			Field referenceField = nodeRelations.get(nodeRelations.size()-1);			
 			String referenceOfCondition = Util.getDecReference(referenceField);
 			
-			System.out.println("It is primitive, should add a condition to its father "+referenceOfCondition+ " rel_id "+ rel_id + " size "+ (nodeRelations.size()-1)+ " \n");	
+			//System.out.println("It is primitive, should add a condition to its father "+referenceOfCondition+ " rel_id "+ rel_id + " size "+ (nodeRelations.size()-1)+ " \n");	
 			Declaration dec = rule_decs.get(declarationMap.get(referenceOfCondition));
 			dec.addCondition(current);					//D
 		} else {
 			Field referenceField = nodeRelations.get(rel_id);			
 			String referenceOfCondition = Util.getDecReference(referenceField);
-			System.out.println("referenceOfCondition " +referenceOfCondition + " rel_id "+ rel_id + " size "+ (nodeRelations.size()-1));
+			//System.out.println("referenceOfCondition " +referenceOfCondition + " rel_id "+ rel_id + " size "+ (nodeRelations.size()-1));
 			Declaration the_place_declared = null;
 			
 			if (rel_id ==0 ) {
 				
 				the_place_declared = rule_decs.get(0);
-				System.out.println("The first guy "+referenceField.getName()+" to main declaration (ref?)"+ " rel_id "+ rel_id + " size "+ (nodeRelations.size()-1)+ " \n");	
+				//System.out.println("The first guy "+referenceField.getName()+" to main declaration (ref?)"+ " rel_id "+ rel_id + " size "+ (nodeRelations.size()-1)+ " \n");	
 				
 			} else {
 				the_place_declared = rule_decs.get(rel_id-1);//declarationMap.get(referenceOfCondition));
-				System.out.println("Continue"+referenceField.getName()+" in "+the_place_declared+ "??? rel_id "+ rel_id + " size "+ (nodeRelations.size()-1)+ " \n");	
+				//System.out.println("Continue"+referenceField.getName()+" in "+the_place_declared+ "??? rel_id "+ rel_id + " size "+ (nodeRelations.size()-1)+ " \n");	
+
 			}
-			
 			if (!the_place_declared.hasReference(referenceField.getName())) {
 				num_declarations++;
 				Declaration new_dec = new Declaration(referenceField.getType(), referenceField.getName(), num_declarations);
-				System.out.println("Create new dec "+referenceOfCondition+" (Main declaration doesnot have a ref"+ referenceField.getName() + ") rel_id "+ rel_id + " size "+ (nodeRelations.size()-1)+ " \n");	
+				//System.out.println("Create new dec "+referenceOfCondition+" (Main declaration doesnot have a ref"+ referenceField.getName() + ") rel_id "+ rel_id + " size "+ (nodeRelations.size()-1)+ " \n");	
 				
 				the_place_declared.addReference(new_dec);					//D
 				declarationMap.put(referenceOfCondition, num_declarations);
@@ -333,15 +341,17 @@
 			
 			addCondition(current, nodeRelations, rel_id+1);
 			
+			
+			
 		}
 	}
-	
-	public void processNodeValue(NodeValue current, ArrayList<Field> nodeRelations, int rel_id, int condition_or_action) {
+	// first time: the_place_declared = rule_decs.get(0)
+	public void processNodeValue(NodeValue current, ArrayList<Field> nodeRelations, Declaration the_place_declared, int rel_id, int condition_or_action) {
 		if (rel_id == nodeRelations.size()) {	// it must be primitive
 			Field referenceField = nodeRelations.get(nodeRelations.size()-1);			
 			String referenceOfCondition = Util.getDecReference(referenceField);
 			
-			System.out.println("It is primitive, should add a condition to its father "+referenceOfCondition+ " rel_id "+ rel_id + " size "+ (nodeRelations.size()-1)+ " \n");	
+			//System.out.println("It is primitive, should add a condition to its father "+referenceOfCondition+ " rel_id "+ rel_id + " size "+ (nodeRelations.size()-1)+ " \n");	
 			Declaration dec = rule_decs.get(declarationMap.get(referenceOfCondition));
 			
 			switch (condition_or_action) {
@@ -360,25 +370,17 @@
 		} else {
 			Field referenceField = nodeRelations.get(rel_id);			
 			String referenceOfCondition = Util.getDecReference(referenceField);
-			System.out.println("referenceOfCondition " +referenceOfCondition + " rel_id "+ rel_id + " size "+ (nodeRelations.size()-1));
-			Declaration the_place_declared = null;
 			
-			if (rel_id ==0 ) {	
-				the_place_declared = rule_decs.get(0);
-				System.out.println("The first guy "+referenceField.getName()+" to main declaration (ref?)"+ " rel_id "+ rel_id + " size "+ (nodeRelations.size()-1)+ " \n");	
-				
-			} else {
-				the_place_declared = rule_decs.get(rel_id-1);//declarationMap.get(referenceOfCondition));
-				System.out.println("Continue"+referenceField.getName()+" in "+the_place_declared+ "??? rel_id "+ rel_id + " size "+ (nodeRelations.size()-1)+ " \n");	
-			}
-			
+			//Reference current_ref = the_place_declared.getReference(referenceField.getName());
+			Declaration current_dec = null;
 			if (!the_place_declared.hasReference(referenceField.getName())) {
+			//if (current_ref == null) {
 				num_declarations++;
-				Declaration new_dec = new Declaration(referenceField.getType(), referenceField.getName(), num_declarations);
-				System.out.println("Create new dec "+referenceOfCondition+" (Main declaration doesnot have a ref"+ referenceField.getName() + ") rel_id "+ rel_id + " size "+ (nodeRelations.size()-1)+ " \n");	
+				current_dec = new Declaration(referenceField.getType(), referenceField.getName(), num_declarations);
+				//System.out.println("Create new dec "+referenceOfCondition+" (Main declaration doesnot have a ref"+ referenceField.getName() + ") rel_id "+ rel_id + " size "+ (nodeRelations.size()-1)+ " \n");	
 				switch (condition_or_action) {
 				case 1: // condition
-					the_place_declared.addReference(new_dec);			//D
+					the_place_declared.addReference(current_dec);			//D
 					break;
 				case 2: // action
 					AttrReference aRef = new AttrReference(current);	//D
@@ -386,10 +388,13 @@
 					break;
 				}
 				declarationMap.put(referenceOfCondition, num_declarations);
-				rule_decs.add(new_dec);
+				rule_decs.add(current_dec);
+			} else {
+				//current_dec = the_place_declared.getReference(referenceField.getName()).
+				current_dec = the_place_declared.getReferenceDec(referenceField.getName());
 			}
 			
-			processNodeValue(current, nodeRelations, rel_id+1, condition_or_action);	
+			processNodeValue(current, nodeRelations, current_dec, rel_id+1, condition_or_action);	
 			
 		}
 	}
@@ -559,6 +564,23 @@
 		references.add(df);
 	}
 	
+	public Reference getReference(String fName) {
+		for (Reference df : references) {
+			if (df.getFName().equalsIgnoreCase(fName))
+				return df;
+		}
+		return null;
+		
+	}
+	
+	public Declaration getReferenceDec(String fName) {
+		for (Reference df : references) {
+			if (df.getFName().equalsIgnoreCase(fName) && df instanceof DecReference)
+				return ((DecReference)df).getDec();
+		}
+		return null;
+		
+	}
 	public boolean hasReference(String fName) {
 		for (Reference df : references) {
 			if (df.getFName().equalsIgnoreCase(fName))
@@ -594,6 +616,10 @@
 		fName = d.getDeclaringFName();
 	}
 	
+	public Declaration getDec() {
+		return toReference;
+	}
+	
 	public String getFName() {
 		return fName;
 	}

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/Util.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/Util.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/Util.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -15,6 +15,7 @@
 	
 	public static final boolean PRINT_STATS = true;
 	public static final String DRL_DIRECTORY = "src/main/rules/";
+	public static final int NUM_TREES = 10;
 	/*
 	public static final boolean DEBUG = false;
 	public static final boolean DEBUG_TEST = false;
@@ -25,7 +26,7 @@
 	public static final boolean DEBUG_DIST = false;
 	public static final boolean DEBUG_DECISION_TREE = false;
 	*/
-	public static int MAX_NUM_RULES = 10;
+	public static int MAX_NUM_RULES = 1000000;
 	public static boolean ONLY_ACTIVE_RULES = true;	/* TODO into global settings */
 	
 	public static boolean SORT_RULES_BY_RANK = true;
@@ -33,6 +34,8 @@
 	
 	private static Random BAGGING = new Random(System.currentTimeMillis());
 	//public static String log_file = "testing.log";
+	public static double TRAINING_RATIO = 1.0, TESTING_RATIO = 0.0;;
+	public static double DEFAULT_TRAINING_RATIO = 0.84, DEFAULT_TESTING_RATIO= 0.16;
 	
 	
 	public static String ntimes(String s,int n){

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/reteoo/ObjectSink.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/reteoo/ObjectSink.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/reteoo/ObjectSink.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -24,7 +24,7 @@
  * Receiver of propagated <code>FactHandleImpl</code>s from a
  * <code>ObjectSource</code>.
  * 
- * @see ObectSource
+ * @see ObjectSource
  * 
  * @author <a href="mailto:mark.proctor at jboss.com">Mark Proctor</a>
  * @author <a href="mailto:bob at werken.com">Bob McWhirter</a>

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/reteoo/Rete.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/reteoo/Rete.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/reteoo/Rete.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -41,10 +41,10 @@
  * the Rete node where it propagates to all matching ObjectTypeNodes.
  *
  * The first time an  instance of a Class type is asserted it does a full
- * iteration of all ObjectTyppeNodes looking for matches, any matches are
+ * iteration of all ObjectTypeNodes looking for matches, any matches are
  * then cached in a HashMap which is used for future assertions.
  *
- * While Rete  extends ObjectSource nad implements ObjectSink it nulls the
+ * While Rete extends ObjectSource and implements ObjectSink it nulls the
  * methods attach(), remove() and  updateNewNode() as this is the root node
  * they are no applicable
  *

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/test/java/org/drools/learner/StructuredTestFactory.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/test/java/org/drools/learner/StructuredTestFactory.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/test/java/org/drools/learner/StructuredTestFactory.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -30,12 +30,12 @@
 		if (BUILD_TREE) {
 			single_builder.build(mem, learner);//obj_class, target_attr, working_attr
 
-			SingleTreeTester tester = new SingleTreeTester(learner.getTree());
+			SingleTreeTester tester = new SingleTreeTester(single_builder.getTree());
 			//tester.printStats(tester.test(mem.getClassInstances()), Util.DRL_DIRECTORY + executionSignature);
 			//Tester.test(c45, mem.getClassInstances());
 
-			learner.getTree().setSignature(executionSignature);
+			single_builder.getTree().setSignature(executionSignature);
 		}
-		return learner.getTree();
+		return single_builder.getTree();
 	}
 }

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/CarExample.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/CarExample.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/CarExample.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -13,6 +13,8 @@
 import org.drools.learner.builder.DecisionTreeBuilder;
 import org.drools.learner.builder.DecisionTreeFactory;
 import org.drools.learner.tools.ObjectFactory;
+import org.drools.learner.tools.ReteStatistics;
+import org.drools.learner.tools.Util;
 
 public class CarExample {
 	
@@ -37,7 +39,7 @@
 		}
 
 		// instantiate a learner for a specific object class and pass session to train
-		DecisionTree decision_tree; int ALGO = 600;
+		DecisionTree decision_tree; int ALGO = 121;
 		/* 
 		 * Single	1xx, Bag 	2xx, Boost 3xx
 		 * ID3 		x1x, C45 	x2x
@@ -71,18 +73,27 @@
 //			case 3:
 //			decision_tree  = DecisionTreeFactory.createGlobal2(session, obj_class);
 //			break;
-		case 400: 
-			decision_tree = DecisionTreeFactory.createSingleCVPrunnedC45E(session, obj_class);
+//		case 400: 
+//			decision_tree = DecisionTreeFactory.createSingleCVPrunnedC45E(session, obj_class);
+//			break;
+//		case 500:
+//			decision_tree = DecisionTreeFactory.createSingleC45E_Stopped(session, obj_class);
+//			break;
+//		case 600:
+//			decision_tree = DecisionTreeFactory.createSingleCrossPrunnedStopC45E(session, obj_class);
+//			break;
+//		case 601:
+//			decision_tree = DecisionTreeFactory.createSingleTestPrunnedStopC45E(session, obj_class);
+//			break;
+		case 700:
+			decision_tree = DecisionTreeFactory.createSingleC45E_StoppedTest(session, obj_class);
 			break;
-		case 500:
-			decision_tree = DecisionTreeFactory.createSingleC45E_StoppingCriteria(session, obj_class);
+		case 701:
+			decision_tree = DecisionTreeFactory.createBaggC45E_StoppedTest(session, obj_class);
 			break;
-		case 600:
-			decision_tree = DecisionTreeFactory.createSingleCrossPrunnedStopC45E(session, obj_class);
+		case 702:
+			decision_tree = DecisionTreeFactory.createBoostedC45E_StopTest(session, obj_class);
 			break;
-		case 601:
-			decision_tree = DecisionTreeFactory.createSingleTestPrunnedStopC45E(session, obj_class);
-			break;
 		default:
 			decision_tree  = DecisionTreeFactory.createSingleID3E(session, obj_class);
 		
@@ -102,6 +113,10 @@
 		 */
 
 		session.fireAllRules();
+		
+        ReteStatistics stats = new ReteStatistics(ruleBase);
+        stats.calculateNumberOfNodes();
+        stats.print(Util.DRL_DIRECTORY +decision_tree.getSignature());
 
 		//logger.writeToDisk();
 

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/GolfC45ExampleFromDrl.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/GolfC45ExampleFromDrl.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/GolfC45ExampleFromDrl.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -8,10 +8,21 @@
 import org.drools.RuleBaseFactory;
 import org.drools.StatefulSession;
 import org.drools.audit.WorkingMemoryFileLogger;
+import org.drools.common.AbstractRuleBase;
 import org.drools.compiler.PackageBuilder;
 import org.drools.event.DebugAgendaEventListener;
 import org.drools.event.DebugWorkingMemoryEventListener;
 import org.drools.learner.tools.ObjectFactory;
+import org.drools.learner.tools.ReteStatistics;
+import org.drools.reteoo.InitialFactImpl;
+import org.drools.reteoo.LeftTupleSink;
+import org.drools.reteoo.LeftTupleSource;
+import org.drools.reteoo.ObjectSink;
+import org.drools.reteoo.ObjectSource;
+import org.drools.reteoo.ObjectTypeNode;
+import org.drools.reteoo.Rete;
+import org.drools.reteoo.ReteooRuleBase;
+import org.drools.reteoo.RuleTerminalNode;
 import org.drools.rule.Package;
 
 public class GolfC45ExampleFromDrl {
@@ -19,7 +30,7 @@
 	public static final void main(final String[] args) throws Exception {
         //read in the source
         //final Reader source = new InputStreamReader( HelloWorldExample.class.getResourceAsStream( "HelloWorld.drl" ) );
-    	final Reader source = new InputStreamReader( Golf.class.getResourceAsStream( "golf2.drl" ) );
+    	final Reader source = new InputStreamReader( Golf.class.getResourceAsStream( "golf.drl" ) );
 
         final PackageBuilder builder = new PackageBuilder();
 
@@ -38,6 +49,8 @@
         //add the package to a rulebase (deploy the rule package).
         final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
         ruleBase.addPackage( pkg );
+        
+        
 
         final StatefulSession session = ruleBase.newStatefulSession();
         
@@ -55,10 +68,13 @@
 		}
         
         session.fireAllRules();
-        
-       logger.writeToDisk();
-        
+        ReteStatistics stats = new ReteStatistics(ruleBase);
+        stats.calculateNumberOfNodes();
+            
+        logger.writeToDisk();
+
         session.dispose();
     }
+	
 
 }

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/GolfExample.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/GolfExample.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/GolfExample.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -12,6 +12,8 @@
 import org.drools.learner.DecisionTree;
 import org.drools.learner.builder.DecisionTreeFactory;
 import org.drools.learner.tools.ObjectFactory;
+import org.drools.learner.tools.ReteStatistics;
+import org.drools.learner.tools.Util;
 
 public class GolfExample {
 	
@@ -40,7 +42,7 @@
 			session.insert(r);
 		}
 
-		DecisionTree decision_tree; int ALGO = 600;
+		DecisionTree decision_tree; int ALGO = 121;
 		/* 
 		 * Single	1xx, Bag 	2xx, Boost 3xx
 		 * ID3 		x1x, C45 	x2x
@@ -74,15 +76,15 @@
 //			case 3:
 //			decision_tree  = DecisionTreeFactory.createGlobal2(session, obj_class);
 //			break;
-		case 400: 
-			decision_tree = DecisionTreeFactory.createSingleCVPrunnedC45E(session, obj_class);
-			break;
+//		case 400: 
+//		//	decision_tree = DecisionTreeFactory.createSingleCVPrunnedC45E(session, obj_class);
+//			break;
 		case 500:
-			decision_tree = DecisionTreeFactory.createSingleC45E_StoppingCriteria(session, obj_class);
+			decision_tree = DecisionTreeFactory.createSingleC45E_Stopped(session, obj_class);
 			break;
-		case 600:
-			decision_tree = DecisionTreeFactory.createSingleCrossPrunnedStopC45E(session, obj_class);
-			break;
+//		case 600:
+//		//	decision_tree = DecisionTreeFactory.createSingleCrossPrunnedStopC45E(session, obj_class);
+//			break;
 		default:
 			decision_tree  = DecisionTreeFactory.createSingleID3E(session, obj_class);
 		
@@ -102,6 +104,9 @@
 		long end_time = System.currentTimeMillis();
 		System.out.println("Total time="+ (end_time-start_time));
 		
+		ReteStatistics stats = new ReteStatistics(ruleBase);
+	    stats.calculateNumberOfNodes();
+	    stats.print(Util.DRL_DIRECTORY + decision_tree.getSignature());
 		logger.writeToDisk();
 
 		session.dispose();

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/NurseryExample.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/NurseryExample.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/NurseryExample.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -12,6 +12,8 @@
 import org.drools.learner.DecisionTree;
 import org.drools.learner.builder.DecisionTreeFactory;
 import org.drools.learner.tools.ObjectFactory;
+import org.drools.learner.tools.ReteStatistics;
+import org.drools.learner.tools.Util;
 
 public class NurseryExample {
 	
@@ -37,13 +39,50 @@
 		}
 
 		// instantiate a learner for a specific object class and pass session to train
-		//Learner learner = LearnerFactory.createID3(session, obj_class);
-		DecisionTree dt_builder  = DecisionTreeFactory.createBagC45E(session, obj_class);
+		DecisionTree decision_tree; int ALGO = 111;
+		/* 
+		 * Single	1xx, Bag 	2xx, Boost 3xx
+		 * ID3 		x1x, C45 	x2x
+		 * Entropy	xx1, Gain	xx2
+		 */
+		switch (ALGO) {
+		case 111:
+			decision_tree  = DecisionTreeFactory.createSingleID3E(session, obj_class);
+			break;
+		case 112:
+			decision_tree  = DecisionTreeFactory.createSingleID3G(session, obj_class);
+			break;
+		case 121: 
+			decision_tree  = DecisionTreeFactory.createSingleC45E(session, obj_class);
+			break;
+		case 122: 
+			decision_tree  = DecisionTreeFactory.createSingleC45G(session, obj_class);
+			break;
+		case 221:
+			decision_tree  = DecisionTreeFactory.createBagC45E(session, obj_class);
+			break;		
+		case 222:
+			decision_tree  = DecisionTreeFactory.createBagC45G(session, obj_class);
+			break;	
+		case 321:
+			decision_tree  = DecisionTreeFactory.createBoostedC45E(session, obj_class);
+			break;
+		case 322:
+			decision_tree  = DecisionTreeFactory.createBoostedC45G(session, obj_class);
+			break;
+//			case 3:
+//			decision_tree  = DecisionTreeFactory.createGlobal2(session, obj_class);
+//			break;
+		default:
+			decision_tree  = DecisionTreeFactory.createSingleID3E(session, obj_class);
 		
+		}
+		
 		final PackageBuilder builder = new PackageBuilder();
 		//this wil generate the rules, then parse and compile in one step
-		builder.addPackageFromTree( dt_builder );
+		builder.addPackageFromTree( decision_tree );
 		ruleBase.addPackage( builder.getPackage() );
+		//System.exit(0);
 		/* 
 			final Reader source = new InputStreamReader( HelloWorldExample.class.getResourceAsStream( "HelloWorld.drl" ) );
 			//get the compiled package (which is serializable)
@@ -54,6 +93,9 @@
 
 		session.fireAllRules();
 
+		ReteStatistics stats = new ReteStatistics(ruleBase);
+	    stats.calculateNumberOfNodes();
+	    stats.print(Util.DRL_DIRECTORY + decision_tree.getSignature());
 		logger.writeToDisk();
 
 		session.dispose();

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/Poker.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/Poker.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/Poker.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -3,7 +3,7 @@
 import org.drools.learner.tools.ClassAnnotation;
 import org.drools.learner.tools.FieldAnnotation;
 
- at ClassAnnotation(label_element = "getPoker_hand")
+ at ClassAnnotation(label_element = "getLabel")
 public class Poker {
 	@FieldAnnotation(readingSeq = 0)
 	private int s1; // 'Suit of card #1': Ordinal (1-4) representing {Hearts, Spades, Diamonds, Clubs}
@@ -30,7 +30,7 @@
 	@FieldAnnotation(readingSeq = 9, discrete=false)
 	private int c5; // 'Rank of card #5': Numerical (1-13) representing (Ace, 2, 3, ... , Queen, King)
 
-	@FieldAnnotation(readingSeq = 10, ignore = true)
+	@FieldAnnotation(readingSeq = 10, ignore = true)//target=true)
 	private int poker_hand;  
 	/*
 	 *0: Nothing in hand; not a recognized poker hand 
@@ -50,7 +50,7 @@
 	}
 	
 	public boolean getLabel() {
-		return poker_hand>=4; 
+		return poker_hand>=5; 
 	}
 	
 	public int getS1() {

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/PokerExample.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/PokerExample.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/PokerExample.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -1,5 +1,6 @@
 package org.drools.examples.learner;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import org.drools.RuleBase;
@@ -7,8 +8,12 @@
 import org.drools.StatefulSession;
 import org.drools.compiler.PackageBuilder;
 import org.drools.learner.DecisionTree;
+import org.drools.learner.StatsPrinter;
 import org.drools.learner.builder.DecisionTreeFactory;
+import org.drools.learner.eval.stopping.StoppingCriterion;
 import org.drools.learner.tools.ObjectFactory;
+import org.drools.learner.tools.ReteStatistics;
+import org.drools.learner.tools.Util;
 
 public class PokerExample {
 	
@@ -28,15 +33,22 @@
 //		final WorkingMemoryFileLogger logger = new WorkingMemoryFileLogger( session );
 //		logger.setFileName( "log/poker" );   
 		
-		String inputFile = new String("data/poker/poker-hand-training-true.data.txt");
+		//String inputFile = new String("data/poker/poker-hand-training-true.data.txt");
+		String inputFile = new String("data/poker/poker-train.txt");
 		Class<?> obj_class = Poker.class;
 		List<Object> facts = ObjectFactory.getObjects(obj_class, inputFile);
 		for (Object r : facts) {
 			session.insert(r);
 		}
+		
+//		final StatefulSession test_session = ruleBase.newStatefulSession();
+//		List<Object> test_facts = ObjectFactory.getObjects(obj_class, new String("data/poker/poker-hand-testing.data.txt"));
+//		for (Object r : test_facts) {
+//			test_session.insert(r);
+//		}
 
 		// instantiate a learner for a specific object class and pass session to train
-		DecisionTree decision_tree; int ALGO = 121;
+		DecisionTree decision_tree; int ALGO = 700;
 		/* 
 		 * Single	1xx, Bag 	2xx, Boost 3xx
 		 * ID3 		x1x, C45 	x2x
@@ -70,6 +82,30 @@
 //			case 3:
 //			decision_tree  = DecisionTreeFactory.createGlobal2(session, obj_class);
 //			break;
+		case 400:
+			decision_tree = DecisionTreeFactory.createSingleC45E_Stopped(session, obj_class);
+			break;
+		case 600:
+			decision_tree = DecisionTreeFactory.createSingleTestPrunnedC45E(session, obj_class);
+			break;
+		case 700:
+			decision_tree = DecisionTreeFactory.createSingleC45E_Test(session, obj_class);
+			break;
+		case 701:
+			decision_tree = DecisionTreeFactory.createBaggC45E_Test(session, obj_class);
+			break;
+		case 702:
+			decision_tree = DecisionTreeFactory.createBoostedC45E_Test(session, obj_class);
+			break;
+		case 710:
+			decision_tree = DecisionTreeFactory.createSingleC45E_StoppedTest(session, obj_class);
+			break;
+		case 711:
+			decision_tree = DecisionTreeFactory.createBaggC45E_StoppedTest(session, obj_class);
+			break;
+		case 712:
+			decision_tree = DecisionTreeFactory.createBoostedC45E_StopTest(session, obj_class);
+			break;
 		default:
 			decision_tree  = DecisionTreeFactory.createSingleID3E(session, obj_class);
 		
@@ -87,10 +123,14 @@
 		session.fireAllRules();
 		long end_time = System.currentTimeMillis();
 		System.out.println("Total time="+ (end_time-start_time));
-		
-//		logger.writeToDisk();
+		ReteStatistics stats = new ReteStatistics(ruleBase);
+	    stats.calculateNumberOfNodes();
+	    stats.print(Util.DRL_DIRECTORY + decision_tree.getSignature());
+		//logger.writeToDisk();
 
 		session.dispose();
 	}
+	
 
+
 }

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/PokerExampleFromDrl.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/PokerExampleFromDrl.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/PokerExampleFromDrl.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -12,6 +12,7 @@
 import org.drools.event.DebugAgendaEventListener;
 import org.drools.event.DebugWorkingMemoryEventListener;
 import org.drools.learner.tools.ObjectFactory;
+import org.drools.learner.tools.ReteStatistics;
 import org.drools.rule.Package;
 
 public class PokerExampleFromDrl {
@@ -19,7 +20,7 @@
 	public static final void main(final String[] args) throws Exception {
         //read in the source
         //final Reader source = new InputStreamReader( HelloWorldExample.class.getResourceAsStream( "HelloWorld.drl" ) );
-    	final Reader source = new InputStreamReader( Restaurant.class.getResourceAsStream( "poker_c45_bag.drl" ) );
+    	final Reader source = new InputStreamReader( Restaurant.class.getResourceAsStream( "poker_c45_one.drl" ) );
 
         final PackageBuilder builder = new PackageBuilder();
 
@@ -41,23 +42,25 @@
 
         final StatefulSession session = ruleBase.newStatefulSession();
         
-        session.addEventListener( new DebugAgendaEventListener() );
-        session.addEventListener( new DebugWorkingMemoryEventListener() );
-        
-        final WorkingMemoryFileLogger logger = new WorkingMemoryFileLogger( session );
-        logger.setFileName( "log/poker_c45_bag_fromdrl" );        
+//        session.addEventListener( new DebugAgendaEventListener() );
+//        session.addEventListener( new DebugWorkingMemoryEventListener() );
+//        
+//        final WorkingMemoryFileLogger logger = new WorkingMemoryFileLogger( session );
+//        logger.setFileName( "log/poker_c45_bag_fromdrl" );        
 
         String inputFile = new String("data/poker/poker-hand-training-true.data.txt");
 		Class<?> obj_class = Poker.class;
-		List<Object> facts = ObjectFactory.getObjects(obj_class, inputFile);
-		for (Object r : facts) {
-			session.insert(r);
-		}
+//		List<Object> facts = ObjectFactory.getObjects(obj_class, inputFile);
+//		for (Object r : facts) {
+//			session.insert(r);
+//		}
         
-        session.fireAllRules();
+        //session.fireAllRules();
+        ReteStatistics stats = new ReteStatistics(ruleBase);
+	    stats.calculateNumberOfNodes();
+	    stats.print();
+//        logger.writeToDisk();
         
-       logger.writeToDisk();
-        
         session.dispose();
     }
 

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/RestaurantExample.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/RestaurantExample.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/RestaurantExample.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -12,6 +12,8 @@
 import org.drools.event.DebugWorkingMemoryEventListener;
 import org.drools.learner.DecisionTree;
 import org.drools.learner.builder.DecisionTreeFactory;
+import org.drools.learner.tools.ReteStatistics;
+import org.drools.learner.tools.Util;
 
 // Hello World for Learner
 public class RestaurantExample {
@@ -91,6 +93,9 @@
 
 		session.fireAllRules();
 
+        ReteStatistics stats = new ReteStatistics(ruleBase);
+        stats.calculateNumberOfNodes();
+        stats.print(Util.DRL_DIRECTORY + decision_tree.getSignature());
 		logger.writeToDisk();
 
 		session.dispose();

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/ShoppingClasses.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/ShoppingClasses.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/ShoppingClasses.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -5,7 +5,7 @@
 public class ShoppingClasses {
 	   public static class Customer {
 	        private String name;
-	        
+	        @FieldAnnotation(discrete = false)
 	        private int discount;
 	        
 	        @FieldAnnotation(target = true)
@@ -16,6 +16,9 @@
 	            this.name = name;
 	            this.discount = discount;
 	        }
+	        public void setName(String _name) {
+	            name = _name;
+	        }
 
 	        public String getName() {
 	            return name;
@@ -36,6 +39,7 @@
 			public void setDiscount(int discount) {
 	            this.discount = discount;
 	        }
+			
 	                       
 	    }
 	    
@@ -44,7 +48,20 @@
 	    	private Dress skirt;
 	    	// attribute 1
 	    	private double salary;
+			public Dress getSkirt() {
+				return skirt;
+			}
+			public void setSkirt(Dress skirt) {
+				this.skirt = skirt;
+			}
+			public double getSalary() {
+				return salary;
+			}
+			public void setSalary(double salary) {
+				this.salary = salary;
+			}
 	    	
+	    	
 	    }
 	   
 	    // target object
@@ -52,6 +69,20 @@
 	    	double color;
 	    	// target attribute
 	    	String value;//classification valuable, normal, cheap
+			public double getColor() {
+				return color;
+			}
+			public void setColor(double color) {
+				this.color = color;
+			}
+			public String getValue() {
+				return value;
+			}
+			public void setValue(String value) {
+				this.value = value;
+			}
+	    	
+	    	
 	    }
 	    
 	    public static class Discount {
@@ -71,7 +102,16 @@
 	        public int getAmount() {
 	            return amount;
 	        }
+
+			public void setCustomer(Customer customer) {
+				this.customer = customer;
+			}
+
+			public void setAmount(int amount) {
+				this.amount = amount;
+			}
 	        
+	        
 	    }
 
 	    public static class Product {
@@ -92,7 +132,15 @@
 	            return price;
 	        }
 	        
+	        public void setName(String _name) {
+	        	name = _name;
+	        }
 	        
+	        public void setPrice(float _price) {
+	        	price = _price;
+	        }
+	        
+	        
 	    }
 	    
 	    public static class Purchase {
@@ -112,5 +160,13 @@
 	        public Product getProduct() {
 	            return product;
 	        }            
+	        public void setCustomer(Customer _customer) {
+	            customer = _customer;
+	        }
+	        
+	        public void setProduct(Product _product) {
+	        	product = _product;
+	        }
+	        
 	    }   
 }

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/ShoppingExm.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/ShoppingExm.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/ShoppingExm.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -88,23 +88,29 @@
 	public static Object[] getExamples1()
 	{
 		 Customer mark = new Customer( "mark", 0 );
-		 mark.setEligible(false);
+		 mark.setEligible(true);
 		 Product shoes = new Product( "shoes", 60 );
 		 Product hat = new Product( "hat", 60 );
 		 Purchase purchase_x = new Purchase( mark, shoes );
 		 Purchase purchase_y = new Purchase( mark, hat );
 		 
 		 Customer gizil = new Customer( "gizil", 10 );
-		 mark.setEligible(true);
+		 gizil.setEligible(true);
 		 Customer daniel = new Customer( "daniel", 10 );
-		 mark.setEligible(false);
+		 daniel.setEligible(true);
 		 Customer krem = new Customer( "krem", 10 );
-		 mark.setEligible(true);
+		 krem.setEligible(true);
 		 
 		 Product skirt = new Product( "skirt", 60 );
 		 Product robe = new Product( "robe", 60 );
 		 Product hat2 = new Product( "hat2", 60 );
 		 
+		 Customer pervin = new Customer( "pervin", 20 );
+		 pervin.setEligible(false);
+		 
+		 Customer ertug = new Customer( "ertug", 30 );
+		 ertug.setEligible(false);
+		 
 		 Object[] facts = {
 				 mark, 
 				 shoes,
@@ -115,6 +121,11 @@
 				 new Purchase( gizil, robe ),
 				 new Purchase( daniel, shoes ),
 				 new Purchase( daniel, hat2 ),
+				 new Purchase( pervin, hat ),
+				 new Purchase( pervin, hat2 ),
+				 new Purchase( pervin, shoes ),
+				 new Purchase( ertug, skirt ),
+				 new Purchase( ertug, hat ),
 				 new Purchase( krem, hat2 )};
 		 return facts;
 	}

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/StructuredCarExample.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/StructuredCarExample.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/StructuredCarExample.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -0,0 +1,114 @@
+package org.drools.examples.learner;
+
+import java.util.List;
+
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.StatefulSession;
+import org.drools.audit.WorkingMemoryFileLogger;
+import org.drools.compiler.PackageBuilder;
+import org.drools.event.DebugAgendaEventListener;
+import org.drools.event.DebugWorkingMemoryEventListener;
+import org.drools.learner.DecisionTree;
+import org.drools.learner.builder.DecisionTreeBuilder;
+import org.drools.learner.builder.DecisionTreeFactory;
+import org.drools.learner.tools.ObjectFactory;
+import org.drools.learner.tools.ReteStatistics;
+import org.drools.learner.tools.Util;
+
+import org.drools.examples.learner.structured_car.Car;
+
+public class StructuredCarExample {
+	
+	
+	public static final void main(final String[] args) throws Exception {
+		// my rule base 
+		final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+
+		final StatefulSession session = ruleBase.newStatefulSession();	// LearningSession
+
+		//session.addEventListener( new DebugAgendaEventListener() );
+		//session.addEventListener( new DebugWorkingMemoryEventListener() );
+
+		//final WorkingMemoryFileLogger logger = new WorkingMemoryFileLogger( session );
+		//logger.setFileName( "log/car" );   
+		
+		String inputFile = new String("data/car/car.data.txt");
+		Class<?> obj_class = Car.class;
+		List<Object> facts = ObjectFactory.insertStructuredObjects(obj_class, session, inputFile);
+//		for (Object r : facts) {
+//			session.insert(r);
+//		}
+
+		// instantiate a learner for a specific object class and pass session to train
+		DecisionTree decision_tree; int ALGO = 121;
+		/* 
+		 * Single	1xx, Bag 	2xx, Boost 3xx
+		 * ID3 		x1x, C45 	x2x
+		 * Entropy	xx1, Gain	xx2
+		 */
+		switch (ALGO) {
+		case 111:
+			decision_tree  = DecisionTreeFactory.createSingleID3E(session, obj_class);
+			break;
+		case 112:
+			decision_tree  = DecisionTreeFactory.createSingleID3G(session, obj_class);
+			break;
+		case 121: 
+			decision_tree  = DecisionTreeFactory.createSingleC45E(session, obj_class);
+			break;
+		case 122: 
+			decision_tree  = DecisionTreeFactory.createSingleC45G(session, obj_class);
+			break;
+		case 221:
+			decision_tree  = DecisionTreeFactory.createBagC45E(session, obj_class);
+			break;		
+		case 222:
+			decision_tree  = DecisionTreeFactory.createBagC45G(session, obj_class);
+			break;	
+		case 321:
+			decision_tree  = DecisionTreeFactory.createBoostedC45E(session, obj_class);
+			break;
+		case 322:
+			decision_tree  = DecisionTreeFactory.createBoostedC45G(session, obj_class);
+			break;
+//			case 3:
+//			decision_tree  = DecisionTreeFactory.createGlobal2(session, obj_class);
+//			break;
+//		case 400: 
+//			decision_tree = DecisionTreeFactory.createSingleCVPrunnedC45E(session, obj_class);
+//			break;
+//		case 500:
+//			decision_tree = DecisionTreeFactory.createSingleC45E_Stopped(session, obj_class);
+//			break;
+//		case 600:
+//			decision_tree = DecisionTreeFactory.createSingleCrossPrunnedStopC45E(session, obj_class);
+//			break;
+//		case 601:
+//			decision_tree = DecisionTreeFactory.createSingleTestPrunnedStopC45E(session, obj_class);
+//			break;
+		default:
+			decision_tree  = DecisionTreeFactory.createSingleID3E(session, obj_class);
+		
+		}
+		
+		final PackageBuilder builder = new PackageBuilder();
+		//this wil generate the rules, then parse and compile in one step
+		builder.addPackageFromTree( decision_tree );
+		/* 
+		 * get the compiled package (which is serializable) from the builder
+		 * add the package to a rulebase (deploy the rule package). 
+		 */
+		ruleBase.addPackage( builder.getPackage() );
+
+		session.fireAllRules();
+
+		//session.fireAllRules();
+		ReteStatistics stats = new ReteStatistics(ruleBase);
+        stats.calculateNumberOfNodes();
+        stats.print(Util.DRL_DIRECTORY + decision_tree.getSignature());
+		//logger.writeToDisk();
+
+		session.dispose();
+	}
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/StructuredCarExample.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/StructuredNurseryExample.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/StructuredNurseryExample.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/StructuredNurseryExample.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -0,0 +1,114 @@
+package org.drools.examples.learner;
+
+import java.util.List;
+
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.StatefulSession;
+import org.drools.audit.WorkingMemoryFileLogger;
+import org.drools.compiler.PackageBuilder;
+import org.drools.event.DebugAgendaEventListener;
+import org.drools.event.DebugWorkingMemoryEventListener;
+import org.drools.learner.DecisionTree;
+import org.drools.learner.builder.DecisionTreeBuilder;
+import org.drools.learner.builder.DecisionTreeFactory;
+import org.drools.learner.tools.ObjectFactory;
+import org.drools.learner.tools.ReteStatistics;
+import org.drools.learner.tools.Util;
+
+import org.drools.examples.learner.structured_nursery.Nursery;;
+
+public class StructuredNurseryExample {
+	
+	
+	public static final void main(final String[] args) throws Exception {
+		// my rule base 
+		final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+
+		final StatefulSession session = ruleBase.newStatefulSession();	// LearningSession
+
+		//session.addEventListener( new DebugAgendaEventListener() );
+		//session.addEventListener( new DebugWorkingMemoryEventListener() );
+
+		//final WorkingMemoryFileLogger logger = new WorkingMemoryFileLogger( session );
+		//logger.setFileName( "log/car" );   
+		
+		String inputFile = new String("data/nursery/nursery.data.txt");
+		Class<?> obj_class = Nursery.class;
+		List<Object> facts = ObjectFactory.insertStructuredObjects(obj_class, session, inputFile);
+//		for (Object r : facts) {
+//			session.insert(r);
+//		}
+
+		// instantiate a learner for a specific object class and pass session to train
+		DecisionTree decision_tree; int ALGO = 121;
+		/* 
+		 * Single	1xx, Bag 	2xx, Boost 3xx
+		 * ID3 		x1x, C45 	x2x
+		 * Entropy	xx1, Gain	xx2
+		 */
+		switch (ALGO) {
+		case 111:
+			decision_tree  = DecisionTreeFactory.createSingleID3E(session, obj_class);
+			break;
+		case 112:
+			decision_tree  = DecisionTreeFactory.createSingleID3G(session, obj_class);
+			break;
+		case 121: 
+			decision_tree  = DecisionTreeFactory.createSingleC45E(session, obj_class);
+			break;
+		case 122: 
+			decision_tree  = DecisionTreeFactory.createSingleC45G(session, obj_class);
+			break;
+		case 221:
+			decision_tree  = DecisionTreeFactory.createBagC45E(session, obj_class);
+			break;		
+		case 222:
+			decision_tree  = DecisionTreeFactory.createBagC45G(session, obj_class);
+			break;	
+		case 321:
+			decision_tree  = DecisionTreeFactory.createBoostedC45E(session, obj_class);
+			break;
+		case 322:
+			decision_tree  = DecisionTreeFactory.createBoostedC45G(session, obj_class);
+			break;
+//			case 3:
+//			decision_tree  = DecisionTreeFactory.createGlobal2(session, obj_class);
+//			break;
+//		case 400: 
+//			decision_tree = DecisionTreeFactory.createSingleCVPrunnedC45E(session, obj_class);
+//			break;
+//		case 500:
+//			decision_tree = DecisionTreeFactory.createSingleC45E_Stopped(session, obj_class);
+//			break;
+//		case 600:
+//			decision_tree = DecisionTreeFactory.createSingleCrossPrunnedStopC45E(session, obj_class);
+//			break;
+//		case 601:
+//			decision_tree = DecisionTreeFactory.createSingleTestPrunnedStopC45E(session, obj_class);
+//			break;
+		default:
+			decision_tree  = DecisionTreeFactory.createSingleID3E(session, obj_class);
+		
+		}
+		
+		final PackageBuilder builder = new PackageBuilder();
+		//this wil generate the rules, then parse and compile in one step
+		builder.addPackageFromTree( decision_tree );
+		/* 
+		 * get the compiled package (which is serializable) from the builder
+		 * add the package to a rulebase (deploy the rule package). 
+		 */
+//		ruleBase.addPackage( builder.getPackage() );
+//
+//		session.fireAllRules();
+//
+//		//session.fireAllRules();
+//		ReteStatistics stats = new ReteStatistics(ruleBase);
+//        stats.calculateNumberOfNodes();
+//        stats.print(Util.DRL_DIRECTORY + decision_tree.getSignature());
+//		//logger.writeToDisk();
+
+		session.dispose();
+	}
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/StructuredNurseryExample.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/TriangleExample.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/TriangleExample.java	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/TriangleExample.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -9,6 +9,8 @@
 import org.drools.learner.DecisionTree;
 import org.drools.learner.builder.DecisionTreeFactory;
 import org.drools.learner.tools.ObjectFactory;
+import org.drools.learner.tools.ReteStatistics;
+import org.drools.learner.tools.Util;
 
 public class TriangleExample {
 	
@@ -36,7 +38,7 @@
 		}
 
 		// instantiate a learner for a specific object class and pass session to train
-		DecisionTree decision_tree; int ALGO = 600;
+		DecisionTree decision_tree; int ALGO = 702;
 		/* 
 		 * Single	1xx, Bag 	2xx, Boost 3xx
 		 * ID3 		x1x, C45 	x2x
@@ -68,14 +70,23 @@
 			decision_tree  = DecisionTreeFactory.createBoostedC45G(session, obj_class);
 			break;
 		case 500:
-			decision_tree = DecisionTreeFactory.createSingleC45E_StoppingCriteria(session, obj_class);
+			decision_tree = DecisionTreeFactory.createSingleC45E_Stopped(session, obj_class);
 			break;
-		case 600:
-			decision_tree = DecisionTreeFactory.createSingleCrossPrunnedStopC45E(session, obj_class);
-			break;
+//		case 600:
+//			decision_tree = DecisionTreeFactory.createSingleCrossPrunnedStopC45E(session, obj_class);
+//			break;
 //			case 3:
 //			decision_tree  = DecisionTreeFactory.createGlobal2(session, obj_class);
 //			break;
+		case 700:
+			decision_tree = DecisionTreeFactory.createSingleC45E_StoppedTest(session, obj_class);
+			break;
+		case 701:
+			decision_tree = DecisionTreeFactory.createBaggC45E_StoppedTest(session, obj_class);
+			break;
+		case 702:
+			decision_tree = DecisionTreeFactory.createBoostedC45E_StopTest(session, obj_class);
+			break;
 		default:
 			decision_tree  = DecisionTreeFactory.createSingleID3E(session, obj_class);
 
@@ -94,6 +105,10 @@
 		long end_time = System.currentTimeMillis();
 		System.out.println("Total time="+ (end_time-start_time));
 		
+		
+        ReteStatistics stats = new ReteStatistics(ruleBase);
+        stats.calculateNumberOfNodes();
+        stats.print( decision_tree.getSignature());
 //		logger.writeToDisk();
 
 		session.dispose();

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_car/Car.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_car/Car.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_car/Car.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -0,0 +1,44 @@
+package org.drools.examples.learner.structured_car;
+
+import org.drools.learner.tools.FieldAnnotation;
+
+public class Car {
+	
+	private Price overall_price;
+	private Tech tech_char;
+	
+	@FieldAnnotation(readingSeq = 6, target = true)
+	private String target; 		//"unacc", "acc", "good", "vgood"
+
+	public Car() {
+
+	}
+	public Price getOverall_price() {
+		return overall_price;
+	}
+
+	public void setOverall_price(Price overall_price) {
+		this.overall_price = overall_price;
+	}
+
+	public Tech getTech_char() {
+		return tech_char;
+	}
+
+	public void setTech_char(Tech tech_char) {
+		this.tech_char = tech_char;
+	}
+
+	public String getTarget() {
+		return target;
+	}
+
+	public void setTarget(String target) {
+		this.target = target;
+	}
+	
+	
+
+}
+
+


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_car/Car.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_car/Comfort.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_car/Comfort.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_car/Comfort.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -0,0 +1,42 @@
+package org.drools.examples.learner.structured_car;
+
+import org.drools.learner.tools.FieldAnnotation;
+
+public class Comfort {
+	@FieldAnnotation(readingSeq = 2)
+	private String doors;		//"2", "3", "4", "5more"
+	@FieldAnnotation(readingSeq = 3)
+	private String persons;		//"2", "4", "more"
+	@FieldAnnotation(readingSeq = 4)
+	private String lug_boot;	//"small", "med", "big"
+
+	public Comfort() {
+
+	}
+
+	public String getDoors() {
+		return doors;
+	}
+
+	public void setDoors(String doors) {
+		this.doors = doors;
+	}
+
+	public String getPersons() {
+		return persons;
+	}
+
+	public void setPersons(String persons) {
+		this.persons = persons;
+	}
+
+	public String getLug_boot() {
+		return lug_boot;
+	}
+
+	public void setLug_boot(String lug_boot) {
+		this.lug_boot = lug_boot;
+	}
+	
+	
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_car/Comfort.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_car/Price.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_car/Price.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_car/Price.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -0,0 +1,32 @@
+package org.drools.examples.learner.structured_car;
+
+import org.drools.learner.tools.FieldAnnotation;
+
+public class Price {
+	
+	@FieldAnnotation(readingSeq = 0)
+	private String buying;		//"vhigh", "high", "med", "low"
+	@FieldAnnotation(readingSeq = 1)
+	private String maint;		//"vhigh", "high", "med", "low"
+
+	public Price() {
+
+	}
+
+	public String getBuying() {
+		return buying;
+	}
+
+	public void setBuying(String buying) {
+		this.buying = buying;
+	}
+
+	public String getMaint() {
+		return maint;
+	}
+
+	public void setMaint(String maint) {
+		this.maint = maint;
+	}
+
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_car/Price.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_car/Tech.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_car/Tech.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_car/Tech.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -0,0 +1,33 @@
+package org.drools.examples.learner.structured_car;
+
+import org.drools.learner.tools.FieldAnnotation;
+
+public class Tech {
+	
+	private Comfort comfort;
+	@FieldAnnotation(readingSeq = 5)
+	private String safety; 		//"low", "med", "high"
+
+	public Tech() {
+
+	}
+
+	public Comfort getComfort() {
+		return comfort;
+	}
+
+	public void setComfort(Comfort comfort) {
+		this.comfort = comfort;
+	}
+
+	public String getSafety() {
+		return safety;
+	}
+
+	public void setSafety(String safety) {
+		this.safety = safety;
+	}
+	
+	
+
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_car/Tech.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/Employ.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/Employ.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/Employ.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -0,0 +1,31 @@
+package org.drools.examples.learner.structured_nursery;
+
+import org.drools.learner.tools.FieldAnnotation;
+
+public class Employ {
+	
+	@FieldAnnotation(readingSeq =0)
+	private String parents; 	//"usual","pretentious", "great_pret"
+	@FieldAnnotation(readingSeq =1)
+	private String has_nurs; 	//"proper","less_proper", "improper", "critical", "very_crit"
+	
+	
+	public Employ() {
+
+	}
+	public String getParents() {
+		return parents;
+	}
+	public void setParents(String parents) {
+		this.parents = parents;
+	}
+	public String getHas_nurs() {
+		return has_nurs;
+	}
+	public void setHas_nurs(String has_nurs) {
+		this.has_nurs = has_nurs;
+	}
+	
+	
+
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/Employ.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/Nursery.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/Nursery.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/Nursery.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -0,0 +1,44 @@
+package org.drools.examples.learner.structured_nursery;
+
+import org.drools.learner.tools.FieldAnnotation;
+
+public class Nursery {
+
+	@FieldAnnotation(readingSeq =8, target = true)
+	private String classnursery; //"not_recom", "recommend", "very_recom", "priority","spec_prior"
+
+	private Employ employ;
+	private StructFinan structFinance;
+	private SocHealth soc_health;
+	
+	public Nursery() {
+
+	}
+	public String getClassnursery() {
+		return classnursery;
+	}
+	public void setClassnursery(String classnursery) {
+		this.classnursery = classnursery;
+	}
+	public Employ getEmploy() {
+		return employ;
+	}
+	public void setEmploy(Employ employ) {
+		this.employ = employ;
+	}
+	
+	public StructFinan getStructFinance() {
+		return structFinance;
+	}
+	public void setStructFinance(StructFinan _structFinance) {
+		this.structFinance = _structFinance;
+	}
+	public SocHealth getSoc_health() {
+		return soc_health;
+	}
+	public void setSoc_health(SocHealth soc_health) {
+		this.soc_health = soc_health;
+	}
+	
+	
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/Nursery.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/SocHealth.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/SocHealth.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/SocHealth.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -0,0 +1,29 @@
+package org.drools.examples.learner.structured_nursery;
+
+import org.drools.learner.tools.FieldAnnotation;
+
+public class SocHealth {
+	
+	@FieldAnnotation(readingSeq =6)
+	private String social; 		//"nonprob","slightly_prob", "problematic"
+	@FieldAnnotation(readingSeq =7)
+	private String health; 		//"recommended","priority", "not_recom"
+	
+	public SocHealth() {
+
+	}
+	
+	public String getSocial() {
+		return social;
+	}
+	public void setSocial(String social) {
+		this.social = social;
+	}
+	public String getHealth() {
+		return health;
+	}
+	public void setHealth(String health) {
+		this.health = health;
+	}
+	
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/SocHealth.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/StructFinan.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/StructFinan.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/StructFinan.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -0,0 +1,37 @@
+package org.drools.examples.learner.structured_nursery;
+
+import org.drools.learner.tools.FieldAnnotation;
+
+public class StructFinan {
+	
+	private Structure struct;
+	
+	@FieldAnnotation(readingSeq =4)
+	private String housing; 	//"convenient","less_conv", "critical"
+	@FieldAnnotation(readingSeq =5)
+	private String finance; 	//"convenient","inconv"
+	
+	public StructFinan(){
+	
+	}
+	public Structure getStruct() {
+		return struct;
+	}
+	public void setStruct(Structure structure) {
+		this.struct = structure;
+	}
+	public String getHousing() {
+		return housing;
+	}
+	public void setHousing(String housing) {
+		this.housing = housing;
+	}
+	public String getFinance() {
+		return finance;
+	}
+	public void setFinance(String finance) {
+		this.finance = finance;
+	}
+	
+	
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/StructFinan.java
___________________________________________________________________
Name: svn:eol-style
   + native

Added: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/Structure.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/Structure.java	                        (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/Structure.java	2008-08-20 11:26:07 UTC (rev 21640)
@@ -0,0 +1,28 @@
+package org.drools.examples.learner.structured_nursery;
+
+import org.drools.learner.tools.FieldAnnotation;
+
+public class Structure {
+	
+	@FieldAnnotation(readingSeq =2)
+	private String children; 	//"1", "2", "3","more"
+	@FieldAnnotation(readingSeq =3)
+	private String form; 		//"complete","completed", "incomplete", "foster"
+	public Structure() {
+
+	}
+	
+	public String getChildren() {
+		return children;
+	}
+	public void setChildren(String children) {
+		this.children = children;
+	}
+	public String getForm() {
+		return form;
+	}
+	public void setForm(String form) {
+		this.form = form;
+	}
+
+}


Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/Structure.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/car_c45_one.drl
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/car_c45_one.drl	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/car_c45_one.drl	2008-08-20 11:26:07 UTC (rev 21640)
@@ -2,75 +2,1321 @@
 
 import org.drools.examples.learner.Car
 
-rule "#131 target= unacc  classifying 576.0 num of facts with rank:0.3333333333333333" 
+rule "#132 target= unacc  classifying 576.0 num of facts with rank:0.3333333333333333" 
 	 when
 		 $car_0 : Car(safety == "low", $target_label : target )
 	 then 
 		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
 end
 
-rule "#59 target= unacc  classifying 192.0 num of facts with rank:0.1111111111111111" 
+rule "#60 target= unacc  classifying 192.0 num of facts with rank:0.1111111111111111" 
 	 when
 		 $car_0 : Car(safety == "med", persons == "2", $target_label : target )
 	 then 
 		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
 end
 
-rule "#140 target= unacc  classifying 192.0 num of facts with rank:0.1111111111111111" 
+rule "#141 target= unacc  classifying 192.0 num of facts with rank:0.1111111111111111" 
 	 when
 		 $car_0 : Car(safety == "high", persons == "2", $target_label : target )
 	 then 
 		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
 end
 
-rule "#145 target= unacc  classifying 16.0 num of facts with rank:0.009259259259259259" 
+rule "#146 target= unacc  classifying 16.0 num of facts with rank:0.009259259259259259" 
 	 when
 		 $car_0 : Car(safety == "med", persons == "4", buying == "high", lug_boot == "small", $target_label : target )
 	 then 
 		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
 end
 
-rule "#172 target= unacc  classifying 16.0 num of facts with rank:0.009259259259259259" 
+rule "#173 target= unacc  classifying 16.0 num of facts with rank:0.009259259259259259" 
 	 when
 		 $car_0 : Car(safety == "med", persons == "more", buying == "high", lug_boot == "small", $target_label : target )
 	 then 
 		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
 end
 
-rule "#8 target= unacc  classifying 12.0 num of facts with rank:0.006944444444444444" 
+rule "#9 target= unacc  classifying 12.0 num of facts with rank:0.006944444444444444" 
 	 when
 		 $car_0 : Car(safety == "med", persons == "4", buying == "vhigh", maint == "vhigh", $target_label : target )
 	 then 
 		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
 end
 
-rule "#20 target= acc  classifying 12.0 num of facts with rank:0.006944444444444444" 
+rule "#21 target= acc  classifying 12.0 num of facts with rank:0.006944444444444444" 
 	 when
 		 $car_0 : Car(safety == "med", persons == "4", buying == "low", maint == "high", $target_label : target )
 	 then 
 		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
 end
 
-rule "#34 target= acc  classifying 12.0 num of facts with rank:0.006944444444444444" 
+rule "#35 target= acc  classifying 12.0 num of facts with rank:0.006944444444444444" 
 	 when
 		 $car_0 : Car(safety == "high", persons == "4", buying == "med", maint == "vhigh", $target_label : target )
 	 then 
 		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
 end
 
-rule "#41 target= unacc  classifying 12.0 num of facts with rank:0.006944444444444444" 
+rule "#42 target= unacc  classifying 12.0 num of facts with rank:0.006944444444444444" 
 	 when
 		 $car_0 : Car(safety == "med", persons == "more", buying == "vhigh", maint == "vhigh", $target_label : target )
 	 then 
 		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
 end
 
-rule "#43 target= unacc  classifying 12.0 num of facts with rank:0.006944444444444444" 
+rule "#44 target= unacc  classifying 12.0 num of facts with rank:0.006944444444444444" 
 	 when
 		 $car_0 : Car(safety == "med", persons == "4", buying == "vhigh", maint == "high", $target_label : target )
 	 then 
 		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
 end
 
-//THE END: Total number of facts correctly classified= 1052 over 1728.0
-//with 10 number of rules over 10 total number of rules 
+rule "#84 target= unacc  classifying 12.0 num of facts with rank:0.006944444444444444" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "high", maint == "vhigh", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#93 target= unacc  classifying 12.0 num of facts with rank:0.006944444444444444" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "4", buying == "high", maint == "vhigh", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#102 target= acc  classifying 12.0 num of facts with rank:0.006944444444444444" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "4", buying == "high", maint == "low", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#117 target= acc  classifying 12.0 num of facts with rank:0.006944444444444444" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "med", maint == "med", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#123 target= acc  classifying 12.0 num of facts with rank:0.006944444444444444" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "4", buying == "vhigh", maint == "med", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#149 target= acc  classifying 12.0 num of facts with rank:0.006944444444444444" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "4", buying == "low", maint == "vhigh", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#155 target= acc  classifying 12.0 num of facts with rank:0.006944444444444444" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "4", buying == "med", maint == "high", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#157 target= acc  classifying 12.0 num of facts with rank:0.006944444444444444" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "4", buying == "vhigh", maint == "low", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#162 target= acc  classifying 12.0 num of facts with rank:0.006944444444444444" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "4", buying == "high", maint == "high", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#169 target= acc  classifying 12.0 num of facts with rank:0.006944444444444444" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "4", buying == "high", maint == "med", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#180 target= unacc  classifying 12.0 num of facts with rank:0.006944444444444444" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "vhigh", maint == "high", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#2 target= acc  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "vhigh", maint == "low", lug_boot == "big", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#3 target= unacc  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "med", maint == "vhigh", lug_boot == "small", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#8 target= unacc  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "low", maint == "vhigh", lug_boot == "small", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#11 target= unacc  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "high", lug_boot == "big", maint == "vhigh", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#12 target= good  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "4", buying == "med", maint == "low", lug_boot == "small", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#17 target= good  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "4", buying == "low", maint == "low", lug_boot == "small", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#23 target= acc  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "4", buying == "low", maint == "high", lug_boot == "small", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#32 target= acc  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "high", lug_boot == "big", maint == "med", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#33 target= acc  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "vhigh", maint == "med", lug_boot == "big", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#34 target= good  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "low", maint == "med", lug_boot == "big", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#36 target= unacc  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "high", lug_boot == "med", doors == "2", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#40 target= unacc  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "vhigh", maint == "low", lug_boot == "small", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#48 target= acc  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "vhigh", maint == "low", lug_boot == "big", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#50 target= unacc  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "med", maint == "vhigh", lug_boot == "small", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#52 target= good  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "4", buying == "low", maint == "med", lug_boot == "small", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#54 target= unacc  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "high", lug_boot == "med", doors == "3", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#56 target= unacc  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "low", maint == "vhigh", lug_boot == "small", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#61 target= acc  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "high", lug_boot == "big", maint == "high", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#64 target= acc  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "med", maint == "vhigh", lug_boot == "big", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#70 target= unacc  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "vhigh", maint == "med", lug_boot == "small", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#74 target= acc  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "high", lug_boot == "big", maint == "low", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#76 target= acc  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "low", maint == "low", lug_boot == "small", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#77 target= vgood  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "med", maint == "low", lug_boot == "big", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (vgood )");
+end
+
+rule "#78 target= acc  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "high", lug_boot == "big", maint == "med", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#79 target= acc  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "vhigh", maint == "med", lug_boot == "big", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#82 target= good  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "low", maint == "med", lug_boot == "big", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#83 target= unacc  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "high", lug_boot == "med", doors == "2", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#89 target= acc  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "low", maint == "vhigh", lug_boot == "big", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#92 target= acc  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "med", maint == "low", lug_boot == "small", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#104 target= vgood  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "low", lug_boot == "big", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (vgood )");
+end
+
+rule "#109 target= acc  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "high", lug_boot == "big", maint == "high", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#112 target= good  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "low", maint == "low", lug_boot == "big", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#116 target= acc  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "med", maint == "high", lug_boot == "big", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#120 target= vgood  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "med", maint == "med", lug_boot == "big", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (vgood )");
+end
+
+rule "#121 target= acc  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "med", maint == "vhigh", lug_boot == "big", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#122 target= acc  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "4", buying == "med", maint == "med", lug_boot == "small", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#124 target= good  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "med", maint == "low", lug_boot == "big", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#128 target= vgood  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "high", lug_boot == "big", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (vgood )");
+end
+
+rule "#129 target= unacc  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "vhigh", maint == "med", lug_boot == "small", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#133 target= acc  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "high", lug_boot == "big", maint == "low", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#134 target= vgood  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "4", buying == "med", maint == "low", lug_boot == "big", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (vgood )");
+end
+
+rule "#135 target= unacc  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "med", maint == "high", lug_boot == "small", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#143 target= vgood  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "med", lug_boot == "big", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (vgood )");
+end
+
+rule "#144 target= acc  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "low", maint == "vhigh", lug_boot == "big", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#145 target= acc  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "low", maint == "med", lug_boot == "small", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#151 target= vgood  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "4", buying == "low", maint == "low", lug_boot == "big", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (vgood )");
+end
+
+rule "#156 target= unacc  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "high", lug_boot == "big", maint == "vhigh", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#158 target= good  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "low", maint == "low", lug_boot == "big", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#163 target= acc  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "med", maint == "high", lug_boot == "big", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#165 target= vgood  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "4", buying == "med", maint == "med", lug_boot == "big", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (vgood )");
+end
+
+rule "#168 target= good  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "med", maint == "low", lug_boot == "big", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#172 target= vgood  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "4", buying == "low", maint == "high", lug_boot == "big", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (vgood )");
+end
+
+rule "#179 target= unacc  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "med", maint == "high", lug_boot == "small", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#182 target= vgood  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "4", buying == "low", maint == "med", lug_boot == "big", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (vgood )");
+end
+
+rule "#185 target= unacc  classifying 4.0 num of facts with rank:0.0023148148148148147" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "vhigh", maint == "low", lug_boot == "small", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#1 target= acc  classifying 3.0 num of facts with rank:0.001736111111111111" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "low", maint == "high", doors == "4", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#6 target= acc  classifying 3.0 num of facts with rank:0.001736111111111111" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "high", maint == "high", doors == "5more", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#10 target= acc  classifying 3.0 num of facts with rank:0.001736111111111111" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "high", maint == "med", doors == "3", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#15 target= acc  classifying 3.0 num of facts with rank:0.001736111111111111" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "med", maint == "high", doors == "4", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#18 target= acc  classifying 3.0 num of facts with rank:0.001736111111111111" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "vhigh", doors == "3", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#31 target= acc  classifying 3.0 num of facts with rank:0.001736111111111111" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "low", maint == "high", doors == "5more", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#38 target= acc  classifying 3.0 num of facts with rank:0.001736111111111111" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "med", maint == "med", doors == "4", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#39 target= acc  classifying 3.0 num of facts with rank:0.001736111111111111" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "vhigh", maint == "low", doors == "5more", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#43 target= acc  classifying 3.0 num of facts with rank:0.001736111111111111" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "vhigh", maint == "low", doors == "3", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#51 target= acc  classifying 3.0 num of facts with rank:0.001736111111111111" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "vhigh", maint == "med", doors == "3", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#55 target= acc  classifying 3.0 num of facts with rank:0.001736111111111111" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "high", maint == "low", doors == "4", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#58 target= acc  classifying 3.0 num of facts with rank:0.001736111111111111" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "med", maint == "high", doors == "3", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#63 target= acc  classifying 3.0 num of facts with rank:0.001736111111111111" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "med", maint == "med", doors == "5more", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#66 target= acc  classifying 3.0 num of facts with rank:0.001736111111111111" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "vhigh", maint == "med", doors == "4", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#68 target= acc  classifying 3.0 num of facts with rank:0.001736111111111111" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "vhigh", doors == "4", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#81 target= acc  classifying 3.0 num of facts with rank:0.001736111111111111" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "high", maint == "low", doors == "5more", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#90 target= acc  classifying 3.0 num of facts with rank:0.001736111111111111" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "low", maint == "high", doors == "3", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#91 target= acc  classifying 3.0 num of facts with rank:0.001736111111111111" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "vhigh", maint == "low", doors == "4", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#98 target= acc  classifying 3.0 num of facts with rank:0.001736111111111111" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "vhigh", maint == "med", doors == "5more", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#101 target= acc  classifying 3.0 num of facts with rank:0.001736111111111111" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "med", maint == "high", doors == "5more", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#103 target= acc  classifying 3.0 num of facts with rank:0.001736111111111111" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "high", maint == "low", doors == "3", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#108 target= acc  classifying 3.0 num of facts with rank:0.001736111111111111" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "med", maint == "med", doors == "3", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#114 target= acc  classifying 3.0 num of facts with rank:0.001736111111111111" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "high", maint == "high", doors == "4", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#136 target= acc  classifying 3.0 num of facts with rank:0.001736111111111111" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "med", maint == "vhigh", doors == "3", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#140 target= acc  classifying 3.0 num of facts with rank:0.001736111111111111" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "high", maint == "med", doors == "4", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#153 target= acc  classifying 3.0 num of facts with rank:0.001736111111111111" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "high", maint == "high", doors == "3", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#161 target= acc  classifying 3.0 num of facts with rank:0.001736111111111111" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "high", maint == "med", doors == "5more", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#171 target= acc  classifying 3.0 num of facts with rank:0.001736111111111111" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "vhigh", doors == "5more", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#187 target= acc  classifying 3.0 num of facts with rank:0.001736111111111111" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "med", maint == "vhigh", doors == "5more", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#188 target= acc  classifying 3.0 num of facts with rank:0.001736111111111111" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "med", maint == "vhigh", doors == "4", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#4 target= acc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "low", maint == "med", lug_boot == "med", doors == "2", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#5 target= vgood  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "4", buying == "low", maint == "low", lug_boot == "med", doors == "4", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (vgood )");
+end
+
+rule "#7 target= acc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "low", maint == "med", lug_boot == "small", doors == "4", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#13 target= acc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "low", maint == "high", doors == "2", lug_boot == "med", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#14 target= good  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "low", maint == "low", lug_boot == "med", doors == "3", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#16 target= acc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "high", lug_boot == "med", doors == "4", maint == "high", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#19 target= good  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "low", maint == "med", lug_boot == "med", doors == "3", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#20 target= acc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "high", lug_boot == "med", doors == "5more", maint == "high", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#22 target= acc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "high", lug_boot == "med", doors == "4", maint == "med", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#24 target= unacc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "low", maint == "vhigh", lug_boot == "med", doors == "3", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#25 target= unacc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "high", lug_boot == "med", doors == "3", maint == "vhigh", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#26 target= acc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "low", maint == "med", lug_boot == "med", doors == "3", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#27 target= vgood  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "high", lug_boot == "med", doors == "3", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (vgood )");
+end
+
+rule "#28 target= vgood  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "4", buying == "low", maint == "med", lug_boot == "med", doors == "4", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (vgood )");
+end
+
+rule "#29 target= acc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "high", lug_boot == "med", doors == "3", maint == "high", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#30 target= acc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "low", maint == "low", lug_boot == "small", doors == "3", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#37 target= acc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "high", lug_boot == "small", doors == "3", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#41 target= acc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "vhigh", maint == "low", lug_boot == "med", doors == "5more", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#45 target= acc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "low", maint == "low", lug_boot == "med", doors == "2", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#46 target= unacc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "high", lug_boot == "med", doors == "4", maint == "vhigh", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#47 target= unacc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "med", maint == "high", lug_boot == "med", doors == "3", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#49 target= vgood  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "low", lug_boot == "med", doors == "3", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (vgood )");
+end
+
+rule "#53 target= unacc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "high", lug_boot == "med", doors == "5more", maint == "vhigh", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#57 target= good  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "4", buying == "low", maint == "med", lug_boot == "med", doors == "2", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#59 target= acc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "high", lug_boot == "med", doors == "5more", maint == "med", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#62 target= acc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "low", maint == "low", lug_boot == "med", doors == "3", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#65 target= unacc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "low", maint == "med", lug_boot == "small", doors == "2", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#67 target= acc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "vhigh", maint == "low", doors == "2", lug_boot == "big", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#69 target= acc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "med", maint == "high", lug_boot == "med", doors == "4", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#71 target= unacc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "low", maint == "vhigh", lug_boot == "med", doors == "2", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#72 target= unacc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "low", maint == "high", doors == "2", lug_boot == "small", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#73 target= acc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "med", maint == "med", doors == "2", lug_boot == "big", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#75 target= acc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "vhigh", maint == "med", lug_boot == "med", doors == "4", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#80 target= acc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "low", maint == "low", lug_boot == "small", doors == "4", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#85 target= unacc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "high", lug_boot == "small", doors == "2", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#86 target= good  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "4", buying == "low", maint == "low", lug_boot == "med", doors == "2", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#87 target= unacc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "med", maint == "med", doors == "2", lug_boot == "small", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#88 target= acc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "vhigh", maint == "low", doors == "2", lug_boot == "med", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#94 target= acc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "vhigh", doors == "2", lug_boot == "med", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#95 target= vgood  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "med", lug_boot == "med", doors == "3", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (vgood )");
+end
+
+rule "#96 target= unacc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "vhigh", maint == "low", doors == "2", lug_boot == "small", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#97 target= unacc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "vhigh", maint == "med", lug_boot == "med", doors == "2", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#99 target= acc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "med", maint == "med", doors == "2", lug_boot == "med", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#100 target= unacc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "med", maint == "high", lug_boot == "med", doors == "2", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#105 target= acc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "high", lug_boot == "med", doors == "3", maint == "med", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#106 target= good  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "low", lug_boot == "small", doors == "3", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#107 target= acc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "4", buying == "low", maint == "high", lug_boot == "med", doors == "2", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#110 target= unacc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "vhigh", maint == "low", lug_boot == "med", doors == "2", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#111 target= acc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "vhigh", maint == "low", lug_boot == "med", doors == "4", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#113 target= acc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "low", maint == "med", lug_boot == "small", doors == "5more", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#115 target= good  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "low", maint == "med", lug_boot == "med", doors == "4", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#118 target= acc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "low", maint == "vhigh", lug_boot == "med", doors == "4", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#119 target= vgood  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "4", buying == "low", maint == "low", lug_boot == "med", doors == "5more", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (vgood )");
+end
+
+rule "#125 target= good  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "low", maint == "low", lug_boot == "med", doors == "5more", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#126 target= acc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "low", maint == "vhigh", lug_boot == "med", doors == "3", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#127 target= acc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "med", maint == "high", lug_boot == "med", doors == "3", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#130 target= acc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "high", lug_boot == "med", doors == "4", maint == "low", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#131 target= unacc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "vhigh", maint == "low", lug_boot == "med", doors == "3", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#137 target= good  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "med", lug_boot == "small", doors == "3", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#138 target= unacc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "vhigh", maint == "med", lug_boot == "med", doors == "3", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#139 target= acc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "high", lug_boot == "med", doors == "3", maint == "low", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#142 target= acc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "low", maint == "vhigh", lug_boot == "med", doors == "5more", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#147 target= unacc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "low", maint == "low", lug_boot == "small", doors == "2", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#148 target= good  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "low", maint == "med", lug_boot == "med", doors == "5more", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#150 target= acc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "low", maint == "med", lug_boot == "small", doors == "3", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#152 target= good  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "low", lug_boot == "small", doors == "4", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#154 target= acc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "high", lug_boot == "med", doors == "5more", maint == "low", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#159 target= acc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "high", lug_boot == "small", doors == "5more", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#160 target= acc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "low", maint == "high", doors == "2", lug_boot == "big", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#164 target= acc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "med", maint == "high", lug_boot == "med", doors == "5more", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#166 target= acc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "vhigh", doors == "2", lug_boot == "big", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#167 target= acc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "more", buying == "low", maint == "low", lug_boot == "small", doors == "5more", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#170 target= vgood  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "4", buying == "low", maint == "med", lug_boot == "med", doors == "5more", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (vgood )");
+end
+
+rule "#174 target= good  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "med", lug_boot == "small", doors == "5more", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#175 target= vgood  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "4", buying == "low", maint == "high", lug_boot == "med", doors == "5more", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (vgood )");
+end
+
+rule "#176 target= acc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "vhigh", maint == "med", lug_boot == "med", doors == "5more", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#177 target= good  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "med", persons == "4", buying == "low", maint == "low", lug_boot == "med", doors == "4", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#178 target= good  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "low", lug_boot == "small", doors == "5more", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#181 target= good  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "med", lug_boot == "small", doors == "4", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#183 target= acc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "high", lug_boot == "small", doors == "4", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#184 target= vgood  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "4", buying == "low", maint == "high", lug_boot == "med", doors == "4", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (vgood )");
+end
+
+rule "#186 target= unacc  classifying 1.0 num of facts with rank:5.787037037037037E-4" 
+	 when
+		 $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "vhigh", doors == "2", lug_boot == "small", $target_label : target )
+	 then 
+		 System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+//THE END: Total number of facts correctly classified= 1576 over 1728.0
+//with 188 number of rules over 188 total number of rules 

Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/car_c45_one.stats
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/car_c45_one.stats	2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/car_c45_one.stats	2008-08-20 11:26:07 UTC (rev 21640)
@@ -1,4 +1,7 @@
 TESTING results: incorrect 0
 TESTING results: correct 1728
 TESTING results: unknown 0
-TESTING results: Total Number 1728
\ No newline at end of file
+TESTING results: Total Number 1728
+	&	OBJECT_TYPE_NODE	&	ALPHA_NODE	&	BETA_NODE	&	TERMINAL_NODE
+	&	1	&	278	&	0	&	188\\
+




More information about the jboss-svn-commits mailing list