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}