001/** 002 * Test7.java 003 * jCOLIBRI2 framework. 004 * @author Lisa Cummins 005 * GAIA - Group for Artificial Intelligence Applications 006 * http://gaia.fdi.ucm.es 007 * 03/05/2007 008 */ 009package es.ucm.fdi.gaia.jcolibri.test.test7; 010 011import java.util.Collection; 012 013import org.apache.log4j.LogManager; 014 015import es.ucm.fdi.gaia.jcolibri.casebase.LinealCaseBase; 016import es.ucm.fdi.gaia.jcolibri.cbraplications.StandardCBRApplication; 017import es.ucm.fdi.gaia.jcolibri.cbrcore.Attribute; 018import es.ucm.fdi.gaia.jcolibri.cbrcore.CBRCase; 019import es.ucm.fdi.gaia.jcolibri.cbrcore.CBRCaseBase; 020import es.ucm.fdi.gaia.jcolibri.cbrcore.CBRQuery; 021import es.ucm.fdi.gaia.jcolibri.cbrcore.Connector; 022import es.ucm.fdi.gaia.jcolibri.connector.PlainTextConnector; 023import es.ucm.fdi.gaia.jcolibri.exception.ExecutionException; 024import es.ucm.fdi.gaia.jcolibri.method.maintenance.TwoStepCaseBaseEditMethod; 025import es.ucm.fdi.gaia.jcolibri.method.maintenance.algorithms.ICFFull; 026import es.ucm.fdi.gaia.jcolibri.method.maintenance.algorithms.ICFRedundancyRemoval; 027import es.ucm.fdi.gaia.jcolibri.method.maintenance.algorithms.RENNNoiseReduction; 028import es.ucm.fdi.gaia.jcolibri.method.retrieve.NNretrieval.similarity.global.Average; 029import es.ucm.fdi.gaia.jcolibri.method.retrieve.NNretrieval.similarity.local.Interval; 030import es.ucm.fdi.gaia.jcolibri.method.reuse.classification.KNNClassificationConfig; 031import es.ucm.fdi.gaia.jcolibri.method.reuse.classification.SimilarityWeightedVotingMethod; 032import es.ucm.fdi.gaia.jcolibri.test.main.SwingProgressBar; 033 034/** 035 * This example shows how to run maintenance algorithms over the case base. 036 * The "class" of the case is defined by the id attribute of the solution. 037 * @author Lisa Cummins 038 * @version 1.0 039 */ 040public class Test7 implements StandardCBRApplication { 041 042 Connector _connector; 043 CBRCaseBase _caseBase; 044 045 046 /* (non-Javadoc) 047 * @see jcolibri.cbraplications.StandardCBRApplication#configure() 048 */ 049 public void configure() throws ExecutionException { 050 try{ 051 _connector = new PlainTextConnector(); 052 _connector.initFromXMLfile(es.ucm.fdi.gaia.jcolibri.util.FileIO.findFile("es/ucm/fdi/gaia/jcolibri/test/test7/plaintextconfig.xml")); 053 _caseBase = new LinealCaseBase(); 054 } catch (Exception e){ 055 throw new ExecutionException(e); 056 } 057 058 } 059 060 /* (non-Javadoc) 061 * @see jcolibri.cbraplications.StandardCBRApplication#preCycle() 062 */ 063 public CBRCaseBase preCycle() throws ExecutionException { 064 _caseBase.init(_connector); 065 return _caseBase; 066 } 067 068 /* (non-Javadoc) 069 * @see jcolibri.cbraplications.StandardCBRApplication#cycle() 070 */ 071 public void cycle(CBRQuery q) throws ExecutionException { 072 073 // Configure KNN 074 KNNClassificationConfig irisSimConfig = new KNNClassificationConfig(); 075 076 irisSimConfig.setDescriptionSimFunction(new Average()); 077 irisSimConfig.addMapping(new Attribute("sepalLength",IrisDescription.class), new Interval(3.6)); 078 irisSimConfig.addMapping(new Attribute("sepalWidth",IrisDescription.class), new Interval(2.4)); 079 irisSimConfig.addMapping(new Attribute("petalLength",IrisDescription.class), new Interval(5.9)); 080 irisSimConfig.addMapping(new Attribute("petalWidth", IrisDescription.class), new Interval(2.4)); 081 irisSimConfig.setClassificationMethod(new SimilarityWeightedVotingMethod()); 082 irisSimConfig.setK(3); 083 084 // Run a 2 step Maintenance method 085 TwoStepCaseBaseEditMethod edit = new ICFFull(new RENNNoiseReduction(), new ICFRedundancyRemoval()); 086 Collection<CBRCase> deleted = edit.retrieveCasesToDelete(_caseBase.getCases(), irisSimConfig); 087 088 System.out.println(); 089 System.out.println("Num Cases deleted by Alg: " + deleted.size()); 090 System.out.println("Cases deleted by Alg: "); 091 for(CBRCase c: deleted) 092 { System.out.println(c.getID()); 093 } 094 } 095 096 /* (non-Javadoc) 097 * @see jcolibri.cbraplications.StandardCBRApplication#postCycle() 098 */ 099 public void postCycle() throws ExecutionException { 100 _connector.close(); 101 } 102 103 104 /** 105 * @param args 106 */ 107 public static void main(String[] args) { 108 Test7 test = new Test7(); 109 110 //SwingProgressBar shows the progress 111 es.ucm.fdi.gaia.jcolibri.util.ProgressController.clear(); 112 es.ucm.fdi.gaia.jcolibri.util.ProgressController.register(new SwingProgressBar(),RENNNoiseReduction.class); 113 es.ucm.fdi.gaia.jcolibri.util.ProgressController.register(new SwingProgressBar(),ICFRedundancyRemoval.class); 114 115 116 try { 117 test.configure(); 118 test.preCycle(); 119 test.cycle(null); 120 } catch (ExecutionException e) { 121 LogManager.getLogger(Test7.class).error(e); 122 } 123 124 } 125 126}