diff options
7 files changed, 70 insertions, 29 deletions
diff --git a/Framework/hu.bme.mit.inf.dslreasoner.logic.model/src/hu/bme/mit/inf/dslreasoner/logic/model/builder/LogicSolver.xtend b/Framework/hu.bme.mit.inf.dslreasoner.logic.model/src/hu/bme/mit/inf/dslreasoner/logic/model/builder/LogicSolver.xtend index f1d410d8..650fa02c 100644 --- a/Framework/hu.bme.mit.inf.dslreasoner.logic.model/src/hu/bme/mit/inf/dslreasoner/logic/model/builder/LogicSolver.xtend +++ b/Framework/hu.bme.mit.inf.dslreasoner.logic.model/src/hu/bme/mit/inf/dslreasoner/logic/model/builder/LogicSolver.xtend | |||
@@ -66,6 +66,9 @@ public enum DocumentationLevel { | |||
66 | * The solver writes only temporary files. | 66 | * The solver writes only temporary files. |
67 | */ | 67 | */ |
68 | NONE, | 68 | NONE, |
69 | |||
70 | METRICS, | ||
71 | |||
69 | /** | 72 | /** |
70 | * The solver is requested to write important artifacts and documents that are constructed during the generation. | 73 | * The solver is requested to write important artifacts and documents that are constructed during the generation. |
71 | * This option should not affect the performance of the solver seriously. | 74 | * This option should not affect the performance of the solver seriously. |
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 5f958cfa..425c9d84 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 | |||
@@ -17,33 +17,41 @@ import org.eclipse.viatra.dse.api.Solution | |||
17 | 17 | ||
18 | class PartialInterpretationMetric { | 18 | class PartialInterpretationMetric { |
19 | var static state = 0; | 19 | var static state = 0; |
20 | def static void calculateMetric(PartialInterpretation partial, String path, int id, String currentStateId){ | 20 | |
21 | // calculate the metrics for a state | ||
22 | def static void calculateMetric(PartialInterpretation partial, String path, String currentStateId){ | ||
21 | val metrics = new ArrayList<Metric>(); | 23 | val metrics = new ArrayList<Metric>(); |
22 | metrics.add(new OutDegreeMetric()); | 24 | metrics.add(new OutDegreeMetric()); |
23 | metrics.add(new NodeActivityMetric()); | 25 | metrics.add(new NodeActivityMetric()); |
24 | metrics.add(new MultiplexParticipationCoefficientMetric()); | 26 | metrics.add(new MultiplexParticipationCoefficientMetric()); |
25 | 27 | ||
28 | //make dir since the folder can be none existing | ||
26 | new File(path).mkdir(); | 29 | new File(path).mkdir(); |
27 | val filename = path + "/state_"+state+".csv"; | 30 | val filename = path + "/state_"+currentStateId+".csv"; |
28 | state++; | 31 | state++; |
29 | val metricCalculator = new PartialInterpretationGraph(partial, metrics, currentStateId); | 32 | val metricCalculator = new PartialInterpretationGraph(partial, metrics, currentStateId); |
30 | 33 | ||
31 | CsvFileWriter.write(metricCalculator.evaluateAllMetrics(), filename); | 34 | CsvFileWriter.write(metricCalculator.evaluateAllMetrics(), filename); |
32 | } | 35 | } |
33 | 36 | ||
34 | def static void outputTrajectories(PartialInterpretation empty, List<Solution> solutions){ | 37 | def static void outputTrajectories(PartialInterpretation empty, List<Solution> solutions){ |
35 | |||
36 | for(solution : solutions){ | 38 | for(solution : solutions){ |
39 | //need to copy the empty solution because the transition directly worked on the graph | ||
37 | val emptySolutionCopy = EcoreUtil.copy(empty) | 40 | val emptySolutionCopy = EcoreUtil.copy(empty) |
38 | val trajectory = solution.shortestTrajectory; | 41 | val trajectory = solution.shortestTrajectory; |
39 | trajectory.modelWithEditingDomain = emptySolutionCopy | 42 | trajectory.modelWithEditingDomain = emptySolutionCopy |
43 | |||
44 | // state codes that will record the trajectory | ||
40 | val stateCodes = newArrayList() | 45 | val stateCodes = newArrayList() |
41 | 46 | ||
47 | //transform and record the state codes for each state | ||
42 | while(trajectory.doNextTransformation){ | 48 | while(trajectory.doNextTransformation){ |
43 | println(trajectory.stateCoder.createStateCode) | 49 | //println(trajectory.stateCoder.createStateCode) |
44 | stateCodes.add(trajectory.stateCoder.createStateCode.toString) | 50 | stateCodes.add(trajectory.stateCoder.createStateCode.toString) |
45 | } | 51 | } |
46 | 52 | ||
53 | |||
54 | //output the trajectory | ||
47 | try{ | 55 | try{ |
48 | val path = "debug/metric/trajectories/trajectory"+trajectory.stateCoder.createStateCode.toString+".csv" | 56 | val path = "debug/metric/trajectories/trajectory"+trajectory.stateCoder.createStateCode.toString+".csv" |
49 | val PrintWriter writer = new PrintWriter(new File(path)) | 57 | val PrintWriter writer = new PrintWriter(new File(path)) |
diff --git a/Metrics/Metrics-Calculation/metrics_plot/src/Metrics Comparison .ipynb b/Metrics/Metrics-Calculation/metrics_plot/src/Metrics Comparison .ipynb index 17ad1253..04af8773 100644 --- a/Metrics/Metrics-Calculation/metrics_plot/src/Metrics Comparison .ipynb +++ b/Metrics/Metrics-Calculation/metrics_plot/src/Metrics Comparison .ipynb | |||
@@ -9,7 +9,7 @@ | |||
9 | }, | 9 | }, |
10 | { | 10 | { |
11 | "cell_type": "code", | 11 | "cell_type": "code", |
12 | "execution_count": 2, | 12 | "execution_count": 14, |
13 | "metadata": {}, | 13 | "metadata": {}, |
14 | "outputs": [], | 14 | "outputs": [], |
15 | "source": [ | 15 | "source": [ |
@@ -24,7 +24,7 @@ | |||
24 | }, | 24 | }, |
25 | { | 25 | { |
26 | "cell_type": "code", | 26 | "cell_type": "code", |
27 | "execution_count": 3, | 27 | "execution_count": 15, |
28 | "metadata": {}, | 28 | "metadata": {}, |
29 | "outputs": [], | 29 | "outputs": [], |
30 | "source": [ | 30 | "source": [ |
@@ -47,7 +47,7 @@ | |||
47 | }, | 47 | }, |
48 | { | 48 | { |
49 | "cell_type": "code", | 49 | "cell_type": "code", |
50 | "execution_count": 4, | 50 | "execution_count": 16, |
51 | "metadata": {}, | 51 | "metadata": {}, |
52 | "outputs": [], | 52 | "outputs": [], |
53 | "source": [ | 53 | "source": [ |
@@ -59,7 +59,7 @@ | |||
59 | }, | 59 | }, |
60 | { | 60 | { |
61 | "cell_type": "code", | 61 | "cell_type": "code", |
62 | "execution_count": 5, | 62 | "execution_count": 17, |
63 | "metadata": {}, | 63 | "metadata": {}, |
64 | "outputs": [], | 64 | "outputs": [], |
65 | "source": [ | 65 | "source": [ |
@@ -87,7 +87,7 @@ | |||
87 | }, | 87 | }, |
88 | { | 88 | { |
89 | "cell_type": "code", | 89 | "cell_type": "code", |
90 | "execution_count": 6, | 90 | "execution_count": 18, |
91 | "metadata": {}, | 91 | "metadata": {}, |
92 | "outputs": [], | 92 | "outputs": [], |
93 | "source": [ | 93 | "source": [ |
@@ -115,9 +115,22 @@ | |||
115 | }, | 115 | }, |
116 | { | 116 | { |
117 | "cell_type": "code", | 117 | "cell_type": "code", |
118 | "execution_count": 9, | 118 | "execution_count": 19, |
119 | "metadata": {}, | 119 | "metadata": {}, |
120 | "outputs": [], | 120 | "outputs": [ |
121 | { | ||
122 | "ename": "ValueError", | ||
123 | "evalue": "too many values to unpack (expected 3)", | ||
124 | "output_type": "error", | ||
125 | "traceback": [ | ||
126 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", | ||
127 | "\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)", | ||
128 | "\u001b[1;32m<ipython-input-19-c45dfc2a26c6>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mhuman\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mGraphType\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'../statistics/humanOutput/'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m300\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2\u001b[0m \u001b[0mviatra30\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mGraphType\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'../statistics/viatraOutput30/'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m300\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[0mviatra100\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mGraphType\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'../statistics/viatraOutput100/'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m300\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[0mrandom\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mGraphType\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'../statistics/randomOutput/'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m300\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[0malloy\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mGraphType\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'../statistics/alloyOutput/'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m300\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", | ||
129 | "\u001b[1;32m<ipython-input-18-556621ada738>\u001b[0m in \u001b[0;36m__init__\u001b[1;34m(self, path, number)\u001b[0m\n\u001b[0;32m 8\u001b[0m \u001b[0mmodels\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mreader\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mreadmultiplefiles\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mpath\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mnumber\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 9\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mmodels\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 10\u001b[1;33m \u001b[0mout_d\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mna\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmpc\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mreader\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mgetmetrics\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mmodels\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mi\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 11\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mout_ds\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mout_d\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 12\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mnas\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mna\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", | ||
130 | "\u001b[1;31mValueError\u001b[0m: too many values to unpack (expected 3)" | ||
131 | ] | ||
132 | } | ||
133 | ], | ||
121 | "source": [ | 134 | "source": [ |
122 | "human = GraphType('../statistics/humanOutput/', 300)\n", | 135 | "human = GraphType('../statistics/humanOutput/', 300)\n", |
123 | "viatra30 = GraphType('../statistics/viatraOutput30/', 300)\n", | 136 | "viatra30 = GraphType('../statistics/viatraOutput30/', 300)\n", |
@@ -135,21 +148,18 @@ | |||
135 | }, | 148 | }, |
136 | { | 149 | { |
137 | "cell_type": "code", | 150 | "cell_type": "code", |
138 | "execution_count": 11, | 151 | "execution_count": 20, |
139 | "metadata": {}, | 152 | "metadata": {}, |
140 | "outputs": [ | 153 | "outputs": [ |
141 | { | 154 | { |
142 | "ename": "KeyboardInterrupt", | 155 | "ename": "NameError", |
143 | "evalue": "", | 156 | "evalue": "name 'viatra30' is not defined", |
144 | "output_type": "error", | 157 | "output_type": "error", |
145 | "traceback": [ | 158 | "traceback": [ |
146 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", | 159 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", |
147 | "\u001b[1;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", | 160 | "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", |
148 | "\u001b[1;32m<ipython-input-11-5692e29d4679>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mout_d_coords\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mcalculateMDS\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcalculateKSMatrix\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mviatra30\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mout_ds\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0malloy\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mout_ds\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mhuman\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mout_ds\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2\u001b[0m \u001b[0mplot\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'Viatra (30 nodes)'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'Alloy (30 nodes)'\u001b[0m \u001b[1;33m,\u001b[0m \u001b[1;34m'Human'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mout_d_coords\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'Out Degree'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", | 161 | "\u001b[1;32m<ipython-input-20-5692e29d4679>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mout_d_coords\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mcalculateMDS\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcalculateKSMatrix\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mviatra30\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mout_ds\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0malloy\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mout_ds\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mhuman\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mout_ds\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2\u001b[0m \u001b[0mplot\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'Viatra (30 nodes)'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'Alloy (30 nodes)'\u001b[0m \u001b[1;33m,\u001b[0m \u001b[1;34m'Human'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mout_d_coords\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'Out Degree'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", |
149 | "\u001b[1;32m<ipython-input-3-37c4264e6073>\u001b[0m in \u001b[0;36mcalculateKSMatrix\u001b[1;34m(dists)\u001b[0m\n\u001b[0;32m 12\u001b[0m \u001b[0mmatrix\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mi\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mj\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mvalue\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 13\u001b[0m \u001b[0mmatrix\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mj\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mi\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mvalue\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 14\u001b[1;33m \u001b[0mvalue\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mp\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mstats\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mks_2samp\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdist\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mj\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdist\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mi\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 15\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mmatrix\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", | 162 | "\u001b[1;31mNameError\u001b[0m: name 'viatra30' is not defined" |
150 | "\u001b[1;32m~\\Anaconda3\\lib\\site-packages\\scipy\\stats\\stats.py\u001b[0m in \u001b[0;36mks_2samp\u001b[1;34m(data1, data2)\u001b[0m\n\u001b[0;32m 4854\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4855\u001b[0m \"\"\"\n\u001b[1;32m-> 4856\u001b[1;33m \u001b[0mdata1\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msort\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdata1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 4857\u001b[0m \u001b[0mdata2\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msort\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdata2\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4858\u001b[0m \u001b[0mn1\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mdata1\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", | ||
151 | "\u001b[1;32m~\\Anaconda3\\lib\\site-packages\\numpy\\core\\fromnumeric.py\u001b[0m in \u001b[0;36msort\u001b[1;34m(a, axis, kind, order)\u001b[0m\n\u001b[0;32m 932\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 933\u001b[0m \u001b[0ma\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0masanyarray\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0ma\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcopy\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0morder\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m\"K\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 934\u001b[1;33m \u001b[0ma\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msort\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0maxis\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0maxis\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mkind\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mkind\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0morder\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0morder\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 935\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0ma\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 936\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", | ||
152 | "\u001b[1;31mKeyboardInterrupt\u001b[0m: " | ||
153 | ] | 163 | ] |
154 | } | 164 | } |
155 | ], | 165 | ], |
diff --git a/Metrics/Metrics-Calculation/metrics_plot/src/metrics_distance.ipynb b/Metrics/Metrics-Calculation/metrics_plot/src/metrics_distance.ipynb index c7daa75e..9fad79d7 100644 --- a/Metrics/Metrics-Calculation/metrics_plot/src/metrics_distance.ipynb +++ b/Metrics/Metrics-Calculation/metrics_plot/src/metrics_distance.ipynb | |||
@@ -185,7 +185,7 @@ | |||
185 | { | 185 | { |
186 | "data": { | 186 | "data": { |
187 | "application/vnd.jupyter.widget-view+json": { | 187 | "application/vnd.jupyter.widget-view+json": { |
188 | "model_id": "60e3295a164f48428bc882868e68f26f", | 188 | "model_id": "a42a037c9020429982c906d0b100645b", |
189 | "version_major": 2, | 189 | "version_major": 2, |
190 | "version_minor": 0 | 190 | "version_minor": 0 |
191 | }, | 191 | }, |
@@ -270,7 +270,7 @@ | |||
270 | { | 270 | { |
271 | "data": { | 271 | "data": { |
272 | "application/vnd.jupyter.widget-view+json": { | 272 | "application/vnd.jupyter.widget-view+json": { |
273 | "model_id": "f69502eba4af40f19acc09f36681387a", | 273 | "model_id": "248ad5232bb6454589c95c2b92b74db7", |
274 | "version_major": 2, | 274 | "version_major": 2, |
275 | "version_minor": 0 | 275 | "version_minor": 0 |
276 | }, | 276 | }, |
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/META-INF/MANIFEST.MF b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/META-INF/MANIFEST.MF index 2a271acf..7077ae34 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/META-INF/MANIFEST.MF +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/META-INF/MANIFEST.MF | |||
@@ -17,7 +17,8 @@ Require-Bundle: hu.bme.mit.inf.dslreasoner.ecore2logic;bundle-version="1.0.0", | |||
17 | org.eclipse.viatra.query.runtime;bundle-version="1.5.0", | 17 | org.eclipse.viatra.query.runtime;bundle-version="1.5.0", |
18 | org.eclipse.viatra.dse;bundle-version="0.20.0", | 18 | org.eclipse.viatra.dse;bundle-version="0.20.0", |
19 | org.eclipse.emf.ecore.edit;bundle-version="2.9.0", | 19 | org.eclipse.emf.ecore.edit;bundle-version="2.9.0", |
20 | org.eclipse.viatra.query.runtime.base.itc;bundle-version="1.7.0" | 20 | org.eclipse.viatra.query.runtime.base.itc;bundle-version="1.7.0", |
21 | ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator;bundle-version="1.0.0" | ||
21 | Bundle-RequiredExecutionEnvironment: JavaSE-1.8 | 22 | Bundle-RequiredExecutionEnvironment: JavaSE-1.8 |
22 | Import-Package: org.apache.log4j | 23 | Import-Package: org.apache.log4j |
23 | Automatic-Module-Name: hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner | 24 | Automatic-Module-Name: hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner |
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/ViatraReasoner.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/ViatraReasoner.xtend index 6639e5f3..7ef7073a 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/ViatraReasoner.xtend +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/ViatraReasoner.xtend | |||
@@ -1,5 +1,6 @@ | |||
1 | package hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner | 1 | package hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner |
2 | 2 | ||
3 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app.PartialInterpretationMetric | ||
3 | import hu.bme.mit.inf.dslreasoner.logic.model.builder.DocumentationLevel | 4 | import hu.bme.mit.inf.dslreasoner.logic.model.builder.DocumentationLevel |
4 | import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicReasoner | 5 | import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicReasoner |
5 | import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicReasonerException | 6 | import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicReasonerException |
@@ -27,12 +28,11 @@ import hu.bme.mit.inf.dslreasoner.workspace.ReasonerWorkspace | |||
27 | import java.util.List | 28 | import java.util.List |
28 | import java.util.Map | 29 | import java.util.Map |
29 | import org.eclipse.emf.ecore.EObject | 30 | import org.eclipse.emf.ecore.EObject |
31 | import org.eclipse.emf.ecore.util.EcoreUtil | ||
30 | import org.eclipse.viatra.dse.api.DesignSpaceExplorer | 32 | import org.eclipse.viatra.dse.api.DesignSpaceExplorer |
31 | import org.eclipse.viatra.dse.api.DesignSpaceExplorer.DseLoggingLevel | 33 | import org.eclipse.viatra.dse.api.DesignSpaceExplorer.DseLoggingLevel |
32 | import org.eclipse.viatra.dse.solutionstore.SolutionStore | 34 | import org.eclipse.viatra.dse.solutionstore.SolutionStore |
33 | import org.eclipse.viatra.dse.statecode.IStateCoderFactory | 35 | import org.eclipse.viatra.dse.statecode.IStateCoderFactory |
34 | import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.SolutionStoreWithDiversityDescriptor | ||
35 | import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse.DiversityGranularity | ||
36 | 36 | ||
37 | class ViatraReasoner extends LogicReasoner{ | 37 | class ViatraReasoner extends LogicReasoner{ |
38 | val PartialInterpretationInitialiser initialiser = new PartialInterpretationInitialiser() | 38 | val PartialInterpretationInitialiser initialiser = new PartialInterpretationInitialiser() |
@@ -61,11 +61,12 @@ class ViatraReasoner extends LogicReasoner{ | |||
61 | 61 | ||
62 | 62 | ||
63 | val emptySolution = initialiser.initialisePartialInterpretation(problem,viatraConfig.typeScopes).output | 63 | val emptySolution = initialiser.initialisePartialInterpretation(problem,viatraConfig.typeScopes).output |
64 | |||
64 | if((viatraConfig.documentationLevel == DocumentationLevel::FULL || viatraConfig.documentationLevel == DocumentationLevel::NORMAL) && workspace !== null) { | 65 | if((viatraConfig.documentationLevel == DocumentationLevel::FULL || viatraConfig.documentationLevel == DocumentationLevel::NORMAL) && workspace !== null) { |
65 | workspace.writeModel(emptySolution,"init.partialmodel") | 66 | workspace.writeModel(emptySolution,"init.partialmodel") |
66 | } | 67 | } |
67 | emptySolution.problemConainer = problem | 68 | emptySolution.problemConainer = problem |
68 | 69 | val emptySolutionCopy = EcoreUtil.copy(emptySolution) | |
69 | val ScopePropagator scopePropagator = new ScopePropagator(emptySolution) | 70 | val ScopePropagator scopePropagator = new ScopePropagator(emptySolution) |
70 | scopePropagator.propagateAllScopeConstraints | 71 | scopePropagator.propagateAllScopeConstraints |
71 | 72 | ||
@@ -129,6 +130,11 @@ class ViatraReasoner extends LogicReasoner{ | |||
129 | val solverTime = System.nanoTime - solverStartTime | 130 | val solverTime = System.nanoTime - solverStartTime |
130 | viatraConfig.progressMonitor.workedSearchFinished | 131 | viatraConfig.progressMonitor.workedSearchFinished |
131 | 132 | ||
133 | //find trajectory to each solution | ||
134 | if(viatraConfig.documentationLevel == DocumentationLevel.METRICS){ | ||
135 | PartialInterpretationMetric.outputTrajectories(emptySolutionCopy, dse.solutions.toList()); | ||
136 | } | ||
137 | |||
132 | //additionalMatches = strategy.solutionStoreWithCopy.additionalMatches | 138 | //additionalMatches = strategy.solutionStoreWithCopy.additionalMatches |
133 | val statistics = createStatistics => [ | 139 | val statistics = createStatistics => [ |
134 | //it.solverTime = viatraConfig.runtimeLimit | 140 | //it.solverTime = viatraConfig.runtimeLimit |
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/BestFirstStrategyForModelGeneration.java b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/BestFirstStrategyForModelGeneration.java index 60f46033..21efd7ba 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/BestFirstStrategyForModelGeneration.java +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/BestFirstStrategyForModelGeneration.java | |||
@@ -32,6 +32,7 @@ import org.eclipse.viatra.query.runtime.api.IQuerySpecification; | |||
32 | import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; | 32 | import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine; |
33 | import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher; | 33 | import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher; |
34 | 34 | ||
35 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app.PartialInterpretationMetric; | ||
35 | import hu.bme.mit.inf.dslreasoner.logic.model.builder.DocumentationLevel; | 36 | import hu.bme.mit.inf.dslreasoner.logic.model.builder.DocumentationLevel; |
36 | import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicReasoner; | 37 | import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicReasoner; |
37 | import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem; | 38 | import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem; |
@@ -190,6 +191,7 @@ public class BestFirstStrategyForModelGeneration implements IStrategy { | |||
190 | List<Object> activationIds = selectActivation(); | 191 | List<Object> activationIds = selectActivation(); |
191 | Iterator<Object> iterator = activationIds.iterator(); | 192 | Iterator<Object> iterator = activationIds.iterator(); |
192 | 193 | ||
194 | |||
193 | while (!isInterrupted && !configuration.progressMonitor.isCancelled() && iterator.hasNext()) { | 195 | while (!isInterrupted && !configuration.progressMonitor.isCancelled() && iterator.hasNext()) { |
194 | final Object nextActivation = iterator.next(); | 196 | final Object nextActivation = iterator.next(); |
195 | // if (!iterator.hasNext()) { | 197 | // if (!iterator.hasNext()) { |
@@ -198,7 +200,7 @@ public class BestFirstStrategyForModelGeneration implements IStrategy { | |||
198 | // } | 200 | // } |
199 | logger.debug("Executing new activation: " + nextActivation); | 201 | logger.debug("Executing new activation: " + nextActivation); |
200 | context.executeAcitvationId(nextActivation); | 202 | context.executeAcitvationId(nextActivation); |
201 | 203 | ||
202 | visualiseCurrentState(); | 204 | visualiseCurrentState(); |
203 | // for(ViatraQueryMatcher<? extends IPatternMatch> matcher : matchers) { | 205 | // for(ViatraQueryMatcher<? extends IPatternMatch> matcher : matchers) { |
204 | // System.out.println(matcher.getPatternName()); | 206 | // System.out.println(matcher.getPatternName()); |
@@ -209,6 +211,9 @@ public class BestFirstStrategyForModelGeneration implements IStrategy { | |||
209 | // System.out.println("---------"); | 211 | // System.out.println("---------"); |
210 | // } | 212 | // } |
211 | 213 | ||
214 | //calculate the metrics for each state | ||
215 | logCurrentStateMetric(); | ||
216 | |||
212 | boolean consistencyCheckResult = checkConsistency(currentTrajectoryWithFittness); | 217 | boolean consistencyCheckResult = checkConsistency(currentTrajectoryWithFittness); |
213 | if(consistencyCheckResult == true) { continue mainLoop; } | 218 | if(consistencyCheckResult == true) { continue mainLoop; } |
214 | 219 | ||
@@ -248,7 +253,6 @@ public class BestFirstStrategyForModelGeneration implements IStrategy { | |||
248 | } | 253 | } |
249 | } | 254 | } |
250 | } | 255 | } |
251 | |||
252 | logger.debug("State is fully traversed."); | 256 | logger.debug("State is fully traversed."); |
253 | trajectoiresToExplore.remove(currentTrajectoryWithFittness); | 257 | trajectoiresToExplore.remove(currentTrajectoryWithFittness); |
254 | currentTrajectoryWithFittness = null; | 258 | currentTrajectoryWithFittness = null; |
@@ -309,6 +313,15 @@ public class BestFirstStrategyForModelGeneration implements IStrategy { | |||
309 | return trajectoiresToExplore.element(); | 313 | return trajectoiresToExplore.element(); |
310 | } | 314 | } |
311 | } | 315 | } |
316 | |||
317 | private void logCurrentStateMetric() { | ||
318 | if(this.configuration.documentationLevel != DocumentationLevel.METRICS || workspace == null) { | ||
319 | return; | ||
320 | } | ||
321 | |||
322 | PartialInterpretation interpretation = (PartialInterpretation)context.getModel(); //pattern.get("interpretation"); | ||
323 | PartialInterpretationMetric.calculateMetric(interpretation, "debug/metric/" + context.getModel().hashCode(), context.getCurrentStateId().toString()); | ||
324 | } | ||
312 | 325 | ||
313 | public void visualiseCurrentState() { | 326 | public void visualiseCurrentState() { |
314 | PartialInterpretationVisualiser partialInterpretatioVisualiser = configuration.debugCongiguration.partialInterpretatioVisualiser; | 327 | PartialInterpretationVisualiser partialInterpretatioVisualiser = configuration.debugCongiguration.partialInterpretatioVisualiser; |