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