VAT  3.0
Video Analysis Tool
HierarchyTree.h
1 #ifndef HIERARCHYTREE_H
2 #define HIERARCHYTREE_H
3 
4 #include "IncrementalEventLearning.h"
5 #include "tree.hh"
6 
7 #define MINIMAL_DOUBLE -10e10
8 #define MAXIMAL_DOUBLE 10e10
9 #define EPSILON 0.0000001
10 #define ALMOST_ONE 0.99
11 #define DOUBLEOFSQRTPI 3.544907701811
12 
13 namespace miles {
14 
15  enum categories { NEW_NODE,
16  MERGING_NODE,
17  BEST_NODE,
18  SPLIT_NODE,
19  CAT_NUMBER
20  };
21 
22  class Instance {
23  public:
24  std::map<attribute_id, SpContextualisedNumericalData > *numericalData;
25  std::map<attribute_id, SpContextualisedSymbolicData > *symbolicData;
26  Instance();
27  ~Instance();
28  void setInstance(std::map<attribute_id, SpContextualisedNumericalData > *i_numericalData,
29  std::map<attribute_id, SpContextualisedSymbolicData > *i_symbolicData);
30 
31  };
32 
33  typedef QSharedPointer<Instance> SpInstance;
34 
35  class HierarchyTree {
36  public:
37  static SpLearningAttributes availableAttributes;
38  static double minConditionalP;
39 
40  tree <SpLearningStateConcept> conceptsHierarchy;
41  std::map<long int, SpLearningStateConcept> registeredStates;
42  std::map<long int, SpLearningEventConcept> registeredEvents;
43 
44  int lc_id;
45  SpInstance currentInstance;
46  SpLearningContextualisedObject currentObject;
47  SpLearningContext currentContext;
48  std::map<int, SpLearningStateConcept> currentStatesForInstance;
49 
50  double *k_components, k_parent;
51  int deepest_level;
52  int deepest_for_instance;
53  long int free_state_id;
54  long int free_event_id;
55  double tdiff;
56  bool insertionDone, terminalDone, splitDone, mergeDone;
57  double diffSplit, diffNew, diffBest, diffMerge;
58 
59  HierarchyTree();
60  ~HierarchyTree();
61 
62  bool getDeepestSiblingStates(double P, std::map<long int, SpLearningStateConcept> &states,
63  attribute_id _x, attribute_id _y);
64  bool recurseToDeepestSiblingStates(double P, tree<SpLearningStateConcept>::sibling_iterator node,
65  std::map<long int, SpLearningStateConcept> &states,
66  attribute_id _x, attribute_id _y);
67 
68 
69  bool getMostLikelySiblingStates(double P, std::map<long int, SpLearningStateConcept> &states);
70  void recurseToMostLikelySiblingStates(double P, tree<SpLearningStateConcept>::sibling_iterator node,
71  std::map<long int, SpLearningStateConcept> &states);
72  double categoryUtility(bool with_parent);
73  double categoryUtilityState(SpLearningStateConcept state, int totalN, double &totalP);
74  double categoryUtilityState(SpLearningStateConcept state);
75  bool kinshipRelation(SpLearningStateConcept state1, SpLearningStateConcept state2);
76  tree <SpLearningStateConcept> *getHierarchy();
77  void setDepth(int level);
78  void setDepth();
79  int getDepth();
80  int execute(SpLearningContext, SpLearningContextualisedObject, double);
81  void print();
82  void relabelTree();
83  bool cutoff(tree<SpLearningStateConcept>::iterator, SpInstance Instance);
84  void MILES(tree<SpLearningStateConcept>::iterator, SpInstance Instance, bool);
85 
86  int setDistancesToLeaf(tree<SpLearningStateConcept>::sibling_iterator Node);
87  void setDistancesToLeaf(tree<SpLearningStateConcept>::iterator Node);
88 
89  void copyEvents(SpLearningStateConcept original, SpLearningStateConcept toCopy);
90 
91 
95  SpLearningStateConcept);
96 
98 
99  int determineBest(double, double, double, double);
100 
101  void getBestChildren(tree<SpLearningStateConcept>::iterator *,
104 
105  void computeKParent();
106 
107  double *computeKComponents(tree<SpLearningStateConcept>::iterator);
108 
109  void updateChildrenProbabilities(tree<SpLearningStateConcept>::iterator);
110 
112 
113  bool isEmptyTree(tree<SpLearningStateConcept>::iterator);
114 
115  double computeSplittingNode(tree<SpLearningStateConcept>::iterator,
117  SpInstance);
118 
119  SpLearningStateConcept computeMergingNodes(tree<SpLearningStateConcept>::iterator,
122  SpInstance);
123 
124  SpLearningStateConcept mergeNodes(tree<SpLearningStateConcept>::iterator,
126 
127  void computeChildrenScores(tree<SpLearningStateConcept>::iterator, SpInstance);
128 
129  SpLearningStateConcept computeNewChild(tree<SpLearningStateConcept>::iterator, SpInstance);
130 
131  void createNewTerminal(tree<SpLearningStateConcept>::iterator, SpInstance);
132 
133  void insertNewChild(tree<SpLearningStateConcept>::iterator, SpInstance);
134 
135  SpLearningStateConcept copyNode(SpLearningStateConcept);
136 
137  SpLearningStateConcept copyInstance(SpInstance);
138 
139  void insertRoot(tree<SpLearningStateConcept>::iterator, SpInstance);
140 
141  void Incorporate(SpLearningStateConcept, tree<SpLearningStateConcept>::iterator, SpInstance);
142 
143  void incorporateNumericalValue(SpNumericalAttributeValuePair nodePair, SpContextualisedNumericalData instancePair, double acuity);
144 
145  void incorporateSymbolicValue(SpSymbolicAttributeValuePair nodePair, SpContextualisedSymbolicData instancePair);
146 
147  double incrementalMean(double, double, double, double);
148 
149  double incrementalSigma(double, double, double, double, double, double);
150 
151  };
152 
154  bool operator()(SpLearningStateConcept concept1, SpLearningStateConcept concept2);
155  };
156 
158  bool operator()(SpLearningStateConcept concept1, SpLearningStateConcept concept2);
159  };
160 
161 }
162 
163 #endif
Definition: HierarchyTree.h:35
Definition: HierarchyTree.h:153
Definition: HierarchyTree.h:157
Definition: HierarchyTree.h:22
Definition: HierarchyTree.cpp:12