aboutsummaryrefslogtreecommitdiffstats
path: root/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/PartialInterpretationMetricDistance.xtend
diff options
context:
space:
mode:
Diffstat (limited to 'Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/PartialInterpretationMetricDistance.xtend')
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/PartialInterpretationMetricDistance.xtend122
1 files changed, 122 insertions, 0 deletions
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/PartialInterpretationMetricDistance.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/PartialInterpretationMetricDistance.xtend
new file mode 100644
index 00000000..b63451e8
--- /dev/null
+++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/PartialInterpretationMetricDistance.xtend
@@ -0,0 +1,122 @@
1package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app
2
3import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.JSDistance
4import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.KSDistance
5import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.StateData
6import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.PartialInterpretationGraph
7import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.Metric
8import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MultiplexParticipationCoefficientMetric
9import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeActivityMetric
10import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.OutDegreeMetric
11import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation
12import java.util.ArrayList
13import java.util.HashMap
14import java.util.Map
15import org.apache.commons.math3.stat.regression.SimpleRegression
16import java.util.stream.DoubleStream.Builder
17
18class PartialInterpretationMetricDistance {
19
20 var KSDistance ks;
21 var JSDistance js;
22 var Map<Object, StateData> stateAndHistory;
23 var SimpleRegression regression;
24
25
26 new(){
27 ks = new KSDistance(Domain.Yakinduum);
28 js = new JSDistance(Domain.Yakinduum);
29 regression = new SimpleRegression();
30 stateAndHistory = new HashMap<Object, StateData>();
31 }
32
33 def MetricDistanceGroup calculateMetricDistanceKS(PartialInterpretation partial){
34 val metrics = new ArrayList<Metric>();
35 metrics.add(new OutDegreeMetric());
36 metrics.add(new NodeActivityMetric());
37 metrics.add(new MultiplexParticipationCoefficientMetric());
38
39 val metricCalculator = new PartialInterpretationGraph(partial, metrics, null);
40 var metricSamples = metricCalculator.evaluateAllMetricsToSamples();
41
42 var mpc = ks.mpcDistance(metricSamples.mpcSamples);
43 var na = ks.naDistance(metricSamples.naSamples);
44 var outDegree = ks.outDegreeDistance(metricSamples.outDegreeSamples);
45
46 return new MetricDistanceGroup(mpc, na, outDegree);
47 }
48
49 def MetricDistanceGroup calculateMetricDistance(PartialInterpretation partial){
50 val metrics = new ArrayList<Metric>();
51 metrics.add(new OutDegreeMetric());
52 metrics.add(new NodeActivityMetric());
53 metrics.add(new MultiplexParticipationCoefficientMetric());
54
55 val metricCalculator = new PartialInterpretationGraph(partial, metrics, null);
56 var metricSamples = metricCalculator.evaluateAllMetricsToSamples();
57
58 var mpc = js.mpcDistance(metricSamples.mpcSamples);
59 var na = js.naDistance(metricSamples.naSamples);
60 var outDegree = js.outDegreeDistance(metricSamples.outDegreeSamples);
61
62 return new MetricDistanceGroup(mpc, na, outDegree);
63 }
64
65 def resetRegression(Object state){
66 regression = new SimpleRegression();
67
68 if(stateAndHistory.containsKey(state)){
69 var data = stateAndHistory.get(state);
70 regression.addData(data.numOfNodeFeature, data.value);
71
72 while(stateAndHistory.containsKey(data.lastState)){
73 data = stateAndHistory.get(data.lastState);
74 regression.addData(data.numOfNodeFeature, data.value);
75 }
76 }
77 }
78
79 def feedData(Object state, int numOfNodes, double value, Object lastState){
80 var data = new StateData(numOfNodes, value, lastState);
81 stateAndHistory.put(state, data);
82 regression.addData(data.numOfNodeFeature, data.value);
83 }
84
85 def getPredictionForNextDataSample(int numOfNodes, double value, int numberOfNodesToPredict){
86 var data = new StateData(numOfNodes, value, null);
87 regression.addData(data.numOfNodeFeature, data.value);
88
89 var prediction = predict(numberOfNodesToPredict);
90 regression.removeData(data.numOfNodeFeature, data.value);
91 return prediction;
92 }
93
94 def predict(int numOfNodes){
95 var data = new StateData(numOfNodes, 0, null);
96 return regression.predict(data.numOfNodeFeature);
97 }
98}
99
100class MetricDistanceGroup{
101 var double mpcDistance;
102 var double naDistance;
103 var double outDegreeDistance;
104
105 new(double mpcDistance, double naDistance, double outDegreeDistance){
106 this.mpcDistance = mpcDistance;
107 this.naDistance = naDistance;
108 this.outDegreeDistance = outDegreeDistance;
109 }
110
111 def double getMPCDistance(){
112 return this.mpcDistance
113 }
114
115 def double getNADistance(){
116 return this.naDistance
117 }
118
119 def double getOutDegreeDistance(){
120 return this.outDegreeDistance
121 }
122} \ No newline at end of file