001 /** 002 * AskingAndProposingPreferenceElicitation.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 * 05/11/2007 008 */ 009 package jcolibri.extensions.recommendation.askingAndProposing; 010 011 import java.util.Collection; 012 import java.util.HashMap; 013 import java.util.Map; 014 015 import jcolibri.cbrcore.Attribute; 016 import jcolibri.cbrcore.CBRCase; 017 import jcolibri.cbrcore.CBRQuery; 018 import jcolibri.exception.ExecutionException; 019 import jcolibri.extensions.recommendation.askingAndProposing.DisplayCasesIfNumberAndChangeNavigation.NavigationMode; 020 import jcolibri.extensions.recommendation.navigationByAsking.ObtainQueryWithAttributeQuestionMethod; 021 import jcolibri.extensions.recommendation.navigationByAsking.SelectAttributeMethod; 022 import jcolibri.extensions.recommendation.navigationByProposing.CriticalUserChoice; 023 import jcolibri.extensions.recommendation.navigationByProposing.queryElicitation.MoreLikeThis; 024 025 /** 026 * Method that implements the Preference elicitation task for the Expert Clerk system.<br> 027 * See recommender 8 for details.<br> 028 * In NbA it elicits the query asking for the value of an attribute.<br> 029 * In NbP it uses the MoreLikeThis method. 030 * 031 * @author Juan A. Recio-Garcia 032 * @author Developed at University College Cork (Ireland) in collaboration with Derek Bridge. 033 * @version 1.0 034 * @see jcolibri.test.recommenders.rec8.Houses8 035 */ 036 public class AskingAndProposingPreferenceElicitation 037 { 038 039 private static NavigationMode mode = NavigationMode.NBA; 040 041 /** 042 * Changes the navigation type. 043 */ 044 public static void changeTo(NavigationMode _mode) 045 { 046 mode = _mode; 047 } 048 049 /** 050 * Executes the preference elicitation. <br> 051 * If NbA mode it obtains a new query using the ObtainQueryWithAttributeQuestionMethod.<br> 052 * If NBP mode it revises the query using MoreLikeThis.<br> 053 * @param query to elicit 054 * @param cases is the working cases set 055 * @param sam is the method used to obtain the next attribute to ask (only in NbA mode). 056 * @param cuc is the user critique in NbP mode. 057 * @throws ExecutionException if any error. 058 */ 059 public static void doPreferenceElicitation(CBRQuery query, Collection<CBRCase> cases, SelectAttributeMethod sam, CriticalUserChoice cuc) throws ExecutionException 060 { 061 if(mode == NavigationMode.NBA) 062 { 063 Attribute att = sam.getAttribute(cases, query); 064 Map<Attribute,String> labels = new HashMap<Attribute,String>(); 065 ObtainQueryWithAttributeQuestionMethod.obtainQueryWithAttributeQuestion(query, att, labels,cases); 066 } 067 else if(mode == NavigationMode.NBP) 068 { 069 new MoreLikeThis().reviseQuery(query, cuc.getSelectedCase(), cases); 070 } 071 072 } 073 }