aboutsummaryrefslogtreecommitdiffstats
path: root/Metrics
diff options
context:
space:
mode:
authorLibravatar 20001LastOrder <boqi.chen@mail.mcgill.ca>2019-06-17 12:21:39 -0400
committerLibravatar 20001LastOrder <boqi.chen@mail.mcgill.ca>2019-06-17 12:21:39 -0400
commit70c86c76a13283d432361d381cf467f67ee7d454 (patch)
tree5f25c8cc285fae8e30f5aa9f1e3e63fba46cc676 /Metrics
parentHill climbing for realistic graphs with consistency feature (diff)
downloadVIATRA-Generator-70c86c76a13283d432361d381cf467f67ee7d454.tar.gz
VIATRA-Generator-70c86c76a13283d432361d381cf467f67ee7d454.tar.zst
VIATRA-Generator-70c86c76a13283d432361d381cf467f67ee7d454.zip
estimate value function with simple linear regression
Diffstat (limited to 'Metrics')
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/PartialInterpretationMetric.xtend58
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/PartialInterpretationMetricDistance.xtend122
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/CostDistance.xtend29
3 files changed, 151 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
121class 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 @@
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
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/CostDistance.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/CostDistance.xtend
new file mode 100644
index 00000000..ee856201
--- /dev/null
+++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/CostDistance.xtend
@@ -0,0 +1,29 @@
1package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance
2
3import org.apache.commons.math3.stat.regression.SimpleRegression
4import org.eclipse.xtend.lib.annotations.Accessors
5
6class CostDistance {
7
8 var SimpleRegression regression;
9
10 new(){
11 regression = new SimpleRegression(true);
12 }
13
14}
15
16class StateData{
17 @Accessors(PUBLIC_GETTER)
18 var double numOfNodeFeature;
19 @Accessors(PUBLIC_GETTER)
20 var double value;
21 @Accessors(PUBLIC_GETTER)
22 var Object lastState;
23
24 new(int numOfNode, double value, Object lastState){
25 this.numOfNodeFeature = 1.0 / numOfNode;
26 this.value = value
27 this.lastState = lastState;
28 }
29} \ No newline at end of file