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