aboutsummaryrefslogtreecommitdiffstats
path: root/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/PartialInterpretationMetric.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/PartialInterpretationMetric.xtend')
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/PartialInterpretationMetric.xtend85
1 files changed, 85 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/PartialInterpretationMetric.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/PartialInterpretationMetric.xtend
new file mode 100644
index 00000000..5e62b586
--- /dev/null
+++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/PartialInterpretationMetric.xtend
@@ -0,0 +1,85 @@
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.graph.PartialInterpretationGraph
6import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.CsvFileWriter
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.io.File
13import java.io.FileNotFoundException
14import java.io.PrintWriter
15import java.util.ArrayList
16import java.util.List
17import org.eclipse.emf.ecore.util.EcoreUtil
18import org.eclipse.viatra.dse.api.Solution
19
20class PartialInterpretationMetric {
21 var static KSDistance ks;
22 var static JSDistance js;
23
24 def static void initPaths(){
25 new File("debug/metric/").mkdir();
26 new File("debug/metric/trajectories/").mkdir();
27 }
28
29 // calculate the metrics for a state
30 def static void calculateMetric(PartialInterpretation partial, String path, String currentStateId, Integer counter){
31 val metrics = new ArrayList<Metric>();
32 metrics.add(new OutDegreeMetric());
33 metrics.add(new NodeActivityMetric());
34 metrics.add(new MultiplexParticipationCoefficientMetric());
35
36 //make dir since the folder can be none existing
37 new File(path).mkdir();
38 val filename = path + "/state_"+currentStateId+"-"+counter+".csv";
39 val metricCalculator = new PartialInterpretationGraph(partial, metrics, currentStateId);
40
41 CsvFileWriter.write(metricCalculator.evaluateAllMetrics(), filename);
42 }
43
44 def static void outputTrajectories(PartialInterpretation empty, List<Solution> solutions){
45 for(solution : solutions){
46
47 //need to copy the empty solution because the transition directly worked on the graph
48 val emptySolutionCopy = EcoreUtil.copy(empty)
49 val trajectory = solution.shortestTrajectory;
50 trajectory.model = emptySolutionCopy
51
52 // state codes that will record the trajectory
53 val stateCodes = newArrayList()
54 var counter = 0
55
56 //transform and record the state codes for each state
57 while(trajectory.doNextTransformation){
58 //println(trajectory.stateCoder.createStateCode)
59 val stateId = trajectory.stateCoder.createStateCode.toString
60 val interpretation = trajectory.getModel();
61 println(stateId)
62 //calculate metrics of current state
63 calculateMetric(interpretation as PartialInterpretation, "debug/metric/output", stateId, counter)
64 stateCodes.add(stateId)
65 counter++
66 }
67
68
69 //output the trajectory
70 try{
71 new File("debug/metric/trajectories/").mkdir();
72 val path = "debug/metric/trajectories/trajectory"+trajectory.stateCoder.createStateCode.toString+".csv"
73 val PrintWriter writer = new PrintWriter(new File(path))
74 val output = new StringBuilder
75 for(stateCode : stateCodes){
76 output.append(stateCode+'\n')
77 }
78 writer.write(output.toString())
79 writer.close()
80 }catch(FileNotFoundException e) {
81 e.printStackTrace()
82 }
83 }
84 }
85} \ No newline at end of file