aboutsummaryrefslogtreecommitdiffstats
path: root/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph
diff options
context:
space:
mode:
authorLibravatar 20001LastOrder <boqi.chen@mail.mcgill.ca>2019-07-10 10:56:00 -0400
committerLibravatar 20001LastOrder <boqi.chen@mail.mcgill.ca>2019-07-10 10:56:00 -0400
commit991dacefdb8f78fccc359d3d2ec836dc2e7fc80a (patch)
tree6b18aa59c5f711a845aa9e3e5cf3fd3632ad7a33 /Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph
parentadd sample domain for measuring realistic metrics (diff)
downloadVIATRA-Generator-991dacefdb8f78fccc359d3d2ec836dc2e7fc80a.tar.gz
VIATRA-Generator-991dacefdb8f78fccc359d3d2ec836dc2e7fc80a.tar.zst
VIATRA-Generator-991dacefdb8f78fccc359d3d2ec836dc2e7fc80a.zip
measurements for the different violation types, comparison for differenct generation config
Diffstat (limited to 'Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph')
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/EMFGraph.xtend11
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/Graph.xtend20
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/GraphStatistic.xtend42
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/PartialInterpretationGraph.xtend27
4 files changed, 69 insertions, 31 deletions
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/EMFGraph.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/EMFGraph.xtend
index 5c161f4b..b4c57bd8 100644
--- a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/EMFGraph.xtend
+++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/EMFGraph.xtend
@@ -2,13 +2,14 @@ package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph
2 2
3import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.Metric 3import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.Metric
4import java.util.ArrayList 4import java.util.ArrayList
5import java.util.HashSet
5import java.util.List 6import java.util.List
6import org.eclipse.emf.common.util.EList 7import org.eclipse.emf.common.util.EList
7import org.eclipse.emf.ecore.EObject 8import org.eclipse.emf.ecore.EObject
8import org.eclipse.emf.ecore.EReference 9import org.eclipse.emf.ecore.EReference
9 10
10class EMFGraph extends Graph{ 11class EMFGraph extends Graph{
11 def void init (EObject root, List<Metric> metrics, String name, List<String> referenceTypes){ 12 def void init (EObject root, List<Metric> metrics, String name, List<EReference> referenceTypes){
12 val otherContents = root.eAllContents.toList(); 13 val otherContents = root.eAllContents.toList();
13 otherContents.add(root); 14 otherContents.add(root);
14 init(otherContents, metrics, name, referenceTypes); 15 init(otherContents, metrics, name, referenceTypes);
@@ -21,13 +22,15 @@ class EMFGraph extends Graph{
21 * @param name: name of the instance model 22 * @param name: name of the instance model
22 * @param ReferenceTypes: reference types defined in the meta model 23 * @param ReferenceTypes: reference types defined in the meta model
23 */ 24 */
24 def void init(List<EObject> objects, List<Metric> metrics, String name, List<String> referenceTypes){ 25 def void init(List<EObject> objects, List<Metric> metrics, String name, List<EReference> referenceTypes){
25 objects.forEach[it| 26 objects.forEach[it|
26 statistic.addNode(it); 27 var types = new HashSet(it.eClass.EAllSuperTypes.map[it|it.name]);
28 types.add(it.eClass.name);
29 statistic.addNodeWithAllTypes(it, types);
27 ] 30 ]
28 31
29 referenceTypes.forEach[it| 32 referenceTypes.forEach[it|
30 statistic.addType(it); 33 statistic.addEdgeType(it.name);
31 ]; 34 ];
32 35
33 objects.forEach[source| 36 objects.forEach[source|
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/Graph.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/Graph.xtend
index cf4aedba..6b400b0d 100644
--- a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/Graph.xtend
+++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/Graph.xtend
@@ -2,11 +2,15 @@ package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph
2 2
3import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.Metric 3import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.Metric
4import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MetricSampleGroup 4import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MetricSampleGroup
5import java.util.ArrayList
6import java.util.List
7import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MultiplexParticipationCoefficientMetric 5import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MultiplexParticipationCoefficientMetric
8import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeActivityMetric 6import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeActivityMetric
9import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.OutDegreeMetric 7import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.OutDegreeMetric
8import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.TypedOutDegree
9import java.util.ArrayList
10import java.util.HashMap
11import java.util.List
12import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeTypeMetric
13import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.EdgeTypeMetric
10 14
11abstract class Graph { 15abstract class Graph {
12 16
@@ -42,11 +46,17 @@ abstract class Graph {
42 46
43 for(metric : this.metrics){ 47 for(metric : this.metrics){
44 if(metric instanceof MultiplexParticipationCoefficientMetric){ 48 if(metric instanceof MultiplexParticipationCoefficientMetric){
45 sample.mpcSamples = metric.evaluateSamples(this.statistic); 49 sample.mpcSamples = metric.evaluateSamples(this.statistic) as ArrayList<Double>;
46 }else if(metric instanceof NodeActivityMetric){ 50 }else if(metric instanceof NodeActivityMetric){
47 sample.naSamples = metric.evaluateSamples(this.statistic); 51 sample.naSamples = metric.evaluateSamples(this.statistic) as ArrayList<Double>;
48 }else if(metric instanceof OutDegreeMetric){ 52 }else if(metric instanceof OutDegreeMetric){
49 sample.outDegreeSamples = metric.evaluateSamples(this.statistic); 53 sample.outDegreeSamples = metric.evaluateSamples(this.statistic) as ArrayList<Double>;
54 }else if(metric instanceof TypedOutDegree){
55 sample.typedOutDegreeSamples = metric.evaluateSamples(this.statistic) as HashMap<String, List<Integer>>;
56 }else if(metric instanceof NodeTypeMetric){
57 sample.nodeTypeSamples = metric.evaluateSamples(this.statistic) as HashMap<String, Double>;
58 }else if (metric instanceof EdgeTypeMetric){
59 sample.edgeTypeSamples = metric.evaluateSamples(this.statistic) as HashMap<String, Double>;
50 } 60 }
51 } 61 }
52 62
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/GraphStatistic.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/GraphStatistic.xtend
index 7ed58094..9b8fd0e3 100644
--- a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/GraphStatistic.xtend
+++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/GraphStatistic.xtend
@@ -5,20 +5,22 @@ import com.google.common.collect.Multimap
5import java.util.HashMap 5import java.util.HashMap
6import java.util.HashSet 6import java.util.HashSet
7import java.util.List 7import java.util.List
8import java.util.Map
9import java.util.Set
8import org.eclipse.emf.ecore.EObject 10import org.eclipse.emf.ecore.EObject
9 11
10class GraphStatistic { 12class GraphStatistic {
11 val incomingEdges = new HashMap<String, Multimap<EObject, EObject>>; 13 val incomingEdges = new HashMap<String, Multimap<EObject, EObject>>;
12 val outcomingEdges = new HashMap<String, Multimap<EObject, EObject>>; 14 val outcomingEdges = new HashMap<String, Multimap<EObject, EObject>>;
13 15
14 val edgeTypes = new HashSet<String>(); 16 val edgeTypes = new HashSet<String>();
15 val nodes = new HashSet<EObject>(); 17 val nodeToType = new HashMap<EObject, Set<String>>();
16 18
17 /** 19 /**
18 * Add an edge type to to the graph 20 * Add an edge type to to the graph
19 * @param type: type to add 21 * @param type: type to add
20 */ 22 */
21 def void addType(String type){ 23 def void addEdgeType(String type){
22 if(edgeTypes.contains(type)){ 24 if(edgeTypes.contains(type)){
23 return; 25 return;
24 } 26 }
@@ -28,15 +30,20 @@ class GraphStatistic {
28 } 30 }
29 31
30 /** 32 /**
31 * Add a node to he graph 33 * Add a node to the graph with one type in its type hierarchy
32 * @param node: node to add 34 * @param node: node to add
33 */ 35 */
34 def void addNode(EObject n){ 36 def void addNodeWithType(EObject n, String Type){
35 if(nodes.contains(n)){ 37 var types = nodeToType.getOrDefault(n, new HashSet<String>());
36 return; 38 types.add(Type);
37 } 39 nodeToType.put(n, types);
38 40 }
39 nodes.add(n); 41
42 /**
43 * Add a node to the graph with all types in its type hierarchy
44 */
45 def void addNodeWithAllTypes(EObject n, Set<String> types){
46 nodeToType.put(n, types);
40 } 47 }
41 48
42 /** 49 /**
@@ -82,7 +89,7 @@ class GraphStatistic {
82 } 89 }
83 90
84 /** 91 /**
85 * calculate the number of edge types for a given degree. 92 * calculate the number of edge types for a given node.
86 */ 93 */
87 def int numOfEdgeTypes(EObject o){ 94 def int numOfEdgeTypes(EObject o){
88 var count = 0; 95 var count = 0;
@@ -100,8 +107,17 @@ class GraphStatistic {
100 return edgeTypes.toList(); 107 return edgeTypes.toList();
101 } 108 }
102 109
110 def Map<EObject, Set<String>> getNodeToTypesMap(){
111 return nodeToType;
112 }
113
103 def List<EObject> getAllNodes(){ 114 def List<EObject> getAllNodes(){
104 return nodes.toList(); 115 return nodeToType.keySet().toList();
105 } 116 }
117
118 def HashMap<String, Multimap<EObject, EObject>> getOutgoingEdges(){
119 return outcomingEdges;
120 }
121
106} 122}
107 123
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/PartialInterpretationGraph.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/PartialInterpretationGraph.xtend
index 14337ab0..91d7c5f9 100644
--- a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/PartialInterpretationGraph.xtend
+++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/PartialInterpretationGraph.xtend
@@ -4,11 +4,13 @@ import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.Metric
4import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.RelationDeclaration 4import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.RelationDeclaration
5import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.BinaryElementRelationLink 5import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.BinaryElementRelationLink
6import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation 6import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation
7import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.impl.BooleanElementImpl 7import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.impl.PartialComplexTypeInterpretationImpl
8import java.util.ArrayList 8import java.util.ArrayList
9import java.util.List 9import java.util.List
10 10
11class PartialInterpretationGraph extends Graph{ 11class PartialInterpretationGraph extends Graph{
12 val typeToExclude = "undefinedpart";
13 val classSuffix = " class";
12 14
13 /** 15 /**
14 * Define a new PartialInterpretationGraph by parse every element from a PartialInterpretation 16 * Define a new PartialInterpretationGraph by parse every element from a PartialInterpretation
@@ -16,17 +18,21 @@ class PartialInterpretationGraph extends Graph{
16 new(PartialInterpretation partial, List<Metric> metrics, String name){ 18 new(PartialInterpretation partial, List<Metric> metrics, String name){
17 //the edge types are defined in terms of RelationDeclaration 19 //the edge types are defined in terms of RelationDeclaration
18 partial.problem.relations.filter(RelationDeclaration).forEach[ 20 partial.problem.relations.filter(RelationDeclaration).forEach[
19 this.statistic.addType(it.name); 21 //only need the name of the reference type (remove everything with and after "reference")
22 this.statistic.addEdgeType(it.name.split(" ").get(0));
20 ] 23 ]
21 // add all elements 24 // add all elements
22 val elements = getElements(partial); 25 val typeInterpretations = getTypes(partial);
23 for(element : elements){ 26 for(type : typeInterpretations){
24 statistic.addNode(element) 27 var typeName = type.interpretationOf.name.replace(classSuffix, '');
28 for(node : type.elements){
29 this.statistic.addNodeWithType(node, typeName);
30 }
25 } 31 }
26 32
27 for(relationInterpretation : partial.partialrelationinterpretation) { 33 for(relationInterpretation : partial.partialrelationinterpretation) {
28 val type = relationInterpretation.interpretationOf.name 34 //only need the name of the reference type (remove everything with and after "reference")
29 35 val type = relationInterpretation.interpretationOf.name.split(" ").get(0);
30 for(edge : relationInterpretation.relationlinks.filter(BinaryElementRelationLink)){ 36 for(edge : relationInterpretation.relationlinks.filter(BinaryElementRelationLink)){
31 statistic.addEdge(edge.param1, edge.param2, type); 37 statistic.addEdge(edge.param1, edge.param2, type);
32 } 38 }
@@ -62,8 +68,11 @@ class PartialInterpretationGraph extends Graph{
62 output.add(stateInfo); 68 output.add(stateInfo);
63 } 69 }
64 70
65 private def getElements(PartialInterpretation partial){ 71 private def getTypes(PartialInterpretation partial){
66 return partial.newElements.filter[!(it instanceof BooleanElementImpl)] + partial.problem.elements; 72 //only the complex type interpretations are the ones defined in meta model
73 //do not care about undefined types as it will be included in the class type
74 return partial.partialtypeinterpratation.filter(PartialComplexTypeInterpretationImpl)
75 .filter[!it.interpretationOf.name.toLowerCase.contains(typeToExclude)];
67 } 76 }
68 77
69 override getStatistic() { 78 override getStatistic() {