001 package jcolibri.test.test15; 002 003 import jcolibri.casebase.CachedLinealCaseBase; 004 import jcolibri.cbraplications.StandardCBRApplication; 005 import jcolibri.cbrcore.CBRCaseBase; 006 import jcolibri.cbrcore.CBRQuery; 007 import jcolibri.cbrcore.Connector; 008 import jcolibri.connector.PlainTextConnector; 009 import jcolibri.evaluation.Evaluator; 010 import jcolibri.exception.ExecutionException; 011 import jcolibri.extensions.maintenance_evaluation.DetailedEvaluationReport; 012 import jcolibri.method.reuse.classification.KNNClassificationConfig; 013 import jcolibri.method.revise.classification.BasicClassificationOracle; 014 import jcolibri.method.revise.classification.ClassificationOracle; 015 016 import org.apache.commons.logging.Log; 017 018 /** 019 * Evaluable application which performs case-based maintenance. It is a normal 020 * StandardCBRApplication that stores its results in the DetailedEvaluationReport 021 * object obtained from Evaluator.getEvaluationReport(). 022 * @author Lisa Cummins 023 * @version 1.0 024 */ 025 public class IrisMaintainedEvaluableApp implements StandardCBRApplication 026 { 027 Connector _connector; 028 CBRCaseBase _caseBase; 029 KNNClassificationConfig irisSimConfig; 030 031 private Log log; 032 033 /** 034 * The name of the data series containing this application's stored results 035 */ 036 public static final String DATA_SERIES_NAME = "RENN Iris Prediction Cost"; 037 038 public IrisMaintainedEvaluableApp(KNNClassificationConfig irisSimConfig) 039 { this.irisSimConfig = irisSimConfig; 040 } 041 042 /* (non-Javadoc) 043 * @see jcolibri.cbraplications.BasicCBRApplication#configure() 044 */ 045 public void configure() throws ExecutionException 046 { try 047 { _connector = new PlainTextConnector(); 048 _connector.initFromXMLfile(jcolibri.util.FileIO.findFile("jcolibri/test/test15/plaintextconfig.xml")); 049 _caseBase = new CachedLinealCaseBase(); 050 051 } catch (Exception e) 052 { throw new ExecutionException(e); 053 } 054 log = org.apache.commons.logging.LogFactory.getLog(this.getClass()); 055 } 056 057 058 /* (non-Javadoc) 059 * @see jcolibri.cbraplications.BasicCBRApplication#preCycle() 060 */ 061 public CBRCaseBase preCycle() throws ExecutionException 062 { _caseBase.init(_connector); 063 return _caseBase; 064 } 065 066 /* (non-Javadoc) 067 * @see jcolibri.cbraplications.BasicCBRApplication#cycle() 068 */ 069 public void cycle(CBRQuery query) throws ExecutionException 070 { log.info("Query: "+ query.getDescription()); 071 072 ClassificationOracle oracle = new BasicClassificationOracle(); 073 double predictionCost = oracle.getPredictionCost(query, _caseBase, irisSimConfig); 074 075 // Now we add the cost of the prediction to the series DATA_SERIES_NAME. 076 ((DetailedEvaluationReport)(Evaluator.getEvaluationReport())). 077 addDataToSeries(DATA_SERIES_NAME, query, predictionCost); 078 } 079 080 /* (non-Javadoc) 081 * @see jcolibri.cbraplications.BasicCBRApplication#postCycle() 082 */ 083 public void postCycle() throws ExecutionException 084 { _connector.close(); 085 } 086 }