diff options
Diffstat (limited to 'Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app')
2 files changed, 122 insertions, 58 deletions
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/PartialInterpretationMetric.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/PartialInterpretationMetric.xtend index 71fa5fed..5e62b586 100644 --- a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/PartialInterpretationMetric.xtend +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/PartialInterpretationMetric.xtend | |||
@@ -24,40 +24,6 @@ class PartialInterpretationMetric { | |||
24 | def static void initPaths(){ | 24 | def static void initPaths(){ |
25 | new File("debug/metric/").mkdir(); | 25 | new File("debug/metric/").mkdir(); |
26 | new File("debug/metric/trajectories/").mkdir(); | 26 | new File("debug/metric/trajectories/").mkdir(); |
27 | ks = new KSDistance(Domain.Yakinduum); | ||
28 | js = new JSDistance(Domain.Yakinduum); | ||
29 | } | ||
30 | |||
31 | def static MetricDistanceGroup calculateMetricDistance(PartialInterpretation partial){ | ||
32 | val metrics = new ArrayList<Metric>(); | ||
33 | metrics.add(new OutDegreeMetric()); | ||
34 | metrics.add(new NodeActivityMetric()); | ||
35 | metrics.add(new MultiplexParticipationCoefficientMetric()); | ||
36 | |||
37 | val metricCalculator = new PartialInterpretationGraph(partial, metrics, null); | ||
38 | var metricSamples = metricCalculator.evaluateAllMetricsToSamples(); | ||
39 | |||
40 | var mpc = js.mpcDistance(metricSamples.mpcSamples); | ||
41 | var na = js.naDistance(metricSamples.naSamples); | ||
42 | var outDegree = js.outDegreeDistance(metricSamples.outDegreeSamples); | ||
43 | |||
44 | return new MetricDistanceGroup(mpc, na, outDegree); | ||
45 | } | ||
46 | |||
47 | def static MetricDistanceGroup calculateMetricDistanceKS(PartialInterpretation partial){ | ||
48 | val metrics = new ArrayList<Metric>(); | ||
49 | metrics.add(new OutDegreeMetric()); | ||
50 | metrics.add(new NodeActivityMetric()); | ||
51 | metrics.add(new MultiplexParticipationCoefficientMetric()); | ||
52 | |||
53 | val metricCalculator = new PartialInterpretationGraph(partial, metrics, null); | ||
54 | var metricSamples = metricCalculator.evaluateAllMetricsToSamples(); | ||
55 | |||
56 | var mpc = ks.mpcDistance(metricSamples.mpcSamples); | ||
57 | var na = ks.naDistance(metricSamples.naSamples); | ||
58 | var outDegree = ks.outDegreeDistance(metricSamples.outDegreeSamples); | ||
59 | |||
60 | return new MetricDistanceGroup(mpc, na, outDegree); | ||
61 | } | 27 | } |
62 | 28 | ||
63 | // calculate the metrics for a state | 29 | // calculate the metrics for a state |
@@ -116,28 +82,4 @@ class PartialInterpretationMetric { | |||
116 | } | 82 | } |
117 | } | 83 | } |
118 | } | 84 | } |
119 | } | ||
120 | |||
121 | class MetricDistanceGroup{ | ||
122 | var double mpcDistance; | ||
123 | var double naDistance; | ||
124 | var double outDegreeDistance; | ||
125 | |||
126 | new(double mpcDistance, double naDistance, double outDegreeDistance){ | ||
127 | this.mpcDistance = mpcDistance; | ||
128 | this.naDistance = naDistance; | ||
129 | this.outDegreeDistance = outDegreeDistance; | ||
130 | } | ||
131 | |||
132 | def double getMPCDistance(){ | ||
133 | return this.mpcDistance | ||
134 | } | ||
135 | |||
136 | def double getNADistance(){ | ||
137 | return this.naDistance | ||
138 | } | ||
139 | |||
140 | def double getOutDegreeDistance(){ | ||
141 | return this.outDegreeDistance | ||
142 | } | ||
143 | } \ No newline at end of file | 85 | } \ No newline at end of file |
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 @@ | |||
1 | package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app | ||
2 | |||
3 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.JSDistance | ||
4 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.KSDistance | ||
5 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.StateData | ||
6 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.PartialInterpretationGraph | ||
7 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.Metric | ||
8 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MultiplexParticipationCoefficientMetric | ||
9 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeActivityMetric | ||
10 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.OutDegreeMetric | ||
11 | import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation | ||
12 | import java.util.ArrayList | ||
13 | import java.util.HashMap | ||
14 | import java.util.Map | ||
15 | import org.apache.commons.math3.stat.regression.SimpleRegression | ||
16 | import java.util.stream.DoubleStream.Builder | ||
17 | |||
18 | class 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 | |||
100 | class 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 | ||