Ignore:
Timestamp:
08/23/14 17:19:39 (10 years ago)
Author:
rkrimmel
Message:

HarmonizeIterationinstancemodel? DOES need to be called after iteration detection....

Location:
branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/matrix/ObjectDistanceSubstitionMatrix.java

    r1687 r1692  
    33 
    44import java.util.HashMap; 
     5import java.util.HashSet; 
    56import java.util.Iterator; 
    67 
     
    1112import de.ugoe.cs.autoquest.tasktrees.treeifc.ITask; 
    1213import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskInstance; 
    13 import de.ugoe.cs.autoquest.usageprofiles.SymbolMap; 
    1414 
    1515 
    1616public class ObjectDistanceSubstitionMatrix implements SubstitutionMatrix { 
    1717 
    18         // private ArrayList<int[][]> matrix; 
    1918        HashMap<Integer, Integer> idmapping; 
    2019        private TriangleMatrix matrix; 
    21         private SymbolMap<ITaskInstance, ITask> uniqueTasks; 
     20        private HashSet<ITask> uniqueTasks; 
    2221        private double gapPenalty;  
    2322        private int index = 0; 
     
    2625         
    2726        public ObjectDistanceSubstitionMatrix( 
    28                         SymbolMap<ITaskInstance, ITask> uniqueTasks,float positiveThreshold, int gapPenalty) { 
     27                        HashSet<ITask> uniqueTasks,float positiveThreshold, int gapPenalty) { 
    2928                this.uniqueTasks = uniqueTasks; 
    3029                this.positiveThreshold = positiveThreshold; 
     
    4948                int index2=-1; 
    5049                float distance=0; 
    51                  
    52                 //TODO: Nicht ueber Symbols sondern ueber values, wenn Eventtask -> getInstances()->get(0) 
    53                 for (Iterator<ITaskInstance> it = uniqueTasks.getSymbols().iterator(); it 
    54                                 .hasNext();) { 
    55                         Object obj1 = it.next(); 
    56                         for (Iterator<ITaskInstance> jt = uniqueTasks.getSymbols() 
    57                                         .iterator(); jt.hasNext();) { 
    58                          
     50                for (Iterator<ITask> it = uniqueTasks.iterator(); it.hasNext();) { 
     51                        ITask task1 = it.next(); 
     52                        for (Iterator<ITask> jt = uniqueTasks.iterator(); jt.hasNext();) { 
     53                                ITask task2 = jt.next(); 
     54                                ITaskInstance ti1 = null; 
     55                                ITaskInstance ti2 = null; 
     56                                //TODO This seems ugly 
     57                                if(task1.getInstances().size() > 0) { 
     58                                        ti1 = (ITaskInstance) task1.getInstances().iterator().next(); 
     59                                } 
     60                                if(task2.getInstances().size() > 0) { 
     61                                        ti2 = (ITaskInstance) task2.getInstances().iterator().next(); 
     62                                } 
    5963                                IEventTaskInstance eti1 = null; 
    60                                 ITask task1 = null; 
     64                                IEventTaskInstance eti2 = null; 
    6165                                 
    62                                 IEventTaskInstance eti2 = null; 
    63                                 ITask task2 = null; 
    6466                                 
    65                                 Object obj2 = jt.next(); 
    66                                  
    67                                 if (obj1 instanceof IEventTaskInstance && obj2 instanceof IEventTaskInstance) { 
    68                                         eti1 = (IEventTaskInstance) obj1; 
     67                                if (ti1 instanceof IEventTaskInstance && ti2 instanceof IEventTaskInstance) { 
     68                                        eti1 = (IEventTaskInstance) ti1; 
    6969                                        index1 = getIndex(eti1); 
    70                                         eti2 = (IEventTaskInstance) obj2; 
     70                                        eti2 = (IEventTaskInstance) ti2; 
    7171                                        index2 = getIndex(eti2); 
    7272                                        distance = distanceBetweenInstances(eti1,eti2); 
    7373                                } 
    74                                 else if(obj1 instanceof IEventTaskInstance &&  !(obj2 instanceof IEventTaskInstance)) { 
    75                                         task2 = ((ITaskInstance) obj2).getTask(); 
     74                                else if(ti1 instanceof IEventTaskInstance &&  !(ti2 instanceof IEventTaskInstance)) { 
     75                                        task1 = ((ITaskInstance) ti1).getTask(); 
    7676                                        index2 = getIndex(task2); 
    77                                         eti1 = (IEventTaskInstance) obj1; 
     77                                        eti1 = (IEventTaskInstance) ti1; 
    7878                                        index1 = getIndex(eti1); 
    7979                                        distance = distanceBetweenTaskAndInstance(task2,eti1); 
    8080                                } 
    81                                 else if(!(obj1 instanceof IEventTaskInstance) && obj2 instanceof IEventTaskInstance) { 
    82                                         task1 = ((ITaskInstance) obj1).getTask(); 
     81                                else if(!(ti1 instanceof IEventTaskInstance) && ti2 instanceof IEventTaskInstance) { 
    8382                                        index1 = getIndex(task1); 
    84                                         eti2 = (IEventTaskInstance) obj2; 
     83                                        eti2 = (IEventTaskInstance) ti2; 
    8584                                        index2 = getIndex(eti2); 
    8685                                        distance = distanceBetweenTaskAndInstance(task1,eti2); 
    8786                                } 
    88                                 else if(!(obj2 instanceof IEventTaskInstance) && !(obj2 instanceof IEventTaskInstance)) { 
    89                                         task1 = ((ITaskInstance) obj1).getTask(); 
     87                                else if(!(ti1 instanceof IEventTaskInstance) && !(ti2 instanceof IEventTaskInstance)) { 
    9088                                        index1 = getIndex(task1); 
    91                                         task2 = ((ITaskInstance) obj2).getTask(); 
    9289                                        index2 = getIndex(task2); 
    9390                                        distance = distanceBetweenTasks(task1,task2); 
     
    103100        } 
    104101 
    105          
     102        //TODO: Calculate distance here 
    106103        private float distanceBetweenTaskAndInstance(ITask task1, IEventTaskInstance eti) { 
    107104                return 0; 
    108105        } 
    109106         
     107        //TODO: Calculate distance here 
    110108        private float distanceBetweenTasks(ITask task1, ITask task2) { 
    111109                return 0; 
     
    158156                }  
    159157                else { 
    160                         System.out.println("Firsttask: " +taskId1); 
    161                         System.out.println("Secondtask: " + taskId2); 
    162                         System.out.println(idmapping); 
     158                         
    163159                        Integer first = idmapping.get(taskId1); 
    164160                        Integer second = idmapping.get(taskId2); 
    165                         System.out.println("First: " + first + " Second: " + second); 
    166                         System.out.println("Matrix: " + matrix.get(first, second)); 
    167161                        return matrix.get(first,second);         
    168162                } 
  • branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/RuleUtils.java

    r1690 r1692  
    1515package de.ugoe.cs.autoquest.tasktrees.temporalrelation; 
    1616 
     17import de.ugoe.cs.autoquest.tasktrees.treeifc.IIteration; 
     18import de.ugoe.cs.autoquest.tasktrees.treeifc.IIterationInstance; 
    1719import de.ugoe.cs.autoquest.tasktrees.treeifc.IMarkingTemporalRelationship; 
    1820import de.ugoe.cs.autoquest.tasktrees.treeifc.IOptional; 
     
    145147 
    146148                        } else if (tempTask.getType() == "sequence") { 
    147                                 //System.out.println("Adding SequenceInstance " + parent.get(startIndex) + " to " + tempTask.getType()); 
    148                                 taskBuilder.addChild(subsequence,parent.get(startIndex)); 
     149                                //ISequenceInstance sequence = taskFactory.createNewTaskInstance((ISequence) tempTask); 
     150                                //taskBuilder.addChild(sequence, parent.get(i)); 
     151                                //taskBuilder.addChild(subsequence,sequence); 
     152                                taskBuilder.addChild(subsequence, parent.get(startIndex)); 
    149153                        } else if (tempTask.getType() == "iteration") { 
     154                                //IIterationInstance iteration = taskFactory.createNewTaskInstance((IIteration) tempTask); 
     155                                //taskBuilder.addChild(iteration, parent.get(startIndex)); 
     156                                //taskBuilder.addChild(subsequence, iteration); 
    150157                                taskBuilder.addChild(subsequence, parent.get(startIndex)); 
    151158                                //System.out.println("Adding IterationInstance " + parent.get(startIndex) + " to " + tempTask.getType()); 
  • branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/SequenceForTaskDetectionRuleAlignment.java

    r1690 r1692  
    3838import de.ugoe.cs.autoquest.tasktrees.treeifc.IOptional; 
    3939import de.ugoe.cs.autoquest.tasktrees.treeifc.ISelection; 
     40import de.ugoe.cs.autoquest.tasktrees.treeifc.ISelectionInstance; 
    4041import de.ugoe.cs.autoquest.tasktrees.treeifc.ISequence; 
    4142import de.ugoe.cs.autoquest.tasktrees.treeifc.ISequenceInstance; 
     
    138139        public RuleApplicationResult apply(List<IUserSession> sessions) { 
    139140                RuleApplicationData appData = new RuleApplicationData(sessions); 
     141                 
    140142                harmonizeEventTaskInstancesModel(appData); 
    141                  
    142143                do { 
    143144                        iteration++; 
     145                         
    144146                        appData.detectedAndReplacedTasks = false; 
    145147                        appData.getStopWatch().start("whole loop");  
     
    364366                        } 
    365367                } 
    366         } 
     368                   
     369        for (Map.Entry<IIteration, List<IIterationInstance>> entry : iterationInstances.entrySet()) 
     370        { 
     371            harmonizeIterationInstancesModel(entry.getKey(), entry.getValue()); 
     372        } 
     373        } 
     374 
     375         
     376        /** 
     377     * <p> 
     378     * TODO clarify why this is done 
     379     * </p> 
     380     */ 
     381    private void harmonizeIterationInstancesModel(IIteration               iteration, 
     382                                                  List<IIterationInstance> iterationInstances) 
     383    { 
     384        List<ITask> iteratedTaskVariants = new LinkedList<ITask>(); 
     385        TaskInstanceComparator comparator = preparationTaskHandlingStrategy.getTaskComparator(); 
     386         
     387        // merge the lexically different variants of iterated task to a unique list  
     388        for (IIterationInstance iterationInstance : iterationInstances) { 
     389            for (ITaskInstance executionVariant : iterationInstance) { 
     390                ITask candidate = executionVariant.getTask(); 
     391             
     392                boolean found = false; 
     393                for (ITask taskVariant : iteratedTaskVariants) { 
     394                    if (comparator.areLexicallyEqual(taskVariant, candidate)) { 
     395                        taskBuilder.setTask(executionVariant, taskVariant); 
     396                        found = true; 
     397                        break; 
     398                    } 
     399                } 
     400                 
     401                if (!found) { 
     402                    iteratedTaskVariants.add(candidate); 
     403                } 
     404            } 
     405        } 
     406         
     407        // if there are more than one lexically different variant of iterated tasks, adapt the 
     408        // iteration model to be a selection of different variants. In this case also adapt 
     409        // the generated iteration instances to correctly contain selection instances. If there 
     410        // is only one variant of an iterated task, simply set this as the marked task of the 
     411        // iteration. In this case, the instances can be preserved as is 
     412        if (iteratedTaskVariants.size() > 1) { 
     413            ISelection selection = taskFactory.createNewSelection(); 
     414             
     415            for (ITask variant : iteratedTaskVariants) { 
     416                taskBuilder.addChild(selection, variant); 
     417            } 
     418             
     419            taskBuilder.setMarkedTask(iteration, selection); 
     420             
     421            for (IIterationInstance instance : iterationInstances) { 
     422                for (int i = 0; i < instance.size(); i++) { 
     423                    ISelectionInstance selectionInstance = 
     424                        taskFactory.createNewTaskInstance(selection); 
     425                    taskBuilder.setChild(selectionInstance, instance.get(i)); 
     426                    taskBuilder.setTaskInstance(instance, i, selectionInstance); 
     427                } 
     428            } 
     429        } 
     430        else { 
     431            taskBuilder.setMarkedTask(iteration, iteratedTaskVariants.get(0)); 
     432        } 
     433    } 
     434 
    367435 
    368436        ISequence matchAsSequence(RuleApplicationData appData, Match m) { 
Note: See TracChangeset for help on using the changeset viewer.