001 /** 002 * EvaluableApp.java 003 * jCOLIBRI2 framework. 004 * @author Juan A. Recio-García. 005 * GAIA - Group for Artificial Intelligence Applications 006 * http://gaia.fdi.ucm.es 007 * 11/05/2007 008 */ 009 package jcolibri.test.test8; 010 011 import java.util.Collection; 012 013 import jcolibri.casebase.CachedLinealCaseBase; 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.DataBaseConnector; 021 import jcolibri.evaluation.Evaluator; 022 import jcolibri.exception.ExecutionException; 023 import jcolibri.method.retrieve.RetrievalResult; 024 import jcolibri.method.retrieve.NNretrieval.NNConfig; 025 import jcolibri.method.retrieve.NNretrieval.NNScoringMethod; 026 import jcolibri.method.retrieve.NNretrieval.similarity.global.Average; 027 import jcolibri.method.retrieve.NNretrieval.similarity.local.Equal; 028 import jcolibri.method.retrieve.NNretrieval.similarity.local.Interval; 029 030 import org.apache.commons.logging.Log; 031 032 /** 033 * Evaluable application. It is a normal StandardCBRApplication that stores its results in the EvaluationReport object 034 * obtained from Evaluator.getEvaluationReport() 035 * @author Juan A. Recio-Garci 036 * @version 1.0 037 * 038 * @see jcolibri.evaluation.Evaluator 039 * @see jcolibri.evaluation.EvaluationReport 040 * 041 */ 042 public class EvaluableApp implements StandardCBRApplication { 043 044 Connector _connector; 045 CBRCaseBase _caseBase; 046 047 private Log log; 048 049 /* (non-Javadoc) 050 * @see jcolibri.cbraplications.BasicCBRApplication#configure() 051 */ 052 public void configure() throws ExecutionException{ 053 try{ 054 _connector = new DataBaseConnector(); 055 _connector.initFromXMLfile(jcolibri.util.FileIO.findFile("jcolibri/test/test8/databaseconfig.xml")); 056 _caseBase = new CachedLinealCaseBase(); 057 } catch (Exception e){ 058 throw new ExecutionException(e); 059 } 060 log = org.apache.commons.logging.LogFactory.getLog(this.getClass()); 061 062 } 063 064 065 /* (non-Javadoc) 066 * @see jcolibri.cbraplications.BasicCBRApplication#preCycle() 067 */ 068 public CBRCaseBase preCycle() throws ExecutionException { 069 _caseBase.init(_connector); 070 java.util.Collection<CBRCase> cases = _caseBase.getCases(); 071 for(CBRCase c: cases) 072 System.out.println(c); 073 return _caseBase; 074 } 075 076 /* (non-Javadoc) 077 * @see jcolibri.cbraplications.BasicCBRApplication#cycle() 078 */ 079 public void cycle(CBRQuery query) throws ExecutionException 080 { 081 NNConfig simConfig = new NNConfig(); 082 simConfig.setDescriptionSimFunction(new Average()); 083 simConfig.addMapping(new Attribute("Accomodation", TravelDescription.class), new Equal()); 084 Attribute duration = new Attribute("Duration", TravelDescription.class); 085 simConfig.addMapping(duration, new Interval(31)); 086 simConfig.setWeight(duration, 0.5); 087 simConfig.addMapping(new Attribute("HolidayType", TravelDescription.class), new Equal()); 088 simConfig.addMapping(new Attribute("NumberOfPersons", TravelDescription.class), new Equal()); 089 simConfig.addMapping(new Attribute("Price", TravelDescription.class), new Interval(4000)); 090 091 log.info("Query: "+ query.getDescription()); 092 093 094 Collection<RetrievalResult> eval = NNScoringMethod.evaluateSimilarity(_caseBase.getCases(), query, simConfig); 095 096 // Now we add the similarity of the most similar case to the serie "Similarity". 097 Evaluator.getEvaluationReport().addDataToSeries("Similarity", new Double(eval.iterator().next().getEval())); 098 } 099 100 /* (non-Javadoc) 101 * @see jcolibri.cbraplications.BasicCBRApplication#postCycle() 102 */ 103 public void postCycle() throws ExecutionException { 104 this._caseBase.close(); 105 106 } 107 108 }