diff options
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.xtend | 85 |
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 @@ | |||
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.graph.PartialInterpretationGraph | ||
6 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.CsvFileWriter | ||
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.io.File | ||
13 | import java.io.FileNotFoundException | ||
14 | import java.io.PrintWriter | ||
15 | import java.util.ArrayList | ||
16 | import java.util.List | ||
17 | import org.eclipse.emf.ecore.util.EcoreUtil | ||
18 | import org.eclipse.viatra.dse.api.Solution | ||
19 | |||
20 | class 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 | ||