source: branches/ralph/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/matrix/ObjectDistanceSubstitionMatrix.java @ 1572

Last change on this file since 1572 was 1572, checked in by rkrimmel, 10 years ago

Added parts of the PAL library, implemented UPGMA Algoritm for Feng Doolittle guide tree

File size: 3.6 KB
Line 
1package de.ugoe.cs.autoquest.tasktrees.alignment.matrix;
2
3
4import java.util.HashMap;
5import java.util.Iterator;
6
7
8import de.ugoe.cs.autoquest.eventcore.guimodel.IGUIElement;
9import de.ugoe.cs.autoquest.tasktrees.alignment.algorithms.AlignmentHelpers;
10import de.ugoe.cs.autoquest.tasktrees.treeifc.IEventTaskInstance;
11import de.ugoe.cs.autoquest.tasktrees.treeifc.ITask;
12import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskInstance;
13import de.ugoe.cs.autoquest.usageprofiles.SymbolMap;
14
15
16public class ObjectDistanceSubstitionMatrix implements SubstitutionMatrix {
17
18        // private ArrayList<int[][]> matrix;
19        HashMap<Integer, Integer> idmapping;
20        private TriangleMatrix matrix;
21        private SymbolMap<ITaskInstance, ITask> uniqueTasks;
22        private double gapPenalty;
23        private double positiveThreshold;
24       
25        public ObjectDistanceSubstitionMatrix(
26                        SymbolMap<ITaskInstance, ITask> uniqueTasks,float positiveThreshold) {
27                this.uniqueTasks = uniqueTasks;
28                this.positiveThreshold = positiveThreshold;
29                idmapping = new HashMap<Integer, Integer>();
30                matrix = new TriangleMatrix(uniqueTasks.size()+1);
31                gapPenalty = -5;
32               
33        }
34
35        @Override
36        public double getGapPenalty() {
37                return gapPenalty;
38        }
39
40        @Override
41        public void generate() {
42                int index = 0;
43                //TODO We need to determine this parameter before generating the matrix..
44                //float meandistance = 18;
45                //TODO We need to determine this parameter before generating the matrix..
46                float maxDistance =34;
47                for (Iterator<ITaskInstance> it = uniqueTasks.getSymbols().iterator(); it
48                                .hasNext();) {
49                        Object obj1 = it.next();
50                        IEventTaskInstance eti1 = null;
51                        if (obj1 instanceof IEventTaskInstance) {
52                                eti1 = (IEventTaskInstance) obj1;
53                        }
54                        //System.out.println(eti1.getTask().toString());
55               
56                        for (Iterator<ITaskInstance> jt = uniqueTasks.getSymbols()
57                                        .iterator(); jt.hasNext();) {
58                                IEventTaskInstance eti2 = null;
59                                Object obj2 = jt.next();
60                                if (obj2 instanceof IEventTaskInstance) {
61                                        eti2 = (IEventTaskInstance) obj2;
62                                }
63                                IGUIElement first = (IGUIElement) eti1.getEvent().getTarget();
64                                IGUIElement second = (IGUIElement) eti2.getEvent().getTarget();
65                                int tempindex1 = -1;
66                                int tempindex2 = -1;
67                                if(!idmapping.containsKey(eti1.getTask().getId()))
68                                {
69                                        idmapping.put(eti1.getTask().getId(), index);
70                                        tempindex1 = index;
71                                        index++;
72                                }       
73                                else
74                                {
75                                        tempindex1 = idmapping.get(eti1.getTask().getId());
76                                }       
77                                if(!idmapping.containsKey(eti2.getTask().getId()))
78                                {
79                                        idmapping.put(eti2.getTask().getId(), index);
80                                        tempindex2 = index;
81                                        index++;
82                                }       
83                                else
84                                {
85                                        tempindex2 = idmapping.get(eti2.getTask().getId());
86                                }
87                                float distance = -1*AlignmentHelpers.distanceBetween(first, second);
88                       
89                       
90                                if(distance > maxDistance){
91                                        maxDistance = distance;
92                                }
93                               
94                                distance += positiveThreshold;
95                               
96
97                               
98                                matrix.set(tempindex1, tempindex2,distance);
99                               
100                        }
101                }
102                //System.out.println("ObjectDistanceMatrix: MaxDistance: " + maxDistance);
103                //System.out.println(meandistance/(uniqueTasks.size()*uniqueTasks.size()));
104                //System.out.println(idmapping.toString());
105                //System.out.println(matrix.toString());
106                //System.out.println(idmapping.keySet().toString());
107                //System.out.println(idmapping.values().toString());
108               
109        }
110       
111        public String toString(){
112                return matrix.toString();
113        }
114
115        @Override
116        public double getDistance(int taskId1, int taskId2) {
117                //System.out.println("Taskid1: " + taskId1 + " Taskid2: " + taskId2 + " Idmapping1: " + idmapping.get(taskId1) + " Idmapping2: " + idmapping.get(taskId2));
118                return matrix.get(idmapping.get(taskId1),idmapping.get(taskId2));
119        }
120
121}
122
Note: See TracBrowser for help on using the repository browser.