Ignore:
Timestamp:
07/30/13 09:44:39 (11 years ago)
Author:
pharms
Message:
  • improved performance of task instance trie generation by using different symbol management strategies while creating the trie. This performance improvement is significant and allows to detect tasks now in a much faster manner.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/TaskInstanceTrie.java

    r1273 r1285  
    2020import java.util.Map; 
    2121 
     22import de.ugoe.cs.autoquest.tasktrees.treeifc.ITask; 
    2223import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskInstance; 
    2324import de.ugoe.cs.autoquest.tasktrees.treeifc.IUserSession; 
     
    3334 * @author Patrick Harms 
    3435 */ 
    35 public class TaskInstanceTrie extends Trie<ITaskInstance> { 
     36class TaskInstanceTrie extends Trie<ITaskInstance> { 
    3637 
    3738    /**  */ 
     
    4344     * </p> 
    4445     */ 
    45     private TaskComparator comparator; 
    46  
     46    private TaskHandlingStrategy taskStrategy; 
     47     
    4748    /** 
    4849     * <p> 
     
    5253     * @param taskComparator2 
    5354     */ 
    54     public TaskInstanceTrie(TaskComparator taskComparator) { 
    55         super(taskComparator); 
    56         this.comparator = taskComparator; 
     55    public TaskInstanceTrie(TaskHandlingStrategy taskStrategy) { 
     56        super(taskStrategy); 
     57        this.taskStrategy = taskStrategy; 
    5758    } 
    5859 
     
    6566        } 
    6667         
    67         SymbolMap<ITaskInstance, List<ITaskInstance>> equalTaskInstancesMap = 
    68             new SymbolMap<ITaskInstance, List<ITaskInstance>>(comparator); 
    69          
    70         Map<ITaskInstance, List<ITaskInstance>> taskInstancesMap = 
    71             new HashMap<ITaskInstance, List<ITaskInstance>>(); 
     68        SymbolMap<ITaskInstance, Counter> equalTaskInstancesMap = 
     69            taskStrategy.createSymbolMap(); 
     70         
     71        Map<ITask, Counter> instanceCountMap = new HashMap<ITask, Counter>(); 
    7272         
    7373        System.out.println("preparing training"); 
     74        int noOfTaskInstances = 0; 
    7475        for (IUserSession session : userSessions) { 
    7576            for (ITaskInstance taskInstance : session) { 
    76                 List<ITaskInstance> equalTaskInstances = 
    77                     equalTaskInstancesMap.getValue(taskInstance); 
    78                  
    79                 if (equalTaskInstances == null) { 
    80                     equalTaskInstances = new LinkedList<ITaskInstance>(); 
    81                     equalTaskInstancesMap.addSymbol(taskInstance, equalTaskInstances); 
     77                Counter counter = equalTaskInstancesMap.getValue(taskInstance); 
     78                 
     79                if (counter == null) { 
     80                    counter = new Counter(); 
     81                    equalTaskInstancesMap.addSymbol(taskInstance, counter); 
    8282                } 
    8383                 
    84                 equalTaskInstances.add(taskInstance); 
    85                 taskInstancesMap.put(taskInstance, equalTaskInstances); 
    86             } 
    87         } 
    88          
    89         System.out.println("performing training"); 
     84                counter.count++; 
     85                instanceCountMap.put(taskInstance.getTask(), counter); 
     86                 
     87                noOfTaskInstances++; 
     88            } 
     89        } 
     90         
     91        System.out.println("performing training of " + noOfTaskInstances + " task instances"); 
     92        Counter processedTaskInstances = new Counter(); 
     93        int counterRecheckAt = noOfTaskInstances / 10; // recheck the maximum count after each 
     94                                                       // 10% of processed task instances 
    9095        for (IUserSession session : userSessions) { 
    91             train(session, maxOrder, taskInstancesMap); 
     96            train(session, maxOrder, instanceCountMap, processedTaskInstances, counterRecheckAt); 
    9297        }       
    9398         
     
    122127     *  
    123128     */ 
    124     private void train(IUserSession                            userSession, 
    125                        int                                     maxOrder, 
    126                        Map<ITaskInstance, List<ITaskInstance>> taskInstancesMap) 
     129    private void train(IUserSession        userSession, 
     130                       int                 maxOrder, 
     131                       Map<ITask, Counter> taskInstanceCountMap, 
     132                       Counter             processedTaskInstances, 
     133                       int                 counterRecheckAt) 
    127134    { 
    128135        List<ITaskInstance> executedTasks = userSession.getExecutedTasks(); 
     
    130137        List<ITaskInstance> subsequence = new LinkedList<ITaskInstance>(); 
    131138         
    132         int numberOfTrainedSubsequences = 0; 
    133139        int sequenceMaxCount = 0; 
    134140         
    135141        for (ITaskInstance currentTaskInstance : executedTasks) { 
    136             int occurrenceCount = taskInstancesMap.get(currentTaskInstance).size(); 
    137              
    138             if ((numberOfTrainedSubsequences % 10) == 0) { 
     142             
     143            int occurrenceCount = taskInstanceCountMap.get(currentTaskInstance.getTask()).count; 
     144             
     145            if (processedTaskInstances.count >= counterRecheckAt) { 
    139146                sequenceMaxCount = getCurrentSequenceMaxCount(); 
     147                processedTaskInstances.count = 0; 
    140148            } 
    141149             
     
    158166                    add(subsequence); 
    159167                    subsequence.remove(0); 
    160  
    161                     numberOfTrainedSubsequences++; 
    162168                } 
    163169            } 
     170             
     171            processedTaskInstances.count++; 
    164172        } 
    165173         
     
    219227    } 
    220228     
     229    /** 
     230     * @author Patrick Harms 
     231     */ 
     232    private static class Counter { 
     233        int count = 0; 
     234    } 
     235         
    221236} 
Note: See TracChangeset for help on using the changeset viewer.