diff options
author | 20001LastOrder <boqi.chen@mail.mcgill.ca> | 2019-07-31 14:45:06 -0400 |
---|---|---|
committer | 20001LastOrder <boqi.chen@mail.mcgill.ca> | 2019-07-31 14:45:06 -0400 |
commit | 5e8b8c3a817dd9f7ae46338b6dbd3684dfb885fe (patch) | |
tree | 61b473589e5e43a58481ea28b7bbeeaf0860dcdb /Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/KSDistance.xtend | |
parent | consider node types during generation (diff) | |
download | VIATRA-Generator-5e8b8c3a817dd9f7ae46338b6dbd3684dfb885fe.tar.gz VIATRA-Generator-5e8b8c3a817dd9f7ae46338b6dbd3684dfb885fe.tar.zst VIATRA-Generator-5e8b8c3a817dd9f7ae46338b6dbd3684dfb885fe.zip |
Further development of realistic solver, create generation config for ecore models
Diffstat (limited to 'Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/KSDistance.xtend')
-rw-r--r-- | Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/KSDistance.xtend | 33 |
1 files changed, 26 insertions, 7 deletions
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/KSDistance.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/KSDistance.xtend index 86f5f23c..08d8704a 100644 --- a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/KSDistance.xtend +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/KSDistance.xtend | |||
@@ -1,22 +1,18 @@ | |||
1 | package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance | 1 | package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance |
2 | 2 | ||
3 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app.Domain | ||
4 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.RepMetricsReader | ||
5 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MetricSampleGroup | 3 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MetricSampleGroup |
6 | import java.util.HashMap | 4 | import java.util.HashMap |
7 | import java.util.HashSet | 5 | import java.util.HashSet |
8 | import java.util.List | 6 | import java.util.List |
9 | import java.util.Set | ||
10 | import org.apache.commons.math3.stat.inference.KolmogorovSmirnovTest | 7 | import org.apache.commons.math3.stat.inference.KolmogorovSmirnovTest |
11 | 8 | ||
12 | class KSDistance extends CostDistance { | 9 | class KSDistance extends CostDistance { |
13 | var static ksTester = new KolmogorovSmirnovTest(); | 10 | var static ksTester = new KolmogorovSmirnovTest(); |
14 | var MetricSampleGroup g; | 11 | var MetricSampleGroup g; |
15 | new(Domain d){ | ||
16 | var metrics = RepMetricsReader.read(d); | ||
17 | this.g = metrics; | ||
18 | } | ||
19 | 12 | ||
13 | new(MetricSampleGroup g){ | ||
14 | this.g = g; | ||
15 | } | ||
20 | override double mpcDistance(List<Double> samples){ | 16 | override double mpcDistance(List<Double> samples){ |
21 | //if the size of array is smaller than 2, ks distance cannot be performed, simply return 1 | 17 | //if the size of array is smaller than 2, ks distance cannot be performed, simply return 1 |
22 | if(samples.size < 2) return 1; | 18 | if(samples.size < 2) return 1; |
@@ -63,4 +59,27 @@ class KSDistance extends CostDistance { | |||
63 | 59 | ||
64 | return value; | 60 | return value; |
65 | } | 61 | } |
62 | |||
63 | def nodeTypeDistance(HashMap<String, Double> samples){ | ||
64 | var typesDistMap = g.nodeTypeSamples; | ||
65 | var sourceDist = newArrayList(); | ||
66 | var instanceDist = newArrayList(); | ||
67 | |||
68 | for(key : typesDistMap.keySet()){ | ||
69 | sourceDist.add(typesDistMap.get(key)); | ||
70 | instanceDist.add(samples.getOrDefault(key, 0.0)); | ||
71 | } | ||
72 | |||
73 | // Since we already know the pdf, we compute the ks-test manully | ||
74 | var ksStatistics = 0.0; | ||
75 | var sum1 = 0.0; | ||
76 | var sum2 = 0.0; | ||
77 | for(var i = 0; i < sourceDist.size(); i++){ | ||
78 | sum1 += sourceDist.get(i); | ||
79 | sum2 += instanceDist.get(i); | ||
80 | |||
81 | ksStatistics = Math.max(ksStatistics, Math.abs(sum1 - sum2)); | ||
82 | } | ||
83 | return ksStatistics; | ||
84 | } | ||
66 | } \ No newline at end of file | 85 | } \ No newline at end of file |